Search in sources :

Example 1 with SubstituteLiteralTemplate

use of spoon.test.template.testclasses.SubstituteLiteralTemplate in project spoon by INRIA.

the class TemplateTest method substituteStringLiteral.

@Test
public void substituteStringLiteral() throws Exception {
    // contract: the substitution of literals is possible too
    // contract: the template engine supports substitution of root element
    Launcher spoon = new Launcher();
    spoon.addTemplateResource(new FileSystemFile("./src/test/java/spoon/test/template/testclasses/SubstituteLiteralTemplate.java"));
    spoon.buildModel();
    Factory factory = spoon.getFactory();
    {
        // contract: String value is substituted in String literal
        final CtClass<?> result = (CtClass<?>) new SubstituteLiteralTemplate("value1").apply(factory.createClass());
        assertEquals("java.lang.String stringField1 = \"value1\";", result.getField("stringField1").toString());
        assertEquals("java.lang.String stringField2 = \"Substring value1 is substituted too - value1\";", result.getField("stringField2").toString());
        // contract: the parameter of type string replaces only method name
        assertEquals("java.lang.System.out.println(spoon.test.template.testclasses.Params.value1())", result.getMethodsByName("m1").get(0).getBody().getStatement(0).toString());
    }
    {
        // contract: String Literal value is substituted in String literal
        final CtClass<?> result = (CtClass<?>) new SubstituteLiteralTemplate(factory.createLiteral("value2")).apply(factory.createClass());
        assertEquals("java.lang.String stringField1 = \"value2\";", result.getField("stringField1").toString());
        assertEquals("java.lang.String stringField2 = \"Substring value2 is substituted too - value2\";", result.getField("stringField2").toString());
        // contract: the parameter of type String literal replaces whole invocation
        assertEquals("java.lang.System.out.println(\"value2\")", result.getMethodsByName("m1").get(0).getBody().getStatement(0).toString());
    }
    {
        // contract: simple name of type reference is substituted in String literal
        final CtClass<?> result = (CtClass<?>) new SubstituteLiteralTemplate(factory.Type().createReference("some.ignored.package.TypeName")).apply(factory.createClass());
        assertEquals("java.lang.String stringField1 = \"TypeName\";", result.getField("stringField1").toString());
        assertEquals("java.lang.String stringField2 = \"Substring TypeName is substituted too - TypeName\";", result.getField("stringField2").toString());
        // contract type reference is substituted in invocation as class access
        assertEquals("java.lang.System.out.println(some.ignored.package.TypeName.class)", result.getMethodsByName("m1").get(0).getBody().getStatement(0).toString());
    }
    {
        // contract: number literal is substituted in String literal as number converted to string
        final CtClass<?> result = (CtClass<?>) new SubstituteLiteralTemplate(factory.createLiteral(7)).apply(factory.createClass());
        assertEquals("java.lang.String stringField1 = \"7\";", result.getField("stringField1").toString());
        assertEquals("java.lang.String stringField2 = \"Substring 7 is substituted too - 7\";", result.getField("stringField2").toString());
        // contract number literal is substituted in invocation as number literal
        assertEquals("java.lang.System.out.println(7)", result.getMethodsByName("m1").get(0).getBody().getStatement(0).toString());
    }
}
Also used : CtClass(spoon.reflect.declaration.CtClass) Launcher(spoon.Launcher) Factory(spoon.reflect.factory.Factory) FileSystemFile(spoon.support.compiler.FileSystemFile) SubstituteLiteralTemplate(spoon.test.template.testclasses.SubstituteLiteralTemplate) Test(org.junit.Test)

Aggregations

Test (org.junit.Test)1 Launcher (spoon.Launcher)1 CtClass (spoon.reflect.declaration.CtClass)1 Factory (spoon.reflect.factory.Factory)1 FileSystemFile (spoon.support.compiler.FileSystemFile)1 SubstituteLiteralTemplate (spoon.test.template.testclasses.SubstituteLiteralTemplate)1