skipped 56 lines 57 57 } 58 58 for _, c := range cases { 59 59 t.Run(c.name, func(t *testing.T) { 60 - resolver, err := newDirectoryResolver(c.relativeRoot) 60 + resolver, err := newDirectoryResolver(c.relativeRoot, " " ) 61 61 assert.NoError(t, err) 62 62 63 63 refs, err := resolver.FilesByPath(c.input) skipped 47 lines 111 111 absRoot, err := filepath.Abs(c.relativeRoot) 112 112 require.NoError(t, err) 113 113 114 - resolver, err := newDirectoryResolver(absRoot) 114 + resolver, err := newDirectoryResolver(absRoot, " " ) 115 115 assert.NoError(t, err) 116 116 117 117 refs, err := resolver.FilesByPath(c.input) skipped 54 lines 172 172 } 173 173 for _, c := range cases { 174 174 t.Run(c.name, func(t *testing.T) { 175 - resolver, err := newDirectoryResolver(c.root) 175 + resolver, err := newDirectoryResolver(c.root, " " ) 176 176 assert.NoError(t, err) 177 177 178 178 hasPath := resolver.HasPath(c.input) skipped 41 lines 220 220 } 221 221 for _, c := range cases { 222 222 t.Run(c.name, func(t *testing.T) { 223 - resolver, err := newDirectoryResolver("./test-fixtures") 223 + resolver, err := newDirectoryResolver("./test-fixtures", " " ) 224 224 assert.NoError(t, err) 225 225 refs, err := resolver.FilesByPath(c.input...) 226 226 assert.NoError(t, err) skipped 6 lines 233 233 } 234 234 235 235 func TestDirectoryResolver_FilesByGlobMultiple(t *testing.T) { 236 - resolver, err := newDirectoryResolver("./test-fixtures") 236 + resolver, err := newDirectoryResolver("./test-fixtures", " " ) 237 237 assert.NoError(t, err) 238 238 refs, err := resolver.FilesByGlob("**/image-symlinks/file*") 239 239 assert.NoError(t, err) skipped 2 lines 242 242 } 243 243 244 244 func TestDirectoryResolver_FilesByGlobRecursive(t *testing.T) { 245 - resolver, err := newDirectoryResolver("./test-fixtures/image-symlinks") 245 + resolver, err := newDirectoryResolver("./test-fixtures/image-symlinks", " " ) 246 246 assert.NoError(t, err) 247 247 refs, err := resolver.FilesByGlob("**/*.txt") 248 248 assert.NoError(t, err) skipped 1 lines 250 250 } 251 251 252 252 func TestDirectoryResolver_FilesByGlobSingle(t *testing.T) { 253 - resolver, err := newDirectoryResolver("./test-fixtures") 253 + resolver, err := newDirectoryResolver("./test-fixtures", " " ) 254 254 assert.NoError(t, err) 255 255 refs, err := resolver.FilesByGlob("**/image-symlinks/*1.txt") 256 256 assert.NoError(t, err) skipped 20 lines 277 277 278 278 for _, test := range tests { 279 279 t.Run(test.name, func(t *testing.T) { 280 - resolver, err := newDirectoryResolver("./test-fixtures/symlinks-simple") 280 + resolver, err := newDirectoryResolver("./test-fixtures/symlinks-simple", " " ) 281 281 assert.NoError(t, err) 282 282 283 283 refs, err := resolver.FilesByPath(test.fixture) skipped 16 lines 300 300 301 301 func TestDirectoryResolverDoesNotIgnoreRelativeSystemPaths(t *testing.T) { 302 302 // let's make certain that "dev/place" is not ignored, since it is not "/dev/place" 303 - resolver, err := newDirectoryResolver("test-fixtures/system_paths/target") 303 + resolver, err := newDirectoryResolver("test-fixtures/system_paths/target", " " ) 304 304 assert.NoError(t, err) 305 305 // ensure the correct filter function is wired up by default 306 306 expectedFn := reflect.ValueOf(isUnallowableFileType) skipped 124 lines 431 431 432 432 func Test_directoryResolver_index(t *testing.T) { 433 433 // note: this test is testing the effects from newDirectoryResolver, indexTree, and addPathToIndex 434 - r, err := newDirectoryResolver("test-fixtures/system_paths/target") 434 + r, err := newDirectoryResolver("test-fixtures/system_paths/target", " " ) 435 435 if err != nil { 436 436 t.Fatalf("unable to get indexed dir resolver: %+v", err) 437 437 } skipped 170 lines 608 608 } 609 609 for _, test := range tests { 610 610 t.Run(test.fixturePath, func(t *testing.T) { 611 - resolver, err := newDirectoryResolver(test.fixturePath) 611 + resolver, err := newDirectoryResolver(test.fixturePath, " " ) 612 612 assert.NoError(t, err) 613 613 locations, err := resolver.FilesByMIMEType(test.mimeType) 614 614 assert.NoError(t, err) skipped 6 lines 621 621 } 622 622 623 623 func Test_IndexingNestedSymLinks(t *testing.T) { 624 - resolver, err := newDirectoryResolver("./test-fixtures/symlinks-simple") 624 + resolver, err := newDirectoryResolver("./test-fixtures/symlinks-simple", " " ) 625 625 require.NoError(t, err) 626 626 627 627 // check that we can get the real path skipped 46 lines 674 674 return strings.HasSuffix(path, string(filepath.Separator)+"readme") 675 675 } 676 676 677 - resolver, err := newDirectoryResolver("./test-fixtures/symlinks-simple", filterFn) 677 + resolver, err := newDirectoryResolver("./test-fixtures/symlinks-simple", " " , filterFn) 678 678 require.NoError(t, err) 679 679 680 680 // the path to the real file is PRUNED from the index, so we should NOT expect a location returned skipped 13 lines 694 694 } 695 695 696 696 func Test_IndexingNestedSymLinksOutsideOfRoot(t *testing.T) { 697 - resolver, err := newDirectoryResolver("./test-fixtures/symlinks-multiple-roots/root") 697 + resolver, err := newDirectoryResolver("./test-fixtures/symlinks-multiple-roots/root", " " ) 698 698 require.NoError(t, err) 699 699 700 700 // check that we can get the real path skipped 11 lines 712 712 } 713 713 714 714 func Test_RootViaSymlink(t *testing.T) { 715 - resolver, err := newDirectoryResolver("./test-fixtures/symlinked-root/nested/link-root") 715 + resolver, err := newDirectoryResolver("./test-fixtures/symlinked-root/nested/link-root", " " ) 716 716 require.NoError(t, err) 717 717 718 718 locations, err := resolver.FilesByPath("./file1.txt") skipped 34 lines 753 753 } 754 754 for _, test := range tests { 755 755 t.Run(test.name, func(t *testing.T) { 756 - r, err := newDirectoryResolver(".") 756 + r, err := newDirectoryResolver(".", " " ) 757 757 require.NoError(t, err) 758 758 759 759 actual, err := r.FileContentsByLocation(test.location) skipped 59 lines 819 819 820 820 func Test_SymlinkLoopWithGlobsShouldResolve(t *testing.T) { 821 821 test := func(t *testing.T) { 822 - resolver, err := newDirectoryResolver("./test-fixtures/symlinks-loop") 822 + resolver, err := newDirectoryResolver("./test-fixtures/symlinks-loop", " " ) 823 823 require.NoError(t, err) 824 824 825 825 locations, err := resolver.FilesByGlob("**/file.target") skipped 27 lines 853 853 return path != "/" 854 854 } 855 855 856 - resolver, err := newDirectoryResolver("/", filterFn) 856 + resolver, err := newDirectoryResolver("/", " " , filterFn) 857 857 require.NoError(t, err) 858 858 859 859 exists, ref, err := resolver.fileTree.File(file.Path("/")) skipped 10 lines 870 870 tempFile, err := os.CreateTemp("", "") 871 871 require.NoError(t, err) 872 872 873 - resolver, err := newDirectoryResolver(tempFile.Name()) 873 + resolver, err := newDirectoryResolver(tempFile.Name(), " " ) 874 874 require.NoError(t, err) 875 875 876 876 t.Run("filtering path with nil os.FileInfo", func(t *testing.T) { skipped 9 lines 886 886 }) 887 887 } 888 888 889 + func TestDirectoryResolver_FilesByPath_baseRoot(t *testing.T) { 890 + cases := []struct { 891 + name string 892 + root string 893 + input string 894 + expected []string 895 + }{ 896 + { 897 + name: "should find the base file", 898 + root: "./test-fixtures/symlinks-base/", 899 + input: "./base", 900 + expected: []string{ 901 + "base", 902 + }, 903 + }, 904 + { 905 + name: "should follow a link with a pivoted root", 906 + root: "./test-fixtures/symlinks-base/", 907 + input: "./foo", 908 + expected: []string{ 909 + "base", 910 + }, 911 + }, 912 + { 913 + name: "should follow a relative link with extra parents", 914 + root: "./test-fixtures/symlinks-base/", 915 + input: "./bar", 916 + expected: []string{ 917 + "base", 918 + }, 919 + }, 920 + { 921 + name: "should follow an absolute link with extra parents", 922 + root: "./test-fixtures/symlinks-base/", 923 + input: "./baz", 924 + expected: []string{ 925 + "base", 926 + }, 927 + }, 928 + { 929 + name: "should follow an absolute link with extra parents", 930 + root: "./test-fixtures/symlinks-base/", 931 + input: "./sub/link", 932 + expected: []string{ 933 + "sub/item", 934 + }, 935 + }, 936 + { 937 + name: "should follow chained pivoted link", 938 + root: "./test-fixtures/symlinks-base/", 939 + input: "./chain", 940 + expected: []string{ 941 + "base", 942 + }, 943 + }, 944 + } 945 + for _, c := range cases { 946 + t.Run(c.name, func(t *testing.T) { 947 + resolver, err := newDirectoryResolver(c.root, c.root) 948 + assert.NoError(t, err) 949 + 950 + refs, err := resolver.FilesByPath(c.input) 951 + require.NoError(t, err) 952 + assert.Len(t, refs, len(c.expected)) 953 + s := strset.New() 954 + for _, actual := range refs { 955 + s.Add(actual.RealPath) 956 + } 957 + assert.ElementsMatch(t, c.expected, s.List()) 958 + }) 959 + } 960 + } 961 +