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