1/*
2 * Copyright (C) 2007-2010 Júlio Vilmar Gesser.
3 * Copyright (C) 2011, 2013-2016 The JavaParser Team.
4 *
5 * This file is part of JavaParser.
6 *
7 * JavaParser can be used either under the terms of
8 * a) the GNU Lesser General Public License as published by
9 *     the Free Software Foundation, either version 3 of the License, or
10 *     (at your option) any later version.
11 * b) the terms of the Apache License
12 *
13 * You should have received a copy of both licenses in LICENCE.LGPL and
14 * LICENCE.APACHE. Please refer to those files for details.
15 *
16 * JavaParser is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 * GNU Lesser General Public License for more details.
20 */
21
22package com.github.javaparser.builders;
23
24import com.github.javaparser.ast.CompilationUnit;
25import com.github.javaparser.ast.Modifier;
26import com.github.javaparser.ast.body.*;
27import com.github.javaparser.ast.type.ClassOrInterfaceType;
28import org.junit.Test;
29
30import java.util.List;
31
32import static com.github.javaparser.JavaParser.parseClassOrInterfaceType;
33import static org.junit.Assert.assertEquals;
34import static org.junit.Assert.assertTrue;
35
36public class NodeWithMembersBuildersTest {
37    private final CompilationUnit cu = new CompilationUnit();
38    private final ClassOrInterfaceDeclaration classDeclaration = cu.addClass("test");
39
40    @Test
41    public void testAddField() {
42        FieldDeclaration addField = classDeclaration.addField(int.class, "fieldName", Modifier.PRIVATE);
43        assertEquals(1, classDeclaration.getMembers().size());
44        assertEquals(addField, classDeclaration.getMember(0));
45        assertEquals("fieldName", addField.getVariable(0).getNameAsString());
46    }
47
48    @Test
49    public void testAddMethod() {
50        MethodDeclaration addMethod = classDeclaration.addMethod("foo", Modifier.PUBLIC);
51        assertEquals(1, classDeclaration.getMembers().size());
52        assertEquals(addMethod, classDeclaration.getMember(0));
53        assertEquals("foo", addMethod.getNameAsString());
54    }
55
56    @Test
57    public void testAddCtor() {
58        ConstructorDeclaration addCtor = classDeclaration.addConstructor(Modifier.PUBLIC);
59        assertEquals(1, classDeclaration.getMembers().size());
60        assertEquals(addCtor, classDeclaration.getMember(0));
61        assertEquals(classDeclaration.getName(), addCtor.getName());
62    }
63
64    @Test
65    public void testAddInitializers() {
66        classDeclaration.addInitializer();
67        assertEquals(1, classDeclaration.getMembers().size());
68        assertEquals(InitializerDeclaration.class, classDeclaration.getMember(0).getClass());
69
70        classDeclaration.addStaticInitializer();
71        assertEquals(2, classDeclaration.getMembers().size());
72        assertEquals(InitializerDeclaration.class, classDeclaration.getMember(0).getClass());
73    }
74
75    @Test
76    public void testGetMethodsWithName() {
77        MethodDeclaration addMethod = classDeclaration.addMethod("foo", Modifier.PUBLIC);
78        MethodDeclaration addMethod2 = classDeclaration.addMethod("foo", Modifier.PUBLIC).addParameter(int.class, "overload");
79        List<MethodDeclaration> methodsByName = classDeclaration.getMethodsByName("foo");
80        assertEquals(2, methodsByName.size());
81        assertTrue(methodsByName.contains(addMethod));
82        assertTrue(methodsByName.contains(addMethod2));
83    }
84
85    @Test
86    public void testGetMethods() {
87        MethodDeclaration addMethod = classDeclaration.addMethod("foo", Modifier.PUBLIC);
88        MethodDeclaration addMethod2 = classDeclaration.addMethod("foo", Modifier.PUBLIC).addParameter(int.class, "overload");
89
90        List<MethodDeclaration> methods = classDeclaration.getMethods();
91
92        assertEquals(2, methods.size());
93        assertTrue(methods.contains(addMethod));
94        assertTrue(methods.contains(addMethod2));
95    }
96
97    @Test
98    public void testGetMethodsWithParameterTypes() {
99        classDeclaration.addMethod("foo", Modifier.PUBLIC);
100        MethodDeclaration addMethod2 = classDeclaration.addMethod("foo", Modifier.PUBLIC).addParameter(int.class, "overload");
101        ClassOrInterfaceType type = parseClassOrInterfaceType("List");
102        type.setTypeArguments(parseClassOrInterfaceType("String"));
103        MethodDeclaration methodWithListParam = classDeclaration.addMethod("fooList", Modifier.PUBLIC).addParameter(type, "overload");
104        MethodDeclaration addMethod3 = classDeclaration.addMethod("foo2", Modifier.PUBLIC).addParameter(int.class, "overload");
105
106        List<MethodDeclaration> methodsByParam = classDeclaration.getMethodsByParameterTypes(int.class);
107        assertEquals(2, methodsByParam.size());
108        assertTrue(methodsByParam.contains(addMethod2));
109        assertTrue(methodsByParam.contains(addMethod3));
110        List<MethodDeclaration> methodsByParam2 = classDeclaration.getMethodsByParameterTypes("List<String>");
111        assertEquals(1, methodsByParam2.size());
112        assertTrue(methodsByParam2.contains(methodWithListParam));
113    }
114
115    @Test
116    public void testGetFieldWithName() {
117        FieldDeclaration addField = classDeclaration.addField(int.class, "fieldName", Modifier.PRIVATE);
118        classDeclaration.addField(float.class, "secondField", Modifier.PRIVATE);
119        FieldDeclaration fieldByName = classDeclaration.getFieldByName("fieldName").get();
120        assertEquals(addField, fieldByName);
121    }
122
123    @Test
124    public void testGetFields() {
125        FieldDeclaration firstField = classDeclaration.addField(int.class, "fieldName", Modifier.PRIVATE);
126        FieldDeclaration secondField = classDeclaration.addField(float.class, "secondField", Modifier.PRIVATE);
127
128        List<FieldDeclaration> fields = classDeclaration.getFields();
129
130        assertTrue(fields.contains(firstField));
131        assertTrue(fields.contains(secondField));
132    }
133}
134