From 04c65d8aa8c358b548da99ad024353a97002f2bf Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Mon, 2 Feb 2026 22:26:07 +0000 Subject: [PATCH] Initial upload: PatternForge CLI tool with pattern detection and boilerplate generation --- tests/test_generator.py | 91 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 tests/test_generator.py diff --git a/tests/test_generator.py b/tests/test_generator.py new file mode 100644 index 0000000..ca95153 --- /dev/null +++ b/tests/test_generator.py @@ -0,0 +1,91 @@ +import tempfile +from pathlib import Path + +from patternforge.config import Config +from patternforge.generator import BoilerplateGenerator +from patternforge.template import TemplateManager + + +class TestBoilerplateGenerator: + def setup_method(self) -> None: + self.config = Config() + self.tmpdir = tempfile.TemporaryDirectory() + + def teardown_method(self) -> None: + self.tmpdir.cleanup() + + def test_generate_basic_file(self) -> None: + pattern_file = Path(self.tmpdir.name) / "patterns.yaml" + pattern_file.write_text( + """ +language: python +summary: + primary_naming: snake_case +""" + ) + manager = TemplateManager(self.config) + manager.create_template("gen-test", str(pattern_file)) + + generator = BoilerplateGenerator(self.config) + output_dir = Path(self.tmpdir.name) / "output" + files = generator.generate("gen-test", str(output_dir), entity_name="MyFeature") + assert len(files) == 1 + assert files[0].name == "MyFeature.py" + assert files[0].exists() + + def test_generate_with_data_file(self) -> None: + pattern_file = Path(self.tmpdir.name) / "patterns.yaml" + pattern_file.write_text( + """ +language: python +summary: + primary_naming: snake_case +""" + ) + manager = TemplateManager(self.config) + manager.create_template("data-test", str(pattern_file)) + + data_file = Path(self.tmpdir.name) / "data.json" + data_file.write_text('{"class_name": "CustomClass"}') + + generator = BoilerplateGenerator(self.config) + output_dir = Path(self.tmpdir.name) / "output2" + files = generator.generate( + "data-test", str(output_dir), data_file=str(data_file), entity_name="DataFeature" + ) + assert len(files) == 1 + content = files[0].read_text() + assert "CustomClass" in content + + def test_snake_case_conversion(self) -> None: + generator = BoilerplateGenerator(self.config) + assert generator._to_snake_case("MyClassName") == "my_class_name" + assert generator._to_snake_case("CamelCase") == "camel_case" + + def test_camel_case_conversion(self) -> None: + generator = BoilerplateGenerator(self.config) + assert generator._to_camel_case("my_function") == "myFunction" + assert generator._to_camel_case("UPPERCASE") == "uppercase" + + def test_pascal_case_conversion(self) -> None: + generator = BoilerplateGenerator(self.config) + assert generator._to_pascal_case("my_class") == "MyClass" + assert generator._to_pascal_case("my_function") == "MyFunction" + + def test_generate_multiple(self) -> None: + pattern_file = Path(self.tmpdir.name) / "patterns.yaml" + pattern_file.write_text( + """ +language: python +summary: + primary_naming: snake_case +""" + ) + manager = TemplateManager(self.config) + manager.create_template("multi-test", str(pattern_file)) + + generator = BoilerplateGenerator(self.config) + output_dir = Path(self.tmpdir.name) / "output3" + entities = [{"name": "Feature1"}, {"name": "Feature2"}] + files = generator.generate_multiple("multi-test", str(output_dir), entities) + assert len(files) == 2