コード例 #1
0
def test_composite_device_sequence():
    with CompositeDevice(InputDevice(MockPin(2)),
                         InputDevice(MockPin(3))) as device:
        assert len(device) == 2
        assert device[0].pin.number == 2
        assert device[1].pin.number == 3
        assert device.namedtuple._fields == ('_0', '_1')
コード例 #2
0
def test_traffic_lights():
    red_pin = MockPin(2)
    amber_pin = MockPin(3)
    green_pin = MockPin(4)
    with TrafficLights(red_pin, amber_pin, green_pin) as board:
        board.red.on()
        assert board.red.value
        assert not board.amber.value
        assert not board.yellow.value
        assert not board.green.value
        assert red_pin.state
        assert not amber_pin.state
        assert not green_pin.state
        board.amber.on()
        assert amber_pin.state
        board.yellow.off()
        assert not amber_pin.state
    with TrafficLights(red=red_pin, yellow=amber_pin, green=green_pin) as board:
        board.yellow.on()
        assert not board.red.value
        assert board.amber.value
        assert board.yellow.value
        assert not board.green.value
        assert not red_pin.state
        assert amber_pin.state
        assert not green_pin.state
        board.amber.off()
        assert not amber_pin.state
コード例 #3
0
def test_composite_device_named():
    with CompositeDevice(foo=InputDevice(MockPin(2)),
                         bar=InputDevice(MockPin(3)),
                         _order=('foo', 'bar')) as device:
        assert device.namedtuple._fields == ('foo', 'bar')
        assert device.value == (0, 0)
        assert not device.is_active
コード例 #4
0
def test_led_bar_graph_value():
    pin1 = MockPin(2)
    pin2 = MockPin(3)
    pin3 = MockPin(4)
    with LEDBarGraph(pin1, pin2, pin3) as graph:
        assert isinstance(graph[0], LED)
        assert isinstance(graph[1], LED)
        assert isinstance(graph[2], LED)
        assert graph.active_high
        assert graph[0].active_high
        assert graph[1].active_high
        assert graph[2].active_high
        graph.value = 0
        assert graph.value == 0
        assert not any((pin1.state, pin2.state, pin3.state))
        graph.value = 1
        assert graph.value == 1
        assert all((pin1.state, pin2.state, pin3.state))
        graph.value = 1 / 3
        assert graph.value == 1 / 3
        assert pin1.state and not (pin2.state or pin3.state)
        graph.value = -1 / 3
        assert graph.value == -1 / 3
        assert pin3.state and not (pin1.state or pin2.state)
        pin1.state = True
        pin2.state = True
        assert graph.value == 1
        pin3.state = False
        assert graph.value == 2 / 3
        pin3.state = True
        pin1.state = False
        assert graph.value == -2 / 3
コード例 #5
0
def test_mock_pin_init_twice_different_modes():
    pin1 = MockPin(2)
    pin2 = MockPWMPin(pin1.number+1)
    assert pin1 != pin2
    with pytest.raises(ValueError):
        pin3 = MockPWMPin(pin1.number)
    with pytest.raises(ValueError):
        pin4 = MockPin(pin2.number)
コード例 #6
0
def test_motor_pins_nonpwm():
    f = MockPin(1)
    b = MockPin(2)
    with Motor(f, b, pwm=False) as device:
        assert device.forward_device.pin is f
        assert isinstance(device.forward_device, DigitalOutputDevice)
        assert device.backward_device.pin is b
        assert isinstance(device.backward_device, DigitalOutputDevice)
コード例 #7
0
def test_led_board_initial_value():
    pin1 = MockPin(2)
    pin2 = MockPin(3)
    pin3 = MockPin(4)
    with LEDBoard(pin1, pin2, foo=pin3, initial_value=0) as board:
        assert board.value == (0, 0, 0)
    with LEDBoard(pin1, pin2, foo=pin3, initial_value=1) as board:
        assert board.value == (1, 1, 1)
コード例 #8
0
def test_composite_device_values():
    with CompositeDevice(InputDevice(MockPin(2)),
                         InputDevice(MockPin(3))) as device:
        assert device.value == (0, 0)
        assert not device.is_active
        device[0].pin.drive_high()
        assert device.value == (1, 0)
        assert device.is_active
コード例 #9
0
def test_motor_close_nonpwm():
    f = MockPin(1)
    b = MockPin(2)
    with Motor(f, b, pwm=False) as device:
        device.close()
        assert device.closed
        assert device.forward_device.pin is None
        assert device.backward_device.pin is None
コード例 #10
0
def test_led_bar_graph_bad_value():
    pin1 = MockPin(2)
    pin2 = MockPin(3)
    pin3 = MockPin(4)
    with LEDBarGraph(pin1, pin2, pin3) as graph:
        with pytest.raises(ValueError):
            graph.value = -2
        with pytest.raises(ValueError):
            graph.value = 2
コード例 #11
0
def test_traffic_lights():
    red_pin = MockPin(2)
    amber_pin = MockPin(3)
    green_pin = MockPin(4)
    with TrafficLights(red_pin, amber_pin, green_pin) as board:
        board.red.on()
        assert red_pin.state
        assert not amber_pin.state
        assert not green_pin.state
