From 76e44020c7d7ab091d3fccd9bf156b7d9549ba9c Mon Sep 17 00:00:00 2001 From: Martin Monperrus Date: Sat, 3 Dec 2016 09:45:41 +0100 Subject: [PATCH] test(template): add test for super interface templates --- .../test/template/InterfaceTemplate.java | 32 +++++++++++++++++++ .../spoon/test/template/TemplateTest.java | 28 ++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 src/test/java/spoon/test/template/InterfaceTemplate.java diff --git a/src/test/java/spoon/test/template/InterfaceTemplate.java b/src/test/java/spoon/test/template/InterfaceTemplate.java new file mode 100644 index 00000000000..4aa1fc6c42f --- /dev/null +++ b/src/test/java/spoon/test/template/InterfaceTemplate.java @@ -0,0 +1,32 @@ +package spoon.test.template; + +import spoon.reflect.factory.Factory; +import spoon.reflect.reference.CtTypeReference; +import spoon.template.ExtensionTemplate; +import spoon.template.Parameter; + +import java.io.Serializable; +import java.rmi.Remote; + +public class InterfaceTemplate extends ExtensionTemplate implements Serializable, A, B { + // interface templates supports TypeReference + @Parameter + public CtTypeReference A; + + @Parameter + public Class B = Remote.class; + + private final Factory factory; + + public InterfaceTemplate(Factory factory) { + this.factory = factory; + A = getFactory().Type().createReference(Comparable.class); + } + + @Override + public Factory getFactory() { + return factory; + } +} +interface A{} +interface B{} \ No newline at end of file diff --git a/src/test/java/spoon/test/template/TemplateTest.java b/src/test/java/spoon/test/template/TemplateTest.java index 6c488194058..6a57b529ae2 100644 --- a/src/test/java/spoon/test/template/TemplateTest.java +++ b/src/test/java/spoon/test/template/TemplateTest.java @@ -20,6 +20,8 @@ import spoon.template.TemplateMatcher; import java.io.File; +import java.io.Serializable; +import java.rmi.Remote; import java.util.Date; import static org.junit.Assert.assertEquals; @@ -27,6 +29,7 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; +import static spoon.testing.utils.ModelUtils.build; public class TemplateTest { @@ -249,4 +252,29 @@ public void testExtensionBlock() throws Exception { assertEquals("spoon.test.template.Logger.enter(\"Logger\", \"enter\")", aTry.getBody().getStatement(0).toString()); assertTrue(aTry.getBody().getStatements().size() > 1); } + + @Test + public void testTemplateInterfaces() throws Exception { + Launcher spoon = new Launcher(); + Factory factory = spoon.getFactory(); + spoon.createCompiler( + factory, + SpoonResourceHelper.resources( + "./src/test/java/spoon/test/template/SubClass.java"), + SpoonResourceHelper + .resources( + "./src/test/java/spoon/test/template/InterfaceTemplate.java") + ) + .build(); + + CtClass superc = factory.Class().get(SuperClass.class); + InterfaceTemplate interfaceTemplate = new InterfaceTemplate(superc.getFactory()); + interfaceTemplate.apply(superc); + + assertEquals(3, superc.getSuperInterfaces().size()); + assertTrue(superc.getSuperInterfaces().contains(factory.Type().createReference(Comparable.class))); + assertTrue(superc.getSuperInterfaces().contains(factory.Type().createReference(Serializable.class))); + assertTrue(superc.getSuperInterfaces().contains(factory.Type().createReference(Remote.class))); + } + }