/* * Copyright 2014 Red Hat, Inc. and/or its affiliates. * * Licensed under the Eclipse Public License version 1.0, available at * http://www.eclipse.org/legal/epl-v10.html */ package org.jboss.forge.test.roaster.model; import static org.junit.Assert.assertEquals; import java.io.InputStream; import java.util.List; import org.jboss.forge.roaster.Roaster; import org.jboss.forge.roaster.model.Annotation; import org.jboss.forge.roaster.model.ValuePair; import org.jboss.forge.roaster.model.impl.TypeImpl; import org.jboss.forge.roaster.model.source.AnnotationSource; import org.jboss.forge.roaster.model.source.Import; import org.jboss.forge.roaster.model.source.JavaPackageInfoSource; import org.junit.Assert; import org.junit.Test; public class JavaPackageInfoTest { @Test public void testCanCreatePackageInfo() throws Exception { JavaPackageInfoSource packageInfo = Roaster.create(JavaPackageInfoSource.class); packageInfo.setPackage("org.jboss.forge.roaster"); Assert.assertEquals("org.jboss.forge.roaster", packageInfo.getPackage()); Assert.assertEquals("package-info", packageInfo.getName()); } @Test(expected = UnsupportedOperationException.class) public void testSetPackageInfoNameThrowsUnsupportedOperation() throws Exception { JavaPackageInfoSource packageInfo = Roaster.create(JavaPackageInfoSource.class); packageInfo.setName("anything"); } @Test public void testCanParsePackageInfo() throws Exception { InputStream stream = JavaPackageInfoTest.class .getResourceAsStream("/org/jboss/forge/grammar/java/package-info.java"); JavaPackageInfoSource javaPkg = Roaster.parse(JavaPackageInfoSource.class, stream); assertEquals("org.jboss.forge.test.roaster.model", javaPkg.getPackage()); Assert.assertEquals("package-info", javaPkg.getName()); Assert.assertNotNull(javaPkg.getImport("javax.xml.bind.annotation.XmlSchema")); Import XmlAccessTypeField = javaPkg.getImport("javax.xml.bind.annotation.XmlAccessType.FIELD"); Assert.assertNotNull(XmlAccessTypeField); Assert.assertTrue(XmlAccessTypeField.isStatic()); List<AnnotationSource<JavaPackageInfoSource>> annotations = javaPkg.getAnnotations(); Assert.assertEquals(2, annotations.size()); Annotation<JavaPackageInfoSource> annotation = javaPkg.getAnnotation("XmlSchema"); List<ValuePair> values = annotation.getValues(); Assert.assertEquals(3, values.size()); String namespace = annotation.getLiteralValue("namespace"); Assert.assertEquals(namespace, "\"http://forge.org/Test\""); AnnotationSource<JavaPackageInfoSource> annotationXmlOrder = javaPkg .addAnnotation("javax.xml.bind.annotation.XmlAccessorOrder"); AnnotationSource<JavaPackageInfoSource> annotationXmlAccessorOrder = javaPkg.getAnnotation("XmlAccessorOrder"); Assert.assertEquals(annotationXmlOrder.getName(), annotationXmlAccessorOrder.getName()); } @Test @SuppressWarnings({ "unchecked", "rawtypes" }) public void testPackageInfoWithImportedAnnotations() { JavaPackageInfoSource packageInfo = Roaster.create(JavaPackageInfoSource.class); packageInfo.setPackage("org.jboss.forge.roaster"); packageInfo.addImport(new TypeImpl(packageInfo, null, MyPLAnnotation.class.getName())); packageInfo.addAnnotation("my.custom.Annotation"); packageInfo.getEnclosingType(); assertEquals(2, packageInfo.getImports().size()); } public @interface MyPLAnnotation { } }