Example #1
0
    def test_codegen_clean_return_types(self) -> None:
        """
        Verifies that codegen of return types would not result in a
        changed file. If this test fails, please run 'tox -e codegen' to
        generate new files.
        """
        new_code = clean_generated_code("\n".join(type_codegen.generated_code))
        new_file = os.path.join(os.path.dirname(os.path.abspath(__file__)),
                                "type_codegen.py.deleteme")
        with open(new_file, "w") as fp:
            fp.write(new_code)
        try:
            format_file(new_file)
        except Exception:
            # We failed to format, but this is probably due to invalid code that
            # black doesn't like. This test will still fail and report to run codegen.
            pass
        with open(new_file, "r") as fp:
            new_code = fp.read()
        os.remove(new_file)
        with open(
                os.path.join(
                    os.path.dirname(os.path.abspath(__file__)),
                    "../../matchers/_return_types.py",
                ),
                "r",
        ) as fp:
            old_code = fp.read()

        # Now that we've done simple codegen, verify that it matches.
        self.assertTrue(old_code == new_code,
                        "libcst.matchers._return_types needs new codegen!")
Example #2
0
    def test_codegen_clean_visitor_functions(self) -> None:
        """
        Verifies that codegen of visitor functions would not result in a
        changed file. If this test fails, please run 'python -m libcst.codegen.generate all'
        to generate new files.
        """
        new_code = clean_generated_code("\n".join(
            visitor_codegen.generated_code))
        new_file = os.path.join(os.path.dirname(os.path.abspath(__file__)),
                                "visitor_codegen.deleteme.py")
        with open(new_file, "w") as fp:
            fp.write(new_code)
        try:
            format_file(new_file)
        except Exception:
            # We failed to format, but this is probably due to invalid code that
            # black doesn't like. This test will still fail and report to run codegen.
            pass
        with open(new_file, "r") as fp:
            new_code = fp.read()
        os.remove(new_file)
        with open(
                os.path.join(os.path.dirname(os.path.abspath(__file__)),
                             "../../_typed_visitor.py"),
                "r",
        ) as fp:
            old_code = fp.read()

        # Now that we've done simple codegen, verify that it matches.
        self.assert_code_matches(old_code, new_code, "libcst._typed_visitor")