1
2
3
4
5 package com.qulice.pmd;
6
7 import org.hamcrest.Matcher;
8 import org.hamcrest.core.CombinableMatcher;
9 import org.hamcrest.core.IsEqual;
10 import org.hamcrest.core.StringContains;
11 import org.hamcrest.text.IsEmptyString;
12 import org.junit.jupiter.api.Test;
13 import org.junit.jupiter.params.ParameterizedTest;
14 import org.junit.jupiter.params.provider.ValueSource;
15
16
17
18
19
20 final class UseStringIsEmptyRuleTest {
21
22
23
24
25
26
27
28 @ParameterizedTest
29 @ValueSource(
30 strings = {
31 "StringLengthGreaterThanZero.java",
32 "StringLengthGreaterOrEqualZero.java",
33 "StringLengthGreaterOrEqualOne.java",
34 "StringLengthLessThanOne.java",
35 "StringLengthLessOrEqualZero.java",
36 "StringLengthEqualsZero.java",
37 "StringLengthNotEqualsZero.java"
38 }
39 )
40 void detectLengthComparisons(final String file) throws Exception {
41 new PmdAssert(
42 file, new IsEqual<>(false),
43 new CombinableMatcher<>(containsMatcher(file, 20))
44 .and(containsMatcher(file, 24))
45 .and(containsMatcher(file, 28))
46 .and(containsMatcher(file, 32))
47 .and(containsMatcher(file, 36))
48 ).validate();
49 }
50
51
52
53
54
55
56 @Test
57 void notDetectOnArrayOfStrings() throws Exception {
58 new PmdAssert(
59 "ArrayOfStringsLengthGreaterThanZero.java",
60 new IsEqual<>(true),
61 IsEmptyString.emptyString()
62 ).validate();
63 }
64
65
66
67
68
69
70
71 private static Matcher<String> containsMatcher(
72 final String file, final int line
73 ) {
74 final String message =
75 "Use String.isEmpty() when checking for empty string";
76 return new StringContains(
77 String.format(
78 "PMD: %1$s[%2$d-%2$d]: %3$s (UseStringIsEmptyRule)",
79 file, line, message
80 )
81 );
82 }
83 }