コード例 #12
0
def test_traffic_lights_bad_init():
    with pytest.raises(ValueError):
        TrafficLights()
    red_pin = MockPin(2)
    amber_pin = MockPin(3)
    green_pin = MockPin(4)
    yellow_pin = MockPin(5)
    with pytest.raises(ValueError):
        TrafficLights(red=red_pin, amber=amber_pin, yellow=yellow_pin, green=green_pin)
コード例 #13
0
def test_composite_output_on_off():
    pin1 = MockPin(2)
    pin2 = MockPin(3)
    pin3 = MockPin(4)
    with CompositeOutputDevice(OutputDevice(pin1), OutputDevice(pin2), foo=OutputDevice(pin3)) as device:
        device.on()
        assert all((pin1.state, pin2.state, pin3.state))
        device.off()
        assert not any((pin1.state, pin2.state, pin3.state))
コード例 #14
0
def test_led_board_on_off():
    pin1 = MockPin(2)
    pin2 = MockPin(3)
    pin3 = MockPin(4)
    with LEDBoard(pin1, pin2, foo=pin3) as board:
        assert isinstance(board[0], LED)
        assert isinstance(board[1], LED)
        assert isinstance(board[2], LED)
        assert board.active_high
        assert board[0].active_high
        assert board[1].active_high
        assert board[2].active_high
        board.on()
        assert all((pin1.state, pin2.state, pin3.state))
        board.off()
        assert not any((pin1.state, pin2.state, pin3.state))
        board[0].on()
        assert board.value == (1, 0, 0)
        assert pin1.state
        assert not pin2.state
        assert not pin3.state
        board.toggle()
        assert board.value == (0, 1, 1)
        assert not pin1.state
        assert pin2.state
        assert pin3.state
        board.toggle(0, 1)
        assert board.value == (1, 0, 1)
        assert pin1.state
        assert not pin2.state
        assert pin3.state
        board.off(2)
        assert board.value == (1, 0, 0)
        assert pin1.state
        assert not pin2.state
        assert not pin3.state
        board.on(1)
        assert board.value == (1, 1, 0)
        assert pin1.state
        assert pin2.state
        assert not pin3.state
        board.off(0, 1)
        assert board.value == (0, 0, 0)
        assert not pin1.state
        assert not pin2.state
        assert not pin3.state
        board.on(1, 2)
        assert board.value == (0, 1, 1)
        assert not pin1.state
        assert pin2.state
        assert pin3.state
        board.toggle(0)
        assert board.value == (1, 1, 1)
        assert pin1.state
        assert pin2.state
        assert pin3.state
コード例 #15
0
def test_led_board_value():
    pin1 = MockPin(2)
    pin2 = MockPin(3)
    pin3 = MockPin(4)
    with LEDBoard(pin1, pin2, foo=pin3) as board:
        assert board.value == (0, 0, 0)
        board.value = (0, 1, 0)
        assert board.value == (0, 1, 0)
        board.value = (1, 0, 1)
        assert board.value == (1, 0, 1)
コード例 #16
0
def test_motor_reverse_nonpwm():
    f = MockPin(1)
    b = MockPin(2)
    with Motor(f, b, pwm=False) as device:
        device.forward()
        assert device.value == 1
        assert b.state == 0 and f.state == 1
        device.reverse()
        assert device.value == -1
        assert b.state == 1 and f.state == 0
コード例 #17
0
def test_led_bar_graph_initial_value():
    pin1 = MockPin(2)
    pin2 = MockPin(3)
    pin3 = MockPin(4)
    with LEDBarGraph(pin1, pin2, pin3, initial_value=1 / 3) as graph:
        assert graph.value == 1 / 3
        assert pin1.state and not (pin2.state or pin3.state)
    with LEDBarGraph(pin1, pin2, pin3, initial_value=-1 / 3) as graph:
        assert graph.value == -1 / 3
        assert pin3.state and not (pin1.state or pin2.state)
コード例 #18
0
def test_led_bar_graph_bad_init():
    pin1 = MockPin(2)
    pin2 = MockPin(3)
    pin3 = MockPin(4)
    with pytest.raises(TypeError):
        LEDBarGraph(pin1, pin2, foo=pin3)
    with pytest.raises(ValueError):
        LEDBarGraph(pin1, pin2, pin3, initial_value=-2)
    with pytest.raises(ValueError):
        LEDBarGraph(pin1, pin2, pin3, initial_value=2)
コード例 #19
0
def test_led_board_blink_interrupt_off():
    pin1 = MockPin(2)
    pin2 = MockPin(3)
    pin3 = MockPin(4)
    with LEDBoard(pin1, LEDBoard(pin2, pin3)) as board:
        board.blink(0.1, 1)
        sleep(0.2)
        board.off()  # should interrupt while off
        pin1.assert_states([False, True, False])
        pin2.assert_states([False, True, False])
        pin3.assert_states([False, True, False])
