blender-asset-tracer/tests/test_blendfile_dna.py
2018-02-22 14:50:24 +01:00

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