/* * See the NOTICE file distributed with this work for additional * information regarding copyright ownership. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.xwiki.tool.checkstyle; import java.io.File; import java.io.IOException; import org.junit.Before; import org.junit.Test; import com.puppycrawl.tools.checkstyle.BaseCheckTestSupport; import com.puppycrawl.tools.checkstyle.DefaultConfiguration; import com.puppycrawl.tools.checkstyle.utils.CommonUtils; /** * Unit tests for {@link UnstableAnnotationCheck}. * * @version $Id: ad9bf471789a5816fc156ee260b9bb898c37b809 $ * @since 8.1M1 */ public class UnstableAnnotationCheckTest extends BaseCheckTestSupport { private DefaultConfiguration checkConfig; @Before public void setUp() { this.checkConfig = createCheckConfig(UnstableAnnotationCheck.class); this.checkConfig.addAttribute("currentVersion", "8.1-SNAPSHOT"); } @Test public void checkWithNoSinceJavadocTagAtClassLevel() throws Exception { final String[] expected = { "24:1: There is an @Unstable annotation for [org.xwiki.tool.checkstyle.test." + "TestClassWithNoSinceJavadocTagAtClassLevel] but the @since javadoc tag is missing, you must add it!" }; verify(this.checkConfig, getPath("TestClassWithNoSinceJavadocTagAtClassLevel.java"), expected); } @Test public void checkWithNoSinceJavadocTagAtMethodLevel() throws Exception { final String[] expected = { "26:5: There is an @Unstable annotation for [org.xwiki.tool.checkstyle.test." + "TestClassWithNoSinceJavadocTagAtMethodLevel.method()] but the @since javadoc tag is missing, you must " + "add it!" }; verify(this.checkConfig, getPath("TestClassWithNoSinceJavadocTagAtMethodLevel.java"), expected); } @Test public void checkWithUnstableOkAtClassLevel() throws Exception { final String[] expected = CommonUtils.EMPTY_STRING_ARRAY; verify(this.checkConfig, getPath("TestClassWithUnstableOkAtClassLevel.java"), expected); } @Test public void checkWithUnstableOkAtMethodLevel() throws Exception { final String[] expected = CommonUtils.EMPTY_STRING_ARRAY; verify(this.checkConfig, getPath("TestClassWithUnstableOkAtMethodLevel.java"), expected); } @Test public void checkWithUnstableAnnotationShouldBeRemoved() throws Exception { final String[] expected = { "29:1: The @Unstable annotation for [org.xwiki.tool.checkstyle.test." + "TestClassWithUnstableAnnotationShouldBeRemoved] must be removed since it's been there for more than a " + "full development cycle (was introduced in [6.0] and current version is [8.1-SNAPSHOT])" }; verify(this.checkConfig, getPath("TestClassWithUnstableAnnotationShouldBeRemoved.java"), expected); } @Test public void checkWithUnstableAnnotationShouldBeRemovedMultipleSince() throws Exception { final String[] expected = { "30:1: The @Unstable annotation for [org.xwiki.tool.checkstyle.test." + "TestClassWithUnstableAnnotationShouldBeRemovedMultipleSince] must be removed since it's been there for " + "more than a full development cycle (was introduced in [6.0, 5.0] and current version is [8.1-SNAPSHOT])" }; verify(this.checkConfig, getPath("TestClassWithUnstableAnnotationShouldBeRemovedMultipleSince.java"), expected); } @Test public void checkWithUnstableAnnotationShouldNotBeRemovedMultipleSince() throws Exception { final String[] expected = CommonUtils.EMPTY_STRING_ARRAY; verify(this.checkConfig, getPath("TestClassWithUnstableAnnotationShouldNotBeRemovedMultipleSince.java"), expected); } @Test public void checkWithUnstableAnnotationShouldBeRemovedAtMethodLevel() throws Exception { final String[] expected = { "29:5: The @Unstable annotation for [org.xwiki.tool.checkstyle.test." + "TestClassWithUnstableAnnotationShouldBeRemovedAtMethodLevel.method()] must be removed since it's " + "been there for more than a full development cycle (was introduced in [6.0] and current version is " + "[8.1-SNAPSHOT])" }; verify(this.checkConfig, getPath("TestClassWithUnstableAnnotationShouldBeRemovedAtMethodLevel.java"), expected); } @Test public void checkPackageWithUnstable() throws Exception { final String[] expected = CommonUtils.EMPTY_STRING_ARRAY; verify(this.checkConfig, getPath("TestPackageWithUnstable.java"), expected); } @Test public void checkPackageWithOtherAnnotation() throws Exception { final String[] expected = CommonUtils.EMPTY_STRING_ARRAY; verify(this.checkConfig, getPath("TestPackageWithOtherAnnotation.java"), expected); } @Override protected String getPath(String filename) throws IOException { return (new File("src/test/resources/org/xwiki/tool/checkstyle/test/unstable/" + filename)).getCanonicalPath(); } }