1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.io;
18
19 import static org.junit.jupiter.api.Assertions.assertFalse;
20 import static org.junit.jupiter.api.Assertions.assertThrows;
21 import static org.junit.jupiter.api.Assertions.assertTrue;
22
23 import java.io.File;
24 import java.io.FileNotFoundException;
25 import java.io.IOException;
26
27 import org.junit.jupiter.api.BeforeEach;
28 import org.junit.jupiter.api.Test;
29 import org.junit.jupiter.api.io.TempDir;
30
31
32
33
34
35
36 public class FileUtilsDirectoryContainsTest {
37
38 private File directory1;
39 private File directory2;
40 private File directory3;
41 private File file1;
42 private File file1ByRelativeDirectory2;
43 private File file2;
44 private File file2ByRelativeDirectory1;
45 private File file3;
46
47 @TempDir
48 public File top;
49
50 @SuppressWarnings("ResultOfMethodCallIgnored")
51 @BeforeEach
52 public void setUp() throws Exception {
53 directory1 = new File(top, "directory1");
54 directory2 = new File(top, "directory2");
55 directory3 = new File(directory2, "directory3");
56
57 directory1.mkdir();
58 directory2.mkdir();
59 directory3.mkdir();
60
61 file1 = new File(directory1, "file1");
62 file2 = new File(directory2, "file2");
63 file3 = new File(top, "file3");
64
65
66 file1ByRelativeDirectory2 = new File(top, "directory2/../directory1/file1");
67 file2ByRelativeDirectory1 = new File(top, "directory1/../directory2/file2");
68
69 FileUtils.touch(file1);
70 FileUtils.touch(file2);
71 FileUtils.touch(file3);
72 }
73
74 @Test
75 public void testCanonicalPath() throws IOException {
76 assertTrue(FileUtils.directoryContains(directory1, file1ByRelativeDirectory2));
77 assertTrue(FileUtils.directoryContains(directory2, file2ByRelativeDirectory1));
78
79 assertFalse(FileUtils.directoryContains(directory1, file2ByRelativeDirectory1));
80 assertFalse(FileUtils.directoryContains(directory2, file1ByRelativeDirectory2));
81 }
82
83 @Test
84 public void testDirectoryContainsDirectory() throws IOException {
85 assertTrue(FileUtils.directoryContains(top, directory1));
86 assertTrue(FileUtils.directoryContains(top, directory2));
87 assertTrue(FileUtils.directoryContains(top, directory3));
88 assertTrue(FileUtils.directoryContains(directory2, directory3));
89 }
90
91 @Test
92 public void testDirectoryContainsFile() throws IOException {
93 assertTrue(FileUtils.directoryContains(directory1, file1));
94 assertTrue(FileUtils.directoryContains(directory2, file2));
95 }
96
97 @Test
98 public void testDirectoryDoesNotContainFile() throws IOException {
99 assertFalse(FileUtils.directoryContains(directory1, file2));
100 assertFalse(FileUtils.directoryContains(directory2, file1));
101
102 assertFalse(FileUtils.directoryContains(directory1, file3));
103 assertFalse(FileUtils.directoryContains(directory2, file3));
104 }
105
106 @Test
107 public void testDirectoryDoesNotContainsDirectory() throws IOException {
108 assertFalse(FileUtils.directoryContains(directory1, top));
109 assertFalse(FileUtils.directoryContains(directory2, top));
110 assertFalse(FileUtils.directoryContains(directory3, top));
111 assertFalse(FileUtils.directoryContains(directory3, directory2));
112 }
113
114 @Test
115 public void testDirectoryDoesNotExist() {
116 final File dir = new File("DOESNOTEXIST");
117 assertFalse(dir.exists());
118 assertThrows(FileNotFoundException.class, () -> FileUtils.directoryContains(dir, file1));
119 }
120
121 @Test
122 public void testFileDoesNotExist() throws IOException {
123 assertFalse(FileUtils.directoryContains(top, null));
124 final File file = new File("DOESNOTEXIST");
125 assertFalse(file.exists());
126 assertFalse(FileUtils.directoryContains(top, file));
127 }
128
129
130
131
132
133 @Test
134 public void testFileDoesNotExistBug() throws IOException {
135 final File file = new File(top, "DOESNOTEXIST");
136 assertTrue(top.exists(), "Check directory exists");
137 assertFalse(file.exists(), "Check file does not exist");
138 assertFalse(FileUtils.directoryContains(top, file), "Directory does not contain unrealized file");
139 }
140
141 @Test
142 public void testFileHavingSamePrefixBug() throws IOException {
143 final File foo = new File(top, "foo");
144 final File foobar = new File(top, "foobar");
145 final File fooTxt = new File(top, "foo.txt");
146 foo.mkdir();
147 foobar.mkdir();
148 FileUtils.touch(fooTxt);
149
150 assertFalse(FileUtils.directoryContains(foo, foobar));
151 assertFalse(FileUtils.directoryContains(foo, fooTxt));
152 }
153
154 @Test
155 public void testIO466() throws IOException {
156 final File fooFile = new File(directory1.getParent(), "directory1.txt");
157 assertFalse(FileUtils.directoryContains(directory1, fooFile));
158 }
159
160 @Test
161 public void testSameFile() {
162 assertThrows(IllegalArgumentException.class, () -> FileUtils.directoryContains(file1, file1));
163 }
164
165 @Test
166 public void testUnrealizedContainment() {
167 final File dir = new File("DOESNOTEXIST");
168 final File file = new File(dir, "DOESNOTEXIST2");
169 assertFalse(dir.exists());
170 assertFalse(file.exists());
171 assertThrows(FileNotFoundException.class, () -> FileUtils.directoryContains(dir, file));
172 }
173 }