package org.walkmod.javalang.constraints;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.junit.Assert;
import org.junit.Test;
import org.walkmod.javalang.ASTManager;
import org.walkmod.javalang.ast.CompilationUnit;
import org.walkmod.javalang.ast.body.ClassOrInterfaceDeclaration;
import org.walkmod.javalang.ast.body.FieldDeclaration;
import org.walkmod.javalang.ast.expr.MethodCallExpr;
import org.walkmod.javalang.visitors.VoidVisitorAdapter;
import org.walkmod.modelchecker.Constraint;
public class NodesPerLineConstraintTest {
@Test
public void testNonConstrained() throws Exception {
CompilationUnit cu = ASTManager.parse("public class Foo{}", false);
List<Constraint> constraints = new LinkedList<Constraint>();
NodesPerLineConstraint cons = new NodesPerLineConstraint();
cons.addLine(1, 1);
constraints.add(cons);
cu.setConstraints(constraints);
VoidVisitorAdapter<Map<String, Object>> visitor = new VoidVisitorAdapter<Map<String, Object>>() {
@Override
public void visit(ClassOrInterfaceDeclaration n, Map<String, Object> ctx) {
ctx.put("visited", true);
}
};
Map<String, Object> ctx = new HashMap<String, Object>();
cu.accept(visitor, ctx);
Assert.assertTrue(ctx.containsKey("visited"));
}
@Test
public void testConstrained() throws Exception {
CompilationUnit cu = ASTManager.parse("\n\npublic class Foo{}", false);
List<Constraint> constraints = new LinkedList<Constraint>();
NodesPerLineConstraint cons = new NodesPerLineConstraint();
cons.addLine(1, 1);
constraints.add(cons);
cu.setConstraints(constraints);
VoidVisitorAdapter<Map<String, Object>> visitor = new VoidVisitorAdapter<Map<String, Object>>() {
@Override
public void visit(ClassOrInterfaceDeclaration n, Map<String, Object> ctx) {
ctx.put("visited", true);
}
};
Map<String, Object> ctx = new HashMap<String, Object>();
cu.accept(visitor, ctx);
Assert.assertFalse(ctx.containsKey("visited"));
}
@Test
public void testNotConstrainedInnerNodes() throws Exception{
CompilationUnit cu = ASTManager.parse("public class Foo{\n public void bar() {\n System.out.println(\"hello\"); \n } \n}", false);
List<Constraint> constraints = new LinkedList<Constraint>();
NodesPerLineConstraint cons = new NodesPerLineConstraint();
cons.addLine(3, 3);
constraints.add(cons);
cu.setConstraints(constraints);
VoidVisitorAdapter<Map<String, Object>> visitor = new VoidVisitorAdapter<Map<String, Object>>() {
@Override
public void visit(MethodCallExpr n, Map<String, Object> ctx) {
ctx.put("visited", true);
}
};
Map<String, Object> ctx = new HashMap<String, Object>();
cu.accept(visitor, ctx);
Assert.assertTrue(ctx.containsKey("visited"));
}
@Test
public void testConstrainedInnerNodes() throws Exception{
CompilationUnit cu = ASTManager.parse("public class Foo{\n public void bar() {\n System.out.println(\"hello\"); \n public String name; \n} \n}", false);
List<Constraint> constraints = new LinkedList<Constraint>();
NodesPerLineConstraint cons = new NodesPerLineConstraint();
cons.addLine(3, 3);
constraints.add(cons);
cu.setConstraints(constraints);
VoidVisitorAdapter<Map<String, Object>> visitor = new VoidVisitorAdapter<Map<String, Object>>() {
@Override
public void visit(FieldDeclaration n, Map<String, Object> ctx) {
ctx.put("visited", true);
}
};
Map<String, Object> ctx = new HashMap<String, Object>();
cu.accept(visitor, ctx);
Assert.assertFalse(ctx.containsKey("visited"));
}
}