NodeListTest.java revision ab4f6a5743de6a9fbb09da9d6a00678bbc2cd3d1
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    @Test
97    public void removeNode() {
98        List<String> changes = new LinkedList<>();
99        String code = "class A { int a; int b; int c; int d; int e; }";
100        CompilationUnit cu = JavaParser.parse(code);
101        ClassOrInterfaceDeclaration cd = cu.getClassByName("A");
102        cd.getMembers().register(createObserver(changes));
103
104        cd.getMembers().remove(cd.getFieldByName("c"));
105        assertEquals(Arrays.asList("'int c;' REMOVAL in list at 2"), changes);
106    }
107
108    @Test
109    public void removeObject() {
110        List<String> changes = new LinkedList<>();
111        String code = "class A { int a; int b; int c; int d; int e; }";
112        CompilationUnit cu = JavaParser.parse(code);
113        ClassOrInterfaceDeclaration cd = cu.getClassByName("A");
114        cd.getMembers().register(createObserver(changes));
115
116        cd.getMembers().remove("hi");
117        assertEquals(Arrays.asList(), changes);
118    }
119
120    @Test
121    public void removeAll() {
122        List<String> changes = new LinkedList<>();
123        String code = "class A { int a; int b; int c; int d; int e; }";
124        CompilationUnit cu = JavaParser.parse(code);
125        ClassOrInterfaceDeclaration cd = cu.getClassByName("A");
126        cd.getMembers().register(createObserver(changes));
127
128        cd.getMembers().removeAll(Arrays.asList(cd.getFieldByName("b"), "foo", cd.getFieldByName("d")));
129        assertEquals(Arrays.asList("'int b;' REMOVAL in list at 1",
130                "'int d;' REMOVAL in list at 2"), changes);
131    }
132}
133