package spoon.test.loop; import org.junit.Test; import spoon.reflect.code.CtBlock; import spoon.reflect.code.CtFor; import spoon.reflect.code.CtForEach; import spoon.reflect.code.CtLocalVariable; import spoon.reflect.code.CtLoop; import spoon.reflect.declaration.CtClass; import spoon.reflect.declaration.CtConstructor; import spoon.reflect.declaration.CtType; import spoon.reflect.visitor.filter.TypeFilter; import spoon.test.loop.testclasses.Condition; import spoon.test.loop.testclasses.Join; import spoon.testing.utils.ModelUtils; import java.io.File; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static spoon.testing.utils.ModelUtils.build; public class LoopTest { private static final String nl = System.lineSeparator(); @Test public void testAnnotationInForLoop() throws Exception { CtType<?> aFoo = ModelUtils.build(new File("./src/test/resources/spoon/test/loop/testclasses/")).Type().get("spoon.test.loop.testclasses.Foo"); CtFor aFor = aFoo.getMethod("m").getElements(new TypeFilter<>(CtFor.class)).get(0); assertEquals(1, ((CtLocalVariable) aFor.getForInit().get(0)).getType().getAnnotations().size()); assertEquals(1, ((CtLocalVariable) aFor.getForInit().get(1)).getType().getAnnotations().size()); CtForEach aForEach = aFoo.getMethod("m").getElements(new TypeFilter<>(CtForEach.class)).get(0); assertEquals(1, aForEach.getVariable().getType().getAnnotations().size()); } @Test public void testForeachShouldHaveAlwaysABlockInItsBody() throws Exception { final CtClass<Join> aType = build(Join.class, Condition.class).Class().get(Join.class); final CtConstructor<Join> joinCtConstructor = aType.getConstructors().stream().findFirst().get(); final CtLoop ctLoop = joinCtConstructor.getBody().getElements(new TypeFilter<>(CtLoop.class)).get(0); assertTrue(ctLoop.getBody() instanceof CtBlock); String expected = // "for (spoon.test.loop.testclasses.Condition<? super T> condition : conditions)" + nl // + " this.conditions.add(spoon.test.loop.testclasses.Join.notNull(condition));" + nl; assertEquals(expected, ctLoop.toString()); } }