diff --git a/avaje-prisms/pom.xml b/avaje-prisms/pom.xml index 994d1c4..da998cc 100644 --- a/avaje-prisms/pom.xml +++ b/avaje-prisms/pom.xml @@ -3,7 +3,7 @@ io.avaje avaje-prisms-parent - 1.44-RC2 + 1.44-RC3 avaje-prisms avaje-prisms diff --git a/blackbox-test-prism/pom.xml b/blackbox-test-prism/pom.xml index d7a7d38..3a96a5a 100644 --- a/blackbox-test-prism/pom.xml +++ b/blackbox-test-prism/pom.xml @@ -4,7 +4,7 @@ io.avaje avaje-prisms-parent - 1.44-RC2 + 1.44-RC3 blackbox-test-prism diff --git a/blackbox-test-prism/src/test/java/io/avaje/prisms/test/ProcessorUtilsTest.java b/blackbox-test-prism/src/test/java/io/avaje/prisms/test/ProcessorUtilsTest.java index 4229114..001a2f8 100644 --- a/blackbox-test-prism/src/test/java/io/avaje/prisms/test/ProcessorUtilsTest.java +++ b/blackbox-test-prism/src/test/java/io/avaje/prisms/test/ProcessorUtilsTest.java @@ -1,6 +1,9 @@ package io.avaje.prisms.test; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; @@ -33,4 +36,189 @@ void trimmedAnnotation() { ProcessorUtils.trimAnnotations( "java.ProcessorUtils.Map")); } + + // --- Tests for boxedPrimitive --- + + @Test + void boxedPrimitive_primitiveType() { + assertEquals("java.lang.Integer", ProcessorUtils.boxedPrimitive("int")); + assertEquals("java.lang.Character", ProcessorUtils.boxedPrimitive("char")); + assertEquals("java.lang.Boolean", ProcessorUtils.boxedPrimitive("boolean")); + assertEquals("java.lang.Double", ProcessorUtils.boxedPrimitive("double")); + } + + @Test + void boxedPrimitive_nonPrimitiveType() { + assertNull(ProcessorUtils.boxedPrimitive("String")); + assertNull(ProcessorUtils.boxedPrimitive("java.util.List")); + } + + @Test + void boxedPrimitive_emptyString() { + assertNull(ProcessorUtils.boxedPrimitive("")); + } + + // --- Tests for isPrimitive --- + + @Test + void isPrimitive_isPrimitive() { + assertTrue(ProcessorUtils.isPrimitive("byte")); + assertTrue(ProcessorUtils.isPrimitive("long")); + assertTrue(ProcessorUtils.isPrimitive("float")); + } + + @Test + void isPrimitive_isNotPrimitive() { + assertFalse(ProcessorUtils.isPrimitive("Byte")); + assertFalse(ProcessorUtils.isPrimitive("String")); + assertFalse(ProcessorUtils.isPrimitive("void")); // void is not in BOX_MAP + } + + // --- Tests for packageOf --- + + @Test + void packageOf_normalFQN() { + assertEquals("java.util", ProcessorUtils.packageOf("java.util.List")); + } + + @Test + void packageOf_nestedClass() { + // shortType handles nested classes, e.g., "Outer.Inner" + assertEquals("io.avaje.test", ProcessorUtils.packageOf("io.avaje.test.Outer.Inner")); + } + + @Test + void packageOf_emptyString() { + assertEquals("", ProcessorUtils.packageOf("")); + } + + // --- Tests for shortType --- + + @Test + void shortType_simpleClass() { + assertEquals("List", ProcessorUtils.shortType("java.util.List")); + } + + @Test + void shortType_nestedClass() { + assertEquals("Outer.Inner", ProcessorUtils.shortType("io.avaje.test.Outer.Inner")); + } + + @Test + void shortType_nestedClassWithPackagePrefix() { + assertEquals("Outer.Inner", ProcessorUtils.shortType("mypkg.Outer.Inner")); + } + + @Test + void shortType_classInDefaultPackage() { + assertEquals("MyClass", ProcessorUtils.shortType("MyClass")); + } + + @Test + void shortType_packageOnly() { + assertEquals("util", ProcessorUtils.shortType("java.util")); + } + + @Test + void shortType_emptyString() { + assertEquals("", ProcessorUtils.shortType("")); + } + + // --- Tests for commonParent --- + + @Test + void commonParent_identical() { + assertEquals( + "java.util.concurrent", + ProcessorUtils.commonParent("java.util.concurrent", "java.util.concurrent")); + } + + @Test + void commonParent_firstIsParent() { + assertEquals("java.util", ProcessorUtils.commonParent("java.util", "java.util.List")); + } + + @Test + void commonParent_secondIsParent() { + assertEquals("java.util", ProcessorUtils.commonParent("java.util.List", "java.util")); + } + + @Test + void commonParent_defaultPackage() { + assertEquals("MyClass", ProcessorUtils.commonParent("MyClass", "java.lang")); + } + + @Test + void commonParent_nullSecond() { + assertEquals("java.util.List", ProcessorUtils.commonParent("java.util.List", null)); + } + + @Test + void commonParent_nullFirst() { + // commonParent calls packageOf(secondPkg) if first is null + assertEquals("java.util", ProcessorUtils.commonParent(null, "java.util.List")); + } + + @Test + void commonParent_bothNull() { + assertNull(ProcessorUtils.commonParent(null, null)); + } + + // --- Tests for sanitizeImports --- + + @Test + void sanitizeImports_cleanInput() { + String input = "import java.util.List;"; + assertEquals("import java.util.List;", ProcessorUtils.sanitizeImports(input)); + } + + @Test + void sanitizeImports_withAnnotation() { + String input = "@SuppressWarning(\"a\") import java.util.List;"; + assertEquals("java.util.List;", ProcessorUtils.sanitizeImports(input)); + } + + @Test + void sanitizeImports_invalidCharacters() { + String input = "import java.util.L<>ist$;"; + assertEquals("import java.util.List$;", ProcessorUtils.sanitizeImports(input)); + } + + // --- Tests for extractEnclosingFQN --- + + @Test + void extractEnclosingFQN_notNested() { + assertEquals("java.util.List", ProcessorUtils.extractEnclosingFQN("java.util.List")); + } + + @Test + void extractEnclosingFQN_singleNested() { + assertEquals("io.package.Top", ProcessorUtils.extractEnclosingFQN("io.package.Top.Nested")); + } + + @Test + void extractEnclosingFQN_doubleNested() { + assertEquals( + "io.package.Top.Nested", ProcessorUtils.extractEnclosingFQN("io.package.Top.Nested.Inner")); + } + @Test + void extractEnclosingFQN_tripleNested() { + assertEquals( + "io.package.Top.Nested.Inner", ProcessorUtils.extractEnclosingFQN("io.package.Top.Nested.Inner.Inner")); + } + + @Test + void extractEnclosingFQN_defaultPackage() { + assertEquals("Top", ProcessorUtils.extractEnclosingFQN("Top.Nested")); + } + + @Test + void extractEnclosingFQN_topLevelClassOnly() { + assertEquals("Top", ProcessorUtils.extractEnclosingFQN("Top")); + } + + @Test + void extractEnclosingFQN_packageOnly() { + assertEquals("java.util", ProcessorUtils.extractEnclosingFQN("java.util")); + } } diff --git a/pom.xml b/pom.xml index 11a491e..9fa2687 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ io.avaje avaje-prisms-parent - 1.44-RC2 + 1.44-RC3 pom avaje-prisms-parent A modular fork of hickory @@ -17,7 +17,7 @@ - 2025-11-20T14:31:33Z + 2025-11-21T15:27:08Z true diff --git a/prism-core/pom.xml b/prism-core/pom.xml index f78f0a7..b34b20a 100644 --- a/prism-core/pom.xml +++ b/prism-core/pom.xml @@ -4,7 +4,7 @@ io.avaje avaje-prisms-parent - 1.44-RC2 + 1.44-RC3 avaje-prisms-core avaje-prism-core diff --git a/prism-core/src/main/java/io/avaje/prism/internal/UtilWriter.java b/prism-core/src/main/java/io/avaje/prism/internal/UtilWriter.java index 89898ca..cf2d928 100644 --- a/prism-core/src/main/java/io/avaje/prism/internal/UtilWriter.java +++ b/prism-core/src/main/java/io/avaje/prism/internal/UtilWriter.java @@ -246,7 +246,7 @@ public static void write(PrintWriter out, String packageName) { + " if (p == -1) {\n" + " return fullResult;\n" + " }\n" - + " return fullResult.substring(0, p);\n" + + " return fullResult.substring(0, p).replace('/', '.');\n" + " }\n" + "}\n"); }