1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.io.file;
19
20 import static org.junit.jupiter.api.Assertions.assertFalse;
21 import static org.junit.jupiter.api.Assertions.assertThrows;
22 import static org.junit.jupiter.api.Assertions.assertTrue;
23
24 import java.io.File;
25 import java.io.IOException;
26 import java.nio.file.FileSystem;
27 import java.nio.file.FileSystems;
28 import java.nio.file.Files;
29 import java.nio.file.Path;
30 import java.nio.file.Paths;
31
32 import org.junit.jupiter.api.Test;
33 import org.junit.jupiter.api.io.TempDir;
34
35
36
37
38 public class PathUtilsContentEqualsTest {
39
40 @TempDir
41 public File temporaryFolder;
42
43 private String getName() {
44 return this.getClass().getSimpleName();
45 }
46
47 @Test
48 public void testDirectoryAndFileContentEquals() throws Exception {
49
50 final Path path1 = new File(temporaryFolder, getName()).toPath();
51 final Path path2 = new File(temporaryFolder, getName() + "2").toPath();
52 assertTrue(PathUtils.directoryAndFileContentEquals(null, null));
53 assertFalse(PathUtils.directoryAndFileContentEquals(null, path1));
54 assertFalse(PathUtils.directoryAndFileContentEquals(path1, null));
55
56 assertTrue(PathUtils.directoryAndFileContentEquals(path1, path1));
57 assertTrue(PathUtils.directoryAndFileContentEquals(path1, path2));
58 assertTrue(PathUtils.directoryAndFileContentEquals(path2, path2));
59 assertTrue(PathUtils.directoryAndFileContentEquals(path2, path1));
60
61 {
62
63 final Path dir1 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-files-only/directory-files-only1");
64 final Path dir2 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-files-only/directory-files-only2");
65 assertTrue(PathUtils.directoryAndFileContentEquals(dir1, dir2));
66 assertTrue(PathUtils.directoryAndFileContentEquals(dir2, dir2));
67 assertTrue(PathUtils.directoryAndFileContentEquals(dir1, dir1));
68 assertTrue(PathUtils.directoryAndFileContentEquals(dir2, dir2));
69 }
70 {
71
72 final Path dir1 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-dirs-then-files/dir1");
73 final Path dir2 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-dirs-then-files/dir2");
74 assertTrue(PathUtils.directoryAndFileContentEquals(dir1, dir2));
75 assertTrue(PathUtils.directoryAndFileContentEquals(dir2, dir2));
76 assertTrue(PathUtils.directoryAndFileContentEquals(dir1, dir1));
77 assertTrue(PathUtils.directoryAndFileContentEquals(dir2, dir2));
78 }
79 {
80
81 final Path dir1 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-dirs-and-files/dirs-and-files1");
82 final Path dir2 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-dirs-and-files/dirs-and-files1");
83 assertTrue(PathUtils.directoryAndFileContentEquals(dir1, dir2));
84 assertTrue(PathUtils.directoryAndFileContentEquals(dir2, dir2));
85 assertTrue(PathUtils.directoryAndFileContentEquals(dir1, dir1));
86 assertTrue(PathUtils.directoryAndFileContentEquals(dir2, dir2));
87 }
88
89 {
90 final Path dir1 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-dirs-and-files/dirs-and-files1/directory-files-only1");
91 final Path dir2 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-dirs-and-files/dirs-and-files1/");
92 assertFalse(PathUtils.directoryAndFileContentEquals(dir1, dir2));
93 assertFalse(PathUtils.directoryAndFileContentEquals(dir2, dir1));
94 }
95 {
96 final Path dir1 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-dirs-and-files");
97 final Path dir2 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-dirs-then-files");
98 assertFalse(PathUtils.directoryAndFileContentEquals(dir1, dir2));
99 assertFalse(PathUtils.directoryAndFileContentEquals(dir2, dir1));
100 }
101 }
102
103 @Test
104 public void testDirectoryContentEquals() throws Exception {
105
106 final Path path1 = new File(temporaryFolder, getName()).toPath();
107 final Path path2 = new File(temporaryFolder, getName() + "2").toPath();
108 assertTrue(PathUtils.directoryContentEquals(null, null));
109 assertFalse(PathUtils.directoryContentEquals(null, path1));
110 assertFalse(PathUtils.directoryContentEquals(path1, null));
111
112 assertTrue(PathUtils.directoryContentEquals(path1, path1));
113 assertTrue(PathUtils.directoryContentEquals(path1, path2));
114 assertTrue(PathUtils.directoryContentEquals(path2, path2));
115 assertTrue(PathUtils.directoryContentEquals(path2, path1));
116
117 {
118
119 final Path dir1 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-files-only/directory-files-only1");
120 final Path dir2 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-files-only/directory-files-only2");
121 assertTrue(PathUtils.directoryContentEquals(dir1, dir2));
122 assertTrue(PathUtils.directoryContentEquals(dir2, dir2));
123 assertTrue(PathUtils.directoryContentEquals(dir1, dir1));
124 assertTrue(PathUtils.directoryContentEquals(dir2, dir2));
125 }
126 {
127
128 final Path dir1 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-dirs-then-files/dir1");
129 final Path dir2 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-dirs-then-files/dir2");
130 assertTrue(PathUtils.directoryContentEquals(dir1, dir2));
131 assertTrue(PathUtils.directoryContentEquals(dir2, dir2));
132 assertTrue(PathUtils.directoryContentEquals(dir1, dir1));
133 assertTrue(PathUtils.directoryContentEquals(dir2, dir2));
134 }
135 {
136
137 final Path dir1 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-dirs-and-files/dirs-and-files1");
138 final Path dir2 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-dirs-and-files/dirs-and-files1");
139 assertTrue(PathUtils.directoryContentEquals(dir1, dir2));
140 assertTrue(PathUtils.directoryContentEquals(dir2, dir2));
141 assertTrue(PathUtils.directoryContentEquals(dir1, dir1));
142 assertTrue(PathUtils.directoryContentEquals(dir2, dir2));
143 }
144
145 {
146 final Path dir1 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-dirs-and-files/dirs-and-files1/directory-files-only1");
147 final Path dir2 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-dirs-and-files/dirs-and-files1/");
148 assertFalse(PathUtils.directoryContentEquals(dir1, dir2));
149 assertFalse(PathUtils.directoryContentEquals(dir2, dir1));
150 }
151 {
152 final Path dir1 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-dirs-and-files");
153 final Path dir2 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-dirs-then-files");
154 assertFalse(PathUtils.directoryContentEquals(dir1, dir2));
155 assertFalse(PathUtils.directoryContentEquals(dir2, dir1));
156 }
157 }
158
159 @Test
160 public void testFileContentEquals() throws Exception {
161
162 final Path path1 = new File(temporaryFolder, getName()).toPath();
163 final Path path2 = new File(temporaryFolder, getName() + "2").toPath();
164 assertTrue(PathUtils.fileContentEquals(null, null));
165 assertFalse(PathUtils.fileContentEquals(null, path1));
166 assertFalse(PathUtils.fileContentEquals(path1, null));
167
168 assertTrue(PathUtils.fileContentEquals(path1, path1));
169 assertTrue(PathUtils.fileContentEquals(path1, path2));
170 assertTrue(PathUtils.fileContentEquals(path2, path2));
171 assertTrue(PathUtils.fileContentEquals(path2, path1));
172
173
174 assertThrows(IOException.class, () -> PathUtils.fileContentEquals(temporaryFolder.toPath(), temporaryFolder.toPath()));
175
176
177 final Path objFile1 = Paths.get(temporaryFolder.getAbsolutePath(), getName() + ".object");
178 PathUtils.copyFile(getClass().getResource("/java/lang/Object.class"), objFile1);
179
180 final Path objFile1b = Paths.get(temporaryFolder.getAbsolutePath(), getName() + ".object2");
181 PathUtils.copyFile(getClass().getResource("/java/lang/Object.class"), objFile1b);
182
183 final Path objFile2 = Paths.get(temporaryFolder.getAbsolutePath(), getName() + ".collection");
184 PathUtils.copyFile(getClass().getResource("/java/util/Collection.class"), objFile2);
185
186 assertFalse(PathUtils.fileContentEquals(objFile1, objFile2));
187 assertFalse(PathUtils.fileContentEquals(objFile1b, objFile2));
188 assertTrue(PathUtils.fileContentEquals(objFile1, objFile1b));
189
190 assertTrue(PathUtils.fileContentEquals(objFile1, objFile1));
191 assertTrue(PathUtils.fileContentEquals(objFile1b, objFile1b));
192 assertTrue(PathUtils.fileContentEquals(objFile2, objFile2));
193
194
195 Files.createFile(path1);
196 Files.createFile(path2);
197 assertTrue(PathUtils.fileContentEquals(path1, path1));
198 assertTrue(PathUtils.fileContentEquals(path1, path2));
199 }
200
201 @Test
202 public void testFileContentEqualsZip() throws Exception {
203 final Path path1 = Paths.get("src/test/resources/org/apache/commons/io/bla.zip");
204 final Path path2 = Paths.get("src/test/resources/org/apache/commons/io/bla-copy.zip");
205 final Path path3 = Paths.get("src/test/resources/org/apache/commons/io/moby.zip");
206 assertTrue(PathUtils.fileContentEquals(path1, path2));
207 assertFalse(PathUtils.fileContentEquals(path1, path3));
208 }
209
210 @Test
211 public void testFileContentEqualsZipFileSystem() throws Exception {
212 try (FileSystem fileSystem = FileSystems.newFileSystem(Paths.get("src/test/resources/org/apache/commons/io/test-same-size-diff-contents.zip"),
213 ClassLoader.getSystemClassLoader())) {
214
215 final Path path1 = fileSystem.getPath("/test-same-size-diff-contents/A.txt");
216
217 final Path path2 = fileSystem.getPath("/test-same-size-diff-contents/B.txt");
218 assertTrue(Files.exists(path1));
219 assertTrue(Files.exists(path2));
220 assertTrue(PathUtils.fileContentEquals(path1, path1));
221 assertTrue(PathUtils.fileContentEquals(path2, path2));
222 assertFalse(PathUtils.fileContentEquals(path1, path2));
223 }
224 }
225
226 }