package dev.peerat.parser.java.element.annotation; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.List; import java.util.Map.Entry; import dev.peerat.parser.Token; import dev.peerat.parser.TokenType; import dev.peerat.parser.java.Annotation; import dev.peerat.parser.java.Class; import dev.peerat.parser.java.ClassBase; import dev.peerat.parser.java.Enumeration; import dev.peerat.parser.java.Interface; import dev.peerat.parser.java.element.BaseElementTests; import dev.peerat.parser.java.value.StaticValue; import dev.peerat.parser.java.value.Value; public class ClazzAnnotation extends BaseElementTests{ { register( "package be.jeffcheasey88;" + "" + "@Test " + "public static class Test{}", (javafile) -> { Class clazz = checkClass(javafile); List annotations = clazz.getAnnotations(); assertNotNull(annotations); assertEquals(1, annotations.size()); Annotation annotation = annotations.get(0); assertEquals("Test", annotation.getName().getValue()); assertNull(annotation.getParameters()); }); register( "package be.jeffcheasey88;" + "" + "@be.jeffcheasey88.Test " + "public static class Test{}", (javafile) -> { Class clazz = checkClass(javafile); List annotations = clazz.getAnnotations(); assertNotNull(annotations); assertEquals(1, annotations.size()); Annotation annotation = annotations.get(0); assertEquals("be.jeffcheasey88.Test", annotation.getName().getValue()); assertNull(annotation.getParameters()); }); register( "package be.jeffcheasey88;" + "" + "@Test() " + "public static class Test{}", (javafile) -> { Class clazz = checkClass(javafile); List annotations = clazz.getAnnotations(); assertNotNull(annotations); assertEquals(1, annotations.size()); Annotation annotation = annotations.get(0); assertEquals("Test", annotation.getName().getValue()); assertNull(annotation.getParameters()); }); register( "package be.jeffcheasey88;" + "" + "@Test(\"Hello\") " + "public static class Test{}", (javafile) -> { Class clazz = checkClass(javafile); List annotations = clazz.getAnnotations(); assertNotNull(annotations); assertEquals(1, annotations.size()); Annotation annotation = annotations.get(0); assertEquals("Test", annotation.getName().getValue()); assertNotNull(annotation.getParameters()); StaticValue value = (StaticValue) annotation.getParameters().get(null); assertNotNull(value); Token token = value.getToken(); assertNotNull(token); assertEquals(TokenType.STRING, token.getType()); assertEquals("\"Hello\"", token.getValue()); }); register( "package be.jeffcheasey88;" + "" + "@Test(offset=8) " + "public static class Test{}", (javafile) -> { Class clazz = checkClass(javafile); List annotations = clazz.getAnnotations(); assertNotNull(annotations); assertEquals(1, annotations.size()); Annotation annotation = annotations.get(0); assertEquals("Test", annotation.getName().getValue()); assertNotNull(annotation.getParameters()); assertEquals(1, annotation.getParameters().size()); Entry entry = annotation.getParameters().entrySet().iterator().next(); assertEquals("offset", entry.getKey().getValue()); assertEquals("8", ((StaticValue)entry.getValue()).getToken().getValue()); }); register( "package be.jeffcheasey88;" + "" + "@Test(offset=8,concat=\",\") " + "public static class Test{}", (javafile) -> { Class clazz = checkClass(javafile); List annotations = clazz.getAnnotations(); assertNotNull(annotations); assertEquals(1, annotations.size()); Annotation annotation = annotations.get(0); assertEquals("Test", annotation.getName().getValue()); assertNotNull(annotation.getParameters()); assertEquals(2, annotation.getParameters().size()); }); register( "package be.jeffcheasey88;" + "" + "@Test " + "public static interface Test{}", (javafile) -> { ClassBase clazzb = javafile.getMainClass(); assertNotNull(clazzb); assertTrue(clazzb instanceof Interface); Interface clazz = (Interface)clazzb; List annotations = clazz.getAnnotations(); assertNotNull(annotations); assertEquals(1, annotations.size()); Annotation annotation = annotations.get(0); assertEquals("Test", annotation.getName().getValue()); assertNull(annotation.getParameters()); }); register( "package be.jeffcheasey88;" + "" + "@Test " + "public static enum Test{}", (javafile) -> { ClassBase clazzb = javafile.getMainClass(); assertNotNull(clazzb); assertTrue(clazzb instanceof Enumeration); Enumeration clazz = (Enumeration)clazzb; List annotations = clazz.getAnnotations(); assertNotNull(annotations); assertEquals(1, annotations.size()); Annotation annotation = annotations.get(0); assertEquals("Test", annotation.getName().getValue()); assertNull(annotation.getParameters()); }); } }