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
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
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
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
def assert_not_spec(arg: str) -> None: assert ArgSplitter.likely_a_spec(arg) is False