86 lines
3.5 KiB
Python
86 lines
3.5 KiB
Python
import unittest
|
|
|
|
from blender_asset_tracer.blendfile import dna
|
|
|
|
|
|
class NameTest(unittest.TestCase):
|
|
def test_simple_name(self):
|
|
n = dna.Name(b'Suzanne')
|
|
self.assertEqual(n.name_full, b'Suzanne')
|
|
self.assertEqual(n.name_only, b'Suzanne')
|
|
self.assertFalse(n.is_pointer)
|
|
self.assertFalse(n.is_method_pointer)
|
|
self.assertEqual(n.array_size, 1)
|
|
|
|
def test_pointer(self):
|
|
n = dna.Name(b'*marker')
|
|
self.assertEqual(n.name_full, b'*marker')
|
|
self.assertEqual(n.name_only, b'marker')
|
|
self.assertTrue(n.is_pointer)
|
|
self.assertFalse(n.is_method_pointer)
|
|
self.assertEqual(n.array_size, 1)
|
|
|
|
def test_method_pointer(self):
|
|
n = dna.Name(b'(*delta_cache)()')
|
|
self.assertEqual(n.name_full, b'(*delta_cache)()')
|
|
self.assertEqual(n.name_only, b'delta_cache')
|
|
self.assertTrue(n.is_pointer)
|
|
self.assertTrue(n.is_method_pointer)
|
|
self.assertEqual(n.array_size, 1)
|
|
|
|
def test_simple_array(self):
|
|
n = dna.Name(b'flame_smoke_color[3]')
|
|
self.assertEqual(n.name_full, b'flame_smoke_color[3]')
|
|
self.assertEqual(n.name_only, b'flame_smoke_color')
|
|
self.assertFalse(n.is_pointer)
|
|
self.assertFalse(n.is_method_pointer)
|
|
self.assertEqual(n.array_size, 3)
|
|
|
|
def test_nested_array(self):
|
|
n = dna.Name(b'pattern_corners[4][2]')
|
|
self.assertEqual(n.name_full, b'pattern_corners[4][2]')
|
|
self.assertEqual(n.name_only, b'pattern_corners')
|
|
self.assertFalse(n.is_pointer)
|
|
self.assertFalse(n.is_method_pointer)
|
|
self.assertEqual(n.array_size, 8)
|
|
|
|
def test_pointer_array(self):
|
|
n = dna.Name(b'*mtex[18]')
|
|
self.assertEqual(n.name_full, b'*mtex[18]')
|
|
self.assertEqual(n.name_only, b'mtex')
|
|
self.assertTrue(n.is_pointer)
|
|
self.assertFalse(n.is_method_pointer)
|
|
self.assertEqual(n.array_size, 18)
|
|
|
|
def test_repr(self):
|
|
self.assertEqual(repr(dna.Name(b'Suzanne')), "Name(b'Suzanne')")
|
|
self.assertEqual(repr(dna.Name(b'*marker')), "Name(b'*marker')")
|
|
self.assertEqual(repr(dna.Name(b'(*delta_cache)()')), "Name(b'(*delta_cache)()')")
|
|
self.assertEqual(repr(dna.Name(b'flame_smoke_color[3]')), "Name(b'flame_smoke_color[3]')")
|
|
self.assertEqual(repr(dna.Name(b'pattern_corners[4][2]')), "Name(b'pattern_corners[4][2]')")
|
|
self.assertEqual(repr(dna.Name(b'*mtex[18]')), "Name(b'*mtex[18]')")
|
|
|
|
def test_as_reference(self):
|
|
n = dna.Name(b'(*delta_cache)()')
|
|
self.assertEqual(n.as_reference(None), b'delta_cache')
|
|
self.assertEqual(n.as_reference(b''), b'delta_cache')
|
|
self.assertEqual(n.as_reference(b'parent'), b'parent.delta_cache')
|
|
|
|
|
|
class StructTest(unittest.TestCase):
|
|
def test_field_from_path(self):
|
|
s = dna.Struct(b'AlembicObjectPath')
|
|
f_next = dna.Field(s, dna.Name(b'*next'), 8, 0)
|
|
f_prev = dna.Field(s, dna.Name(b'*prev'), 8, 8)
|
|
f_path = dna.Field(dna.Struct(b'char'), dna.Name(b'path[4096]'), 4096, 16)
|
|
f_pointer = dna.Field(dna.Struct(b'char'), dna.Name(b'*ptr'), 3 * 8, 16 + 4096)
|
|
s.append_field(f_next)
|
|
s.append_field(f_prev)
|
|
s.append_field(f_path)
|
|
s.append_field(f_pointer)
|
|
|
|
psize = 8
|
|
self.assertEqual(s.field_from_path(psize, b'path'), (f_path, 16))
|
|
self.assertEqual(s.field_from_path(psize, (b'prev', b'path')), (f_path, 16))
|
|
self.assertEqual(s.field_from_path(psize, (b'ptr', 2)), (f_pointer, 16 + 4096 + 2 * psize))
|