diff --git a/src/test/java/spoon/test/template/TemplateTest.java b/src/test/java/spoon/test/template/TemplateTest.java index d7f70a71c5b..4611274f744 100644 --- a/src/test/java/spoon/test/template/TemplateTest.java +++ b/src/test/java/spoon/test/template/TemplateTest.java @@ -28,9 +28,11 @@ import spoon.support.compiler.FileSystemFolder; import spoon.support.template.Parameters; import spoon.support.template.SubstitutionVisitor; +import spoon.template.ExpressionTemplate; import spoon.template.Substitution; import spoon.template.TemplateMatcher; import spoon.template.TemplateParameter; +import spoon.test.template.testclasses.AnExpressionTemplate; import spoon.test.template.testclasses.AnotherFieldAccessTemplate; import spoon.test.template.testclasses.ArrayAccessTemplate; import spoon.test.template.testclasses.FieldAccessOfInnerClassTemplate; @@ -793,6 +795,25 @@ public void testStatementTemplateRootSubstitution() throws Exception { assertEquals("java.lang.String s = \"Spoon is cool!\"", ((CtBlock)result).getStatement(0).toString()); } + @Test + public void testExpressionTemplate() throws Exception { + //contract: the template engine supports expression templates + Launcher spoon = new Launcher(); + spoon.addTemplateResource(new FileSystemFile("./src/test/java/spoon/test/template/testclasses/AnExpressionTemplate.java")); + + spoon.buildModel(); + Factory factory = spoon.getFactory(); + + CtClass> templateClass = factory.Class().get(AnExpressionTemplate.class); + + assertEquals("new java.lang.String(exp.S())", ExpressionTemplate.getExpression(templateClass).toString()); + + + CtClass resultKlass = factory.Class().create("Result"); + CtExpression result = new AnExpressionTemplate(factory.createCodeSnippetExpression("\"Spoon is cool!\"")).apply(resultKlass); + assertEquals("new java.lang.String(\"Spoon is cool!\")", result.toString()); + } + @Test public void createTypeFromTemplate() throws Exception { //contract: the Substitution API provides a method createTypeFromTemplate diff --git a/src/test/java/spoon/test/template/testclasses/AnExpressionTemplate.java b/src/test/java/spoon/test/template/testclasses/AnExpressionTemplate.java new file mode 100644 index 00000000000..708a4887fbb --- /dev/null +++ b/src/test/java/spoon/test/template/testclasses/AnExpressionTemplate.java @@ -0,0 +1,25 @@ +package spoon.test.template.testclasses; + +import spoon.reflect.code.CtBlock; +import spoon.reflect.code.CtExpression; +import spoon.template.ExpressionTemplate; +import spoon.template.Local; +import spoon.template.Parameter; +import spoon.template.TemplateParameter; + +public class AnExpressionTemplate extends ExpressionTemplate { + + @Override + public String expression() throws Throwable { + return new String(exp.S()); + } + + @Parameter + TemplateParameter exp; + + @Local + public AnExpressionTemplate(CtExpression block) { + this.exp = block; + } + +} \ No newline at end of file