from blender_asset_tracer import blendfile from blender_asset_tracer.trace import file2blocks from test_tracer import AbstractTracerTest class File2BlocksTest(AbstractTracerTest): def test_id_blocks(self): self.bf = blendfile.BlendFile(self.blendfiles / 'doubly_linked.blend') foreign_blocks = {} for block in file2blocks.iter_blocks(self.bf): # Only register blocks from libraries. if block.bfile == self.bf: continue foreign_blocks[block.id_name] = block self.assertNotEqual({}, foreign_blocks) # It should find directly linked blocks (GRCubes and MABrick) as well # as indirectly linked (MECube³). self.assertIn(b'GRCubes', foreign_blocks) self.assertIn(b'MABrick', foreign_blocks) self.assertIn('MECube³'.encode(), foreign_blocks) self.assertIn('OBümlaut'.encode(), foreign_blocks) def test_circular_files(self): self.bf = blendfile.BlendFile(self.blendfiles / 'recursive_dependency_1.blend') blocks = {} for block in file2blocks.iter_blocks(self.bf): blocks[block.id_name] = block self.assertNotEqual({}, blocks) self.assertIn(b'MAMaterial', blocks) self.assertIn(b'OBCube', blocks) self.assertIn(b'MECube', blocks)