blender-asset-tracer/tests/test_compressor.py
Sybren A. Stüvel b48978f067 Moved from Pipenv to Poetry
All the Blender Institute Python webprojects are moving to Poetry; it works
better than Pipenv in various regards.
2019-06-07 12:49:59 +02:00

74 lines
2.4 KiB
Python

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)