View Javadoc
1   ///////////////////////////////////////////////////////////////////////////////////////////////
2   // checkstyle: Checks Java source code and other text files for adherence to a set of rules.
3   // Copyright (C) 2001-2024 the original author or authors.
4   //
5   // This library is free software; you can redistribute it and/or
6   // modify it under the terms of the GNU Lesser General Public
7   // License as published by the Free Software Foundation; either
8   // version 2.1 of the License, or (at your option) any later version.
9   //
10  // This library is distributed in the hope that it will be useful,
11  // but WITHOUT ANY WARRANTY; without even the implied warranty of
12  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  // Lesser General Public License for more details.
14  //
15  // You should have received a copy of the GNU Lesser General Public
16  // License along with this library; if not, write to the Free Software
17  // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18  ///////////////////////////////////////////////////////////////////////////////////////////////
19  
20  package org.checkstyle.suppressionxpathfilter;
21  
22  import java.io.File;
23  import java.util.Collections;
24  import java.util.List;
25  
26  import org.junit.jupiter.api.Test;
27  
28  import com.puppycrawl.tools.checkstyle.DefaultConfiguration;
29  import com.puppycrawl.tools.checkstyle.checks.metrics.BooleanExpressionComplexityCheck;
30  
31  public class XpathRegressionBooleanExpressionComplexityTest
32          extends AbstractXpathTestSupport {
33  
34      @Override
35      protected String getCheckName() {
36          return BooleanExpressionComplexityCheck.class.getSimpleName();
37      }
38  
39      @Test
40      public void testCatchBlock() throws Exception {
41          final File fileToProcess =
42                  new File(getPath("InputXpathBooleanExpressionComplexityCatchBlock.java"));
43  
44          final DefaultConfiguration moduleConfig =
45                  createModuleConfig(BooleanExpressionComplexityCheck.class);
46  
47          final String[] expectedViolationMessages = {
48              "10:23: " + getCheckMessage(BooleanExpressionComplexityCheck.class,
49                      BooleanExpressionComplexityCheck.MSG_KEY, 11, 3),
50          };
51  
52          final List<String> expectedXpathQueries = Collections.singletonList(
53                  "/COMPILATION_UNIT/CLASS_DEF[./IDENT"
54                          + "[@text='InputXpathBooleanExpressionComplexityCatchBlock']]"
55                          + "/OBJBLOCK/METHOD_DEF[./IDENT[@text='methodOne']]/SLIST"
56                          + "/LITERAL_TRY/LITERAL_CATCH/SLIST/VARIABLE_DEF"
57                          + "[./IDENT[@text='d']]/ASSIGN"
58          );
59  
60          runVerifications(moduleConfig, fileToProcess,
61                  expectedViolationMessages, expectedXpathQueries);
62      }
63  
64      @Test
65      public void testClassFields() throws Exception {
66          final File fileToProcess =
67                  new File(getPath("InputXpathBooleanExpressionComplexityClassFields.java"));
68  
69          final DefaultConfiguration moduleConfig =
70                  createModuleConfig(BooleanExpressionComplexityCheck.class);
71  
72          final String[] expectedViolationMessages = {
73              "9:19: " + getCheckMessage(BooleanExpressionComplexityCheck.class,
74                      BooleanExpressionComplexityCheck.MSG_KEY, 11, 3),
75          };
76  
77          final List<String> expectedXpathQueries = Collections.singletonList(
78                  "/COMPILATION_UNIT/CLASS_DEF[./IDENT["
79                          + "@text='InputXpathBooleanExpressionComplexityClassFields']]"
80                          + "/OBJBLOCK/METHOD_DEF[./IDENT[@text='methodTwo']]/SLIST/VARIABLE_DEF"
81                          + "[./IDENT[@text='d']]/ASSIGN"
82          );
83  
84          runVerifications(moduleConfig, fileToProcess,
85                  expectedViolationMessages, expectedXpathQueries);
86      }
87  
88      @Test
89      public void testConditionals() throws Exception {
90          final File fileToProcess =
91                  new File(getPath("InputXpathBooleanExpressionComplexityConditionals.java"));
92  
93          final DefaultConfiguration moduleConfig =
94                  createModuleConfig(BooleanExpressionComplexityCheck.class);
95  
96          final String[] expectedViolationMessages = {
97              "9:9: " + getCheckMessage(BooleanExpressionComplexityCheck.class,
98                      BooleanExpressionComplexityCheck.MSG_KEY, 4, 3),
99          };
100 
101         final List<String> expectedXpathQueries = Collections.singletonList(
102                 "/COMPILATION_UNIT/CLASS_DEF[./IDENT["
103                         + "@text='InputXpathBooleanExpressionComplexityConditionals']]"
104                         + "/OBJBLOCK/METHOD_DEF[./IDENT[@text='methodThree']]/SLIST/LITERAL_IF"
105         );
106 
107         runVerifications(moduleConfig, fileToProcess,
108                 expectedViolationMessages, expectedXpathQueries);
109     }
110 }