• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements.  See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to You under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License.  You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
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.Files;
27 import java.nio.file.Path;
28 import java.nio.file.Paths;
29 
30 import org.junit.jupiter.api.Test;
31 import org.junit.jupiter.api.io.TempDir;
32 
33 /**
34  * Tests {@link PathUtils}.
35  */
36 public class PathUtilsContentEqualsTest {
37 
38     @TempDir
39     public File temporaryFolder;
40 
getName()41     private String getName() {
42         return this.getClass().getSimpleName();
43     }
44 
45     @Test
testDirectoryAndFileContentEquals()46     public void testDirectoryAndFileContentEquals() throws Exception {
47         // Non-existent files
48         final Path path1 = new File(temporaryFolder, getName()).toPath();
49         final Path path2 = new File(temporaryFolder, getName() + "2").toPath();
50         assertTrue(PathUtils.directoryAndFileContentEquals(null, null));
51         assertFalse(PathUtils.directoryAndFileContentEquals(null, path1));
52         assertFalse(PathUtils.directoryAndFileContentEquals(path1, null));
53         // both don't exist
54         assertTrue(PathUtils.directoryAndFileContentEquals(path1, path1));
55         assertTrue(PathUtils.directoryAndFileContentEquals(path1, path2));
56         assertTrue(PathUtils.directoryAndFileContentEquals(path2, path2));
57         assertTrue(PathUtils.directoryAndFileContentEquals(path2, path1));
58         // Tree equals true tests
59         {
60             // Trees of files only that contain the same files.
61             final Path dir1 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-files-only/directory-files-only1");
62             final Path dir2 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-files-only/directory-files-only2");
63             assertTrue(PathUtils.directoryAndFileContentEquals(dir1, dir2));
64             assertTrue(PathUtils.directoryAndFileContentEquals(dir2, dir2));
65             assertTrue(PathUtils.directoryAndFileContentEquals(dir1, dir1));
66             assertTrue(PathUtils.directoryAndFileContentEquals(dir2, dir2));
67         }
68         {
69             // Trees of directories containing other directories.
70             final Path dir1 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-dirs-then-files/dir1");
71             final Path dir2 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-dirs-then-files/dir2");
72             assertTrue(PathUtils.directoryAndFileContentEquals(dir1, dir2));
73             assertTrue(PathUtils.directoryAndFileContentEquals(dir2, dir2));
74             assertTrue(PathUtils.directoryAndFileContentEquals(dir1, dir1));
75             assertTrue(PathUtils.directoryAndFileContentEquals(dir2, dir2));
76         }
77         {
78             // Trees of directories containing other directories and files.
79             final Path dir1 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-dirs-and-files/dirs-and-files1");
80             final Path dir2 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-dirs-and-files/dirs-and-files1");
81             assertTrue(PathUtils.directoryAndFileContentEquals(dir1, dir2));
82             assertTrue(PathUtils.directoryAndFileContentEquals(dir2, dir2));
83             assertTrue(PathUtils.directoryAndFileContentEquals(dir1, dir1));
84             assertTrue(PathUtils.directoryAndFileContentEquals(dir2, dir2));
85         }
86         // Tree equals false tests
87         {
88             final Path dir1 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-dirs-and-files/dirs-and-files1/directory-files-only1");
89             final Path dir2 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-dirs-and-files/dirs-and-files1/");
90             assertFalse(PathUtils.directoryAndFileContentEquals(dir1, dir2));
91             assertFalse(PathUtils.directoryAndFileContentEquals(dir2, dir1));
92         }
93         {
94             final Path dir1 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-dirs-and-files");
95             final Path dir2 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-dirs-then-files");
96             assertFalse(PathUtils.directoryAndFileContentEquals(dir1, dir2));
97             assertFalse(PathUtils.directoryAndFileContentEquals(dir2, dir1));
98         }
99     }
100 
101     @Test
testDirectoryContentEquals()102     public void testDirectoryContentEquals() throws Exception {
103         // Non-existent files
104         final Path path1 = new File(temporaryFolder, getName()).toPath();
105         final Path path2 = new File(temporaryFolder, getName() + "2").toPath();
106         assertTrue(PathUtils.directoryContentEquals(null, null));
107         assertFalse(PathUtils.directoryContentEquals(null, path1));
108         assertFalse(PathUtils.directoryContentEquals(path1, null));
109         // both don't exist
110         assertTrue(PathUtils.directoryContentEquals(path1, path1));
111         assertTrue(PathUtils.directoryContentEquals(path1, path2));
112         assertTrue(PathUtils.directoryContentEquals(path2, path2));
113         assertTrue(PathUtils.directoryContentEquals(path2, path1));
114         // Tree equals true tests
115         {
116             // Trees of files only that contain the same files.
117             final Path dir1 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-files-only/directory-files-only1");
118             final Path dir2 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-files-only/directory-files-only2");
119             assertTrue(PathUtils.directoryContentEquals(dir1, dir2));
120             assertTrue(PathUtils.directoryContentEquals(dir2, dir2));
121             assertTrue(PathUtils.directoryContentEquals(dir1, dir1));
122             assertTrue(PathUtils.directoryContentEquals(dir2, dir2));
123         }
124         {
125             // Trees of directories containing other directories.
126             final Path dir1 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-dirs-then-files/dir1");
127             final Path dir2 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-dirs-then-files/dir2");
128             assertTrue(PathUtils.directoryContentEquals(dir1, dir2));
129             assertTrue(PathUtils.directoryContentEquals(dir2, dir2));
130             assertTrue(PathUtils.directoryContentEquals(dir1, dir1));
131             assertTrue(PathUtils.directoryContentEquals(dir2, dir2));
132         }
133         {
134             // Trees of directories containing other directories and files.
135             final Path dir1 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-dirs-and-files/dirs-and-files1");
136             final Path dir2 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-dirs-and-files/dirs-and-files1");
137             assertTrue(PathUtils.directoryContentEquals(dir1, dir2));
138             assertTrue(PathUtils.directoryContentEquals(dir2, dir2));
139             assertTrue(PathUtils.directoryContentEquals(dir1, dir1));
140             assertTrue(PathUtils.directoryContentEquals(dir2, dir2));
141         }
142         // Tree equals false tests
143         {
144             final Path dir1 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-dirs-and-files/dirs-and-files1/directory-files-only1");
145             final Path dir2 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-dirs-and-files/dirs-and-files1/");
146             assertFalse(PathUtils.directoryContentEquals(dir1, dir2));
147             assertFalse(PathUtils.directoryContentEquals(dir2, dir1));
148         }
149         {
150             final Path dir1 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-dirs-and-files");
151             final Path dir2 = Paths.get("src/test/resources/dir-equals-tests/dir-equals-dirs-then-files");
152             assertFalse(PathUtils.directoryContentEquals(dir1, dir2));
153             assertFalse(PathUtils.directoryContentEquals(dir2, dir1));
154         }
155     }
156 
157     @Test
testFileContentEquals()158     public void testFileContentEquals() throws Exception {
159         // Non-existent files
160         final Path path1 = new File(temporaryFolder, getName()).toPath();
161         final Path path2 = new File(temporaryFolder, getName() + "2").toPath();
162         assertTrue(PathUtils.fileContentEquals(null, null));
163         assertFalse(PathUtils.fileContentEquals(null, path1));
164         assertFalse(PathUtils.fileContentEquals(path1, null));
165         // both don't exist
166         assertTrue(PathUtils.fileContentEquals(path1, path1));
167         assertTrue(PathUtils.fileContentEquals(path1, path2));
168         assertTrue(PathUtils.fileContentEquals(path2, path2));
169         assertTrue(PathUtils.fileContentEquals(path2, path1));
170 
171         // Directories
172         assertThrows(IOException.class, () -> PathUtils.fileContentEquals(temporaryFolder.toPath(), temporaryFolder.toPath()));
173 
174         // Different files
175         final Path objFile1 = Paths.get(temporaryFolder.getAbsolutePath(), getName() + ".object");
176         PathUtils.copyFile(getClass().getResource("/java/lang/Object.class"), objFile1);
177 
178         final Path objFile1b = Paths.get(temporaryFolder.getAbsolutePath(), getName() + ".object2");
179         PathUtils.copyFile(getClass().getResource("/java/lang/Object.class"), objFile1b);
180 
181         final Path objFile2 = Paths.get(temporaryFolder.getAbsolutePath(), getName() + ".collection");
182         PathUtils.copyFile(getClass().getResource("/java/util/Collection.class"), objFile2);
183 
184         assertFalse(PathUtils.fileContentEquals(objFile1, objFile2));
185         assertFalse(PathUtils.fileContentEquals(objFile1b, objFile2));
186         assertTrue(PathUtils.fileContentEquals(objFile1, objFile1b));
187 
188         assertTrue(PathUtils.fileContentEquals(objFile1, objFile1));
189         assertTrue(PathUtils.fileContentEquals(objFile1b, objFile1b));
190         assertTrue(PathUtils.fileContentEquals(objFile2, objFile2));
191 
192         // Equal files
193         Files.createFile(path1);
194         Files.createFile(path2);
195         assertTrue(PathUtils.fileContentEquals(path1, path1));
196         assertTrue(PathUtils.fileContentEquals(path1, path2));
197     }
198 
199 }
200