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