NodeListTest.java revision 3e8757e510df2bbdb1ef8bedf92538b17a5e36c6
13e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassettipackage com.github.javaparser.ast; 23e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti 33e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassettiimport com.github.javaparser.JavaParser; 43e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassettiimport com.github.javaparser.ast.body.ClassOrInterfaceDeclaration; 53e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassettiimport com.github.javaparser.ast.body.FieldDeclaration; 63e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassettiimport com.github.javaparser.ast.observing.AstObserver; 73e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassettiimport com.github.javaparser.ast.observing.AstObserverAdapter; 83e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassettiimport com.github.javaparser.ast.observing.ObservableProperty; 93e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassettiimport com.github.javaparser.ast.type.PrimitiveType; 103e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassettiimport org.junit.Test; 113e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti 123e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassettiimport java.util.*; 133e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti 143e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassettiimport static org.junit.Assert.assertEquals; 153e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti 163e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassettipublic class NodeListTest { 173e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti 183e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti private AstObserver createObserver(List<String> changes) { 193e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti return new AstObserver() { 203e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti @Override 213e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti public void propertyChange(Node observedNode, ObservableProperty property, Object oldValue, Object newValue) { 223e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti changes.add(String.format("change of property %s for %s: from '%s' to '%s'", property, observedNode, oldValue, newValue )); 233e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti } 243e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti 253e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti @Override 263e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti public void parentChange(Node observedNode, Node previousParent, Node newParent) { 273e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti changes.add(String.format("setting parent for %s: was %s, now is %s", observedNode, previousParent, newParent)); 283e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti } 293e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti 303e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti @Override 313e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti public void listChange(NodeList observedNode, ListChangeType type, int index, Node nodeAddedOrRemoved) { 323e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti changes.add(String.format("'%s' %s in list '%s' at %d", nodeAddedOrRemoved, type, nodeAddedOrRemoved, index)); 333e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti } 343e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti }; 353e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti } 363e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti 373e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti private FieldDeclaration createIntField(String name) { 383e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti return new FieldDeclaration(EnumSet.noneOf(Modifier.class), PrimitiveType.INT_TYPE, name); 393e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti } 403e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti 413e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti @Test 423e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti public void addAllWithoutIndex() { 433e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti List<String> changes = new LinkedList<>(); 443e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti String code = "class A { void foo(int p) { }}"; 453e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti CompilationUnit cu = JavaParser.parse(code); 463e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti ClassOrInterfaceDeclaration cd = cu.getClassByName("A"); 473e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti cd.getMembers().register(createObserver(changes)); 483e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti 493e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti cd.getMembers().addAll(Arrays.asList(createIntField("a"), createIntField("b"), createIntField("c"))); 503e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti assertEquals(Arrays.asList("'int a;' ADDITION in list 'int a;' at 1", 513e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti "'int b;' ADDITION in list 'int b;' at 2", 523e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti "'int c;' ADDITION in list 'int c;' at 3"), changes); 533e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti } 543e8757e510df2bbdb1ef8bedf92538b17a5e36c6Federico Tomassetti} 55