package spoon.test.ctCase;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static spoon.testing.utils.ModelUtils.build;
import java.util.List;
import org.junit.Test;
import spoon.reflect.code.CtCase;
import spoon.reflect.code.CtStatement;
import spoon.reflect.declaration.CtElement;
import spoon.reflect.factory.Factory;
import spoon.reflect.visitor.Query;
import spoon.reflect.visitor.filter.TypeFilter;
@SuppressWarnings({"unchecked", "rawtypes"})
public class SwitchCaseTest {
@Test
public void insertAfterStatementInSwitchCaseWithoutException() throws Exception {
String packageName = "spoon.test.ctCase";
String className = "ClassWithSwitchExample";
Factory factory = factoryFor(packageName, className);
List<CtCase> elements = elementsOfType(CtCase.class, factory);
assertEquals(3, elements.size());
CtCase firstCase = elements.get(0);
List<CtStatement> statements = firstCase.getStatements();
assertEquals(2, statements.size());
CtStatement newStatement = factory.Code().createCodeSnippetStatement("result = 0");
statements.get(0).insertAfter(newStatement);
statements = firstCase.getStatements();
assertEquals(3, statements.size());
assertTrue(statements.get(1) == newStatement);
}
@Test
public void insertBeforeStatementInSwitchCaseWithoutException() throws Exception {
String packageName = "spoon.test.ctCase";
String className = "ClassWithSwitchExample";
Factory factory = factoryFor(packageName, className);
List<CtCase> elements = elementsOfType(CtCase.class, factory);
assertEquals(3, elements.size());
CtCase firstCase = elements.get(0);
List<CtStatement> statements = firstCase.getStatements();
assertEquals(2, statements.size());
CtStatement newStatement = factory.Code().createCodeSnippetStatement("result = 0");
statements.get(0).insertBefore(newStatement);
statements = firstCase.getStatements();
assertEquals(3, statements.size());
assertTrue(statements.get(0) == newStatement);
}
private <T extends CtElement> List<T> elementsOfType(Class<T> type, Factory factory) {
return (List) Query.getElements(factory, new TypeFilter<>(type));
}
private Factory factoryFor(String packageName, String className) throws Exception {
return build(packageName, className).getFactory();
}
}