15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# Copyright 2014 The Chromium Authors. All rights reserved.
25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# found in the LICENSE file.
45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)import unittest
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)from telemetry.core.platform.power_monitor import power_monitor_controller
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)import telemetry.core.platform.power_monitor as power_monitor
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class PowerMonitorControllerTest(unittest.TestCase):
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  def testComposition(self):
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    class P1(power_monitor.PowerMonitor):
15c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      def StartMonitoringPower(self, browser):
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        raise NotImplementedError()
17c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      def StopMonitoringPower(self):
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        raise NotImplementedError()
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    class P2(power_monitor.PowerMonitor):
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      def __init__(self, value):
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        super(P2, self).__init__()
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        self._value = value
24c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      def CanMonitorPower(self):
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        return True
26c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      def StartMonitoringPower(self, browser):
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        pass
28c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      def StopMonitoringPower(self):
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        return self._value
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    controller = power_monitor_controller.PowerMonitorController(
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        [P1(), P2(1), P2(2)])
33c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    self.assertEqual(controller.CanMonitorPower(), True)
34c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    controller.StartMonitoringPower(None)
35c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    self.assertEqual(controller.StopMonitoringPower(), 1)
36