diff --git a/jakarta-jsonp/src/test/java/com/fasterxml/jackson/datatype/jsonp/ModuleSPIMetadataTest.java b/jakarta-jsonp/src/test/java/com/fasterxml/jackson/datatype/jsonp/ModuleSPIMetadataTest.java new file mode 100644 index 00000000..5b52d435 --- /dev/null +++ b/jakarta-jsonp/src/test/java/com/fasterxml/jackson/datatype/jsonp/ModuleSPIMetadataTest.java @@ -0,0 +1,33 @@ +package com.fasterxml.jackson.datatype.jsonp; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +import java.util.ServiceLoader; + +public class ModuleSPIMetadataTest extends TestBase +{ + @Test + void testModuleSPIMetadata() { + ServiceLoader loader + = ServiceLoader.load(com.fasterxml.jackson.databind.Module.class); + assertTrue(loader.iterator().hasNext(), + "Expected at least one `Module` implementation to be found via `ServiceLoader`"); + final String exp = JSONPModule.class.getName(); + int count = 0; + + try { + for (com.fasterxml.jackson.databind.Module service : loader) { + ++count; + if (service.getClass().getName().equals(exp)) { + return; + } + } + } catch (Throwable t) { + fail("Expected to find `"+exp+"` Module (found "+count+" so far), problem: "+t); + } + fail("Expecteed to find `"+exp+"` Module (found "+count+" others)"); + assertEquals(1, count); + } +} diff --git a/jakarta-mail/src/test/java/com/fasterxml/jackson/datatype/jakarta/mail/ModuleSPIMetadataTest.java b/jakarta-mail/src/test/java/com/fasterxml/jackson/datatype/jakarta/mail/ModuleSPIMetadataTest.java new file mode 100644 index 00000000..df45e8cd --- /dev/null +++ b/jakarta-mail/src/test/java/com/fasterxml/jackson/datatype/jakarta/mail/ModuleSPIMetadataTest.java @@ -0,0 +1,33 @@ +package com.fasterxml.jackson.datatype.jakarta.mail; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +import java.util.ServiceLoader; + +public class ModuleSPIMetadataTest extends TestBase +{ + @Test + void testModuleSPIMetadata() { + ServiceLoader loader + = ServiceLoader.load(com.fasterxml.jackson.databind.Module.class); + assertTrue(loader.iterator().hasNext(), + "Expected at least one `Module` implementation to be found via `ServiceLoader`"); + final String exp = JakartaMailModule.class.getName(); + int count = 0; + + try { + for (com.fasterxml.jackson.databind.Module service : loader) { + ++count; + if (service.getClass().getName().equals(exp)) { + return; + } + } + } catch (Throwable t) { + fail("Expected to find `"+exp+"` Module (found "+count+" so far), problem: "+t); + } + fail("Expecteed to find `"+exp+"` Module (found "+count+" others)"); + assertEquals(1, count); + } +} diff --git a/javax-money/src/test/java/com/fasterxml/jackson/datatype/javax/money/ModuleSPIMetadataTest.java b/javax-money/src/test/java/com/fasterxml/jackson/datatype/javax/money/ModuleSPIMetadataTest.java new file mode 100644 index 00000000..3e83fde8 --- /dev/null +++ b/javax-money/src/test/java/com/fasterxml/jackson/datatype/javax/money/ModuleSPIMetadataTest.java @@ -0,0 +1,33 @@ +package com.fasterxml.jackson.datatype.javax.money; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +import java.util.ServiceLoader; + +public class ModuleSPIMetadataTest +{ + @Test + void testModuleSPIMetadata() { + ServiceLoader loader + = ServiceLoader.load(com.fasterxml.jackson.databind.Module.class); + assertTrue(loader.iterator().hasNext(), + "Expected at least one `Module` implementation to be found via `ServiceLoader`"); + final String exp = JavaxMoneyModule.class.getName(); + int count = 0; + + try { + for (com.fasterxml.jackson.databind.Module service : loader) { + ++count; + if (service.getClass().getName().equals(exp)) { + return; + } + } + } catch (Throwable t) { + fail("Expected to find `"+exp+"` Module (found "+count+" so far), problem: "+t); + } + fail("Expected to find `"+exp+"` Module (found "+count+" others)"); + assertEquals(1, count); + } +} diff --git a/joda-money/src/test/java/com/fasterxml/jackson/datatype/jodamoney/ModuleSPIMetadataTest.java b/joda-money/src/test/java/com/fasterxml/jackson/datatype/jodamoney/ModuleSPIMetadataTest.java new file mode 100644 index 00000000..1c89e90f --- /dev/null +++ b/joda-money/src/test/java/com/fasterxml/jackson/datatype/jodamoney/ModuleSPIMetadataTest.java @@ -0,0 +1,33 @@ +package com.fasterxml.jackson.datatype.jodamoney; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +import java.util.ServiceLoader; + +public class ModuleSPIMetadataTest extends ModuleTestBase +{ + @Test + void testModuleSPIMetadata() { + ServiceLoader loader + = ServiceLoader.load(com.fasterxml.jackson.databind.Module.class); + assertTrue(loader.iterator().hasNext(), + "Expected at least one `Module` implementation to be found via `ServiceLoader`"); + final String exp = JodaMoneyModule.class.getName(); + int count = 0; + + try { + for (com.fasterxml.jackson.databind.Module service : loader) { + ++count; + if (service.getClass().getName().equals(exp)) { + return; + } + } + } catch (Throwable t) { + fail("Expected to find `"+exp+"` Module (found "+count+" so far), problem: "+t); + } + fail("Expected to find `"+exp+"` Module (found "+count+" others)"); + assertEquals(1, count); + } +} diff --git a/json-org/src/test/java/com/fasterxml/jackson/datatype/jsonorg/ModuleSPIMetadataTest.java b/json-org/src/test/java/com/fasterxml/jackson/datatype/jsonorg/ModuleSPIMetadataTest.java new file mode 100644 index 00000000..dd456ca4 --- /dev/null +++ b/json-org/src/test/java/com/fasterxml/jackson/datatype/jsonorg/ModuleSPIMetadataTest.java @@ -0,0 +1,33 @@ +package com.fasterxml.jackson.datatype.jsonorg; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +import java.util.ServiceLoader; + +public class ModuleSPIMetadataTest extends ModuleTestBase +{ + @Test + void testModuleSPIMetadata() { + ServiceLoader loader + = ServiceLoader.load(com.fasterxml.jackson.databind.Module.class); + assertTrue(loader.iterator().hasNext(), + "Expected at least one `Module` implementation to be found via `ServiceLoader`"); + final String exp = JsonOrgModule.class.getName(); + int count = 0; + + try { + for (com.fasterxml.jackson.databind.Module service : loader) { + ++count; + if (service.getClass().getName().equals(exp)) { + return; + } + } + } catch (Throwable t) { + fail("Expected to find `"+exp+"` Module (found "+count+" so far), problem: "+t); + } + fail("Expected to find `"+exp+"` Module (found "+count+" others)"); + assertEquals(1, count); + } +} diff --git a/jsr-353/src/test/java/com/fasterxml/jackson/datatype/jsr353/ModuleSPIMetadataTest.java b/jsr-353/src/test/java/com/fasterxml/jackson/datatype/jsr353/ModuleSPIMetadataTest.java new file mode 100644 index 00000000..e30efa26 --- /dev/null +++ b/jsr-353/src/test/java/com/fasterxml/jackson/datatype/jsr353/ModuleSPIMetadataTest.java @@ -0,0 +1,33 @@ +package com.fasterxml.jackson.datatype.jsr353; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +import java.util.ServiceLoader; + +public class ModuleSPIMetadataTest extends TestBase +{ + @Test + void testModuleSPIMetadata() { + ServiceLoader loader + = ServiceLoader.load(com.fasterxml.jackson.databind.Module.class); + assertTrue(loader.iterator().hasNext(), + "Expected at least one `Module` implementation to be found via `ServiceLoader`"); + final String exp = JSR353Module.class.getName(); + int count = 0; + + try { + for (com.fasterxml.jackson.databind.Module service : loader) { + ++count; + if (service.getClass().getName().equals(exp)) { + return; + } + } + } catch (Throwable t) { + fail("Expected to find `"+exp+"` Module (found "+count+" so far), problem: "+t); + } + fail("Expected to find `"+exp+"` Module (found "+count+" others)"); + assertEquals(1, count); + } +} diff --git a/moneta/src/test/java/com/fasterxml/jackson/datatype/moneta/ModuleSPIMetadataTest.java b/moneta/src/test/java/com/fasterxml/jackson/datatype/moneta/ModuleSPIMetadataTest.java new file mode 100644 index 00000000..7c03ca1f --- /dev/null +++ b/moneta/src/test/java/com/fasterxml/jackson/datatype/moneta/ModuleSPIMetadataTest.java @@ -0,0 +1,33 @@ +package com.fasterxml.jackson.datatype.moneta; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +import java.util.ServiceLoader; + +public class ModuleSPIMetadataTest +{ + @Test + void testModuleSPIMetadata() { + ServiceLoader loader + = ServiceLoader.load(com.fasterxml.jackson.databind.Module.class); + assertTrue(loader.iterator().hasNext(), + "Expected at least one `Module` implementation to be found via `ServiceLoader`"); + final String exp = MonetaMoneyModule.class.getName(); + int count = 0; + + try { + for (com.fasterxml.jackson.databind.Module service : loader) { + ++count; + if (service.getClass().getName().equals(exp)) { + return; + } + } + } catch (Throwable t) { + fail("Expected to find `"+exp+"` Module (found "+count+" so far), problem: "+t); + } + fail("Expected to find `"+exp+"` Module (found "+count+" others)"); + assertEquals(1, count); + } +} diff --git a/release-notes/VERSION-2.x b/release-notes/VERSION-2.x index 2fea211b..83795c8d 100644 --- a/release-notes/VERSION-2.x +++ b/release-notes/VERSION-2.x @@ -13,6 +13,7 @@ Modules: 2.20.0 (not yet released) +#68: Add unit tests to verify goodness of SPI metadata for Modules - Generate SBOMs [JSTEP-14] 2.19.0 (24-Apr-2025)