#include "unity_fixture.h" #include "../src/LedDriver.h" #include "../mocks/RuntimeErrorStub.h" TEST_GROUP(LedDriver); static uint16_t virtualLeds; TEST_SETUP(LedDriver) { LedDriver_Create(&virtualLeds); } TEST_TEAR_DOWN(LedDriver) { } TEST(LedDriver, LedsOffAfterCreate) { uint16_t virtualLeds = 0xFFFF; LedDriver_Create(&virtualLeds); TEST_ASSERT_EQUAL_HEX16(0x0000, virtualLeds); } TEST(LedDriver, TurnOnLedOne) { LedDriver_TurnOn(1); TEST_ASSERT_EQUAL_HEX16(0x0001, virtualLeds); } TEST(LedDriver, TurnOffLedOne) { LedDriver_TurnOn(1); LedDriver_TurnOff(1); TEST_ASSERT_EQUAL_HEX16(0x0000, virtualLeds); } TEST(LedDriver, TurnOnMultipleLeds) { LedDriver_TurnOn(8); LedDriver_TurnOn(9); TEST_ASSERT_EQUAL_HEX16(0x0180, virtualLeds); } TEST(LedDriver, TurnAllOn) { LedDriver_TurnAllOn(); TEST_ASSERT_EQUAL_HEX16(0xFFFF, virtualLeds); } TEST(LedDriver, TurnOffAnyLed) { LedDriver_TurnAllOn(); LedDriver_TurnOff(8); TEST_ASSERT_EQUAL_HEX16(0xFF7F, virtualLeds); } TEST(LedDriver, LedMemoryIsNotReadable) { virtualLeds = 0xFFFF; LedDriver_TurnOn(8); TEST_ASSERT_EQUAL_HEX16(0x0080, virtualLeds); } TEST(LedDriver, UpperAndLowerBounds) { LedDriver_TurnOn(1); LedDriver_TurnOn(16); TEST_ASSERT_EQUAL_HEX16(0x8001, virtualLeds); } TEST(LedDriver, OutOfBoundsTurnOnDoesNotHarm) { LedDriver_TurnOn(-1); LedDriver_TurnOn(0); LedDriver_TurnOn(17); LedDriver_TurnOn(3141); TEST_ASSERT_EQUAL_HEX16(0x0000, virtualLeds); } TEST(LedDriver, OutOfBoundsTurnOffDoesNotHarm) { LedDriver_TurnAllOn(); LedDriver_TurnOff(-1); LedDriver_TurnOff(0); LedDriver_TurnOff(17); LedDriver_TurnOff(3141); TEST_ASSERT_EQUAL_HEX16(0xFFFF, virtualLeds); } TEST(LedDriver, OutOfBoundsProducesRuntimeError) { LedDriver_TurnOn(-1); TEST_ASSERT_EQUAL_STRING("LED Driver: out-of-bounds LED", RuntimeErrorStub_GetLastError()); TEST_ASSERT_EQUAL(-1, RuntimeErrorStub_GetLastParameter()); } IGNORE_TEST(LedDriver, OutOfBoundsToDo) { /* TODO: what should we do during runtime? */ } TEST(LedDriver, IsOn) { TEST_ASSERT_FALSE(LedDriver_IsOn(11)); LedDriver_TurnOn(11); TEST_ASSERT_TRUE(LedDriver_IsOn(11)); } TEST(LedDriver, OutOfBoundsLedsAreAlwaysOff) { TEST_ASSERT_TRUE(LedDriver_IsOff(0)); TEST_ASSERT_TRUE(LedDriver_IsOff(17)); TEST_ASSERT_FALSE(LedDriver_IsOn(0)); TEST_ASSERT_FALSE(LedDriver_IsOn(17)); } TEST(LedDriver, IsOff) { TEST_ASSERT_TRUE(LedDriver_IsOff(12)); LedDriver_TurnOn(12); TEST_ASSERT_FALSE(LedDriver_IsOff(12)); } TEST(LedDriver, TurnOffMultipleLeds) { LedDriver_TurnAllOn(); LedDriver_TurnOff(9); LedDriver_TurnOff(8); TEST_ASSERT_EQUAL(~(0x0180) & 0xFFFF, virtualLeds); } TEST(LedDriver, TurnAllOff) { LedDriver_TurnAllOn(); LedDriver_TurnAllOff(); TEST_ASSERT_EQUAL(0x0000, virtualLeds); }