AnnotationMemberDeclarationTransformationsTest.java revision ec6b8a24af3e65b6d869ee96d00daca12f7247fe
175565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti/*
275565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti * Copyright (C) 2007-2010 Júlio Vilmar Gesser.
375565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti * Copyright (C) 2011, 2013-2016 The JavaParser Team.
475565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti *
575565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti * This file is part of JavaParser.
675565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti *
775565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti * JavaParser can be used either under the terms of
875565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti * a) the GNU Lesser General Public License as published by
975565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti *     the Free Software Foundation, either version 3 of the License, or
1075565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti *     (at your option) any later version.
1175565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti * b) the terms of the Apache License
1275565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti *
1375565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti * You should have received a copy of both licenses in LICENCE.LGPL and
1475565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti * LICENCE.APACHE. Please refer to those files for details.
1575565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti *
1675565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti * JavaParser is distributed in the hope that it will be useful,
1775565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti * but WITHOUT ANY WARRANTY; without even the implied warranty of
1875565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1975565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti * GNU Lesser General Public License for more details.
2075565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti */
2175565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti
22140ec181289990affd436cc4320c9abb59314f8aFederico Tomassettipackage com.github.javaparser.printer.lexicalpreservation.transformations.ast.body;
2375565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti
2475565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassettiimport com.github.javaparser.ast.Modifier;
251ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassettiimport com.github.javaparser.ast.NodeList;
2675565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassettiimport com.github.javaparser.ast.body.AnnotationMemberDeclaration;
27907aca107a26ba902127213aa530261d4d40ea77Federico Tomassettiimport com.github.javaparser.ast.expr.IntegerLiteralExpr;
281ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassettiimport com.github.javaparser.ast.expr.Name;
291ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassettiimport com.github.javaparser.ast.expr.NormalAnnotationExpr;
30140ec181289990affd436cc4320c9abb59314f8aFederico Tomassettiimport com.github.javaparser.printer.lexicalpreservation.AbstractLexicalPreservingTest;
3175565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassettiimport org.junit.Test;
3275565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti
3375565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassettiimport java.io.IOException;
3475565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassettiimport java.util.EnumSet;
3575565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti
3675565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassettiimport static org.junit.Assert.assertEquals;
37530169d1045593c598adb7ab63334c62de2fa141Federico Tomassettiimport static org.junit.Assert.assertTrue;
3875565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti
3975565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti/**
4075565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti * Transforming AnnotationMemberDeclaration and verifying the LexicalPreservation works as expected.
4175565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti */
4275565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassettipublic class AnnotationMemberDeclarationTransformationsTest extends AbstractLexicalPreservingTest {
4375565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti
44c5c19b4b5f1a3c3b4ed52001f0cd28225e211ca7Federico Tomassetti    protected AnnotationMemberDeclaration consider(String code) {
4575565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti        considerCode("@interface AD { " + code + " }");
4675565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti        return (AnnotationMemberDeclaration)cu.getAnnotationDeclarationByName("AD").get().getMember(0);
4775565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti    }
4875565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti
49907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti    // Name
50907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti
5175565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti    @Test
5275565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti    public void changingName() throws IOException {
5375565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti        AnnotationMemberDeclaration md = consider("int foo();");
5475565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti        md.setName("bar");
5575565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti        assertTransformedToString("int bar();", md);
5675565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti    }
5775565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti
5875565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti    // Type
5975565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti
60907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti    @Test
61907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti    public void changingType() throws IOException {
62907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti        AnnotationMemberDeclaration md = consider("int foo();");
63907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti        md.setType("String");
64907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti        assertTransformedToString("String foo();", md);
65907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti    }
66907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti
6775565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti    // Modifiers
6875565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti
69907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti    @Test
70907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti    public void addingModifiers() throws IOException {
71907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti        AnnotationMemberDeclaration md = consider("int foo();");
72907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti        md.setModifiers(EnumSet.of(Modifier.PUBLIC));
73907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti        assertTransformedToString("public int foo();", md);
74907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti    }
75907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti
76907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti    @Test
77907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti    public void removingModifiers() throws IOException {
78907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti        AnnotationMemberDeclaration md = consider("public int foo();");
79907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti        md.setModifiers(EnumSet.noneOf(Modifier.class));
80907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti        assertTransformedToString("int foo();", md);
81907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti    }
82907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti
83907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti    @Test
84907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti    public void replacingModifiers() throws IOException {
85907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti        AnnotationMemberDeclaration md = consider("public int foo();");
86907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti        md.setModifiers(EnumSet.of(Modifier.PROTECTED));
87907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti        assertTransformedToString("protected int foo();", md);
88907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti    }
89907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti
9075565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti    // Default value
9175565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti
92907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti    @Test
93907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti    public void addingDefaultValue() throws IOException {
94907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti        AnnotationMemberDeclaration md = consider("int foo();");
95907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti        md.setDefaultValue(new IntegerLiteralExpr("10"));
96907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti        assertTransformedToString("int foo() default 10;", md);
97907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti    }
98907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti
99907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti    @Test
100907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti    public void removingDefaultValue() throws IOException {
101907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti        AnnotationMemberDeclaration md = consider("int foo() default 10;");
102907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti        assertEquals(true, md.getDefaultValue().get().remove());
103907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti        assertTransformedToString("int foo();", md);
104907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti    }
105907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti
106907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti    @Test
107907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti    public void replacingDefaultValue() throws IOException {
108907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti        AnnotationMemberDeclaration md = consider("int foo() default 10;");
109907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti        md.setDefaultValue(new IntegerLiteralExpr("11"));
110907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti        assertTransformedToString("int foo() default 11;", md);
111907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti    }
112907aca107a26ba902127213aa530261d4d40ea77Federico Tomassetti
11375565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti    // Annotations
11475565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti
1151ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti    @Test
1161ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti    public void addingAnnotation() throws IOException {
1171ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti        AnnotationMemberDeclaration it = consider("int foo();");
1181ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti        it.addAnnotation("myAnno");
1191ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti        assertTransformedToString("@myAnno()\nint foo();", it);
1201ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti    }
1211ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti
1221ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti    @Test
1231ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti    public void removingAnnotationOnSomeLine() throws IOException {
1241ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti        AnnotationMemberDeclaration it = consider("@myAnno int foo();");
1251ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti        it.getAnnotations().remove(0);
1261ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti        assertTransformedToString("int foo();", it);
1271ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti    }
1281ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti
1291ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti    @Test
1301ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti    public void removingAnnotationOnPrevLine() throws IOException {
1311ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti        AnnotationMemberDeclaration it = consider("@myAnno\nint foo();");
1321ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti        it.getAnnotations().remove(0);
1331ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti        assertTransformedToString("int foo();", it);
1341ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti    }
1351ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti
1361ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti    @Test
1371ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti    public void replacingAnnotation() throws IOException {
1381ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti        AnnotationMemberDeclaration it = consider("@myAnno int foo();");
1391ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti        it.getAnnotations().set(0, new NormalAnnotationExpr(new Name("myOtherAnno"), new NodeList<>()));
1401ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti        assertTransformedToString("@myOtherAnno()\nint foo();", it);
1411ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti    }
1421ad5ce425842135b0e71f371a54e7ce7446fdc4dFederico Tomassetti
14375565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti    // Javadoc
14475565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti
145530169d1045593c598adb7ab63334c62de2fa141Federico Tomassetti    @Test
146530169d1045593c598adb7ab63334c62de2fa141Federico Tomassetti    public void addingJavadoc() throws IOException {
147530169d1045593c598adb7ab63334c62de2fa141Federico Tomassetti        AnnotationMemberDeclaration it = consider("int foo();");
148ec6b8a24af3e65b6d869ee96d00daca12f7247feFederico Tomassetti        it.setJavadocComment("Cool this annotation!");
149530169d1045593c598adb7ab63334c62de2fa141Federico Tomassetti        assertTransformedToString("@interface AD { /**Cool this annotation!*/\n" +
150530169d1045593c598adb7ab63334c62de2fa141Federico Tomassetti                "int foo(); }", it.getParentNode().get());
151530169d1045593c598adb7ab63334c62de2fa141Federico Tomassetti    }
152530169d1045593c598adb7ab63334c62de2fa141Federico Tomassetti
153530169d1045593c598adb7ab63334c62de2fa141Federico Tomassetti    @Test
154530169d1045593c598adb7ab63334c62de2fa141Federico Tomassetti    public void removingJavadoc() throws IOException {
155530169d1045593c598adb7ab63334c62de2fa141Federico Tomassetti        AnnotationMemberDeclaration it = consider("/**Cool this annotation!*/ int foo();");
156ec6b8a24af3e65b6d869ee96d00daca12f7247feFederico Tomassetti        assertTrue(it.getJavadocComment().remove());
157530169d1045593c598adb7ab63334c62de2fa141Federico Tomassetti        assertTransformedToString("@interface AD {  int foo(); }", it.getParentNode().get());
158530169d1045593c598adb7ab63334c62de2fa141Federico Tomassetti    }
159530169d1045593c598adb7ab63334c62de2fa141Federico Tomassetti
160530169d1045593c598adb7ab63334c62de2fa141Federico Tomassetti    @Test
161530169d1045593c598adb7ab63334c62de2fa141Federico Tomassetti    public void replacingJavadoc() throws IOException {
162530169d1045593c598adb7ab63334c62de2fa141Federico Tomassetti        AnnotationMemberDeclaration it = consider("/**Cool this annotation!*/ int foo();");
163ec6b8a24af3e65b6d869ee96d00daca12f7247feFederico Tomassetti        it.setJavadocComment("Super extra cool this annotation!!!");
164530169d1045593c598adb7ab63334c62de2fa141Federico Tomassetti        assertTransformedToString("@interface AD { /**Super extra cool this annotation!!!*/ int foo(); }", it.getParentNode().get());
165530169d1045593c598adb7ab63334c62de2fa141Federico Tomassetti    }
166530169d1045593c598adb7ab63334c62de2fa141Federico Tomassetti
16775565287a0809c7734b1e8ed12e18fd27c0f68caFederico Tomassetti}
168