/*
* Copyright 2012 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.hamcrest.CoreMatchers.hasItem;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import java.io.InputStream;
import java.util.List;
import org.jboss.forge.roaster.Roaster;
import org.jboss.forge.roaster.model.source.Import;
import org.jboss.forge.roaster.model.source.JavaClassSource;
import org.jboss.forge.roaster.model.source.JavaInterfaceSource;
import org.jboss.forge.roaster.model.source.MemberSource;
import org.jboss.forge.roaster.model.source.MethodSource;
import org.junit.Test;
/**
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*/
public class JavaInterfaceTest
{
@Test
public void testCanParseInterface() throws Exception
{
InputStream stream = JavaInterfaceTest.class
.getResourceAsStream("/org/jboss/forge/grammar/java/MockInterface.java");
JavaInterfaceSource javaClass = Roaster.parse(JavaInterfaceSource.class, stream);
String name = javaClass.getName();
assertEquals("MockInterface", name);
}
@Test
public void testCanParseBigInterface() throws Exception
{
InputStream stream = JavaInterfaceTest.class
.getResourceAsStream("/org/jboss/forge/grammar/java/BigInterface.java");
JavaInterfaceSource javaClass = Roaster.parse(JavaInterfaceSource.class, stream);
String name = javaClass.getName();
assertEquals("BigInterface", name);
List<MemberSource<JavaInterfaceSource, ?>> members = javaClass.getMembers();
assertFalse(members.isEmpty());
}
@Test
public void testImportJavaSource() throws Exception
{
JavaInterfaceSource foo = Roaster.parse(JavaInterfaceSource.class,
"package org.jboss.forge; public interface Foo{}");
JavaInterfaceSource bar = Roaster.parse(JavaInterfaceSource.class,
"package org.jboss.forge; public interface Bar{}");
assertFalse(foo.hasImport(bar));
assertFalse(bar.hasImport(foo));
Import importBar = foo.addImport(bar);
assertTrue(foo.hasImport(bar));
assertFalse(bar.hasImport(foo));
assertEquals("org.jboss.forge.Bar", importBar.getQualifiedName());
assertEquals(importBar, foo.getImport(bar));
foo.removeImport(bar);
assertFalse(foo.hasImport(bar));
assertFalse(bar.hasImport(foo));
}
@Test
public void testImportImport() throws Exception
{
JavaInterfaceSource foo = Roaster.parse(JavaInterfaceSource.class, "public interface Foo{}");
Import i = foo.addImport(getClass());
foo.removeImport(getClass());
Import i2 = foo.addImport(i);
assertNotSame(i, i2);
assertEquals(i.getQualifiedName(), i2.getQualifiedName());
}
@Test
public void testStatic()
{
JavaInterfaceSource iface = Roaster.parse(JavaInterfaceSource.class, "public interface Foo{}");
iface.setStatic(true);
assertTrue(iface.isStatic());
iface.setStatic(false);
assertFalse(iface.isStatic());
}
@Test
public void testImportInterface()
{
JavaInterfaceSource javaInterface = Roaster.create(JavaInterfaceSource.class);
javaInterface.setName("MyInterface");
javaInterface.setPackage("org.jboss.forge");
MethodSource<JavaInterfaceSource> methodSource = javaInterface.addMethod();
methodSource.setName("methodExample");
methodSource.addParameter("java.util.List<String>", "listParameter");
JavaClassSource javaImplementation = Roaster.create(JavaClassSource.class);
javaImplementation.implementInterface(javaInterface);
assertTrue("The interface does not import java.util.List properly", javaInterface.hasImport("java.util.List"));
assertTrue("The implementation does not import java.util.List properly",
javaImplementation.hasImport("java.util.List"));
}
@Test
public void testGenericTypesExtendsInterfaceDeclaration()
{
String data = "import com.foo.Bar;\n"
+ "public interface Foo extends Bar<String,Integer>{}";
JavaInterfaceSource iface = Roaster.parse(JavaInterfaceSource.class, data);
assertThat(iface.getInterfaces(), hasItem("com.foo.Bar<String,Integer>"));
}
}