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
21 final class UseStringIsEmptyRuleTest {
22
23
24
25
26
27
28
29
30 @ParameterizedTest
31 @ValueSource(
32 strings = {
33 "StringLengthGreaterThanZero.java",
34 "StringLengthGreaterOrEqualOne.java",
35 "StringLengthLessThanOne.java",
36 "StringLengthLessOrEqualZero.java",
37 "StringLengthEqualsZero.java",
38 "StringLengthNotEqualsZero.java"
39 }
40 )
41 void detectLengthComparisons(final String file) throws Exception {
42 new PmdAssert(
43 file, new IsEqual<>(false),
44 new CombinableMatcher<>(containsMatcher(file, 20))
45 .and(containsMatcher(file, 24))
46 .and(containsMatcher(file, 28))
47 .and(containsMatcher(file, 32))
48 .and(containsMatcher(file, 36))
49 ).assertOk();
50 }
51
52
53
54
55
56
57
58
59
60
61 @ParameterizedTest
62 @ValueSource(
63 strings = {
64 "StringLengthEqualsOne.java",
65 "StringLengthNotEqualsOne.java",
66 "StringLengthGreaterThanOne.java",
67 "StringLengthLessOrEqualOne.java",
68 "StringLengthGreaterOrEqualZero.java"
69 }
70 )
71 void ignoresNonEmptyChecks(final String file) throws Exception {
72 new PmdAssert(
73 file, new IsEqual<>(true),
74 IsEmptyString.emptyString()
75 ).assertOk();
76 }
77
78
79
80
81
82
83
84 @Test
85 void notDetectOnArrayOfStrings() throws Exception {
86 new PmdAssert(
87 "ArrayOfStringsLengthGreaterThanZero.java",
88 new IsEqual<>(true),
89 IsEmptyString.emptyString()
90 ).assertOk();
91 }
92
93 private static Matcher<String> containsMatcher(
94 final String file, final int line
95 ) {
96 return new StringContains(
97 String.format(
98 "PMD: %1$s[%2$d-%2$d]: %3$s (UseStringIsEmptyRule)",
99 file, line,
100 "Use String.isEmpty() when checking for empty string"
101 )
102 );
103 }
104 }