Initial upload: PatternForge CLI tool with pattern detection and boilerplate generation
Some checks failed
CI / test (3.10) (push) Has been cancelled
CI / test (3.11) (push) Has been cancelled
CI / test (3.12) (push) Has been cancelled
CI / build (push) Has been cancelled

This commit is contained in:
2026-02-02 22:26:07 +00:00
parent d38d23a594
commit 04c65d8aa8

91
tests/test_generator.py Normal file
View File

@@ -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