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 static com.github.javaparser.utils.Utils.EOL;
25import static org.junit.Assert.assertEquals;
26import static org.junit.Assert.assertFalse;
27import static org.junit.Assert.assertTrue;
28
29import java.util.List;
30import java.util.Map;
31
32import org.junit.After;
33import org.junit.Before;
34import org.junit.Test;
35
36import com.github.javaparser.ast.CompilationUnit;
37import com.github.javaparser.ast.Modifier;
38import com.github.javaparser.ast.body.AnnotationDeclaration;
39import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
40import com.github.javaparser.ast.body.EnumDeclaration;
41
42public class CompilationUnitBuildersTest {
43    private final CompilationUnit cu = new CompilationUnit();
44
45    @Test
46    public void testAddImport() {
47        cu.addImport(Map.class);
48        cu.addImport(Map.class);
49        cu.addImport(List.class);
50        assertEquals(2, cu.getImports().size());
51        cu.addImport("myImport");
52        assertEquals(3, cu.getImports().size());
53        assertEquals("import " + Map.class.getName() + ";" + EOL, cu.getImport(0).toString());
54        assertEquals("import " + List.class.getName() + ";" + EOL, cu.getImport(1).toString());
55        assertEquals("import myImport;" + EOL, cu.getImport(2).toString());
56    }
57
58    class testInnerClass {
59
60    }
61
62    @Test
63    public void testAddImportAnonymousClass() {
64        cu.addImport(testInnerClass.class);
65        assertEquals("import " + testInnerClass.class.getName().replace("$", ".") + ";" + EOL,
66                cu.getImport(0).toString());
67    }
68
69    @Test(expected = RuntimeException.class)
70    public void testAddImportInnerClass() {
71        Object anonymous = new Object() {
72
73        };
74        cu.addImport(anonymous.getClass());
75    }
76
77    @Test
78    public void testAddClass() {
79        ClassOrInterfaceDeclaration myClassDeclaration = cu.addClass("testClass", Modifier.PRIVATE);
80        assertEquals(1, cu.getTypes().size());
81        assertEquals("testClass", cu.getType(0).getNameAsString());
82        assertEquals(ClassOrInterfaceDeclaration.class, cu.getType(0).getClass());
83        assertTrue(myClassDeclaration.isPrivate());
84        assertFalse(myClassDeclaration.isInterface());
85    }
86
87    @Test
88    public void testAddInterface() {
89        ClassOrInterfaceDeclaration myInterfaceDeclaration = cu.addInterface("testInterface");
90        assertEquals(1, cu.getTypes().size());
91        assertEquals("testInterface", cu.getType(0).getNameAsString());
92        assertTrue(myInterfaceDeclaration.isPublic());
93        assertEquals(ClassOrInterfaceDeclaration.class, cu.getType(0).getClass());
94        assertTrue(myInterfaceDeclaration.isInterface());
95    }
96
97    @Test
98    public void testAddEnum() {
99        EnumDeclaration myEnumDeclaration = cu.addEnum("test");
100        assertEquals(1, cu.getTypes().size());
101        assertEquals("test", cu.getType(0).getNameAsString());
102        assertTrue(myEnumDeclaration.isPublic());
103        assertEquals(EnumDeclaration.class, cu.getType(0).getClass());
104    }
105
106    @Test
107    public void testAddAnnotationDeclaration() {
108        AnnotationDeclaration myAnnotationDeclaration = cu.addAnnotationDeclaration("test");
109        assertEquals(1, cu.getTypes().size());
110        assertEquals("test", cu.getType(0).getNameAsString());
111        assertTrue(myAnnotationDeclaration.isPublic());
112        assertEquals(AnnotationDeclaration.class, cu.getType(0).getClass());
113    }
114
115    @Test
116    public void testGetClassByName() {
117        assertEquals(cu.addClass("test"), cu.getClassByName("test").get());
118    }
119
120    @Test
121    public void testGetInterfaceByName() {
122        assertEquals(cu.addInterface("test"), cu.getInterfaceByName("test").get());
123    }
124
125    @Test
126    public void testGetEnumByName() {
127        assertEquals(cu.addEnum("test"), cu.getEnumByName("test").get());
128    }
129
130    @Test
131    public void testGetAnnotationDeclarationByName() {
132        assertEquals(cu.addAnnotationDeclaration("test"), cu.getAnnotationDeclarationByName("test").get());
133    }
134}
135