def test_filter_include(): all_file_names = [ "foo.py", "foo.go", "foo.java", "foo/bar.py", "foo/bar.go", "bar/foo/baz/bar.go", "foo/bar.java", "bar/baz", "baz.py", "baz.go", "baz.java", "bar/foo/foo.py", "foo", "bar/baz/foo/a.py", "bar/baz/foo/b.py", "bar/baz/foo/c.py", "bar/baz/qux/foo/a.py", "/foo/bar/baz/a.py", ] all_files = set({Path(elem) for elem in all_file_names}) # All .py files assert len(TargetManager.filter_includes(all_files, ["*.py"])) == 9 # All files in a foo directory ancestor assert len(TargetManager.filter_includes(all_files, ["foo"])) == 11 # All files with an ancestor named bar/baz assert len(TargetManager.filter_includes(all_files, ["bar/baz"])) == 6 # All go files assert len(TargetManager.filter_includes(all_files, ["*.go"])) == 4 # All go and java files assert len(TargetManager.filter_includes(all_files, ["*.go", "*.java"])) == 7 # All go files with a direct ancestor named foo assert len(TargetManager.filter_includes(all_files, ["foo/*.go"])) == 1
def test_filter_include(): all_file_names = [ "/foo/bar/baz/a.py", "bar/baz", "bar/baz/foo/a.py", "bar/baz/foo/b.py", "bar/baz/foo/c.py", "bar/baz/qux/foo/a.py", "bar/foo/baz/bar.go", "bar/foo/foo.py", "baz.go", "baz.java", "baz.py", "baz/foo", "foo", "foo.go", "foo.java", "foo.py", "foo/bar.go", "foo/bar.java", "foo/bar.py", ] all_files = frozenset({Path(elem) for elem in all_file_names}) # All .py files assert TargetManager.filter_includes(all_files, ["*.py"]) == { Path(p) for p in [ "/foo/bar/baz/a.py", "bar/baz/foo/a.py", "bar/baz/foo/b.py", "bar/baz/foo/c.py", "bar/baz/qux/foo/a.py", "bar/foo/foo.py", "baz.py", "foo.py", "foo/bar.py", ] } # All go files assert TargetManager.filter_includes(all_files, ["*.go"]) == { Path(p) for p in [ "bar/foo/baz/bar.go", "baz.go", "foo.go", "foo/bar.go", ] } # All go and java files assert TargetManager.filter_includes(all_files, ["*.go", "*.java"]) == { Path(p) for p in [ "bar/foo/baz/bar.go", "baz.go", "baz.java", "foo.go", "foo.java", "foo/bar.go", "foo/bar.java", ] } # All files named foo or in a foo directory ancestor assert TargetManager.filter_includes(all_files, ["foo"]) == { Path(p) for p in [ "/foo/bar/baz/a.py", "bar/baz/foo/a.py", "bar/baz/foo/b.py", "bar/baz/foo/c.py", "bar/baz/qux/foo/a.py", "bar/foo/baz/bar.go", "bar/foo/foo.py", "baz/foo", "foo", "foo/bar.go", "foo/bar.java", "foo/bar.py", ] } # All files with an ancestor named bar/baz assert TargetManager.filter_includes(all_files, ["bar/baz"]) == { Path(p) for p in [ "/foo/bar/baz/a.py", "bar/baz", "bar/baz/foo/a.py", "bar/baz/foo/b.py", "bar/baz/foo/c.py", "bar/baz/qux/foo/a.py", ] } # All go files with a direct ancestor named foo assert TargetManager.filter_includes( all_files, ["foo/*.go"]) == {Path(p) for p in [ "foo/bar.go", ]} # All go files with a ancestor named foo assert TargetManager.filter_includes(all_files, ["foo/**/*.go"]) == { Path(p) for p in [ "bar/foo/baz/bar.go", "foo/bar.go", ] } # All py files with three-characters name assert TargetManager.filter_includes(all_files, ["???.py"]) == { Path(p) for p in [ "bar/foo/foo.py", "baz.py", "foo.py", "foo/bar.py", ] } # Test some different variantions of the pattern yield the same result. assert TargetManager.filter_includes( all_files, ["baz/qux"]) == TargetManager.filter_includes(all_files, ["/baz/qux"]) assert TargetManager.filter_includes( all_files, ["baz/qux"]) == TargetManager.filter_includes(all_files, ["baz/qux/"]) assert TargetManager.filter_includes( all_files, ["baz/qux"]) == TargetManager.filter_includes(all_files, ["/baz/qux/"]) assert TargetManager.filter_includes( all_files, ["baz/qux"]) == TargetManager.filter_includes(all_files, ["**/baz/qux"]) assert TargetManager.filter_includes( all_files, ["baz/qux"]) == TargetManager.filter_includes(all_files, ["baz/qux/**"]) assert TargetManager.filter_includes( all_files, ["baz/qux"]) == TargetManager.filter_includes(all_files, ["**/baz/qux/**"])