NodeListTest.java revision c7d2927625db7201d35d891e1751c91edfebd285
1package com.github.javaparser.ast; 2 3import com.github.javaparser.JavaParser; 4import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration; 5import com.github.javaparser.ast.body.FieldDeclaration; 6import com.github.javaparser.ast.observing.AstObserver; 7import com.github.javaparser.ast.observing.AstObserverAdapter; 8import com.github.javaparser.ast.observing.ObservableProperty; 9import com.github.javaparser.ast.type.PrimitiveType; 10import org.junit.Test; 11 12import java.util.*; 13 14import static org.junit.Assert.assertEquals; 15 16public class NodeListTest { 17 18 private AstObserver createObserver(List<String> changes) { 19 return new AstObserver() { 20 @Override 21 public void propertyChange(Node observedNode, ObservableProperty property, Object oldValue, Object newValue) { 22 changes.add(String.format("change of property %s for %s: from '%s' to '%s'", property, observedNode, oldValue, newValue )); 23 } 24 25 @Override 26 public void parentChange(Node observedNode, Node previousParent, Node newParent) { 27 changes.add(String.format("setting parent for %s: was %s, now is %s", observedNode, previousParent, newParent)); 28 } 29 30 @Override 31 public void listChange(NodeList observedNode, ListChangeType type, int index, Node nodeAddedOrRemoved) { 32 changes.add(String.format("'%s' %s in list at %d", nodeAddedOrRemoved, type, index)); 33 } 34 }; 35 } 36 37 private FieldDeclaration createIntField(String name) { 38 return new FieldDeclaration(EnumSet.noneOf(Modifier.class), PrimitiveType.INT_TYPE, name); 39 } 40 41 @Test 42 public void addAllWithoutIndex() { 43 List<String> changes = new LinkedList<>(); 44 String code = "class A { void foo(int p) { }}"; 45 CompilationUnit cu = JavaParser.parse(code); 46 ClassOrInterfaceDeclaration cd = cu.getClassByName("A"); 47 cd.getMembers().register(createObserver(changes)); 48 49 cd.getMembers().addAll(Arrays.asList(createIntField("a"), createIntField("b"), createIntField("c"))); 50 assertEquals(Arrays.asList("'int a;' ADDITION in list at 1", 51 "'int b;' ADDITION in list at 2", 52 "'int c;' ADDITION in list at 3"), changes); 53 } 54 55 @Test 56 public void addAllWithIndex() { 57 List<String> changes = new LinkedList<>(); 58 String code = "class A { void foo(int p) { }}"; 59 CompilationUnit cu = JavaParser.parse(code); 60 ClassOrInterfaceDeclaration cd = cu.getClassByName("A"); 61 cd.getMembers().register(createObserver(changes)); 62 63 cd.getMembers().addAll(0, Arrays.asList(createIntField("a"), createIntField("b"), createIntField("c"))); 64 assertEquals(Arrays.asList("'int a;' ADDITION in list at 0", 65 "'int b;' ADDITION in list at 1", 66 "'int c;' ADDITION in list at 2"), changes); 67 } 68 69 @Test 70 public void clear() { 71 List<String> changes = new LinkedList<>(); 72 String code = "class A { int a; int b; int c; }"; 73 CompilationUnit cu = JavaParser.parse(code); 74 ClassOrInterfaceDeclaration cd = cu.getClassByName("A"); 75 cd.getMembers().register(createObserver(changes)); 76 77 cd.getMembers().clear(); 78 assertEquals(Arrays.asList("'int a;' REMOVAL in list at 0", 79 "'int b;' REMOVAL in list at 0", 80 "'int c;' REMOVAL in list at 0"), changes); 81 } 82 83 @Test 84 public void set() { 85 List<String> changes = new LinkedList<>(); 86 String code = "class A { int a; int b; int c; }"; 87 CompilationUnit cu = JavaParser.parse(code); 88 ClassOrInterfaceDeclaration cd = cu.getClassByName("A"); 89 cd.getMembers().register(createObserver(changes)); 90 91 cd.getMembers().set(1, createIntField("d")); 92 assertEquals(Arrays.asList("'int b;' REMOVAL in list at 1", 93 "'int d;' ADDITION in list at 1"), changes); 94 } 95} 96