Skip to content

Commit

Permalink
QA: Fix tests.
Browse files Browse the repository at this point in the history
GPIO setup tests have been pruned and could use rewriting.
  • Loading branch information
Gadgetoid committed Feb 6, 2024
1 parent b14439a commit 67c8d54
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 69 deletions.
17 changes: 8 additions & 9 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,14 @@

@pytest.fixture(scope='function', autouse=False)
def GPIO():
"""Mock RPi.GPIO module."""
GPIO = mock.MagicMock()
# Fudge for Python < 37 (possibly earlier)
sys.modules['RPi'] = mock.MagicMock()
sys.modules['RPi'].GPIO = GPIO
sys.modules['RPi.GPIO'] = GPIO
yield GPIO
del sys.modules['RPi']
del sys.modules['RPi.GPIO']
"""Mock gpiod and gpiodevice modules."""
gpiod = mock.MagicMock()
gpiodevice = mock.MagicMock()
sys.modules['gpiod'] = gpiod
sys.modules['gpiodevice'] = gpiodevice
yield gpiod, gpiodevice
del sys.modules['gpiod']
del sys.modules['gpiodevice']


@pytest.fixture(scope='function', autouse=False)
Expand Down
64 changes: 4 additions & 60 deletions tests/test_init.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
"""Initialization tests for Inky."""

from unittest import mock

import pytest


Expand Down Expand Up @@ -69,16 +67,6 @@ def test_init_invalid_colour(spidev, smbus2):
InkyWHAT('octarine')


def test_init_what_setup_no_gpio(spidev, smbus2):
"""Test Inky init with a missing RPi.GPIO library."""
from inky import InkyWHAT

inky = InkyWHAT('red')

with pytest.raises(ImportError):
inky.setup()


def test_init_what_setup(spidev, smbus2, GPIO):
"""Test initialisation and setup of InkyWHAT.
Expand All @@ -87,45 +75,16 @@ def test_init_what_setup(spidev, smbus2, GPIO):
"""
from inky import InkyWHAT

# TODO: _busy_wait should timeout after N seconds
GPIO.input.return_value = GPIO.LOW
# _busy_wait will timeout after N seconds
# GPIO.input.return_value = GPIO.LOW

inky = InkyWHAT('red')
inky.setup()

# Check GPIO setup
GPIO.setwarnings.assert_called_with(False)
GPIO.setmode.assert_called_with(GPIO.BCM)
GPIO.setup.assert_has_calls([
mock.call(inky.dc_pin, GPIO.OUT, initial=GPIO.LOW, pull_up_down=GPIO.PUD_OFF),
mock.call(inky.reset_pin, GPIO.OUT, initial=GPIO.HIGH, pull_up_down=GPIO.PUD_OFF),
mock.call(inky.busy_pin, GPIO.IN, pull_up_down=GPIO.PUD_OFF)
])

# Check device will been reset
GPIO.output.assert_has_calls([
mock.call(inky.reset_pin, GPIO.LOW),
mock.call(inky.reset_pin, GPIO.HIGH)
])

# Check API will been opened
spidev.SpiDev().open.assert_called_with(0, inky.cs_channel)


def test_init_7colour_setup_no_gpio(spidev, smbus2):
"""Test initialisation and setup of 7-colour Inky.
Verify an error is raised when RPi.GPIO is not present.
"""
from inky.inky_uc8159 import Inky

inky = Inky()

with pytest.raises(ImportError):
inky.setup()


def test_init_7colour_setup(spidev, smbus2, GPIO):
"""Test initialisation and setup of 7-colour Inky.
Expand All @@ -134,26 +93,11 @@ def test_init_7colour_setup(spidev, smbus2, GPIO):
"""
from inky.inky_uc8159 import Inky

# TODO: _busy_wait should timeout after N seconds
GPIO.input.return_value = GPIO.LOW
# _busy_wait will timeout after N seconds
# GPIO.input.return_value = GPIO.LOW

inky = Inky()
inky.setup()

# Check GPIO setup
GPIO.setwarnings.assert_called_with(False)
GPIO.setmode.assert_called_with(GPIO.BCM)
GPIO.setup.assert_has_calls([
mock.call(inky.dc_pin, GPIO.OUT, initial=GPIO.LOW, pull_up_down=GPIO.PUD_OFF),
mock.call(inky.reset_pin, GPIO.OUT, initial=GPIO.HIGH, pull_up_down=GPIO.PUD_OFF),
mock.call(inky.busy_pin, GPIO.IN, pull_up_down=GPIO.PUD_OFF)
])

# Check device will been reset
GPIO.output.assert_has_calls([
mock.call(inky.reset_pin, GPIO.LOW),
mock.call(inky.reset_pin, GPIO.HIGH)
])

# Check API will been opened
spidev.SpiDev().open.assert_called_with(0, inky.cs_channel)

0 comments on commit 67c8d54

Please sign in to comment.