X-Git-Url: https://git.ayoreis.com/Adafruit_Blinka-hackapet.git/blobdiff_plain/5a25e46868da94f27244b0cbfcffd1dc9ab63ee7..ebd564d6aea7704a2fd6e2635f49cf7a6795d85d:/python/testing/implementation/all/digitalio.py diff --git a/python/testing/implementation/all/digitalio.py b/python/testing/implementation/all/digitalio.py index 85ffbf0..f68a760 100644 --- a/python/testing/implementation/all/digitalio.py +++ b/python/testing/implementation/all/digitalio.py @@ -1,29 +1,80 @@ import unittest -from testing import yes_no -from testing.board import led_pin,default_pin +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): - import digitalio - """Check that a DigitalInOut is input with no pull when constructed""" - with digitalio.DigitalInOut(default_pin) as dio: - self.assertEqual(dio.direction, digitalio.Direction.INPUT) + """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): - import digitalio - from agnostic import time - self.assertTrue(yes_no("Is LED wired to {}".format(led_pin))) - with digitalio.DigitalInOut(led_pin) as led: - led.direction = digitalio.Direction.OUTPUT + """LED blinks when proper attributes set""" + print() + from 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")) - for count in range(3): - led.value = True - time.sleep(1.0) - led.value = False - time.sleep(1.0) - self.assertTrue(yes_no("Did LED wink thrice")) + 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)) +