22 lines
1.1 KiB
Python
22 lines
1.1 KiB
Python
import io,pathlib,struct,sys,unittest
|
|
sys.path.insert(0,str(pathlib.Path(__file__).parents[1]/'plugins'))
|
|
try:
|
|
import scene_media
|
|
from PIL import Image
|
|
except ImportError:
|
|
scene_media=None
|
|
@unittest.skipIf(scene_media is None,'install plugins/requirements.txt for BC texture tests')
|
|
class SceneTests(unittest.TestCase):
|
|
def test_bc1_exact_color_and_bounds(self):
|
|
block=struct.pack('<HHI',0xf800,0x07e0,0)
|
|
png=scene_media.encoded_png(block,4,4,4)
|
|
with Image.open(io.BytesIO(png)) as image:self.assertEqual(image.getpixel((0,0)),(255,0,0,255))
|
|
for data,w,h in [(block[:-1],4,4),(block,10000,10000)]:
|
|
with self.assertRaises(ValueError):scene_media.encoded_png(data,w,h,4)
|
|
def test_ambiguous_descriptor_and_truncation(self):
|
|
def desc(w):return struct.pack('<4I',w,4,4,0x80000001)+struct.pack('<Q',7)+b'1.asset'
|
|
self.assertEqual(scene_media.texture_descriptor(desc(4),'1.asset'),(4,4,4))
|
|
with self.assertRaises(ValueError):scene_media.texture_descriptor(desc(4)+desc(8),'1.asset')
|
|
self.assertEqual(scene_media.inline_images(struct.pack('<6I',4,4,4,0,0,8)+b'\0'*7),[])
|
|
if __name__=='__main__':unittest.main()
|