1 /*
2 * LibrePCB - Professional EDA for everyone!
3 * Copyright (C) 2013 LibrePCB Developers, see AUTHORS.md for contributors.
4 * https://librepcb.org/
5 *
6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 /*******************************************************************************
21 * Includes
22 ******************************************************************************/
23
24 #include <gtest/gtest.h>
25 #include <librepcb/common/fileio/transactionaldirectory.h>
26 #include <librepcb/common/fileio/transactionalfilesystem.h>
27
28 /*******************************************************************************
29 * Namespace
30 ******************************************************************************/
31 namespace librepcb {
32 namespace tests {
33
34 /*******************************************************************************
35 * Test Class
36 ******************************************************************************/
37
38 class TransactionalDirectoryTest : public ::testing::Test {
39 protected:
40 std::shared_ptr<TransactionalFileSystem> mFileSystem;
41 std::shared_ptr<TransactionalFileSystem> mEmptyFileSystem;
42
TransactionalDirectoryTest()43 TransactionalDirectoryTest() {
44 // Open in read-only mode to avoid creating a ".lock" file which would
45 // influence the tests.
46 mFileSystem =
47 TransactionalFileSystem::openRO(FilePath::getRandomTempPath());
48 mFileSystem->write("a.txt", "a");
49 mFileSystem->write("a/b.txt", "b");
50 mFileSystem->write("a/b/c.txt", "c");
51 mFileSystem->write("a/b/c/d.txt", "d");
52
53 mEmptyFileSystem =
54 TransactionalFileSystem::openRO(FilePath::getRandomTempPath());
55 }
56
~TransactionalDirectoryTest()57 virtual ~TransactionalDirectoryTest() {}
58 };
59
60 /*******************************************************************************
61 * Test Constructors
62 ******************************************************************************/
63
TEST_F(TransactionalDirectoryTest,testDefaultConstructorCreatesTempFs)64 TEST_F(TransactionalDirectoryTest, testDefaultConstructorCreatesTempFs) {
65 TransactionalDirectory dir;
66 ASSERT_TRUE(dir.getFileSystem());
67 EXPECT_TRUE(dir.getFileSystem()->getAbsPath().isLocatedInDir(
68 FilePath::getApplicationTempPath()));
69 }
70
TEST_F(TransactionalDirectoryTest,testDefaultConstructorCreatesEmptyFs)71 TEST_F(TransactionalDirectoryTest, testDefaultConstructorCreatesEmptyFs) {
72 TransactionalDirectory dir;
73 EXPECT_EQ(QStringList{}, dir.getDirs());
74 EXPECT_EQ(QStringList{}, dir.getFiles());
75 }
76
TEST_F(TransactionalDirectoryTest,testCopyConstructorWithDefaultPath)77 TEST_F(TransactionalDirectoryTest, testCopyConstructorWithDefaultPath) {
78 TransactionalDirectory dir(mFileSystem, "foo");
79 TransactionalDirectory copy(dir);
80 EXPECT_EQ(mFileSystem, copy.getFileSystem());
81 EXPECT_EQ("foo", copy.getPath());
82 }
83
TEST_F(TransactionalDirectoryTest,testCopyConstructorWithPath)84 TEST_F(TransactionalDirectoryTest, testCopyConstructorWithPath) {
85 TransactionalDirectory dir(mFileSystem, "foo");
86 TransactionalDirectory copy(dir, "bar");
87 EXPECT_EQ(mFileSystem, copy.getFileSystem());
88 EXPECT_EQ("foo/bar", copy.getPath());
89 }
90
TEST_F(TransactionalDirectoryTest,testConstructorWithDefaultPath)91 TEST_F(TransactionalDirectoryTest, testConstructorWithDefaultPath) {
92 TransactionalDirectory dir(mFileSystem);
93 EXPECT_EQ(mFileSystem, dir.getFileSystem());
94 EXPECT_EQ("", dir.getPath());
95 }
96
TEST_F(TransactionalDirectoryTest,testConstructorWithPath)97 TEST_F(TransactionalDirectoryTest, testConstructorWithPath) {
98 TransactionalDirectory dir(mFileSystem, "foo");
99 EXPECT_EQ(mFileSystem, dir.getFileSystem());
100 EXPECT_EQ("foo", dir.getPath());
101 }
102
TEST_F(TransactionalDirectoryTest,testConstructorRemovesTrailingSlashes)103 TEST_F(TransactionalDirectoryTest, testConstructorRemovesTrailingSlashes) {
104 TransactionalDirectory dir(mFileSystem, "foo///");
105 EXPECT_EQ(mFileSystem, dir.getFileSystem());
106 EXPECT_EQ("foo", dir.getPath());
107 }
108
109 /*******************************************************************************
110 * Test getAbsPath()
111 ******************************************************************************/
112
TEST_F(TransactionalDirectoryTest,testGetAbsPathInRoot)113 TEST_F(TransactionalDirectoryTest, testGetAbsPathInRoot) {
114 TransactionalDirectory dir(mFileSystem, "");
115 EXPECT_EQ(mFileSystem->getAbsPath(), dir.getAbsPath());
116 }
117
TEST_F(TransactionalDirectoryTest,testGetAbsPathInRootPath)118 TEST_F(TransactionalDirectoryTest, testGetAbsPathInRootPath) {
119 TransactionalDirectory dir(mFileSystem, "");
120 EXPECT_EQ(mFileSystem->getAbsPath("hello"), dir.getAbsPath("hello"));
121 }
122
TEST_F(TransactionalDirectoryTest,testGetAbsPathInSubdir)123 TEST_F(TransactionalDirectoryTest, testGetAbsPathInSubdir) {
124 TransactionalDirectory dir(mFileSystem, "foo bar");
125 EXPECT_EQ(mFileSystem->getAbsPath("foo bar"), dir.getAbsPath());
126 }
127
TEST_F(TransactionalDirectoryTest,testGetAbsPathInSubdirPath)128 TEST_F(TransactionalDirectoryTest, testGetAbsPathInSubdirPath) {
129 TransactionalDirectory dir(mFileSystem, "foo bar");
130 EXPECT_EQ(mFileSystem->getAbsPath("foo bar/hello"), dir.getAbsPath("hello"));
131 }
132
133 /*******************************************************************************
134 * Test getDirs()
135 ******************************************************************************/
136
TEST_F(TransactionalDirectoryTest,testGetDirsInRoot)137 TEST_F(TransactionalDirectoryTest, testGetDirsInRoot) {
138 TransactionalDirectory dir(mFileSystem, "");
139 EXPECT_EQ(QStringList{"a"}, dir.getDirs());
140 }
141
TEST_F(TransactionalDirectoryTest,testGetDirsInRootPath)142 TEST_F(TransactionalDirectoryTest, testGetDirsInRootPath) {
143 TransactionalDirectory dir(mFileSystem, "");
144 EXPECT_EQ(QStringList{"b"}, dir.getDirs("a"));
145 }
146
TEST_F(TransactionalDirectoryTest,testGetDirsInSubdir)147 TEST_F(TransactionalDirectoryTest, testGetDirsInSubdir) {
148 TransactionalDirectory dir(mFileSystem, "a");
149 EXPECT_EQ(QStringList{"b"}, dir.getDirs());
150 }
151
TEST_F(TransactionalDirectoryTest,testGetDirsInSubdirPath)152 TEST_F(TransactionalDirectoryTest, testGetDirsInSubdirPath) {
153 TransactionalDirectory dir(mFileSystem, "a");
154 EXPECT_EQ(QStringList{"c"}, dir.getDirs("b"));
155 }
156
157 /*******************************************************************************
158 * Test getFiles()
159 ******************************************************************************/
160
TEST_F(TransactionalDirectoryTest,testGetFilesInRoot)161 TEST_F(TransactionalDirectoryTest, testGetFilesInRoot) {
162 TransactionalDirectory dir(mFileSystem, "");
163 EXPECT_EQ(QStringList{"a.txt"}, dir.getFiles());
164 }
165
TEST_F(TransactionalDirectoryTest,testGetFilesInRootPath)166 TEST_F(TransactionalDirectoryTest, testGetFilesInRootPath) {
167 TransactionalDirectory dir(mFileSystem, "");
168 EXPECT_EQ(QStringList{"b.txt"}, dir.getFiles("a"));
169 }
170
TEST_F(TransactionalDirectoryTest,testGetFilesInSubdir)171 TEST_F(TransactionalDirectoryTest, testGetFilesInSubdir) {
172 TransactionalDirectory dir(mFileSystem, "a");
173 EXPECT_EQ(QStringList{"b.txt"}, dir.getFiles());
174 }
175
TEST_F(TransactionalDirectoryTest,testGetFilesInSubdirPath)176 TEST_F(TransactionalDirectoryTest, testGetFilesInSubdirPath) {
177 TransactionalDirectory dir(mFileSystem, "a");
178 EXPECT_EQ(QStringList{"c.txt"}, dir.getFiles("b"));
179 }
180
181 /*******************************************************************************
182 * Test fileExists()
183 ******************************************************************************/
184
TEST_F(TransactionalDirectoryTest,testFileExistsInRoot)185 TEST_F(TransactionalDirectoryTest, testFileExistsInRoot) {
186 TransactionalDirectory dir(mFileSystem, "");
187 EXPECT_TRUE(dir.fileExists("a.txt"));
188 EXPECT_FALSE(dir.fileExists("b.txt"));
189 }
190
TEST_F(TransactionalDirectoryTest,testFileExistsInRootPath)191 TEST_F(TransactionalDirectoryTest, testFileExistsInRootPath) {
192 TransactionalDirectory dir(mFileSystem, "");
193 EXPECT_TRUE(dir.fileExists("a/b.txt"));
194 EXPECT_FALSE(dir.fileExists("a/c.txt"));
195 }
196
TEST_F(TransactionalDirectoryTest,testFileExistsInSubdir)197 TEST_F(TransactionalDirectoryTest, testFileExistsInSubdir) {
198 TransactionalDirectory dir(mFileSystem, "a");
199 EXPECT_TRUE(dir.fileExists("b.txt"));
200 EXPECT_FALSE(dir.fileExists("c.txt"));
201 }
202
TEST_F(TransactionalDirectoryTest,testFileExistsInSubdirPath)203 TEST_F(TransactionalDirectoryTest, testFileExistsInSubdirPath) {
204 TransactionalDirectory dir(mFileSystem, "a");
205 EXPECT_TRUE(dir.fileExists("b/c.txt"));
206 EXPECT_FALSE(dir.fileExists("b/d.txt"));
207 }
208
209 /*******************************************************************************
210 * Test read()
211 ******************************************************************************/
212
TEST_F(TransactionalDirectoryTest,testReadInRoot)213 TEST_F(TransactionalDirectoryTest, testReadInRoot) {
214 TransactionalDirectory dir(mFileSystem, "");
215 EXPECT_EQ("a", dir.read("a.txt"));
216 EXPECT_THROW(dir.read("b.txt"), Exception);
217 }
218
TEST_F(TransactionalDirectoryTest,testReadInRootPath)219 TEST_F(TransactionalDirectoryTest, testReadInRootPath) {
220 TransactionalDirectory dir(mFileSystem, "");
221 EXPECT_EQ("b", dir.read("a/b.txt"));
222 EXPECT_THROW(dir.read("a/c.txt"), Exception);
223 }
224
TEST_F(TransactionalDirectoryTest,testReadInSubdir)225 TEST_F(TransactionalDirectoryTest, testReadInSubdir) {
226 TransactionalDirectory dir(mFileSystem, "a");
227 EXPECT_EQ("b", dir.read("b.txt"));
228 EXPECT_THROW(dir.read("c.txt"), Exception);
229 }
230
TEST_F(TransactionalDirectoryTest,testReadInSubdirPath)231 TEST_F(TransactionalDirectoryTest, testReadInSubdirPath) {
232 TransactionalDirectory dir(mFileSystem, "a");
233 EXPECT_EQ("c", dir.read("b/c.txt"));
234 EXPECT_THROW(dir.read("b/d.txt"), Exception);
235 }
236
237 /*******************************************************************************
238 * Test write()
239 ******************************************************************************/
240
TEST_F(TransactionalDirectoryTest,testWriteInRoot)241 TEST_F(TransactionalDirectoryTest, testWriteInRoot) {
242 TransactionalDirectory dir(mFileSystem, "");
243 dir.write("a.txt", "foo1");
244 EXPECT_EQ("foo1", mFileSystem->read("a.txt"));
245 }
246
TEST_F(TransactionalDirectoryTest,testWriteInRootPath)247 TEST_F(TransactionalDirectoryTest, testWriteInRootPath) {
248 TransactionalDirectory dir(mFileSystem, "");
249 dir.write("a/b.txt", "foo2");
250 EXPECT_EQ("foo2", mFileSystem->read("a/b.txt"));
251 }
252
TEST_F(TransactionalDirectoryTest,testWriteInSubdir)253 TEST_F(TransactionalDirectoryTest, testWriteInSubdir) {
254 TransactionalDirectory dir(mFileSystem, "a");
255 dir.write("b.txt", "foo3");
256 EXPECT_EQ("foo3", mFileSystem->read("a/b.txt"));
257 }
258
TEST_F(TransactionalDirectoryTest,testWriteInSubdirPath)259 TEST_F(TransactionalDirectoryTest, testWriteInSubdirPath) {
260 TransactionalDirectory dir(mFileSystem, "a");
261 dir.write("b/c.txt", "foo4");
262 EXPECT_EQ("foo4", mFileSystem->read("a/b/c.txt"));
263 }
264
265 /*******************************************************************************
266 * Test removeFile()
267 ******************************************************************************/
268
TEST_F(TransactionalDirectoryTest,testRemoveFileInRoot)269 TEST_F(TransactionalDirectoryTest, testRemoveFileInRoot) {
270 TransactionalDirectory dir(mFileSystem, "");
271 ASSERT_TRUE(dir.fileExists("a.txt"));
272 ASSERT_TRUE(mFileSystem->fileExists("a.txt"));
273 dir.removeFile("a.txt");
274 EXPECT_FALSE(dir.fileExists("a.txt"));
275 EXPECT_FALSE(mFileSystem->fileExists("a.txt"));
276 }
277
TEST_F(TransactionalDirectoryTest,testRemoveFileInRootPath)278 TEST_F(TransactionalDirectoryTest, testRemoveFileInRootPath) {
279 TransactionalDirectory dir(mFileSystem, "");
280 ASSERT_TRUE(dir.fileExists("a/b.txt"));
281 ASSERT_TRUE(mFileSystem->fileExists("a/b.txt"));
282 dir.removeFile("a/b.txt");
283 EXPECT_FALSE(dir.fileExists("a/b.txt"));
284 EXPECT_FALSE(mFileSystem->fileExists("a/b.txt"));
285 }
286
TEST_F(TransactionalDirectoryTest,testRemoveFileInSubdir)287 TEST_F(TransactionalDirectoryTest, testRemoveFileInSubdir) {
288 TransactionalDirectory dir(mFileSystem, "a");
289 ASSERT_TRUE(dir.fileExists("b.txt"));
290 ASSERT_TRUE(mFileSystem->fileExists("a/b.txt"));
291 dir.removeFile("b.txt");
292 EXPECT_FALSE(dir.fileExists("b.txt"));
293 EXPECT_FALSE(mFileSystem->fileExists("a/b.txt"));
294 }
295
TEST_F(TransactionalDirectoryTest,testRemoveFileInSubdirPath)296 TEST_F(TransactionalDirectoryTest, testRemoveFileInSubdirPath) {
297 TransactionalDirectory dir(mFileSystem, "a");
298 ASSERT_TRUE(dir.fileExists("b/c.txt"));
299 ASSERT_TRUE(mFileSystem->fileExists("a/b/c.txt"));
300 dir.removeFile("b/c.txt");
301 EXPECT_FALSE(dir.fileExists("b/c.txt"));
302 EXPECT_FALSE(mFileSystem->fileExists("a/b/c.txt"));
303 }
304
305 /*******************************************************************************
306 * Test removeDirRecursively()
307 ******************************************************************************/
308
TEST_F(TransactionalDirectoryTest,testRemoveDirRecursivelyInRoot)309 TEST_F(TransactionalDirectoryTest, testRemoveDirRecursivelyInRoot) {
310 TransactionalDirectory dir(mFileSystem, "");
311 ASSERT_EQ(QStringList{"a"}, dir.getDirs());
312 ASSERT_EQ(QStringList{"a"}, mFileSystem->getDirs());
313 dir.removeDirRecursively();
314 EXPECT_EQ(QStringList{}, dir.getDirs());
315 EXPECT_EQ(QStringList{}, dir.getFiles());
316 EXPECT_EQ(QStringList{}, mFileSystem->getDirs());
317 EXPECT_EQ(QStringList{}, mFileSystem->getFiles());
318 }
319
TEST_F(TransactionalDirectoryTest,testRemoveDirRecursivelyInRootPath)320 TEST_F(TransactionalDirectoryTest, testRemoveDirRecursivelyInRootPath) {
321 TransactionalDirectory dir(mFileSystem, "");
322 ASSERT_EQ(QStringList{"a"}, dir.getDirs());
323 ASSERT_EQ(QStringList{"a"}, mFileSystem->getDirs());
324 dir.removeDirRecursively("a");
325 EXPECT_EQ(QStringList{}, dir.getDirs());
326 EXPECT_EQ(QStringList{}, mFileSystem->getDirs());
327 EXPECT_EQ(QStringList{"a.txt"}, dir.getFiles());
328 EXPECT_EQ(QStringList{"a.txt"}, mFileSystem->getFiles());
329 }
330
TEST_F(TransactionalDirectoryTest,testRemoveDirRecursivelyInSubdir)331 TEST_F(TransactionalDirectoryTest, testRemoveDirRecursivelyInSubdir) {
332 TransactionalDirectory dir(mFileSystem, "a");
333 ASSERT_EQ(QStringList{"b"}, dir.getDirs());
334 ASSERT_EQ(QStringList{"a"}, mFileSystem->getDirs());
335 dir.removeDirRecursively();
336 EXPECT_EQ(QStringList{}, dir.getDirs());
337 EXPECT_EQ(QStringList{}, mFileSystem->getDirs());
338 EXPECT_EQ(QStringList{}, dir.getFiles());
339 EXPECT_EQ(QStringList{"a.txt"}, mFileSystem->getFiles());
340 }
341
TEST_F(TransactionalDirectoryTest,testRemoveDirRecursivelyInSubdirPath)342 TEST_F(TransactionalDirectoryTest, testRemoveDirRecursivelyInSubdirPath) {
343 TransactionalDirectory dir(mFileSystem, "a");
344 ASSERT_EQ(QStringList{"b"}, dir.getDirs());
345 ASSERT_EQ(QStringList{"a"}, mFileSystem->getDirs());
346 ASSERT_EQ(QStringList{"b"}, mFileSystem->getDirs("a"));
347 dir.removeDirRecursively("b");
348 EXPECT_EQ(QStringList{}, dir.getDirs());
349 EXPECT_EQ(QStringList{"a"}, mFileSystem->getDirs());
350 EXPECT_EQ(QStringList{}, mFileSystem->getDirs("a"));
351 EXPECT_EQ(QStringList{"b.txt"}, dir.getFiles());
352 EXPECT_EQ(QStringList{"b.txt"}, mFileSystem->getFiles("a"));
353 EXPECT_EQ(QStringList{}, dir.getFiles("b"));
354 EXPECT_EQ(QStringList{}, mFileSystem->getFiles("a/b"));
355 EXPECT_EQ(QStringList{"a.txt"}, mFileSystem->getFiles());
356 }
357
358 /*******************************************************************************
359 * Test copyTo()
360 ******************************************************************************/
361
TEST_F(TransactionalDirectoryTest,testCopyToFromRootToRoot)362 TEST_F(TransactionalDirectoryTest, testCopyToFromRootToRoot) {
363 TransactionalDirectory src(mFileSystem, "");
364 TransactionalDirectory dst(mEmptyFileSystem, "");
365 src.copyTo(dst);
366 EXPECT_EQ(mFileSystem, src.getFileSystem());
367 EXPECT_EQ("", src.getPath());
368 EXPECT_EQ(QStringList{"a"}, mFileSystem->getDirs());
369 EXPECT_EQ(QStringList{"a.txt"}, mFileSystem->getFiles());
370 EXPECT_EQ(QStringList{"b"}, mFileSystem->getDirs("a"));
371 EXPECT_EQ(QStringList{"b.txt"}, mFileSystem->getFiles("a"));
372 EXPECT_EQ(QStringList{"a"}, mEmptyFileSystem->getDirs());
373 EXPECT_EQ(QStringList{"a.txt"}, mEmptyFileSystem->getFiles());
374 EXPECT_EQ(QStringList{"b.txt"}, mEmptyFileSystem->getFiles("a"));
375 }
376
TEST_F(TransactionalDirectoryTest,testCopyToFromRootToSubdir)377 TEST_F(TransactionalDirectoryTest, testCopyToFromRootToSubdir) {
378 TransactionalDirectory src(mFileSystem, "");
379 TransactionalDirectory dst(mEmptyFileSystem, "a");
380 src.copyTo(dst);
381 EXPECT_EQ(mFileSystem, src.getFileSystem());
382 EXPECT_EQ("", src.getPath());
383 EXPECT_EQ(QStringList{"a"}, mFileSystem->getDirs());
384 EXPECT_EQ(QStringList{"a.txt"}, mFileSystem->getFiles());
385 EXPECT_EQ(QStringList{"b"}, mFileSystem->getDirs("a"));
386 EXPECT_EQ(QStringList{"b.txt"}, mFileSystem->getFiles("a"));
387 EXPECT_EQ(QStringList{"a"}, mEmptyFileSystem->getDirs());
388 EXPECT_EQ(QStringList{"a"}, mEmptyFileSystem->getDirs("a"));
389 EXPECT_EQ(QStringList{}, mEmptyFileSystem->getFiles());
390 EXPECT_EQ(QStringList{"a.txt"}, mEmptyFileSystem->getFiles("a"));
391 EXPECT_EQ(QStringList{"b.txt"}, mEmptyFileSystem->getFiles("a/a"));
392 }
393
TEST_F(TransactionalDirectoryTest,testCopyToFromSubdirToRoot)394 TEST_F(TransactionalDirectoryTest, testCopyToFromSubdirToRoot) {
395 TransactionalDirectory src(mFileSystem, "a");
396 TransactionalDirectory dst(mEmptyFileSystem, "");
397 src.copyTo(dst);
398 EXPECT_EQ(mFileSystem, src.getFileSystem());
399 EXPECT_EQ("a", src.getPath());
400 EXPECT_EQ(QStringList{"a"}, mFileSystem->getDirs());
401 EXPECT_EQ(QStringList{"a.txt"}, mFileSystem->getFiles());
402 EXPECT_EQ(QStringList{"b"}, mFileSystem->getDirs("a"));
403 EXPECT_EQ(QStringList{"b.txt"}, mFileSystem->getFiles("a"));
404 EXPECT_EQ(QStringList{"b"}, mEmptyFileSystem->getDirs());
405 EXPECT_EQ(QStringList{"b.txt"}, mEmptyFileSystem->getFiles());
406 EXPECT_EQ(QStringList{"c.txt"}, mEmptyFileSystem->getFiles("b"));
407 }
408
TEST_F(TransactionalDirectoryTest,testCopyToFromSubdirToSubdir)409 TEST_F(TransactionalDirectoryTest, testCopyToFromSubdirToSubdir) {
410 TransactionalDirectory src(mFileSystem, "a");
411 TransactionalDirectory dst(mEmptyFileSystem, "a");
412 src.copyTo(dst);
413 EXPECT_EQ(mFileSystem, src.getFileSystem());
414 EXPECT_EQ("a", src.getPath());
415 EXPECT_EQ(QStringList{"a"}, mFileSystem->getDirs());
416 EXPECT_EQ(QStringList{"a.txt"}, mFileSystem->getFiles());
417 EXPECT_EQ(QStringList{"b"}, mFileSystem->getDirs("a"));
418 EXPECT_EQ(QStringList{"b.txt"}, mFileSystem->getFiles("a"));
419 EXPECT_EQ(QStringList{"a"}, mEmptyFileSystem->getDirs());
420 EXPECT_EQ(QStringList{}, mEmptyFileSystem->getFiles());
421 EXPECT_EQ(QStringList{"b"}, mEmptyFileSystem->getDirs("a"));
422 EXPECT_EQ(QStringList{"b.txt"}, mEmptyFileSystem->getFiles("a"));
423 EXPECT_EQ(QStringList{"c"}, mEmptyFileSystem->getDirs("a/b"));
424 EXPECT_EQ(QStringList{"c.txt"}, mEmptyFileSystem->getFiles("a/b"));
425 }
426
427 /*******************************************************************************
428 * Test saveTo()
429 ******************************************************************************/
430
TEST_F(TransactionalDirectoryTest,testSaveToFromRootToRoot)431 TEST_F(TransactionalDirectoryTest, testSaveToFromRootToRoot) {
432 TransactionalDirectory src(mFileSystem, "");
433 TransactionalDirectory dst(mEmptyFileSystem, "");
434 src.saveTo(dst);
435 EXPECT_EQ(mEmptyFileSystem, src.getFileSystem());
436 EXPECT_EQ("", src.getPath());
437 EXPECT_EQ(QStringList{"a"}, mFileSystem->getDirs());
438 EXPECT_EQ(QStringList{"a.txt"}, mFileSystem->getFiles());
439 EXPECT_EQ(QStringList{"b"}, mFileSystem->getDirs("a"));
440 EXPECT_EQ(QStringList{"b.txt"}, mFileSystem->getFiles("a"));
441 EXPECT_EQ(QStringList{"a"}, mEmptyFileSystem->getDirs());
442 EXPECT_EQ(QStringList{"a.txt"}, mEmptyFileSystem->getFiles());
443 EXPECT_EQ(QStringList{"b.txt"}, mEmptyFileSystem->getFiles("a"));
444 }
445
TEST_F(TransactionalDirectoryTest,testSaveToFromRootToSubdir)446 TEST_F(TransactionalDirectoryTest, testSaveToFromRootToSubdir) {
447 TransactionalDirectory src(mFileSystem, "");
448 TransactionalDirectory dst(mEmptyFileSystem, "a");
449 src.saveTo(dst);
450 EXPECT_EQ(mEmptyFileSystem, src.getFileSystem());
451 EXPECT_EQ("a", src.getPath());
452 EXPECT_EQ(QStringList{"a"}, mFileSystem->getDirs());
453 EXPECT_EQ(QStringList{"a.txt"}, mFileSystem->getFiles());
454 EXPECT_EQ(QStringList{"b"}, mFileSystem->getDirs("a"));
455 EXPECT_EQ(QStringList{"b.txt"}, mFileSystem->getFiles("a"));
456 EXPECT_EQ(QStringList{"a"}, mEmptyFileSystem->getDirs());
457 EXPECT_EQ(QStringList{"a"}, mEmptyFileSystem->getDirs("a"));
458 EXPECT_EQ(QStringList{}, mEmptyFileSystem->getFiles());
459 EXPECT_EQ(QStringList{"a.txt"}, mEmptyFileSystem->getFiles("a"));
460 EXPECT_EQ(QStringList{"b.txt"}, mEmptyFileSystem->getFiles("a/a"));
461 }
462
TEST_F(TransactionalDirectoryTest,testSaveToFromSubdirToRoot)463 TEST_F(TransactionalDirectoryTest, testSaveToFromSubdirToRoot) {
464 TransactionalDirectory src(mFileSystem, "a");
465 TransactionalDirectory dst(mEmptyFileSystem, "");
466 src.saveTo(dst);
467 EXPECT_EQ(mEmptyFileSystem, src.getFileSystem());
468 EXPECT_EQ("", src.getPath());
469 EXPECT_EQ(QStringList{"a"}, mFileSystem->getDirs());
470 EXPECT_EQ(QStringList{"a.txt"}, mFileSystem->getFiles());
471 EXPECT_EQ(QStringList{"b"}, mFileSystem->getDirs("a"));
472 EXPECT_EQ(QStringList{"b.txt"}, mFileSystem->getFiles("a"));
473 EXPECT_EQ(QStringList{"b"}, mEmptyFileSystem->getDirs());
474 EXPECT_EQ(QStringList{"b.txt"}, mEmptyFileSystem->getFiles());
475 EXPECT_EQ(QStringList{"c.txt"}, mEmptyFileSystem->getFiles("b"));
476 }
477
TEST_F(TransactionalDirectoryTest,testSaveToFromSubdirToSubdir)478 TEST_F(TransactionalDirectoryTest, testSaveToFromSubdirToSubdir) {
479 TransactionalDirectory src(mFileSystem, "a");
480 TransactionalDirectory dst(mEmptyFileSystem, "a");
481 src.saveTo(dst);
482 EXPECT_EQ(mEmptyFileSystem, src.getFileSystem());
483 EXPECT_EQ("a", src.getPath());
484 EXPECT_EQ(QStringList{"a"}, mFileSystem->getDirs());
485 EXPECT_EQ(QStringList{"a.txt"}, mFileSystem->getFiles());
486 EXPECT_EQ(QStringList{"b"}, mFileSystem->getDirs("a"));
487 EXPECT_EQ(QStringList{"b.txt"}, mFileSystem->getFiles("a"));
488 EXPECT_EQ(QStringList{"a"}, mEmptyFileSystem->getDirs());
489 EXPECT_EQ(QStringList{}, mEmptyFileSystem->getFiles());
490 EXPECT_EQ(QStringList{"b"}, mEmptyFileSystem->getDirs("a"));
491 EXPECT_EQ(QStringList{"b.txt"}, mEmptyFileSystem->getFiles("a"));
492 EXPECT_EQ(QStringList{"c"}, mEmptyFileSystem->getDirs("a/b"));
493 EXPECT_EQ(QStringList{"c.txt"}, mEmptyFileSystem->getFiles("a/b"));
494 }
495
496 /*******************************************************************************
497 * Test moveTo()
498 ******************************************************************************/
499
TEST_F(TransactionalDirectoryTest,testMoveToFromRootToRoot)500 TEST_F(TransactionalDirectoryTest, testMoveToFromRootToRoot) {
501 TransactionalDirectory src(mFileSystem, "");
502 TransactionalDirectory dst(mEmptyFileSystem, "");
503 src.moveTo(dst);
504 EXPECT_EQ(mEmptyFileSystem, src.getFileSystem());
505 EXPECT_EQ("", src.getPath());
506 EXPECT_EQ(QStringList{}, mFileSystem->getDirs());
507 EXPECT_EQ(QStringList{}, mFileSystem->getFiles());
508 EXPECT_EQ(QStringList{"a"}, mEmptyFileSystem->getDirs());
509 EXPECT_EQ(QStringList{"a.txt"}, mEmptyFileSystem->getFiles());
510 EXPECT_EQ(QStringList{"b.txt"}, mEmptyFileSystem->getFiles("a"));
511 }
512
TEST_F(TransactionalDirectoryTest,testMoveToFromRootToSubdir)513 TEST_F(TransactionalDirectoryTest, testMoveToFromRootToSubdir) {
514 TransactionalDirectory src(mFileSystem, "");
515 TransactionalDirectory dst(mEmptyFileSystem, "a");
516 src.moveTo(dst);
517 EXPECT_EQ(mEmptyFileSystem, src.getFileSystem());
518 EXPECT_EQ("a", src.getPath());
519 EXPECT_EQ(QStringList{}, mFileSystem->getDirs());
520 EXPECT_EQ(QStringList{}, mFileSystem->getFiles());
521 EXPECT_EQ(QStringList{"a"}, mEmptyFileSystem->getDirs());
522 EXPECT_EQ(QStringList{"a"}, mEmptyFileSystem->getDirs("a"));
523 EXPECT_EQ(QStringList{}, mEmptyFileSystem->getFiles());
524 EXPECT_EQ(QStringList{"a.txt"}, mEmptyFileSystem->getFiles("a"));
525 EXPECT_EQ(QStringList{"b.txt"}, mEmptyFileSystem->getFiles("a/a"));
526 }
527
TEST_F(TransactionalDirectoryTest,testMoveToFromSubdirToRoot)528 TEST_F(TransactionalDirectoryTest, testMoveToFromSubdirToRoot) {
529 TransactionalDirectory src(mFileSystem, "a");
530 TransactionalDirectory dst(mEmptyFileSystem, "");
531 src.moveTo(dst);
532 EXPECT_EQ(mEmptyFileSystem, src.getFileSystem());
533 EXPECT_EQ("", src.getPath());
534 EXPECT_EQ(QStringList{}, mFileSystem->getDirs());
535 EXPECT_EQ(QStringList{"a.txt"}, mFileSystem->getFiles());
536 EXPECT_EQ(QStringList{"b"}, mEmptyFileSystem->getDirs());
537 EXPECT_EQ(QStringList{"b.txt"}, mEmptyFileSystem->getFiles());
538 EXPECT_EQ(QStringList{"c.txt"}, mEmptyFileSystem->getFiles("b"));
539 }
540
TEST_F(TransactionalDirectoryTest,testMoveToFromSubdirToSubdir)541 TEST_F(TransactionalDirectoryTest, testMoveToFromSubdirToSubdir) {
542 TransactionalDirectory src(mFileSystem, "a");
543 TransactionalDirectory dst(mEmptyFileSystem, "a");
544 src.moveTo(dst);
545 EXPECT_EQ(mEmptyFileSystem, src.getFileSystem());
546 EXPECT_EQ("a", src.getPath());
547 EXPECT_EQ(QStringList{}, mFileSystem->getDirs());
548 EXPECT_EQ(QStringList{"a.txt"}, mFileSystem->getFiles());
549 EXPECT_EQ(QStringList{"a"}, mEmptyFileSystem->getDirs());
550 EXPECT_EQ(QStringList{}, mEmptyFileSystem->getFiles());
551 EXPECT_EQ(QStringList{"b"}, mEmptyFileSystem->getDirs("a"));
552 EXPECT_EQ(QStringList{"b.txt"}, mEmptyFileSystem->getFiles("a"));
553 EXPECT_EQ(QStringList{"c"}, mEmptyFileSystem->getDirs("a/b"));
554 EXPECT_EQ(QStringList{"c.txt"}, mEmptyFileSystem->getFiles("a/b"));
555 }
556
557 /*******************************************************************************
558 * End of File
559 ******************************************************************************/
560
561 } // namespace tests
562 } // namespace librepcb
563