Search in sources :

Example 1 with Pozole

use of spoon.test.ctClass.testclasses.Pozole in project spoon by INRIA.

the class CtClassTest method testAllTypeReferencesToALocalTypeShouldNotStartWithNumber.

@Test
public void testAllTypeReferencesToALocalTypeShouldNotStartWithNumber() throws Exception {
    // contract: When we have a local type, we should never start with its number. But this
    // number isn't rewrite only in the class declaration but in all type references and in
    // the constructor.
    final CtType<Pozole> aPozole = buildClass(Pozole.class);
    final CtClass<?> cook = aPozole.getNestedType("1Cook");
    assertEquals("1Cook", cook.getSimpleName());
    assertEquals("spoon.test.ctClass.testclasses.Pozole$1Cook", cook.getQualifiedName());
    final Set<? extends CtConstructor<?>> constructors = cook.getConstructors();
    final String expectedConstructor = "public Cook() {" + System.lineSeparator() + "}";
    assertEquals(expectedConstructor, constructors.toArray(new CtConstructor[constructors.size()])[0].toString());
    assertEquals("final java.lang.Class<Cook> cookClass = Cook.class", cook.getMethod("m").getBody().getStatement(0).toString());
    Factory factory = aPozole.getFactory();
    aPozole.removeModifier(ModifierKind.PUBLIC);
    factory.Code().createCodeSnippetStatement(aPozole.toString()).compile();
    CtClass internalClass = factory.Core().createClass();
    internalClass.setSimpleName("Foo");
    cook.getParent(CtBlock.class).addStatement(internalClass);
    assertEquals("Foo", internalClass.getSimpleName());
    assertEquals("spoon.test.ctClass.testclasses.Pozole$Foo", internalClass.getQualifiedName());
    internalClass.addConstructor(factory.Core().createConstructor());
    CtConstructor cons = (CtConstructor) internalClass.getConstructors().toArray(new CtConstructor[0])[0];
    cons.setBody(factory.Core().createBlock());
    CtConstructorCall call = cook.getFactory().Core().createConstructorCall();
    call.setExecutable(cons.getReference());
    assertEquals(internalClass, internalClass.getReference().getDeclaration());
    assertEquals("new Foo()", call.toString());
    internalClass.insertAfter(call);
    factory.getEnvironment().setAutoImports(true);
    factory.Code().createCodeSnippetStatement(aPozole.toString()).compile();
    factory.getEnvironment().setAutoImports(false);
    factory.Code().createCodeSnippetStatement(aPozole.toString()).compile();
}
Also used : CtClass(spoon.reflect.declaration.CtClass) Pozole(spoon.test.ctClass.testclasses.Pozole) CtBlock(spoon.reflect.code.CtBlock) CtConstructorCall(spoon.reflect.code.CtConstructorCall) Factory(spoon.reflect.factory.Factory) CtConstructor(spoon.reflect.declaration.CtConstructor) Test(org.junit.Test)

Aggregations

Test (org.junit.Test)1 CtBlock (spoon.reflect.code.CtBlock)1 CtConstructorCall (spoon.reflect.code.CtConstructorCall)1 CtClass (spoon.reflect.declaration.CtClass)1 CtConstructor (spoon.reflect.declaration.CtConstructor)1 Factory (spoon.reflect.factory.Factory)1 Pozole (spoon.test.ctClass.testclasses.Pozole)1