Skip to content

Commit da7d5c2

Browse files
committed
Issue #15: provide UT for correct patch file loading that contains multiple files in it
1 parent 7898201 commit da7d5c2

File tree

9 files changed

+348
-25
lines changed

9 files changed

+348
-25
lines changed

src/test/java/com/github/checkstyle/patchfilter/SuppressionPatchFilterTest.java

Lines changed: 165 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,19 @@
1919

2020
package com.github.checkstyle.patchfilter;
2121

22-
import static org.junit.jupiter.api.Assertions.assertFalse;
22+
import static org.junit.Assert.assertEquals;
23+
import static org.junit.Assert.assertNull;
2324
import static org.junit.jupiter.api.Assertions.assertTrue;
2425

25-
import org.junit.jupiter.api.Test;
26+
import java.io.FileInputStream;
27+
28+
import org.junit.Ignore;
29+
import org.junit.Test;
2630

2731
import com.github.checkstyle.AbstractModuleTestSupport;
32+
import com.github.difflib.unifieddiff.UnifiedDiff;
33+
import com.github.difflib.unifieddiff.UnifiedDiffFile;
34+
import com.github.difflib.unifieddiff.UnifiedDiffReader;
2835
import com.puppycrawl.tools.checkstyle.api.AuditEvent;
2936
import com.puppycrawl.tools.checkstyle.api.LocalizedMessage;
3037
import com.puppycrawl.tools.checkstyle.api.SeverityLevel;
@@ -51,33 +58,166 @@ public void testAccept() throws Exception {
5158
@Test
5259
public void testMultiChangesOnOneFileOne() throws Exception {
5360
final String fileName = getPath("MultiChangesOnOneFilePatch.txt");
54-
final SuppressionPatchFilter filter = createSuppressionPatchFilter(fileName);
55-
final LocalizedMessage message = new LocalizedMessage(4, 1, null, "msg", null,
56-
SeverityLevel.ERROR, null, getClass(), null);
57-
final AuditEvent ev = new AuditEvent(this, "Update.java", message);
58-
assertTrue(filter.accept(ev),
59-
"Audit event should be rejected when there are no matching patch filters");
61+
final FileInputStream ins = new FileInputStream(fileName);
62+
final UnifiedDiff diff = UnifiedDiffReader.parseUnifiedDiff(ins);
63+
assertEquals(1, diff.getFiles().size());
64+
final UnifiedDiffFile file1 = diff.getFiles().get(0);
65+
assertNull(file1.getDiffCommand());
66+
assertEquals("Origin.java", file1.getFromFile());
67+
assertEquals("Update.java", file1.getToFile());
68+
assertEquals(2, file1.getPatch().getDeltas().size());
69+
assertNull(diff.getTail());
6070
}
6171

6272
@Test
63-
public void testMultiChangedFilesOnOnePatch() throws Exception {
73+
@Ignore("https://github.com/java-diff-utils/java-diff-utils/issues/83")
74+
public void testMultiChangedFilesOnOnePatchOne() throws Exception {
75+
final String fileName = getPath("problem_diff_issue51.diff");
76+
final FileInputStream ins = new FileInputStream(fileName);
77+
final UnifiedDiff diff = UnifiedDiffReader.parseUnifiedDiff(ins);
78+
assertEquals(2, diff.getFiles().size());
79+
final UnifiedDiffFile file1 = diff.getFiles().get(0);
80+
assertEquals("diff -U0 old/f1 new/f1", file1.getDiffCommand());
81+
// here is f1 not old/f1 and new/f1
82+
assertEquals("f1", file1.getFromFile());
83+
assertEquals("f1", file1.getToFile());
84+
assertEquals(1, file1.getPatch().getDeltas().size());
85+
final UnifiedDiffFile file2 = diff.getFiles().get(1);
86+
assertEquals("diff -U0 old/f2 new/f2", file2.getDiffCommand());
87+
// same issue here is f2 not old/f2 and new/f2
88+
assertEquals("f2", file2.getFromFile());
89+
assertEquals("f2", file2.getToFile());
90+
assertEquals(1, file2.getPatch().getDeltas().size());
91+
assertNull(diff.getTail());
92+
}
93+
94+
@Test
95+
public void testMultiChangedFilesOnOnePatchTwo() throws Exception {
6496
final String fileName = getPath("MultiChangedFilesOnOnePatch.txt");
65-
final SuppressionPatchFilter filter = createSuppressionPatchFilter(fileName);
66-
final LocalizedMessage message1 = new LocalizedMessage(7, 1, null, "msg", null,
67-
SeverityLevel.ERROR, null, getClass(), null);
68-
final AuditEvent ev1 = new AuditEvent(this, "Test2.java", message1);
69-
assertTrue(filter.accept(ev1),
70-
"Audit event should be rejected when there are no matching patch filters");
71-
final LocalizedMessage message2 = new LocalizedMessage(77, 1, null, "msg", null,
72-
SeverityLevel.ERROR, null, getClass(), null);
73-
final AuditEvent ev2 = new AuditEvent(this, "Test1.java", message2);
74-
assertFalse(filter.accept(ev2),
75-
"Audit event should be rejected when there are no matching patch filters");
76-
final LocalizedMessage message3 = new LocalizedMessage(7, 1, null, "msg", null,
77-
SeverityLevel.ERROR, null, getClass(), null);
78-
final AuditEvent ev3 = new AuditEvent(this, "Test1.java", message1);
79-
assertTrue(filter.accept(ev1),
80-
"Audit event should be rejected when there are no matching patch filters");
97+
final FileInputStream ins = new FileInputStream(fileName);
98+
final UnifiedDiff diff = UnifiedDiffReader.parseUnifiedDiff(ins);
99+
assertEquals(2, diff.getFiles().size());
100+
final UnifiedDiffFile file1 = diff.getFiles().get(0);
101+
assertEquals("diff -u Origin/Test1.java Update/Test1.java",
102+
file1.getDiffCommand());
103+
assertEquals("Origin/Test1.java", file1.getFromFile());
104+
assertEquals("Update/Test1.java", file1.getToFile());
105+
assertEquals(1, file1.getPatch().getDeltas().size());
106+
final UnifiedDiffFile file2 = diff.getFiles().get(1);
107+
assertEquals("diff -u Origin/Test2.java Update/Test2.java",
108+
file2.getDiffCommand());
109+
assertEquals("Origin/Test2.java", file2.getFromFile());
110+
assertEquals("Update/Test2.java", file2.getToFile());
111+
assertEquals(1, file2.getPatch().getDeltas().size());
112+
assertNull(diff.getTail());
113+
}
114+
115+
@Test
116+
public void testGitDiffPatch() throws Exception {
117+
final String fileName = getPath("PatchFileFromDiffTools/GitDiffPatch.txt");
118+
final FileInputStream ins = new FileInputStream(fileName);
119+
final UnifiedDiff diff = UnifiedDiffReader.parseUnifiedDiff(ins);
120+
assertEquals(1, diff.getFiles().size());
121+
final UnifiedDiffFile file1 = diff.getFiles().get(0);
122+
assertEquals("diff --git a/pom.xml b/pom.xml", file1.getDiffCommand());
123+
assertEquals("pom.xml", file1.getFromFile());
124+
assertEquals("pom.xml", file1.getToFile());
125+
assertEquals(1, file1.getPatch().getDeltas().size());
126+
assertNull(diff.getTail());
127+
}
128+
129+
@Test
130+
public void testGitFormatPatchLinuxOne() throws Exception {
131+
final String fileName = getPath("PatchFileFromDiffTools/GitFormatPatchLinuxOne.txt");
132+
final FileInputStream ins = new FileInputStream(fileName);
133+
final UnifiedDiff diff = UnifiedDiffReader.parseUnifiedDiff(ins);
134+
assertEquals(1, diff.getFiles().size());
135+
final UnifiedDiffFile file1 = diff.getFiles().get(0);
136+
assertEquals("diff --git a/pom.xml b/pom.xml", file1.getDiffCommand());
137+
assertEquals("pom.xml", file1.getFromFile());
138+
assertEquals("pom.xml", file1.getToFile());
139+
assertEquals(1, file1.getPatch().getDeltas().size());
140+
assertEquals("2.7.4\n\n", diff.getTail());
141+
}
142+
143+
@Test
144+
@Ignore("error: com.github.difflib.unifieddiff.UnifiedDiffParserException: "
145+
+ "expected file start line not found")
146+
public void testGitFormatPatchLinuxTwo() throws Exception {
147+
final String fileName = getPath("PatchFileFromDiffTools/GitFormatPatchLinuxTwo.txt");
148+
final FileInputStream ins = new FileInputStream(fileName);
149+
final UnifiedDiff diff = UnifiedDiffReader.parseUnifiedDiff(ins);
150+
assertEquals(2, diff.getFiles().size());
151+
final UnifiedDiffFile file1 = diff.getFiles().get(0);
152+
assertEquals("diff --git a/config/ant-phase-verify.xml b/config/ant-phase-verify.xml",
153+
file1.getDiffCommand());
154+
assertEquals("ant-phase-verify.xml", file1.getFromFile());
155+
assertEquals("ant-phase-verify.xml", file1.getToFile());
156+
assertEquals(1, file1.getPatch().getDeltas().size());
157+
final UnifiedDiffFile file2 = diff.getFiles().get(1);
158+
assertEquals("diff --git a/src/test/resources-noncompilable/com/"
159+
+ "puppycrawl/tools/checkstyle/grammar/"
160+
+ "java14/InputJava14InstanceofWithPatternMatching.java "
161+
+ "b/src/test/resources-noncompilable/com/puppycrawl/tools/checkstyle/grammar/"
162+
+ "java14/InputJava14InstanceofWithPatternMatching.java", file2.getDiffCommand());
163+
assertEquals("InputJava14InstanceofWithPatternMatching.java", file2.getFromFile());
164+
assertEquals("InputJava14InstanceofWithPatternMatching.java", file2.getToFile());
165+
assertEquals(1, file2.getPatch().getDeltas().size());
166+
assertNull(diff.getTail());
167+
}
168+
169+
@Test
170+
public void testGitFormatPatchLinuxThree() throws Exception {
171+
final String fileName = getPath("PatchFileFromDiffTools/GitFormatPatchLinuxThree.txt");
172+
final FileInputStream ins = new FileInputStream(fileName);
173+
final UnifiedDiff diff = UnifiedDiffReader.parseUnifiedDiff(ins);
174+
assertEquals(1, diff.getFiles().size());
175+
final UnifiedDiffFile file1 = diff.getFiles().get(0);
176+
assertEquals("diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/"
177+
+ "JavadocMethodCheck.java"
178+
+ " b/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/"
179+
+ "JavadocMethodCheck.java", file1.getDiffCommand());
180+
assertEquals("src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/"
181+
+ "JavadocMethodCheck.java", file1.getFromFile());
182+
assertEquals("src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/"
183+
+ "JavadocMethodCheck.java", file1.getToFile());
184+
assertEquals(1, file1.getPatch().getDeltas().size());
185+
assertNull(diff.getTail());
186+
}
187+
188+
@Test
189+
public void testGitFormatPatchWindows() throws Exception {
190+
final String fileName = getPath("PatchFileFromDiffTools/GitFormatPatchWindows.txt");
191+
final FileInputStream ins = new FileInputStream(fileName);
192+
final UnifiedDiff diff = UnifiedDiffReader.parseUnifiedDiff(ins);
193+
assertEquals(1, diff.getFiles().size());
194+
final UnifiedDiffFile file1 = diff.getFiles().get(0);
195+
assertEquals("diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/Checker.java "
196+
+ "b/src/main/java/com/puppycrawl/tools/checkstyle/Checker.java",
197+
file1.getDiffCommand());
198+
assertEquals("src/main/java/com/puppycrawl/tools/checkstyle/Checker.java",
199+
file1.getFromFile());
200+
assertEquals("src/main/java/com/puppycrawl/tools/checkstyle/Checker.java",
201+
file1.getToFile());
202+
assertEquals(1, file1.getPatch().getDeltas().size());
203+
assertEquals("2.25.1.windows.1\n\n", diff.getTail());
204+
}
205+
206+
@Test
207+
@Ignore("filename parsed error, Expected :<tests/test-check-pyflakes.t>, "
208+
+ "Actual :<tests/test-check-pyflakes.t\tTue Jun 09 17:13:26 2020 -0400>\n")
209+
public void testHgDiffPatch() throws Exception {
210+
final String fileName = getPath("PatchFileFromDiffTools/HGDiffPatch.txt");
211+
final FileInputStream ins = new FileInputStream(fileName);
212+
final UnifiedDiff diff = UnifiedDiffReader.parseUnifiedDiff(ins);
213+
assertEquals(1, diff.getFiles().size());
214+
final UnifiedDiffFile file1 = diff.getFiles().get(0);
215+
assertEquals("diff -r 83e41b73d115 -r a4438263b228 tests/test-check-pyflakes.t",
216+
file1.getDiffCommand());
217+
assertEquals("tests/test-check-pyflakes.t", file1.getFromFile());
218+
assertEquals("tests/test-check-pyflakes.t", file1.getToFile());
219+
assertEquals(1, file1.getPatch().getDeltas().size());
220+
assertNull(diff.getTail());
81221
}
82222

83223
private static SuppressionPatchFilter
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
--- Origin1.java 2020-06-14 18:41:56.000000000 +0800
2+
+++ Update1.java 2020-06-14 18:41:56.000000000 +0800
3+
@@ -5 +4,0 @@
4+
-// test
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
diff --git a/pom.xml b/pom.xml
2+
index 7feed9f..221c50e 100644
3+
--- a/pom.xml
4+
+++ b/pom.xml
5+
@@ -226,7 +226,7 @@
6+
<dependency>
7+
<groupId>com.tngtech.archunit</groupId>
8+
<artifactId>archunit-junit5</artifactId>
9+
- <version>0.14.1</version>
10+
+ <version>0.13.1</version>
11+
<scope>test</scope>
12+
</dependency>
13+
<dependency>
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
From f07bcc7fbfa8fc6c4cd8885d2f4f13226425acfa Mon Sep 17 00:00:00 2001
2+
From: "dependabot-preview[bot]"
3+
<27856297+dependabot-preview[bot]@users.noreply.github.com>
4+
Date: Wed, 3 Jun 2020 13:56:22 +0000
5+
Subject: [PATCH] dependency: bump archunit-junit5 from 0.13.1 to 0.14.1
6+
7+
Bumps [archunit-junit5](https://github.com/TNG/ArchUnit) from 0.13.1 to 0.14.1.
8+
- [Release notes](https://github.com/TNG/ArchUnit/releases)
9+
- [Commits](https://github.com/TNG/ArchUnit/compare/v0.13.1...v0.14.1)
10+
11+
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
12+
---
13+
pom.xml | 2 +-
14+
1 file changed, 1 insertion(+), 1 deletion(-)
15+
16+
diff --git a/pom.xml b/pom.xml
17+
index 221c50e..7feed9f 100644
18+
--- a/pom.xml
19+
+++ b/pom.xml
20+
@@ -226,7 +226,7 @@
21+
<dependency>
22+
<groupId>com.tngtech.archunit</groupId>
23+
<artifactId>archunit-junit5</artifactId>
24+
- <version>0.13.1</version>
25+
+ <version>0.14.1</version>
26+
<scope>test</scope>
27+
</dependency>
28+
<dependency>
29+
--
30+
2.7.4
31+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
From 901e713030f194cce682dc98b2ae0d3447af9c97 Mon Sep 17 00:00:00 2001
2+
From: wltan <53135010+wltan@users.noreply.github.com>
3+
Date: Sun, 29 Mar 2020 13:39:32 +0800
4+
Subject: [PATCH] spelling: Fix typo in JavadocMethodCheck
5+
6+
---
7+
.../tools/checkstyle/checks/javadoc/JavadocMethodCheck.java | 6 +++---
8+
1 file changed, 3 insertions(+), 3 deletions(-)
9+
10+
diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocMethodCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocMethodCheck.java
11+
index 6faf17d256..e194c6b944 100644
12+
--- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocMethodCheck.java
13+
+++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocMethodCheck.java
14+
@@ -717,9 +717,9 @@ private static int calculateTagColumn(Matcher javadocTagMatcher,
15+
private static List<ExceptionInfo> combineExceptionInfo(List<ExceptionInfo> list1,
16+
List<ExceptionInfo> list2) {
17+
final List<ExceptionInfo> result = new ArrayList<>(list1);
18+
- for (ExceptionInfo expectionInfo : list2) {
19+
- if (result.stream().noneMatch(item -> isExceptionInfoSame(item, expectionInfo))) {
20+
- result.add(expectionInfo);
21+
+ for (ExceptionInfo exceptionInfo : list2) {
22+
+ if (result.stream().noneMatch(item -> isExceptionInfoSame(item, exceptionInfo))) {
23+
+ result.add(exceptionInfo);
24+
}
25+
}
26+
return result;
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
From b53e612a2ab5ff15d14860e252f84c0f343fe93a Mon Sep 17 00:00:00 2001
2+
From: nmancus1 <nmancus1
3+
Date: Thu, 4 Jun 2020 11:46:34 -0400
4+
Subject: [PATCH] minor: Add input file for Java14 instanceof with pattern
5+
matching (#7290)
6+
7+
---
8+
config/ant-phase-verify.xml | 2 +
9+
.../InputJava14InstanceofWithPatternMatching.java | 76 ++++++++++++++++++++++
10+
2 files changed, 78 insertions(+)
11+
create mode 100644 src/test/resources-noncompilable/com/puppycrawl/tools/checkstyle/grammar/java14/InputJava14InstanceofWithPatternMatching.java
12+
13+
diff --git a/config/ant-phase-verify.xml b/config/ant-phase-verify.xml
14+
index d27ffef..e0285ce 100644
15+
--- a/config/ant-phase-verify.xml
16+
+++ b/config/ant-phase-verify.xml
17+
@@ -148,6 +148,8 @@
18+
<exclude name="**/InputMainFrameModelIncorrectClass.java"/>
19+
<exclude name="**/InputBeforeExecutionExclusionFileFilterIncorrectClass.java"/>
20+
<exclude name="**/InputJavaParser.java"/>
21+
+ <!-- until https://github.com/checkstyle/checkstyle/issues/7290 -->
22+
+ <exclude name="**/InputJava14InstanceofWithPatternMatching.java"/>
23+
<!-- Cannot parse until Java 14 support -->
24+
<exclude name="**/InputJava14Records.java"/>
25+
</fileset>
26+
diff --git a/src/test/resources-noncompilable/com/puppycrawl/tools/checkstyle/grammar/java14/InputJava14InstanceofWithPatternMatching.java b/src/test/resources-noncompilable/com/puppycrawl/tools/checkstyle/grammar/java14/InputJava14InstanceofWithPatternMatching.java
27+
new file mode 100644
28+
index 0000000..8fa3eba
29+
--- /dev/null
30+
+++ b/src/test/resources-noncompilable/com/puppycrawl/tools/checkstyle/grammar/java14/InputJava14InstanceofWithPatternMatching.java
31+
@@ -0,0 +1,76 @@
32+
+//non-compiled with javac: Compilable with Java14
33+
+package com.puppycrawl.tools.checkstyle.grammar.java14;
34+
+
35+
+import java.util.Arrays;
36+
+import java.util.Locale;
37+
...... I removed it
38+
+ }
39+
+ }
40+
+}
41+
--
42+
2.7.4
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
From 7c32611c211917da7723512fb05e9a7d84982322 Mon Sep 17 00:00:00 2001
2+
From: Baratali Izmailov <barataliba@gmail.com>
3+
Date: Sun, 14 Jun 2020 13:50:54 +0100
4+
Subject: [PATCH] TestCommit
5+
6+
---
7+
src/main/java/com/puppycrawl/tools/checkstyle/Checker.java | 2 +-
8+
1 file changed, 1 insertion(+), 1 deletion(-)
9+
10+
diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/Checker.java b/src/main/java/com/puppycrawl/tools/checkstyle/Checker.java
11+
index ac872448b..d487d2ffb 100644
12+
--- a/src/main/java/com/puppycrawl/tools/checkstyle/Checker.java
13+
+++ b/src/main/java/com/puppycrawl/tools/checkstyle/Checker.java
14+
@@ -134,7 +134,7 @@ public class Checker extends AutomaticBean implements MessageDispatcher, RootMod
15+
* Creates a new {@code Checker} instance.
16+
* The instance needs to be contextualized and configured.
17+
*/
18+
- public Checker() {
19+
+ public Checker throws RuntimeException () {
20+
addListener(counter);
21+
log = LogFactory.getLog(Checker.class);
22+
}
23+
--
24+
2.25.1.windows.1
25+
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# HG changeset patch
2+
# User Anton Shestakov <av6@dwimlabs.net>
3+
# Date 1591442367 -28800
4+
# Node ID a4438263b228dd3e2983d59095c6180b1411f0e8
5+
# Parent 83e41b73d115e3717943c2e5a83d36d05670384c
6+
tests: skip pyflakes for mercurial/thirdparty/
7+
8+
The current version of pyflakes (2.2.0) correctly detects one issue:
9+
10+
mercurial/thirdparty/selectors2.py:335:40 '...'.format(...) has unused arguments at position(s): 1
11+
12+
But we're not interested in fixing lint errors in third-party code, so we need
13+
to exclude at least selectors2.py. And in the discussion for this patch it was
14+
decided to just skip the entire thirdparty directory.
15+
16+
Differential Revision: https://phab.mercurial-scm.org/D8619
17+
18+
diff -r 83e41b73d115 -r a4438263b228 tests/test-check-pyflakes.t
19+
--- a/tests/test-check-pyflakes.t Tue Jun 09 17:13:26 2020 -0400
20+
+++ b/tests/test-check-pyflakes.t Sat Jun 06 19:19:27 2020 +0800
21+
@@ -16,9 +16,7 @@
22+
$ testrepohg locate 'set:**.py or grep("^#!.*python")' \
23+
> -X hgext/fsmonitor/pywatchman \
24+
> -X mercurial/pycompat.py -X contrib/python-zstandard \
25+
- > -X mercurial/thirdparty/cbor \
26+
- > -X mercurial/thirdparty/concurrent \
27+
- > -X mercurial/thirdparty/zope \
28+
+ > -X mercurial/thirdparty \
29+
> 2>/dev/null \
30+
> | xargs $PYTHON -m pyflakes 2>/dev/null | "$TESTDIR/filterpyflakes.py"
31+
contrib/perf.py:*:* undefined name 'xrange' (glob) (?)

0 commit comments

Comments
 (0)