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