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>
51 lines
2.2 KiB
Python
51 lines
2.2 KiB
Python
import importlib.util
|
|
import pathlib
|
|
import unittest
|
|
|
|
|
|
ROOT = pathlib.Path(__file__).resolve().parents[1]
|
|
spec = importlib.util.spec_from_file_location(
|
|
"rna_extraction", ROOT / "blender-5.2.0/source/blender/web_engine/extract_id_property_rna.py")
|
|
module = importlib.util.module_from_spec(spec)
|
|
spec.loader.exec_module(module)
|
|
|
|
|
|
class RNAExtractionTests(unittest.TestCase):
|
|
def test_braces_in_strings_and_comments_are_not_structure(self):
|
|
source = 'value = {"}", /* { */ {1, 2}}; trailing'
|
|
self.assertEqual('value = {"}", /* { */ {1, 2}};', module.initializer(source, 0))
|
|
|
|
def test_missing_terminator_is_rejected(self):
|
|
with self.assertRaises(ValueError):
|
|
module.initializer("value = {1} trailing", 0)
|
|
|
|
def test_unterminated_initializer_is_rejected(self):
|
|
with self.assertRaises(ValueError):
|
|
module.initializer('value = {"}"', 0)
|
|
|
|
def sources(self):
|
|
generated = ROOT / "build_web_blender6/source/blender/makesrna/intern/rna_ID_gen.cc"
|
|
if not generated.exists():
|
|
self.skipTest("makesrna output has not been built locally")
|
|
native = ROOT / "blender-5.2.0/source/blender/makesrna/intern/rna_ID.cc"
|
|
return generated.read_text(), native.read_text()
|
|
|
|
def test_extraction_reuses_all_original_descriptors_and_callbacks(self):
|
|
generated, native = self.sources()
|
|
output = module.extract(generated, native)
|
|
self.assertEqual(output, module.extract(generated, native))
|
|
self.assertEqual(16, output.count(" = reinterpret_cast<PropertyRNA &>"))
|
|
self.assertIn(module.function(native, "rna_IDPArray_begin")[1], output)
|
|
self.assertIn(module.function(generated, "PropertyGroupItem_rna_type_get")[1], output)
|
|
self.assertNotIn("ID_code_to_RNA_type", output)
|
|
self.assertNotIn("RNA_blender_rna_get", output)
|
|
|
|
def test_changed_generator_schema_fails_closed(self):
|
|
generated, native = self.sources()
|
|
with self.assertRaisesRegex(ValueError, "Missing makesrna descriptor"):
|
|
module.extract(generated.replace("rna_PropertyGroupItem_int_", "renamed_descriptor"), native)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|