import pathlib import tempfile import shutil from blender_asset_tracer import blendfile from tests.abstract_test import AbstractBlendFileTest from blender_asset_tracer import compressor class CompressorTest(AbstractBlendFileTest): def setUp(self): self.temp = tempfile.TemporaryDirectory() tempdir = pathlib.Path(self.temp.name) self.srcdir = tempdir / 'src' self.destdir = tempdir / 'dest' self.srcdir.mkdir() self.destdir.mkdir() def tearDown(self): self.temp.cleanup() def _test(self, filename: str, source_must_remain: bool): """Do a move/copy test. The result should be the same, regardless of whether the source file was already compressed or not. """ # Make a copy we can move around without moving the actual file in # the source tree. srcfile = self.srcdir / filename destfile = self.destdir / filename srcfile.parent.mkdir(parents=True, exist_ok=True) destfile.parent.mkdir(parents=True, exist_ok=True) shutil.copy2(str(self.blendfiles / filename), str(srcfile)) if source_must_remain: compressor.copy(srcfile, destfile) else: compressor.move(srcfile, destfile) self.assertEqual(source_must_remain, srcfile.exists()) self.assertTrue(destfile.exists()) if destfile.suffix == '.blend': self.bf = blendfile.BlendFile(destfile) self.assertTrue(self.bf.is_compressed) return with destfile.open('rb') as infile: magic = infile.read(3) if destfile.suffix == '.jpg': self.assertEqual(b'\xFF\xD8\xFF', magic, 'Expected %s to be a JPEG' % destfile) else: self.assertNotEqual(b'\x1f\x8b', magic[:2], 'Expected %s to be NOT compressed' % destfile) def test_move_already_compressed(self): self._test('basic_file_ñønæščii.blend', False) def test_move_compress_on_the_fly(self): self._test('basic_file.blend', False) def test_copy_already_compressed(self): self._test('basic_file_ñønæščii.blend', True) def test_copy_compress_on_the_fly(self): self._test('basic_file.blend', True) def test_move_jpeg(self): self._test('textures/Bricks/brick_dotted_04-color.jpg', False)