コード例 #1
0
class RoofControl(metaclass=Singleton):
    def __init__(self):
        self.gpioconfig = GPIOConfig()

    def open(self):
        self.gpioconfig.turn_on(GPIOPin.SWITCH_ROOF)
        return self.gpioconfig.wait_for_off(GPIOPin.VERIFY_OPEN)

    def close(self):
        self.gpioconfig.turn_off(GPIOPin.SWITCH_ROOF)
        return self.gpioconfig.wait_for_off(GPIOPin.VERIFY_CLOSED)

    def read(self):
        is_roof_closed = self.gpioconfig.status(GPIOPin.VERIFY_CLOSED)
        is_roof_open = self.gpioconfig.status(GPIOPin.VERIFY_OPEN)
        is_switched_on = self.gpioconfig.status(GPIOPin.SWITCH_ROOF)

        if is_roof_closed and is_roof_open:
            return Status.ERROR
        elif is_roof_closed and not is_switched_on:
            return Status.CLOSED
        elif is_roof_open and is_switched_on:
            return Status.OPEN
        elif is_switched_on:
            return Status.OPENING
        else:
            return Status.CLOSING
コード例 #2
0
class GPIOConfigTest(unittest.TestCase):
    def setUp(self):
        Singleton._instances = {}
        self.gpioConfig = GPIOConfig()

    def test_is_instance(self):
        self.assertTrue(isinstance(self.gpioConfig, GPIOConfig))

    def test_generic_exec(self):
        GPIOConfig.status = MagicMock(
            side_effect=lambda value: value != GPIOPin.SWITCH_ROOF)
        GPIOConfig.wait_for_off = MagicMock(return_value=True)
        GPIOConfig.wait_for_on = MagicMock(return_value=True)
        self.gpioConfig.turn_on(GPIOPin.SWITCH_ROOF)
        self.gpioConfig.turn_off(GPIOPin.SWITCH_ROOF)
        self.assertTrue(self.gpioConfig.wait_for_on(GPIOPin.SWITCH_ROOF))
        self.assertTrue(self.gpioConfig.wait_for_off(GPIOPin.SWITCH_ROOF))
        self.assertFalse(self.gpioConfig.status(GPIOPin.SWITCH_ROOF))

    def test_is_singleton(self):
        self.assertEqual(GPIOConfig(), self.gpioConfig)

    def test_timeout_value(self):
        cparser = configparser.ConfigParser()
        cparser.read('config.ini')
        self.assertEqual(
            config.Config.getInt("wait_for_timeout", "roof_board"),
            cparser["roof_board"].getint("wait_for_timeout"))
        self.assertEqual(
            config.Config.getInt("event_bouncetime", "roof_board"),
            cparser["roof_board"].getint("event_bouncetime"))