From d390edcc94a3416bb06f9837a3bf246fb10803da Mon Sep 17 00:00:00 2001 From: Ava Date: Sun, 2 Feb 2025 13:40:59 -0600 Subject: [PATCH] Added unit tests for MicroSwitchController class --- .../inputdevices/MicroSwitchHelper.java | 7 +- .../inputdevices/MicroSwitchHelperTests.java | 123 ++++++++++++++++++ 2 files changed, 129 insertions(+), 1 deletion(-) create mode 100644 pi4micronaut-utils/src/test/java/com/opensourcewithslu/inputdevices/MicroSwitchHelperTests.java diff --git a/pi4micronaut-utils/src/main/java/com/opensourcewithslu/inputdevices/MicroSwitchHelper.java b/pi4micronaut-utils/src/main/java/com/opensourcewithslu/inputdevices/MicroSwitchHelper.java index 13c0e430..d22d3eef 100644 --- a/pi4micronaut-utils/src/main/java/com/opensourcewithslu/inputdevices/MicroSwitchHelper.java +++ b/pi4micronaut-utils/src/main/java/com/opensourcewithslu/inputdevices/MicroSwitchHelper.java @@ -10,7 +10,7 @@ */ public class MicroSwitchHelper { - private static final Logger log = LoggerFactory.getLogger(MicroSwitchHelper.class); + private static Logger log = LoggerFactory.getLogger(MicroSwitchHelper.class); private final DigitalInput microSwitchInput; @@ -64,4 +64,9 @@ public void removeEventListener() microSwitchInputListener = null; } } + + public void setLog(Logger log) { + this.log = log; + } + } diff --git a/pi4micronaut-utils/src/test/java/com/opensourcewithslu/inputdevices/MicroSwitchHelperTests.java b/pi4micronaut-utils/src/test/java/com/opensourcewithslu/inputdevices/MicroSwitchHelperTests.java new file mode 100644 index 00000000..0e8be6aa --- /dev/null +++ b/pi4micronaut-utils/src/test/java/com/opensourcewithslu/inputdevices/MicroSwitchHelperTests.java @@ -0,0 +1,123 @@ +package com.opensourcewithslu.inputdevices; + + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + + +import com.opensourcewithslu.mock.MockDigitalInput; +import com.pi4j.io.gpio.digital.*; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; + + +/** + * Unit tests for the micro switch helper class + */ +public class MicroSwitchHelperTests { + + + private MockDigitalInput mockDigitalInput; + private MicroSwitchHelper microSwitchHelper; + + + @BeforeEach + public void setUp(){ + mockDigitalInput = new MockDigitalInput(); + microSwitchHelper = new MicroSwitchHelper(mockDigitalInput); + } + + + @Test + public void testInitializationLogic(){ + //verify isPressed is initialized based on the input state + assertFalse(microSwitchHelper.isPressed); + + + //simulate high state so isPressed is triggered + mockDigitalInput.SetState(DigitalState.HIGH); + MicroSwitchHelper newMicroSwitchHelper = new MicroSwitchHelper(mockDigitalInput); + assertTrue(newMicroSwitchHelper.isPressed); + + + } + + + @Test + public void testAddEventListener() { + DigitalInput mockInput = mock(DigitalInput.class); + SlideSwitchHelper slideSwitchHelper = new SlideSwitchHelper(mockInput); + + + DigitalStateChangeListener dummyListener = mock(DigitalStateChangeListener.class); + + + slideSwitchHelper.addEventListener(dummyListener); + verify(mockInput).addListener(dummyListener); + } + + + @Test + public void testRemoveEventListener(){ + DigitalInput mockInput = mock(DigitalInput.class); + MicroSwitchHelper helper = new MicroSwitchHelper(mockInput); + + + DigitalStateChangeListener dummyListener = mock(DigitalStateChangeListener.class); + helper.addEventListener(dummyListener); + + + helper.removeEventListener(); + verify(mockInput).removeListener(dummyListener); + } + + + @Test + public void testStateUpdate(){ + //starting with state at low + mockDigitalInput.SetState(DigitalState.LOW); + MicroSwitchHelper helperLow = new MicroSwitchHelper(mockDigitalInput); + assertFalse(helperLow.isPressed); + + + //switching to high + mockDigitalInput.SetState(DigitalState.HIGH); + MicroSwitchHelper helperHigh = new MicroSwitchHelper(mockDigitalInput); + assertTrue(helperHigh.isPressed); + + + //switching state back to low + mockDigitalInput.SetState(DigitalState.LOW); + MicroSwitchHelper helperLowAgain = new MicroSwitchHelper(mockDigitalInput); + assertFalse(helperLowAgain.isPressed); + } + + + @Test + void testLogsOnInitialize() { + DigitalInput mockInput = mock(DigitalInput.class); + Logger loggerMock = mock(Logger.class); + + + MicroSwitchHelper helper = new MicroSwitchHelper(mockInput); + helper.setLog(loggerMock); + helper.initialize(); + + + verify(loggerMock).info("Initializing Micro Switch"); + } + + + @Test + public void testRemoveEventListenerNoEventListener(){ + DigitalInput mockInput = mock(DigitalInput.class); + MicroSwitchHelper helper = new MicroSwitchHelper(mockInput); + // no call to add event listener + + + //remove event listener and verify that it was called properly + helper.removeEventListener(); + verify(mockInput).removeListener(any(DigitalStateChangeListener.class)); + } +}