//////////////////////////////////////////////////////////////////////////////// // checkstyle: Checks Java source code for adherence to a set of rules. // Copyright (C) 2001-2017 the original author or authors. // // This library 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 library 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 library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA //////////////////////////////////////////////////////////////////////////////// package com.github.sevntu.checkstyle.checks.annotation; import static com.github.sevntu.checkstyle.checks.annotation.ForbidAnnotationCheck.MSG_KEY; import org.junit.Test; import com.github.sevntu.checkstyle.BaseCheckTestSupport; import com.puppycrawl.tools.checkstyle.DefaultConfiguration; /** * Test that annotation's target is correct. * * @author <a href="mailto:hidoyatov.v.i@gmail.com">Hidoyatov Victor</a> * */ public class ForbidAnnotationCheckTest extends BaseCheckTestSupport { @Test public void testDefaultCheck() throws Exception { final DefaultConfiguration checkConfig = createCheckConfig(ForbidAnnotationCheck.class); final String[] expected1 = {}; verify(checkConfig, getPath("InputForbidAnnotationCheck2.java"), expected1); } @Test public void testNullProperties() throws Exception { final DefaultConfiguration checkConfig = createCheckConfig(ForbidAnnotationCheck.class); checkConfig.addAttribute("annotationNames", null); checkConfig.addAttribute("annotationTargets", null); final String[] expected1 = {}; verify(checkConfig, getPath("InputForbidAnnotationCheck2.java"), expected1); } @Test public void testFullAnnotationName() throws Exception { final DefaultConfiguration checkConfig = createCheckConfig(ForbidAnnotationCheck.class); checkConfig.addAttribute("annotationNames", "Test"); final String[] expected1 = {}; verify(checkConfig, getPath("InputForbidAnnotationCheck2.java"), expected1); } @Test public void testVariableIsForbidden() throws Exception { final DefaultConfiguration checkConfig = createCheckConfig(ForbidAnnotationCheck.class); checkConfig.addAttribute("annotationNames", "Edible,Author,Author2,SuppressWarnings"); checkConfig.addAttribute("annotationTargets", "VARIABLE_DEF"); final String[] expected2 = { "13: " + getCheckMessage(MSG_KEY, "VARIABLE_DEF", "Edible"), "20: " + getCheckMessage(MSG_KEY, "VARIABLE_DEF", "Author"), "21: " + getCheckMessage(MSG_KEY, "VARIABLE_DEF", "Author2"), "59: " + getCheckMessage(MSG_KEY, "VARIABLE_DEF", "SuppressWarnings"), }; verify(checkConfig, getPath("InputForbidAnnotationCheck.java"), expected2); } @Test public void testMethodIsForbidden() throws Exception { final DefaultConfiguration checkConfig = createCheckConfig(ForbidAnnotationCheck.class); checkConfig.addAttribute("annotationNames", "Twizzle,One,Two,Three,B"); checkConfig.addAttribute("annotationTargets", "METHOD_DEF"); final String[] expected3 = { "28: " + getCheckMessage(MSG_KEY, "METHOD_DEF", "Twizzle"), "39: " + getCheckMessage(MSG_KEY, "METHOD_DEF", "One"), "40: " + getCheckMessage(MSG_KEY, "METHOD_DEF", "Two"), "41: " + getCheckMessage(MSG_KEY, "METHOD_DEF", "Three"), "47: " + getCheckMessage(MSG_KEY, "METHOD_DEF", "B"), }; verify(checkConfig, getPath("InputForbidAnnotationCheck.java"), expected3); } @Test public void testClassAndConstuctorIsForbidden() throws Exception { final DefaultConfiguration checkConfig = createCheckConfig(ForbidAnnotationCheck.class); checkConfig.addAttribute("annotationNames", "Test,ctor,ctor2"); checkConfig.addAttribute("annotationTargets", "CLASS_DEF,CTOR_DEF"); final String[] expected4 = { "6: " + getCheckMessage(MSG_KEY, "CLASS_DEF", "Test"), "8: " + getCheckMessage(MSG_KEY, "CTOR_DEF", "ctor"), "9: " + getCheckMessage(MSG_KEY, "CTOR_DEF", "ctor2"), }; verify(checkConfig, getPath("InputForbidAnnotationCheck.java"), expected4); } @Test public void testAnnotationIsForbidden() throws Exception { final DefaultConfiguration checkConfig = createCheckConfig(ForbidAnnotationCheck.class); checkConfig.addAttribute("annotationNames", "Retention,Target"); checkConfig.addAttribute("annotationTargets", "ANNOTATION_DEF"); final String[] expected5 = { "34: " + getCheckMessage(MSG_KEY, "ANNOTATION_DEF", "Retention"), "35: " + getCheckMessage(MSG_KEY, "ANNOTATION_DEF", "Target"), }; verify(checkConfig, getPath("InputForbidAnnotationCheck.java"), expected5); } @Test public void testParameterAndInterfaceIsForbidden() throws Exception { final DefaultConfiguration checkConfig = createCheckConfig(ForbidAnnotationCheck.class); checkConfig.addAttribute("annotationNames", "MyAnnotation,A"); checkConfig.addAttribute("annotationTargets", "PARAMETER_DEF,INTERFACE_DEF"); final String[] expected6 = { "43: " + getCheckMessage(MSG_KEY, "PARAMETER_DEF", "MyAnnotation"), "45: " + getCheckMessage(MSG_KEY, "INTERFACE_DEF", "A"), }; verify(checkConfig, getPath("InputForbidAnnotationCheck.java"), expected6); } @Test public void testEnumIsForbidden() throws Exception { final DefaultConfiguration checkConfig = createCheckConfig(ForbidAnnotationCheck.class); checkConfig.addAttribute("annotationNames", "C,int1,int2,int3"); checkConfig.addAttribute("annotationTargets", "ENUM_DEF,ENUM_CONSTANT_DEF"); final String[] expected7 = { "50: " + getCheckMessage(MSG_KEY, "ENUM_DEF", "C"), "52: " + getCheckMessage(MSG_KEY, "ENUM_CONSTANT_DEF", "int1"), "54: " + getCheckMessage(MSG_KEY, "ENUM_CONSTANT_DEF", "int2"), "56: " + getCheckMessage(MSG_KEY, "ENUM_CONSTANT_DEF", "int3"), }; verify(checkConfig, getPath("InputForbidAnnotationCheck.java"), expected7); } }