2 from testing import yes_no, await_true
3 from testing.board import led_pin, default_pin, led_hardwired, led_inverted
5 from digitalio import * # TODO refactor below for wildcard import
8 class TestDigitalInOut(unittest.TestCase):
10 def test_default(self):
11 """DigitalInOut is input with no pull when constructed"""
12 with digitalio.DigitalInOut(default_pin) as dio:
13 self.assertEqual(dio.direction, digitalio.Direction.INPUT)
14 self.assertEqual(dio.pull, None)
16 def test_switch_to_output(self):
17 """Default configuration of switch_to_output is respected"""
18 with digitalio.DigitalInOut(default_pin) as dio:
19 dio.switch_to_output()
20 self.assertEqual(dio.direction, digitalio.Direction.OUTPUT)
21 self.assertEqual(dio.value, 0)
22 self.assertEqual(dio.drive_mode, digitalio.DriveMode.PUSH_PULL)
24 def test_switch_to_input(self):
25 """Default configuration of switch_to_input is respected"""
26 with digitalio.DigitalInOut(default_pin) as dio:
27 dio.switch_to_output() # starts as input anyway
29 self.assertEqual(dio.direction, digitalio.Direction.INPUT)
30 self.assertEqual(dio.pull, None)
33 class TestDigitalInOutInteractive(unittest.TestCase):
36 """LED blinks when proper attributes set"""
38 from agnostic import sleep
39 if not(led_hardwired) and not(yes_no("Is LED wired to {}".format(led_pin))):
40 return # test trivially passed
41 with digitalio.DigitalInOut(led_pin) as led:
42 led.direction = digitalio.Direction.OUTPUT
43 # should now be OUT, PUSH_PULL, value=0, and LED should light
44 led.value = 0 if led_inverted else 1
45 self.assertTrue(yes_no("Is LED lit"))
46 print("Winking LED...")
47 for count in range(2):
48 led.value = not(led.value)
50 led.value = not(led.value)
52 self.assertTrue(yes_no("Did LED wink twice"))
54 def test_button_pull_up(self):
56 """Pull-up button configured and detected"""
57 with digitalio.DigitalInOut(default_pin) as button:
58 #button.direction = digitalio.Direction.INPUT # implied
60 button.pull = digitalio.Pull.UP
61 except NotImplementedError as e:
64 return # test trivially passed
65 if yes_no("Is Button wired from {} to GND".format(default_pin)):
66 self.assertTrue(button.value == 1)
67 self.assertTrue(await_true("button pressed", lambda: button.value == 0))
69 def test_button_pull_down(self):
71 """Pull-down button configured and detected"""
72 with digitalio.DigitalInOut(default_pin) as button:
73 #button.direction = digitalio.Direction.INPUT # implied
75 button.pull = digitalio.Pull.DOWN
76 except NotImplementedError as e:
78 return # test trivially passed
79 if (yes_no("Is Button wired from {} to VCC".format(default_pin))):
80 self.assertTrue(button.value == 0)
81 self.assertTrue(await_true("button pressed", lambda: button.value == 1))