Ejemplo n.º 1
0
    def test_is_spec(self) -> None:
        unambiguous_specs = [
            "a/b/c",
            "a/b/c/",
            "a/b:c",
            "a/b/c.txt",
            ":c",
            "::",
            "a/",
            "./a.txt",
            ".",
            "*",
            "a/b/*.txt",
            "a/b/test*",
            "a/**/*",
            "!",
            "!a/b",
            "!a/b.txt",
            "a/b.txt:tgt",
            "a/b.txt:../tgt",
            "!a/b.txt:tgt",
        ]

        directories_vs_goals = ["foo", "a_b_c"]
        # TODO: Once we properly ban scopes with dots in them, we can stop testing this case.
        files_vs_dotted_scopes = ["cache.java", "cache.tmp.java"]
        ambiguous_specs = [*directories_vs_goals, *files_vs_dotted_scopes]

        # With no files/directories on disk to tiebreak.
        splitter = ArgSplitter(ArgSplitterTest._known_scope_infos,
                               buildroot=os.getcwd())
        for spec in ambiguous_specs:
            assert splitter.likely_a_spec(spec) is False
        for s in unambiguous_specs:
            assert splitter.likely_a_spec(s) is True

        # With files/directories on disk to tiebreak.
        with temporary_dir() as tmpdir:
            splitter = ArgSplitter(ArgSplitterTest._known_scope_infos, tmpdir)
            for directory in directories_vs_goals:
                Path(tmpdir, directory).mkdir()
            for f in files_vs_dotted_scopes:
                Path(tmpdir, f).touch()
            for spec in ambiguous_specs:
                assert splitter.likely_a_spec(spec) is True
Ejemplo n.º 2
0
def test_is_spec(splitter: ArgSplitter,
                 known_scope_infos: list[ScopeInfo]) -> None:
    unambiguous_specs = [
        "a/b/c",
        "a/b/c/",
        "a/b:c",
        "a/b/c.txt",
        ":c",
        "::",
        "a/",
        "./a.txt",
        ".",
        "*",
        "a/b/*.txt",
        "a/b/test*",
        "a/**/*",
        "!",
        "!a/b",
        "!a/b.txt",
        "a/b.txt:tgt",
        "a/b.txt:../tgt",
        "!a/b.txt:tgt",
        "dir#gen",
        "//:tgt#gen",
        "cache.java",
        "cache.tmp.java",
    ]

    directories_vs_goals = ["foo", "a_b_c"]

    # With no directories on disk to tiebreak.
    for spec in directories_vs_goals:
        assert splitter.likely_a_spec(spec) is False
    for s in unambiguous_specs:
        assert splitter.likely_a_spec(s) is True

    # With directories on disk to tiebreak.
    with temporary_dir() as tmpdir:
        splitter = ArgSplitter(known_scope_infos, tmpdir)
        for d in directories_vs_goals:
            Path(tmpdir, d).mkdir()
            assert splitter.likely_a_spec(d) is True
Ejemplo n.º 3
0
    def test_is_spec(self) -> None:
        unambiguous_specs = [
            "a/b/c",
            "a/b/c/",
            "a/b:c",
            "a/b/c.txt",
            ":c",
            "::",
            "a/",
            "./a.txt",
            ".",
            "*",
            "a/b/*.txt",
            "a/b/test*",
            "a/**/*",
            "!",
            "!/a/b",
            "!/a/b.txt",
        ]

        directories_vs_goals = ["foo", "a_b_c"]
        files_vs_subscopes = ["cache.java", "cache.tmp.java"]
        ambiguous_specs = [*directories_vs_goals, *files_vs_subscopes]

        # With no files/directories on disk to tiebreak.
        splitter = ArgSplitter(ArgSplitterTest._known_scope_infos,
                               buildroot=os.getcwd())
        for spec in ambiguous_specs:
            assert splitter.likely_a_spec(spec) is False
        for s in unambiguous_specs:
            assert splitter.likely_a_spec(s) is True

        # With files/directories on disk to tiebreak.
        with temporary_dir() as tmpdir:
            splitter = ArgSplitter(ArgSplitterTest._known_scope_infos, tmpdir)
            for dir in directories_vs_goals:
                Path(tmpdir, dir).mkdir()
            for f in files_vs_subscopes:
                Path(tmpdir, f).touch()
            for spec in ambiguous_specs:
                assert splitter.likely_a_spec(spec) is True
Ejemplo n.º 4
0
def test_is_spec(tmp_path: Path, splitter: ArgSplitter,
                 known_scope_infos: list[ScopeInfo]) -> None:
    unambiguous_specs = [
        "a/b/c",
        "a/b/c/",
        "a/b:c",
        "a/b/c.txt",
        ":c",
        "::",
        "a/",
        "./a.txt",
        ".",
        "*",
        "a/b/*.txt",
        "a/b/test*",
        "a/**/*",
        "a/b.txt:tgt",
        "a/b.txt:../tgt",
        "dir#gen",
        "//:tgt#gen",
        "cache.java",
        "cache.tmp.java",
    ]

    directories_vs_goals = ["foo", "a_b_c"]

    # With no directories on disk to tiebreak.
    for spec in directories_vs_goals:
        assert splitter.likely_a_spec(spec) is False
        assert splitter.likely_a_spec(f"-{spec}") is True
    for s in unambiguous_specs:
        assert splitter.likely_a_spec(s) is True
        assert splitter.likely_a_spec(f"-{s}") is True

    assert splitter.likely_a_spec("-") is True
    assert splitter.likely_a_spec("--") is False

    # With directories on disk to tiebreak.
    splitter = ArgSplitter(known_scope_infos, tmp_path.as_posix())
    for d in directories_vs_goals:
        (tmp_path / d).mkdir()
        assert splitter.likely_a_spec(d) is True
Ejemplo n.º 5
0
 def assert_not_spec(arg: str) -> None:
     assert ArgSplitter.likely_a_spec(arg) is False