Accumulated uncommitted work: GHOST Web backend, WebGL/GPU web layer, web workflow engine and protocol, tooling, docs and task records. Large generated evidence, user-testing archives, build snapshots and imported test assets remain untracked. Co-Authored-By: Claude Code <noreply@anthropic.com>
45 lines
1.8 KiB
Python
45 lines
1.8 KiB
Python
import pathlib
|
|
import sys
|
|
import unittest
|
|
|
|
ROOT = pathlib.Path(__file__).resolve().parents[1]
|
|
sys.path.insert(0, str(ROOT / "blender-5.2.0/source/blender/web_engine"))
|
|
import extract_modifier_accessors as extractor
|
|
from extract_id_property_rna import function
|
|
|
|
|
|
class ModifierAccessorTests(unittest.TestCase):
|
|
def source(self):
|
|
source = ROOT / "build_web_blender6/source/blender/makesrna/intern/rna_modifier_gen.cc"
|
|
if not source.exists():
|
|
self.skipTest("makesrna output has not been built")
|
|
return source.read_text()
|
|
|
|
def test_each_field_uses_original_generated_accessors(self):
|
|
source = self.source()
|
|
output = extractor.generate(source)
|
|
for modifier, fields in extractor.FIELDS.items():
|
|
for name, _, _, _ in fields:
|
|
for operation in ("get", "set"):
|
|
self.assertIn(function(source, f"{modifier}Modifier_{name}_{operation}")[1], output)
|
|
self.assertEqual(output, extractor.generate(source))
|
|
|
|
def test_missing_source_accessor_rejects_generation(self):
|
|
source = self.source().replace("BevelModifier_segments_set", "Removed_segments_set")
|
|
with self.assertRaisesRegex(ValueError, "Missing generated function"):
|
|
extractor.generate(source)
|
|
|
|
def test_schema_field_names_are_unique_and_numeric_bounds_are_valid(self):
|
|
for fields in extractor.FIELDS.values():
|
|
self.assertEqual(len(fields), len({field[0] for field in fields}))
|
|
for _, kind, lower, upper in fields:
|
|
if kind.startswith("bool"):
|
|
self.assertIsNone(lower)
|
|
self.assertIsNone(upper)
|
|
else:
|
|
self.assertLess(lower, upper)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|