package spoon.test.model;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static spoon.testing.utils.ModelUtils.createFactory;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import spoon.reflect.code.CtBlock;
import spoon.reflect.code.CtCodeSnippetStatement;
import spoon.reflect.code.CtStatement;
import spoon.reflect.declaration.CtClass;
import spoon.reflect.declaration.CtMethod;
import spoon.reflect.factory.Factory;
public class BlockTest {
@Test
public void testIterationStatements() {
Factory factory = createFactory();
CtClass<?> clazz = factory
.Code()
.createCodeSnippetStatement(
"" + "class X {" + "public void foo() {"
+ " int x=0;int y=0;"
+ "}};")
.compile();
CtMethod<?> foo = (CtMethod<?>) clazz.getMethods().toArray()[0];
CtBlock<?> body = foo.getBody();
assertEquals(2, body.getStatements().size());
List<CtStatement> l = new ArrayList<CtStatement>();
// this compiles (thanks to the new CtBlock extends CtStatementList)
for (CtStatement s : body) {
l.add(s);
}
assertTrue(body.getStatements().equals(l));
}
@Test
public void testAddEmptyBlock() {
// specifies a bug found by Benoit Cornu on August 7 2014
Factory factory = createFactory();
CtClass<?> clazz = factory
.Code()
.createCodeSnippetStatement(
"" + "class X {" + "public void foo() {" + " "
+ "}};")
.compile();
CtMethod<?> foo = (CtMethod<?>) clazz.getMethods().toArray()[0];
CtBlock<?> body = foo.getBody(); // empty block (immutable EMPTY_LIST())
CtCodeSnippetStatement snippet = factory.Core()
.createCodeSnippetStatement();
List<CtStatement> statements = body.getStatements();
statements.add(snippet);
assertEquals(snippet, body.getStatement(0));
// plus implicit assertion: no exception
CtCodeSnippetStatement snippet2 = factory.Core()
.createCodeSnippetStatement();
body.getStatements().add(snippet2);
assertEquals(snippet2, body.getStatement(1));
assertEquals(2, body.getStatements().size());
CtCodeSnippetStatement snippet3 = factory.Core()
.createCodeSnippetStatement();
statements.add(snippet3);
assertEquals(snippet3, body.getStatement(2));
assertEquals(3, body.getStatements().size());
}
}