コード例 #20
0
def test_led_board_nested():
    pin1 = MockPin(2)
    pin2 = MockPin(3)
    pin3 = MockPin(4)
    with LEDBoard(pin1, LEDBoard(pin2, pin3)) as board:
        assert list(led.pin for led in board.leds) == [pin1, pin2, pin3]
        assert board.value == (0, (0, 0))
        board.value = (1, (0, 1))
        assert pin1.state
        assert not pin2.state
        assert pin3.state
コード例 #21
0
def test_led_board_bad_blink():
    pin1 = MockPin(2)
    pin2 = MockPin(3)
    pin3 = MockPin(4)
    with LEDBoard(pin1, LEDBoard(pin2, pin3)) as board:
        with pytest.raises(ValueError):
            board.blink(fade_in_time=1, fade_out_time=1)
        with pytest.raises(ValueError):
            board.blink(fade_out_time=1)
        with pytest.raises(ValueError):
            board.pulse()
コード例 #22
0
def test_led_board_blink_foreground():
    pin1 = MockPin(2)
    pin2 = MockPin(3)
    pin3 = MockPin(4)
    with LEDBoard(pin1, LEDBoard(pin2, pin3)) as board:
        board.blink(0.1, 0.1, n=2, background=False)
        test = [(0.0, False), (0.0, True), (0.1, False), (0.1, True),
                (0.1, False)]
        pin1.assert_states_and_times(test)
        pin2.assert_states_and_times(test)
        pin3.assert_states_and_times(test)
コード例 #23
0
def test_motor_bad_value_nonpwm():
    f = MockPin(1)
    b = MockPin(2)
    with Motor(f, b, pwm=False) as device:
        with pytest.raises(ValueError):
            device.value = -2
        with pytest.raises(ValueError):
            device.value = 2
        with pytest.raises(ValueError):
            device.value = 0.5
        with pytest.raises(ValueError):
            device.value = -0.5
コード例 #24
0
def test_composite_output_value():
    pin1 = MockPin(2)
    pin2 = MockPin(3)
    pin3 = MockPin(4)
    with CompositeOutputDevice(OutputDevice(pin1), OutputDevice(pin2), foo=OutputDevice(pin3)) as device:
        assert device.value == (0, 0, 0)
        device.toggle()
        assert device.value == (1, 1, 1)
        device.value = (1, 0, 1)
        assert device[0].is_active
        assert not device[1].is_active
        assert device[2].is_active
コード例 #25
0
def test_composite_output_toggle():
    pin1 = MockPin(2)
    pin2 = MockPin(3)
    pin3 = MockPin(4)
    with CompositeOutputDevice(OutputDevice(pin1), OutputDevice(pin2), foo=OutputDevice(pin3)) as device:
        device.toggle()
        assert all((pin1.state, pin2.state, pin3.state))
        device[0].off()
        device.toggle()
        assert pin1.state
        assert not pin2.state
        assert not pin3.state
コード例 #26
0
def test_led_board_blink_background():
    pin1 = MockPin(2)
    pin2 = MockPin(3)
    pin3 = MockPin(4)
    with LEDBoard(pin1, LEDBoard(pin2, pin3)) as board:
        board.blink(0.1, 0.1, n=2)
        board._blink_thread.join(
        )  # naughty, but ensures no arbitrary waits in the test
        test = [(0.0, False), (0.0, True), (0.1, False), (0.1, True),
                (0.1, False)]
        pin1.assert_states_and_times(test)
        pin2.assert_states_and_times(test)
        pin3.assert_states_and_times(test)
コード例 #27
0
def test_led_board_blink_take_over():
    pin1 = MockPin(2)
    pin2 = MockPin(3)
    pin3 = MockPin(4)
    with LEDBoard(pin1, LEDBoard(pin2, pin3)) as board:
        board[1].blink(0.1, 0.1, n=2)
        board.blink(0.1, 0.1, n=2)  # immediately take over blinking
        board[1]._blink_thread.join()
        board._blink_thread.join()
        test = [(0.0, False), (0.0, True), (0.1, False), (0.1, True),
                (0.1, False)]
        pin1.assert_states_and_times(test)
        pin2.assert_states_and_times(test)
        pin3.assert_states_and_times(test)
コード例 #28
0
def test_motor_value_nonpwm():
    f = MockPin(1)
    b = MockPin(2)
    with Motor(f, b, pwm=False) as device:
        device.value = -1
        assert device.is_active
        assert device.value == -1
        assert b.state == 1 and f.state == 0
        device.value = 1
        assert device.is_active
        assert device.value == 1
        assert b.state == 0 and f.state == 1
        device.value = 0
        assert not device.is_active
        assert not device.value
        assert b.state == 0 and f.state == 0
コード例 #29
0
def test_output_write_active_low():
    pin = MockPin(2)
    with OutputDevice(pin, active_high=False) as device:
        device.on()
        assert not pin.state
        device.off()
        assert pin.state
コード例 #30
0
def test_output_blink_interrupt_off():
    pin = MockPin(2)
    with DigitalOutputDevice(pin) as device:
        device.blink(0.1, 1)
        sleep(0.2)
        device.off() # should interrupt while off
        pin.assert_states([False, True, False])