View Javadoc
1   ///////////////////////////////////////////////////////////////////////////////////////////////
2   // checkstyle: Checks Java source code and other text files for adherence to a set of rules.
3   // Copyright (C) 2001-2026 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 com.puppycrawl.tools.checkstyle.filters;
21  
22  import static com.google.common.truth.Truth.assertWithMessage;
23  import static com.puppycrawl.tools.checkstyle.checks.regexp.RegexpSinglelineCheck.MSG_REGEXP_EXCEEDED;
24  import static com.puppycrawl.tools.checkstyle.internal.utils.TestUtil.getExpectedThrowable;
25  
26  import org.junit.jupiter.api.Test;
27  
28  import com.puppycrawl.tools.checkstyle.AbstractModuleTestSupport;
29  import com.puppycrawl.tools.checkstyle.checks.regexp.RegexpSinglelineCheck;
30  import nl.jqno.equalsverifier.EqualsVerifier;
31  import nl.jqno.equalsverifier.EqualsVerifierReport;
32  
33  public class CsvFilterElementTest extends AbstractModuleTestSupport {
34  
35      @Override
36      public String getPackageLocation() {
37          return "com/puppycrawl/tools/checkstyle/filters/csvfilterelement";
38      }
39  
40      @Test
41      public void testDecideSingle() {
42          final IntFilterElement filter = new CsvFilterElement("0");
43          assertWithMessage("less than")
44                  .that(filter.accept(-1))
45                  .isFalse();
46          assertWithMessage("equal")
47                  .that(filter.accept(0))
48                  .isTrue();
49          assertWithMessage("greater than")
50                  .that(filter.accept(1))
51                  .isFalse();
52      }
53  
54      @Test
55      public void testDecidePair() {
56          final IntFilterElement filter = new CsvFilterElement("0, 2");
57          assertWithMessage("less than")
58                  .that(filter.accept(-1))
59                  .isFalse();
60          assertWithMessage("equal 0")
61                  .that(filter.accept(0))
62                  .isTrue();
63          assertWithMessage("greater than")
64                  .that(filter.accept(1))
65                  .isFalse();
66          assertWithMessage("equal 2")
67                  .that(filter.accept(2))
68                  .isTrue();
69      }
70  
71      @Test
72      public void testDecideRange() {
73          final IntFilterElement filter = new CsvFilterElement("0-2");
74          assertWithMessage("less than")
75                  .that(filter.accept(-1))
76                  .isFalse();
77          assertWithMessage("equal 0")
78                  .that(filter.accept(0))
79                  .isTrue();
80          assertWithMessage("equal 1")
81                  .that(filter.accept(1))
82                  .isTrue();
83          assertWithMessage("equal 2")
84                  .that(filter.accept(2))
85                  .isTrue();
86          assertWithMessage("greater than")
87                  .that(filter.accept(3))
88                  .isFalse();
89      }
90  
91      @Test
92      public void testDecideEmptyRange() {
93          final IntFilterElement filter = new CsvFilterElement("2-0");
94          assertWithMessage("less than")
95                  .that(filter.accept(-1))
96                  .isFalse();
97          assertWithMessage("equal 0")
98                  .that(filter.accept(0))
99                  .isFalse();
100         assertWithMessage("equal 1")
101                 .that(filter.accept(1))
102                 .isFalse();
103         assertWithMessage("equal 2")
104                 .that(filter.accept(2))
105                 .isFalse();
106         assertWithMessage("greater than")
107                 .that(filter.accept(3))
108                 .isFalse();
109     }
110 
111     @Test
112     public void testDecideRangePlusValue() {
113         final IntFilterElement filter = new CsvFilterElement("0-2, 10");
114         assertWithMessage("less than")
115                 .that(filter.accept(-1))
116                 .isFalse();
117         assertWithMessage("equal 0")
118                 .that(filter.accept(0))
119                 .isTrue();
120         assertWithMessage("equal 1")
121                 .that(filter.accept(1))
122                 .isTrue();
123         assertWithMessage("equal 2")
124                 .that(filter.accept(2))
125                 .isTrue();
126         assertWithMessage("greater than")
127                 .that(filter.accept(3))
128                 .isFalse();
129         assertWithMessage("equal 10")
130                 .that(filter.accept(10))
131                 .isTrue();
132     }
133 
134     @Test
135     public void testEmptyChain() {
136         final CsvFilterElement filter = new CsvFilterElement("");
137         assertWithMessage("0")
138                 .that(filter.accept(0))
139                 .isFalse();
140     }
141 
142     @Test
143     public void testEqualsAndHashCode() {
144         final EqualsVerifierReport ev = EqualsVerifier.forClass(CsvFilterElement.class)
145                 .usingGetClass().report();
146         assertWithMessage("Error: %s", ev.getMessage())
147                 .that(ev.isSuccessful())
148                 .isTrue();
149     }
150 
151     @Test
152     public void testEmptyTokens() throws Exception {
153         final String[] expectedUnfiltered = {
154             "26: "
155                 + getCheckMessage(RegexpSinglelineCheck.class,
156                     MSG_REGEXP_EXCEEDED, "TODO$"),
157             "28: "
158                 + getCheckMessage(RegexpSinglelineCheck.class,
159                     MSG_REGEXP_EXCEEDED, "TODO$"),
160             "30: "
161                 + getCheckMessage(RegexpSinglelineCheck.class,
162                     MSG_REGEXP_EXCEEDED, "TODO$"),
163         };
164         final String[] expectedFiltered = {
165             "28: "
166                 + getCheckMessage(RegexpSinglelineCheck.class,
167                     MSG_REGEXP_EXCEEDED, "TODO$"),
168         };
169 
170         verifyFilterWithInlineConfigParser(
171                 getPath("InputCsvFilterElementEmptyTokens.java"),
172                 expectedUnfiltered,
173                 expectedFiltered);
174     }
175 
176     @Test
177     public void testBlankToken() {
178         final String[] expectedViolation = {
179             "26: "
180                 + getCheckMessage(RegexpSinglelineCheck.class,
181                     MSG_REGEXP_EXCEEDED, "TODO$"),
182             "28: "
183                 + getCheckMessage(RegexpSinglelineCheck.class,
184                     MSG_REGEXP_EXCEEDED, "TODO$"),
185         };
186 
187         final NumberFormatException ex = getExpectedThrowable(NumberFormatException.class, () -> {
188             verifyFilterWithInlineConfigParser(
189                     getPath("InputCsvFilterElementBlankToken.java"),
190                     expectedViolation);
191         });
192         assertWithMessage("Invalid exception message")
193                 .that(ex.getMessage())
194                 .isEqualTo("For input string: \"\"");
195     }
196 
197 }