import pytest
import pattern_core
def test_validation_rules_creation():
rules = pattern_core.ValidationRules(max_depth=10, max_elements=100)
assert rules.max_depth == 10
assert rules.max_elements == 100
rules2 = pattern_core.ValidationRules()
assert rules2.max_depth is None
assert rules2.max_elements is None
def test_pattern_validate_passes():
pattern = pattern_core.Pattern.pattern("root", [
pattern_core.Pattern.point("child1"),
pattern_core.Pattern.point("child2")
])
rules = pattern_core.ValidationRules(max_depth=5, max_elements=10)
pattern.validate(rules)
def test_pattern_validate_fails_max_depth():
pattern = pattern_core.Pattern.pattern("root", [
pattern_core.Pattern.pattern("child", [
pattern_core.Pattern.pattern("grandchild", [
pattern_core.Pattern.point("great-grandchild")
])
])
])
rules = pattern_core.ValidationRules(max_depth=2)
with pytest.raises(ValueError, match="Validation error"):
pattern.validate(rules)
def test_pattern_validate_fails_max_elements():
elements = [pattern_core.Pattern.point(f"child{i}") for i in range(10)]
pattern = pattern_core.Pattern.pattern("root", elements)
rules = pattern_core.ValidationRules(max_elements=5)
with pytest.raises(ValueError, match="Validation error"):
pattern.validate(rules)
def test_pattern_analyze_structure():
pattern = pattern_core.Pattern.pattern("root", [
pattern_core.Pattern.pattern("a", [
pattern_core.Pattern.point("x")
]),
pattern_core.Pattern.point("b")
])
analysis = pattern.analyze_structure()
assert analysis.summary is not None
assert isinstance(analysis.summary, str)
assert len(analysis.summary) > 0
assert analysis.depth_distribution is not None
assert isinstance(analysis.depth_distribution, list)
assert analysis.element_counts is not None
assert isinstance(analysis.element_counts, list)
assert analysis.nesting_patterns is not None
assert isinstance(analysis.nesting_patterns, list)
def test_pattern_subject_validate():
subject = pattern_core.Subject(
identity="alice",
labels={"Person"},
properties={}
)
pattern = pattern_core.Pattern.pattern(
subject,
[pattern_core.Pattern.point(subject)]
)
rules = pattern_core.ValidationRules(max_depth=5)
pattern.validate(rules)
def test_pattern_subject_analyze_structure():
subject = pattern_core.Subject(
identity="alice",
labels={"Person"},
properties={}
)
pattern = pattern_core.Pattern.pattern(
subject,
[pattern_core.Pattern.point(subject)]
)
analysis = pattern.analyze_structure()
assert analysis.summary is not None
assert isinstance(analysis.summary, str)