X-Git-Url: https://git.ayoreis.com/hackapet/Adafruit_Blinka.git/blobdiff_plain/e86b7edcdb912e9a6b304ffd391c07b18bde6380..38566e3a72507341517804c374e71e3bd4c82934:/test/src/testing/universal/digitalio.py diff --git a/test/src/testing/universal/digitalio.py b/test/src/testing/universal/digitalio.py new file mode 100644 index 0000000..dbeda1a --- /dev/null +++ b/test/src/testing/universal/digitalio.py @@ -0,0 +1,80 @@ +import unittest +from testing import yes_no, await_true +from testing.board import led_pin, default_pin, led_hardwired, led_inverted +from digitalio import * + +class TestDigitalInOut(unittest.TestCase): + + def test_default(self): + """DigitalInOut is input with no pull when constructed""" + with DigitalInOut(default_pin) as dio: + self.assertEqual(dio.direction, Direction.INPUT) + self.assertEqual(dio.pull, None) + + def test_switch_to_output(self): + """Default configuration of switch_to_output is respected""" + with DigitalInOut(default_pin) as dio: + dio.switch_to_output() + self.assertEqual(dio.direction, Direction.OUTPUT) + self.assertEqual(dio.value, False) + self.assertEqual(dio.drive_mode, DriveMode.PUSH_PULL) + + def test_switch_to_input(self): + """Default configuration of switch_to_input is respected""" + with DigitalInOut(default_pin) as dio: + dio.switch_to_output() # starts as input anyway + dio.switch_to_input() + self.assertEqual(dio.direction, Direction.INPUT) + self.assertEqual(dio.pull, None) + + +class TestDigitalInOutInteractive(unittest.TestCase): + + def test_blink(self): + """LED blinks when proper attributes set""" + print() + from adafruit_blinka.agnostic import sleep + if not(led_hardwired) and not(yes_no("Is LED wired to {}".format(led_pin))): + return # test trivially passed + with DigitalInOut(led_pin) as led: + led.direction = Direction.OUTPUT + # should now be OUT, PUSH_PULL, value=0, and LED should light + led.value = False if led_inverted else True + self.assertTrue(yes_no("Is LED lit")) + print("Winking LED...") + for count in range(2): + led.value = not(led.value) + sleep(0.5) + led.value = not(led.value) + sleep(0.5) + self.assertTrue(yes_no("Did LED wink twice")) + + def test_button_pull_up(self): + print() + """Pull-up button configured and detected""" + with DigitalInOut(default_pin) as button: + #button.direction = Direction.INPUT # implied + try: + button.pull = Pull.UP + except NotImplementedError as e: + print() + print(e) + return # test trivially passed + if yes_no("Is Button wired from {} to GND".format(default_pin)): + self.assertTrue(button.value == True) + self.assertTrue(await_true("button pressed", lambda: button.value == False)) + + def test_button_pull_down(self): + print() + """Pull-down button configured and detected""" + with DigitalInOut(default_pin) as button: + #button.direction = Direction.INPUT # implied + try: + button.pull = Pull.DOWN + except NotImplementedError as e: + print(e) + return # test trivially passed + if (yes_no("Is Button wired from {} to VCC".format(default_pin))): + self.assertTrue(button.value == False) + self.assertTrue(await_true("button pressed", lambda: button.value == True)) +