]> Repositories - Adafruit_Blinka-hackapet.git/blob - python/testing/implementation/all/digitalio.py
Use boolean as canonical value attribute
[Adafruit_Blinka-hackapet.git] / python / testing / implementation / all / digitalio.py
1 import unittest
2 from testing import yes_no, await_true
3 from testing.board import led_pin, default_pin, led_hardwired, led_inverted
4 import digitalio
5 from digitalio import * # TODO refactor below for wildcard import
6
7
8 class TestDigitalInOut(unittest.TestCase):
9
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)
15
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, False)
22             self.assertEqual(dio.drive_mode, digitalio.DriveMode.PUSH_PULL)
23
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
28             dio.switch_to_input()
29             self.assertEqual(dio.direction, digitalio.Direction.INPUT)
30             self.assertEqual(dio.pull, None)
31
32
33 class TestDigitalInOutInteractive(unittest.TestCase):
34
35     def test_blink(self):
36         """LED blinks when proper attributes set"""
37         print()
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 = False if led_inverted else True
45             self.assertTrue(yes_no("Is LED lit"))
46             print("Winking LED...")
47             for count in range(2):
48                 led.value = not(led.value)
49                 sleep(0.5)
50                 led.value = not(led.value)
51                 sleep(0.5)
52             self.assertTrue(yes_no("Did LED wink twice"))
53
54     def test_button_pull_up(self):
55         print()
56         """Pull-up button configured and detected"""
57         with digitalio.DigitalInOut(default_pin) as button:
58             #button.direction = digitalio.Direction.INPUT # implied
59             try:
60                 button.pull = digitalio.Pull.UP
61             except NotImplementedError as e:
62                 print()
63                 print(e)
64                 return  # test trivially passed
65             if yes_no("Is Button wired from {} to GND".format(default_pin)):
66                 self.assertTrue(button.value == True)
67                 self.assertTrue(await_true("button pressed", lambda: button.value == False))
68
69     def test_button_pull_down(self):
70         print()
71         """Pull-down button configured and detected"""
72         with digitalio.DigitalInOut(default_pin) as button:
73             #button.direction = digitalio.Direction.INPUT # implied
74             try:
75                 button.pull = digitalio.Pull.DOWN
76             except NotImplementedError as e:
77                 print(e)
78                 return  # test trivially passed
79             if (yes_no("Is Button wired from {} to VCC".format(default_pin))):
80                 self.assertTrue(button.value == False)
81                 self.assertTrue(await_true("button pressed", lambda: button.value == True))
82