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
Example #2
0
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/**"])