From 8b78f10b18320a0b2cafd913e1d53a66cae7ed95 Mon Sep 17 00:00:00 2001 From: Ava Date: Sun, 16 Feb 2025 12:28:15 -0600 Subject: [PATCH 1/5] Photo Resistor Helper Unit Tests Added --- .../inputdevices/PhotoResistorHelperTest.java | 155 ++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 pi4micronaut-utils/src/test/java/com/opensourcewithslu/inputdevices/PhotoResistorHelperTest.java diff --git a/pi4micronaut-utils/src/test/java/com/opensourcewithslu/inputdevices/PhotoResistorHelperTest.java b/pi4micronaut-utils/src/test/java/com/opensourcewithslu/inputdevices/PhotoResistorHelperTest.java new file mode 100644 index 00000000..877e1745 --- /dev/null +++ b/pi4micronaut-utils/src/test/java/com/opensourcewithslu/inputdevices/PhotoResistorHelperTest.java @@ -0,0 +1,155 @@ +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; +import org.slf4j.LoggerFactory; +import java.lang.reflect.Field; + + +public class PhotoResistorHelperTest{ + private MockDigitalInput mockDigitalInput; + private DigitalOutput mockDigitalOutput; + private PhotoResistorHelper photoResistorHelper; + + + @BeforeEach + public void setup(){ + mockDigitalInput = new MockDigitalInput(); + mockDigitalOutput = mock(DigitalOutput.class); + photoResistorHelper = new PhotoResistorHelper(mockDigitalInput,mockDigitalOutput); + } + + + @Test + public void testInitializationLogic() { + mockDigitalInput.SetState(DigitalState.LOW); + PhotoResistorHelper helperLow = new PhotoResistorHelper(mockDigitalInput, mockDigitalOutput); + assertFalse(helperLow.isDark); + + + mockDigitalInput.SetState(DigitalState.HIGH); + PhotoResistorHelper helperHigh = new PhotoResistorHelper(mockDigitalInput, mockDigitalOutput); + assertTrue(helperHigh.isDark); + } + + + @Test + public void testDarknessLevelCalculation() throws Exception { + PhotoResistorHelper helper = new PhotoResistorHelper(mockDigitalInput, mockDigitalOutput); + + + helper.setDarknessThreshold(50); + + + Field startTimeField = PhotoResistorHelper.class.getDeclaredField("startTime"); + startTimeField.setAccessible(true); + startTimeField.setLong(helper, System.currentTimeMillis() - 100); // Simulate 100ms delay + + + helper.updateDark(); + + + Field endTimeField = PhotoResistorHelper.class.getDeclaredField("endTime"); + endTimeField.setAccessible(true); + endTimeField.setLong(helper, System.currentTimeMillis()); + + + Field darknessField = PhotoResistorHelper.class.getDeclaredField("darknessValue"); + darknessField.setAccessible(true); + int darknessValue = (int) (endTimeField.getLong(helper) - startTimeField.getLong(helper)); + darknessField.setInt(helper, darknessValue); + + + assertTrue(darknessValue > 0, "darknessValue should be updated after LOW->HIGH transition"); + + + Field isDarkField = PhotoResistorHelper.class.getDeclaredField("isDark"); + isDarkField.setAccessible(true); + isDarkField.setBoolean(helper, darknessValue > 50); + + boolean isDark = isDarkField.getBoolean(helper); + assertTrue(isDark, "isDark should be true because darknessValue (" + darknessValue + ") is above the threshold (50)"); + } + + @Test + public void testGetDark() throws Exception { + PhotoResistorHelper helper = new PhotoResistorHelper(mockDigitalInput, mockDigitalOutput); + + + Field darknessField = PhotoResistorHelper.class.getDeclaredField("darknessValue"); + darknessField.setAccessible(true); + darknessField.setInt(helper, 157); + + + assertEquals(157, helper.getDark()); + } + + @Test + public void testSetToLow() { + mockDigitalInput.SetState(DigitalState.HIGH); + PhotoResistorHelper helper = new PhotoResistorHelper(mockDigitalInput, mockDigitalOutput); + + + helper.setToLow(); + verify(mockDigitalOutput).low(); + } + + + @Test + public void testSetDarknessThreshold() throws Exception { + PhotoResistorHelper helper = new PhotoResistorHelper(mockDigitalInput, mockDigitalOutput); + helper.setDarknessThreshold(300); + + + Field thresholdField = PhotoResistorHelper.class.getDeclaredField("darknessThreshold"); + thresholdField.setAccessible(true); + int actualThreshold = thresholdField.getInt(helper); + + + assertEquals(300, actualThreshold); + } + + @Test + public void testEventListenerManagement() { + DigitalInput mockInput = mock(DigitalInput.class); + PhotoResistorHelper helper = new PhotoResistorHelper(mockInput, mockDigitalOutput); + DigitalStateChangeListener mockListener = mock(DigitalStateChangeListener.class); + + + helper.addEventListener(mockListener); + verify(mockInput, times(1)).addListener(mockListener); + + + helper.removeEventListener(); + verify(mockInput, times(1)).removeListener(mockListener); + } + + + @Test + public void testEdgeCases() throws InterruptedException{ + PhotoResistorHelper helper = new PhotoResistorHelper(mockDigitalInput, mockDigitalOutput); + + + helper.removeEventListener(); + helper.initialize(); + + + Thread.sleep(600); + assertEquals(0, helper.getDark()); + + + assertDoesNotThrow(() -> { + helper.removeEventListener(); + helper.removeEventListener(); + }); + } +} + + + From d91c04d3206ee0937164d883642b573110728e86 Mon Sep 17 00:00:00 2001 From: avaenk Date: Mon, 17 Feb 2025 21:45:39 -0600 Subject: [PATCH 2/5] Update PhotoResistorHelperTest.java made changes to the edge case testing to get rid of unnecessary delays. Signed-off-by: avaenk --- .../inputdevices/PhotoResistorHelperTest.java | 53 +++++++------------ 1 file changed, 20 insertions(+), 33 deletions(-) diff --git a/pi4micronaut-utils/src/test/java/com/opensourcewithslu/inputdevices/PhotoResistorHelperTest.java b/pi4micronaut-utils/src/test/java/com/opensourcewithslu/inputdevices/PhotoResistorHelperTest.java index 877e1745..b1b03100 100644 --- a/pi4micronaut-utils/src/test/java/com/opensourcewithslu/inputdevices/PhotoResistorHelperTest.java +++ b/pi4micronaut-utils/src/test/java/com/opensourcewithslu/inputdevices/PhotoResistorHelperTest.java @@ -2,7 +2,6 @@ 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; @@ -11,13 +10,11 @@ import org.slf4j.LoggerFactory; import java.lang.reflect.Field; - -public class PhotoResistorHelperTest{ +public class PhotoResistorHelperTests{ private MockDigitalInput mockDigitalInput; private DigitalOutput mockDigitalOutput; private PhotoResistorHelper photoResistorHelper; - @BeforeEach public void setup(){ mockDigitalInput = new MockDigitalInput(); @@ -25,68 +22,56 @@ public void setup(){ photoResistorHelper = new PhotoResistorHelper(mockDigitalInput,mockDigitalOutput); } - @Test public void testInitializationLogic() { mockDigitalInput.SetState(DigitalState.LOW); PhotoResistorHelper helperLow = new PhotoResistorHelper(mockDigitalInput, mockDigitalOutput); assertFalse(helperLow.isDark); - mockDigitalInput.SetState(DigitalState.HIGH); PhotoResistorHelper helperHigh = new PhotoResistorHelper(mockDigitalInput, mockDigitalOutput); assertTrue(helperHigh.isDark); } - @Test public void testDarknessLevelCalculation() throws Exception { PhotoResistorHelper helper = new PhotoResistorHelper(mockDigitalInput, mockDigitalOutput); - helper.setDarknessThreshold(50); - Field startTimeField = PhotoResistorHelper.class.getDeclaredField("startTime"); startTimeField.setAccessible(true); - startTimeField.setLong(helper, System.currentTimeMillis() - 100); // Simulate 100ms delay - + startTimeField.setLong(helper, System.currentTimeMillis() - 100); helper.updateDark(); - Field endTimeField = PhotoResistorHelper.class.getDeclaredField("endTime"); endTimeField.setAccessible(true); endTimeField.setLong(helper, System.currentTimeMillis()); - Field darknessField = PhotoResistorHelper.class.getDeclaredField("darknessValue"); darknessField.setAccessible(true); int darknessValue = (int) (endTimeField.getLong(helper) - startTimeField.getLong(helper)); darknessField.setInt(helper, darknessValue); - - assertTrue(darknessValue > 0, "darknessValue should be updated after LOW->HIGH transition"); - + assertTrue(darknessValue > 0); Field isDarkField = PhotoResistorHelper.class.getDeclaredField("isDark"); isDarkField.setAccessible(true); isDarkField.setBoolean(helper, darknessValue > 50); boolean isDark = isDarkField.getBoolean(helper); - assertTrue(isDark, "isDark should be true because darknessValue (" + darknessValue + ") is above the threshold (50)"); + assertTrue(isDark); } @Test public void testGetDark() throws Exception { PhotoResistorHelper helper = new PhotoResistorHelper(mockDigitalInput, mockDigitalOutput); - Field darknessField = PhotoResistorHelper.class.getDeclaredField("darknessValue"); darknessField.setAccessible(true); darknessField.setInt(helper, 157); - assertEquals(157, helper.getDark()); } @@ -95,23 +80,19 @@ public void testSetToLow() { mockDigitalInput.SetState(DigitalState.HIGH); PhotoResistorHelper helper = new PhotoResistorHelper(mockDigitalInput, mockDigitalOutput); - helper.setToLow(); verify(mockDigitalOutput).low(); } - @Test public void testSetDarknessThreshold() throws Exception { PhotoResistorHelper helper = new PhotoResistorHelper(mockDigitalInput, mockDigitalOutput); helper.setDarknessThreshold(300); - Field thresholdField = PhotoResistorHelper.class.getDeclaredField("darknessThreshold"); thresholdField.setAccessible(true); int actualThreshold = thresholdField.getInt(helper); - assertEquals(300, actualThreshold); } @@ -121,28 +102,37 @@ public void testEventListenerManagement() { PhotoResistorHelper helper = new PhotoResistorHelper(mockInput, mockDigitalOutput); DigitalStateChangeListener mockListener = mock(DigitalStateChangeListener.class); - helper.addEventListener(mockListener); verify(mockInput, times(1)).addListener(mockListener); - helper.removeEventListener(); verify(mockInput, times(1)).removeListener(mockListener); } - @Test - public void testEdgeCases() throws InterruptedException{ + public void testEdgeCases() throws Exception { PhotoResistorHelper helper = new PhotoResistorHelper(mockDigitalInput, mockDigitalOutput); - helper.removeEventListener(); helper.initialize(); + long fakeStartTime = System.currentTimeMillis() - 600; + long fakeEndTime = System.currentTimeMillis(); - Thread.sleep(600); - assertEquals(0, helper.getDark()); + Field startTimeField = PhotoResistorHelper.class.getDeclaredField("startTime"); + startTimeField.setAccessible(true); + startTimeField.setLong(helper, fakeStartTime); + Field endTimeField = PhotoResistorHelper.class.getDeclaredField("endTime"); + endTimeField.setAccessible(true); + endTimeField.setLong(helper, fakeEndTime); + + Field darknessField = PhotoResistorHelper.class.getDeclaredField("darknessValue"); + darknessField.setAccessible(true); + int expectedDarkness = (int) (fakeEndTime - fakeStartTime); + darknessField.setInt(helper, expectedDarkness); + + assertEquals(expectedDarkness, helper.getDark()); assertDoesNotThrow(() -> { helper.removeEventListener(); @@ -150,6 +140,3 @@ public void testEdgeCases() throws InterruptedException{ }); } } - - - From a40809e7c8df0e9a2ee1eaa60b10ab54ed9192f0 Mon Sep 17 00:00:00 2001 From: avaenk Date: Tue, 18 Feb 2025 10:47:34 -0600 Subject: [PATCH 3/5] Update PhotoResistorHelperTest.java Signed-off-by: avaenk --- .../inputdevices/PhotoResistorHelperTest.java | 31 ------------------- 1 file changed, 31 deletions(-) diff --git a/pi4micronaut-utils/src/test/java/com/opensourcewithslu/inputdevices/PhotoResistorHelperTest.java b/pi4micronaut-utils/src/test/java/com/opensourcewithslu/inputdevices/PhotoResistorHelperTest.java index b1b03100..4d9f7e8c 100644 --- a/pi4micronaut-utils/src/test/java/com/opensourcewithslu/inputdevices/PhotoResistorHelperTest.java +++ b/pi4micronaut-utils/src/test/java/com/opensourcewithslu/inputdevices/PhotoResistorHelperTest.java @@ -108,35 +108,4 @@ public void testEventListenerManagement() { helper.removeEventListener(); verify(mockInput, times(1)).removeListener(mockListener); } - - @Test - public void testEdgeCases() throws Exception { - PhotoResistorHelper helper = new PhotoResistorHelper(mockDigitalInput, mockDigitalOutput); - - helper.removeEventListener(); - helper.initialize(); - - long fakeStartTime = System.currentTimeMillis() - 600; - long fakeEndTime = System.currentTimeMillis(); - - Field startTimeField = PhotoResistorHelper.class.getDeclaredField("startTime"); - startTimeField.setAccessible(true); - startTimeField.setLong(helper, fakeStartTime); - - Field endTimeField = PhotoResistorHelper.class.getDeclaredField("endTime"); - endTimeField.setAccessible(true); - endTimeField.setLong(helper, fakeEndTime); - - Field darknessField = PhotoResistorHelper.class.getDeclaredField("darknessValue"); - darknessField.setAccessible(true); - int expectedDarkness = (int) (fakeEndTime - fakeStartTime); - darknessField.setInt(helper, expectedDarkness); - - assertEquals(expectedDarkness, helper.getDark()); - - assertDoesNotThrow(() -> { - helper.removeEventListener(); - helper.removeEventListener(); - }); - } } From 8190eb39b0c7843759b03f8dfcf62cb9ec2b1b09 Mon Sep 17 00:00:00 2001 From: avaenk Date: Tue, 18 Feb 2025 10:49:38 -0600 Subject: [PATCH 4/5] Update PhotoResistorHelperTest.java Signed-off-by: avaenk --- .../opensourcewithslu/inputdevices/PhotoResistorHelperTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pi4micronaut-utils/src/test/java/com/opensourcewithslu/inputdevices/PhotoResistorHelperTest.java b/pi4micronaut-utils/src/test/java/com/opensourcewithslu/inputdevices/PhotoResistorHelperTest.java index 4d9f7e8c..7a906235 100644 --- a/pi4micronaut-utils/src/test/java/com/opensourcewithslu/inputdevices/PhotoResistorHelperTest.java +++ b/pi4micronaut-utils/src/test/java/com/opensourcewithslu/inputdevices/PhotoResistorHelperTest.java @@ -10,7 +10,7 @@ import org.slf4j.LoggerFactory; import java.lang.reflect.Field; -public class PhotoResistorHelperTests{ +public class PhotoResistorHelperTest{ private MockDigitalInput mockDigitalInput; private DigitalOutput mockDigitalOutput; private PhotoResistorHelper photoResistorHelper; From bb0b292b84b20282aab6d85c6760557413af0a38 Mon Sep 17 00:00:00 2001 From: avaenk Date: Tue, 18 Feb 2025 10:59:34 -0600 Subject: [PATCH 5/5] Update PhotoResistorHelperTest.java Signed-off-by: avaenk --- .../inputdevices/PhotoResistorHelperTest.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/pi4micronaut-utils/src/test/java/com/opensourcewithslu/inputdevices/PhotoResistorHelperTest.java b/pi4micronaut-utils/src/test/java/com/opensourcewithslu/inputdevices/PhotoResistorHelperTest.java index 7a906235..69a78fe9 100644 --- a/pi4micronaut-utils/src/test/java/com/opensourcewithslu/inputdevices/PhotoResistorHelperTest.java +++ b/pi4micronaut-utils/src/test/java/com/opensourcewithslu/inputdevices/PhotoResistorHelperTest.java @@ -108,4 +108,35 @@ public void testEventListenerManagement() { helper.removeEventListener(); verify(mockInput, times(1)).removeListener(mockListener); } + + @Test + public void testEdgeCases() throws Exception { + PhotoResistorHelper helper = new PhotoResistorHelper(mockDigitalInput, mockDigitalOutput); + + helper.removeEventListener(); + helper.initialize(); + + long fakeStartTime = System.currentTimeMillis() - 600; + long fakeEndTime = System.currentTimeMillis(); + + Field startTimeField = PhotoResistorHelper.class.getDeclaredField("startTime"); + startTimeField.setAccessible(true); + startTimeField.setLong(helper, fakeStartTime); + + Field endTimeField = PhotoResistorHelper.class.getDeclaredField("endTime"); + endTimeField.setAccessible(true); + endTimeField.setLong(helper, fakeEndTime); + + Field darknessField = PhotoResistorHelper.class.getDeclaredField("darknessValue"); + darknessField.setAccessible(true); + int expectedDarkness = (int) (fakeEndTime - fakeStartTime); + darknessField.setInt(helper, expectedDarkness); + + assertEquals(expectedDarkness, helper.getDark()); + + assertDoesNotThrow(() -> { + helper.removeEventListener(); + helper.removeEventListener(); + }); + } }