Lines Matching +full:external +full:- +full:contents
1 //===- unittests/Basic/VirtualFileSystem.cpp ---------------- VFS tests ---===//
8 //===----------------------------------------------------------------------===//
40 return I->second; in status()
54 if (LastSep == Path.size() || LastSep == Path.size()-1) in isInPath()
64 if (isInPath(I->first)) { in DirIterImpl()
65 CurrentEntry = I->second; in DirIterImpl()
73 if (isInPath(I->first)) { in increment()
74 CurrentEntry = I->second; in increment()
118 D->addRegularFile("/foo"); in TEST()
119 Status = D->status("/foo"); in TEST()
121 EXPECT_TRUE(Status->isStatusKnown()); in TEST()
122 EXPECT_FALSE(Status->isDirectory()); in TEST()
123 EXPECT_TRUE(Status->isRegularFile()); in TEST()
124 EXPECT_FALSE(Status->isSymlink()); in TEST()
125 EXPECT_FALSE(Status->isOther()); in TEST()
126 EXPECT_TRUE(Status->exists()); in TEST()
128 D->addDirectory("/bar"); in TEST()
129 Status = D->status("/bar"); in TEST()
131 EXPECT_TRUE(Status->isStatusKnown()); in TEST()
132 EXPECT_TRUE(Status->isDirectory()); in TEST()
133 EXPECT_FALSE(Status->isRegularFile()); in TEST()
134 EXPECT_FALSE(Status->isSymlink()); in TEST()
135 EXPECT_FALSE(Status->isOther()); in TEST()
136 EXPECT_TRUE(Status->exists()); in TEST()
138 D->addSymlink("/baz"); in TEST()
139 Status = D->status("/baz"); in TEST()
141 EXPECT_TRUE(Status->isStatusKnown()); in TEST()
142 EXPECT_FALSE(Status->isDirectory()); in TEST()
143 EXPECT_FALSE(Status->isRegularFile()); in TEST()
144 EXPECT_TRUE(Status->isSymlink()); in TEST()
145 EXPECT_FALSE(Status->isOther()); in TEST()
146 EXPECT_TRUE(Status->exists()); in TEST()
148 EXPECT_TRUE(Status->equivalent(*Status)); in TEST()
149 ErrorOr<vfs::Status> Status2 = D->status("/foo"); in TEST()
151 EXPECT_FALSE(Status->equivalent(*Status2)); in TEST()
157 EXPECT_FALSE(Status = D->status("/foo")); in TEST()
160 EXPECT_FALSE(Status = O->status("/foo")); in TEST()
162 D->addRegularFile("/foo"); in TEST()
163 Status = D->status("/foo"); in TEST()
167 Status2 = O->status("/foo"); in TEST()
169 EXPECT_TRUE(Status->equivalent(*Status2)); in TEST()
178 O->pushOverlay(Middle); in TEST()
179 O->pushOverlay(Top); in TEST()
186 Base->addRegularFile("/foo"); in TEST()
187 StatusB = Base->status("/foo"); in TEST()
189 Status1 = O->status("/foo"); in TEST()
191 Middle->addRegularFile("/foo"); in TEST()
192 StatusM = Middle->status("/foo"); in TEST()
194 Status2 = O->status("/foo"); in TEST()
196 Top->addRegularFile("/foo"); in TEST()
197 StatusT = Top->status("/foo"); in TEST()
199 Status3 = O->status("/foo"); in TEST()
202 EXPECT_TRUE(Status1->equivalent(*StatusB)); in TEST()
203 EXPECT_TRUE(Status2->equivalent(*StatusM)); in TEST()
204 EXPECT_TRUE(Status3->equivalent(*StatusT)); in TEST()
206 EXPECT_FALSE(Status1->equivalent(*Status2)); in TEST()
207 EXPECT_FALSE(Status2->equivalent(*Status3)); in TEST()
208 EXPECT_FALSE(Status1->equivalent(*Status3)); in TEST()
216 O->pushOverlay(Upper); in TEST()
218 Lower->addDirectory("/lower-only"); in TEST()
219 Upper->addDirectory("/upper-only"); in TEST()
221 // non-merged paths should be the same in TEST()
222 ErrorOr<vfs::Status> Status1 = Lower->status("/lower-only"); in TEST()
224 ErrorOr<vfs::Status> Status2 = O->status("/lower-only"); in TEST()
226 EXPECT_TRUE(Status1->equivalent(*Status2)); in TEST()
228 Status1 = Upper->status("/upper-only"); in TEST()
230 Status2 = O->status("/upper-only"); in TEST()
232 EXPECT_TRUE(Status1->equivalent(*Status2)); in TEST()
241 O->pushOverlay(Upper); in TEST()
244 Lower->addDirectory("/both", sys::fs::owner_read); in TEST()
245 Upper->addDirectory("/both", sys::fs::owner_all | sys::fs::group_read); in TEST()
246 Status = O->status("/both"); in TEST()
248 EXPECT_EQ(0740, Status->getPermissions()); in TEST()
251 Lower->addRegularFile("/both/foo", sys::fs::owner_read); in TEST()
252 Upper->addRegularFile("/both/bar", sys::fs::owner_write); in TEST()
253 Status = O->status("/both/foo"); in TEST()
255 EXPECT_EQ(0400, Status->getPermissions()); in TEST()
256 Status = O->status("/both/bar"); in TEST()
258 EXPECT_EQ(0200, Status->getPermissions()); in TEST()
285 ScopedDir TestDirectory("virtual-file-system-test", /*Unique*/true); in TEST()
289 vfs::directory_iterator I = FS->dir_begin(Twine(TestDirectory), EC); in TEST()
298 I = FS->dir_begin(Twine(TestDirectory), EC); in TEST()
302 EXPECT_TRUE(I->getName().endswith("a") || I->getName().endswith("c")); in TEST()
306 EXPECT_TRUE(I->getName().endswith("a") || I->getName().endswith("c")); in TEST()
312 ScopedDir TestDirectory("virtual-file-system-test", /*Unique*/true); in TEST()
330 std::vector<std::string> Contents; in TEST() local
333 Contents.push_back(I->getName()); in TEST()
336 // Check contents, which may be in any order in TEST()
337 EXPECT_EQ(4U, Contents.size()); in TEST()
339 for (const std::string &Name : Contents) { in TEST()
341 int Index = Name[Name.size()-1] - 'a'; in TEST()
366 EXPECT_EQ(*ExpectedIter, I->getName()); in checkContents()
377 O->pushOverlay(Upper); in TEST()
380 checkContents(O->dir_begin("/", EC), ArrayRef<StringRef>()); in TEST()
382 Lower->addRegularFile("/file1"); in TEST()
383 checkContents(O->dir_begin("/", EC), ArrayRef<StringRef>("/file1")); in TEST()
385 Upper->addRegularFile("/file2"); in TEST()
387 const char *Contents[] = {"/file2", "/file1"}; in TEST() local
388 checkContents(O->dir_begin("/", EC), makeStringRefVector(Contents)); in TEST()
391 Lower->addDirectory("/dir1"); in TEST()
392 Lower->addRegularFile("/dir1/foo"); in TEST()
393 Upper->addDirectory("/dir2"); in TEST()
394 Upper->addRegularFile("/dir2/foo"); in TEST()
395 checkContents(O->dir_begin("/dir2", EC), ArrayRef<StringRef>("/dir2/foo")); in TEST()
397 const char *Contents[] = {"/dir2", "/file2", "/dir1", "/file1"}; in TEST() local
398 checkContents(O->dir_begin("/", EC), makeStringRefVector(Contents)); in TEST()
408 O->pushOverlay(Middle); in TEST()
409 O->pushOverlay(Upper); in TEST()
415 Lower->addRegularFile("/file1"); in TEST()
419 Upper->addDirectory("/dir"); in TEST()
420 Upper->addRegularFile("/dir/file2"); in TEST()
422 const char *Contents[] = {"/dir", "/dir/file2", "/file1"}; in TEST() local
424 makeStringRefVector(Contents)); in TEST()
427 Lower->addDirectory("/dir1"); in TEST()
428 Lower->addRegularFile("/dir1/foo"); in TEST()
429 Lower->addDirectory("/dir1/a"); in TEST()
430 Lower->addRegularFile("/dir1/a/b"); in TEST()
431 Middle->addDirectory("/a"); in TEST()
432 Middle->addDirectory("/a/b"); in TEST()
433 Middle->addDirectory("/a/b/c"); in TEST()
434 Middle->addRegularFile("/a/b/c/d"); in TEST()
435 Middle->addRegularFile("/hiddenByUp"); in TEST()
436 Upper->addDirectory("/dir2"); in TEST()
437 Upper->addRegularFile("/dir2/foo"); in TEST()
438 Upper->addRegularFile("/hiddenByUp"); in TEST()
442 const char *Contents[] = { "/dir", "/dir/file2", "/dir2", "/dir2/foo", in TEST() local
446 makeStringRefVector(Contents)); in TEST()
456 O->pushOverlay(Middle); in TEST()
457 O->pushOverlay(Upper); in TEST()
460 checkContents(O->dir_begin("/", EC), ArrayRef<StringRef>()); in TEST()
462 Middle->addRegularFile("/file2"); in TEST()
463 checkContents(O->dir_begin("/", EC), ArrayRef<StringRef>("/file2")); in TEST()
465 Lower->addRegularFile("/file1"); in TEST()
466 Upper->addRegularFile("/file3"); in TEST()
468 const char *Contents[] = {"/file3", "/file2", "/file1"}; in TEST() local
469 checkContents(O->dir_begin("/", EC), makeStringRefVector(Contents)); in TEST()
479 O->pushOverlay(Middle); in TEST()
480 O->pushOverlay(Upper); in TEST()
483 Lower->addRegularFile("/onlyInLow", sys::fs::owner_read); in TEST()
484 Lower->addRegularFile("/hiddenByMid", sys::fs::owner_read); in TEST()
485 Lower->addRegularFile("/hiddenByUp", sys::fs::owner_read); in TEST()
486 Middle->addRegularFile("/onlyInMid", sys::fs::owner_write); in TEST()
487 Middle->addRegularFile("/hiddenByMid", sys::fs::owner_write); in TEST()
488 Middle->addRegularFile("/hiddenByUp", sys::fs::owner_write); in TEST()
489 Upper->addRegularFile("/onlyInUp", sys::fs::owner_all); in TEST()
490 Upper->addRegularFile("/hiddenByUp", sys::fs::owner_all); in TEST()
492 const char *Contents[] = {"/hiddenByUp", "/onlyInUp", "/hiddenByMid", in TEST() local
494 checkContents(O->dir_begin("/", EC), makeStringRefVector(Contents)); in TEST()
497 // Make sure we get the top-most entry in TEST()
500 vfs::directory_iterator I = O->dir_begin("/", EC), E; in TEST()
502 if (I->getName() == "/hiddenByUp") in TEST()
505 EXPECT_EQ(sys::fs::owner_all, I->getPermissions()); in TEST()
509 vfs::directory_iterator I = O->dir_begin("/", EC), E; in TEST()
511 if (I->getName() == "/hiddenByMid") in TEST()
514 EXPECT_EQ(sys::fs::owner_write, I->getPermissions()); in TEST()
530 ++Test->NumDiagnostics; in CountingDiagHandler()
563 Lower->addRegularFile("//root/foo/bar/a"); in TEST_F()
569 " 'contents': [ {\n" in TEST_F()
572 " 'external-contents': '//root/foo/bar/a'\n" in TEST_F()
577 " 'external-contents': '//root/foo/b'\n" in TEST_F()
588 O->pushOverlay(FS); in TEST_F()
591 ErrorOr<vfs::Status> S = O->status("//root/file1"); in TEST_F()
593 EXPECT_EQ("//root/foo/bar/a", S->getName()); in TEST_F()
595 ErrorOr<vfs::Status> SLower = O->status("//root/foo/bar/a"); in TEST_F()
596 EXPECT_EQ("//root/foo/bar/a", SLower->getName()); in TEST_F()
597 EXPECT_TRUE(S->equivalent(*SLower)); in TEST_F()
600 S = O->status("//root/"); in TEST_F()
602 EXPECT_TRUE(S->isDirectory()); in TEST_F()
603 EXPECT_TRUE(S->equivalent(*O->status("//root/"))); // non-volatile UniqueID in TEST_F()
606 EXPECT_EQ(O->status("//root/file2").getError(), in TEST_F()
613 Lower->addRegularFile("//root/foo/bar/a"); in TEST_F()
615 getFromYAMLString("{ 'case-sensitive': 'false',\n" in TEST_F()
620 " 'contents': [ {\n" in TEST_F()
623 " 'external-contents': '//root/foo/bar/a'\n" in TEST_F()
632 O->pushOverlay(FS); in TEST_F()
634 ErrorOr<vfs::Status> S = O->status("//root/XX"); in TEST_F()
637 ErrorOr<vfs::Status> SS = O->status("//root/xx"); in TEST_F()
639 EXPECT_TRUE(S->equivalent(*SS)); in TEST_F()
640 SS = O->status("//root/xX"); in TEST_F()
641 EXPECT_TRUE(S->equivalent(*SS)); in TEST_F()
642 SS = O->status("//root/Xx"); in TEST_F()
643 EXPECT_TRUE(S->equivalent(*SS)); in TEST_F()
649 Lower->addRegularFile("//root/foo/bar/a"); in TEST_F()
651 getFromYAMLString("{ 'case-sensitive': 'true',\n" in TEST_F()
656 " 'contents': [ {\n" in TEST_F()
659 " 'external-contents': '//root/foo/bar/a'\n" in TEST_F()
668 O->pushOverlay(FS); in TEST_F()
670 ErrorOr<vfs::Status> SS = O->status("//root/xx"); in TEST_F()
672 SS = O->status("//root/xX"); in TEST_F()
674 SS = O->status("//root/Xx"); in TEST_F()
682 // invalid YAML at top-level in TEST_F()
689 "{ 'roots':[ { 'name': 'foo', 'type': 'directory', 'contents': [}", in TEST_F()
696 FS = getFromYAMLString("{ 'case-sensitive': 'maybe', 'roots':[] }", Lower); in TEST_F()
707 "{ 'roots':[ { 'type': 'other', 'name': 'me', 'contents': '' }", Lower); in TEST_F()
710 "'external-contents': 'other' }", in TEST_F()
714 "{ 'roots':[ { 'type': 'file', 'name': 'me', 'external-contents': [] }", in TEST_F()
718 "{ 'roots':[ { 'type': 'file', 'name': 'me', 'external-contents': {} }", in TEST_F()
722 "{ 'roots':[ { 'type': 'directory', 'name': 'me', 'contents': {} }", in TEST_F()
726 "{ 'roots':[ { 'type': 'directory', 'name': 'me', 'contents': '' }", in TEST_F()
730 "{ 'roots':[ { 'thingy': 'directory', 'name': 'me', 'contents': [] }", in TEST_F()
738 "{ 'roots':[ { 'type': 'file', 'external-contents': 'other' }", Lower); in TEST_F()
740 FS = getFromYAMLString("{ 'roots':[ { 'name': 'me', 'contents': [] }", Lower); in TEST_F()
747 "{ 'case-sensitive':'true', 'case-sensitive':'true', 'roots':[] }", in TEST_F()
752 "'external-contents':'blah' } ] }", in TEST_F()
763 FS = getFromYAMLRawString("{ 'version':-1, 'roots':[] }", Lower); in TEST_F()
772 Lower->addRegularFile("//root/external/file"); in TEST_F()
777 " 'external-contents': '//root/external/file'\n" in TEST_F()
780 " 'use-external-name': true,\n" in TEST_F()
781 " 'external-contents': '//root/external/file'\n" in TEST_F()
784 " 'use-external-name': false,\n" in TEST_F()
785 " 'external-contents': '//root/external/file'\n" in TEST_F()
791 EXPECT_EQ("//root/external/file", FS->status("//root/A")->getName()); in TEST_F()
793 EXPECT_EQ("//root/external/file", FS->status("//root/B")->getName()); in TEST_F()
794 EXPECT_EQ("//root/C", FS->status("//root/C")->getName()); in TEST_F()
798 "{ 'use-external-names': false,\n" in TEST_F()
801 " 'external-contents': '//root/external/file'\n" in TEST_F()
804 " 'use-external-name': true,\n" in TEST_F()
805 " 'external-contents': '//root/external/file'\n" in TEST_F()
808 " 'use-external-name': false,\n" in TEST_F()
809 " 'external-contents': '//root/external/file'\n" in TEST_F()
815 EXPECT_EQ("//root/A", FS->status("//root/A")->getName()); in TEST_F()
817 EXPECT_EQ("//root/external/file", FS->status("//root/B")->getName()); in TEST_F()
818 EXPECT_EQ("//root/C", FS->status("//root/C")->getName()); in TEST_F()
823 Lower->addRegularFile("//root/other"); in TEST_F()
829 " 'external-contents': '//root/other' }]\n" in TEST_F()
832 EXPECT_FALSE(FS->status("//root/path/to/file").getError()); in TEST_F()
833 EXPECT_FALSE(FS->status("//root/path/to").getError()); in TEST_F()
834 EXPECT_FALSE(FS->status("//root/path").getError()); in TEST_F()
835 EXPECT_FALSE(FS->status("//root/").getError()); in TEST_F()
841 " 'contents': [ { 'type': 'file', 'name': 'file',\n" in TEST_F()
842 " 'external-contents': '//root/other' }]}]\n" in TEST_F()
845 EXPECT_FALSE(FS->status("//root/path/to/file").getError()); in TEST_F()
846 EXPECT_FALSE(FS->status("//root/path/to").getError()); in TEST_F()
847 EXPECT_FALSE(FS->status("//root/path").getError()); in TEST_F()
848 EXPECT_FALSE(FS->status("//root/").getError()); in TEST_F()
854 " 'contents': [ { 'type': 'file', 'name': 'path/to/file',\n" in TEST_F()
855 " 'external-contents': '//root/other' }]}]\n" in TEST_F()
858 EXPECT_FALSE(FS->status("//root/path/to/file").getError()); in TEST_F()
859 EXPECT_FALSE(FS->status("//root/path/to").getError()); in TEST_F()
860 EXPECT_FALSE(FS->status("//root/path").getError()); in TEST_F()
861 EXPECT_FALSE(FS->status("//root/").getError()); in TEST_F()
866 Lower->addRegularFile("//root/other"); in TEST_F()
872 " 'contents': [ { 'type': 'file', 'name': 'file',\n" in TEST_F()
873 " 'external-contents': '//root/other' }]}]\n" in TEST_F()
876 EXPECT_FALSE(FS->status("//root/path/to/file").getError()); in TEST_F()
877 EXPECT_FALSE(FS->status("//root/path/to").getError()); in TEST_F()
878 EXPECT_FALSE(FS->status("//root/path").getError()); in TEST_F()
879 EXPECT_FALSE(FS->status("//root/").getError()); in TEST_F()
884 Lower->addDirectory("//root/"); in TEST_F()
885 Lower->addDirectory("//root/foo"); in TEST_F()
886 Lower->addDirectory("//root/foo/bar"); in TEST_F()
887 Lower->addRegularFile("//root/foo/bar/a"); in TEST_F()
888 Lower->addRegularFile("//root/foo/bar/b"); in TEST_F()
889 Lower->addRegularFile("//root/file3"); in TEST_F()
891 getFromYAMLString("{ 'use-external-names': false,\n" in TEST_F()
896 " 'contents': [ {\n" in TEST_F()
899 " 'external-contents': '//root/foo/bar/a'\n" in TEST_F()
904 " 'external-contents': '//root/foo/bar/b'\n" in TEST_F()
915 O->pushOverlay(FS); in TEST_F()
919 const char *Contents[] = {"//root/file1", "//root/file2", "//root/file3", in TEST_F() local
921 checkContents(O->dir_begin("//root/", EC), makeStringRefVector(Contents)); in TEST_F()
925 const char *Contents[] = {"//root/foo/bar/a", "//root/foo/bar/b"}; in TEST_F() local
926 checkContents(O->dir_begin("//root/foo/bar", EC), in TEST_F()
927 makeStringRefVector(Contents)); in TEST_F()