# Copyright (c) Meta Platforms, Inc. and affiliates. # All rights reserved. # # This source code is licensed under the BSD-style license found in the # LICENSE file in the root directory of this source tree. import ast from pathlib import Path from typing import List """ This module outputs a list of tests for completion. It has no dependencies. """ def get_test_files() -> List[Path]: root = Path(__file__).parent.parent dirs = ["tests", "projects/implicitron_trainer"] return [i for dir in dirs for i in (root / dir).glob("**/test*.py")] def tests_from_file(path: Path, base: str) -> List[str]: """ Returns all the tests in the given file, in format expected as arguments when running the tests. e.g. file_stem file_stem.TestFunctionality file_stem.TestFunctionality.test_f file_stem.TestFunctionality.test_g """ with open(path) as f: node = ast.parse(f.read()) out = [base] for cls in node.body: if not isinstance(cls, ast.ClassDef): continue if not cls.name.startswith("Test"): continue class_base = base + "." + cls.name out.append(class_base) for method in cls.body: if not isinstance(method, ast.FunctionDef): continue if not method.name.startswith("test"): continue out.append(class_base + "." + method.name) return out def main() -> None: files = get_test_files() test_root = Path(__file__).parent.parent all_tests = [] for f in files: file_base = str(f.relative_to(test_root))[:-3].replace("/", ".") all_tests.extend(tests_from_file(f, file_base)) for test in sorted(all_tests): print(test) if __name__ == "__main__": main()