Remove nose dependence
Also move test images into the base repo because they're not very big anyways
@ -1,9 +1,4 @@
|
||||
import os.path
|
||||
import unittest
|
||||
|
||||
# Some checks to run before tests can begin
|
||||
images_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'images')
|
||||
|
||||
assert os.path.isdir(images_path), 'test images repo not present'
|
||||
assert os.path.isfile(os.path.join(images_path, '__init__.py')), 'images __init__.py not present, is the test image repo present?'
|
||||
bp_size = os.path.getsize(os.path.join(images_path, 'Boilerplate.png'))
|
||||
assert bp_size == 955989, 'Boilerplate.png is the wrong size, is the test image repo checked out with LFS enabled?'
|
||||
|
BIN
tests/images/Boilerplate.png
Normal file
After Width: | Height: | Size: 934 KiB |
BIN
tests/images/Bun.afdesign
Normal file
BIN
tests/images/Bun.png
Normal file
After Width: | Height: | Size: 375 KiB |
32
tests/images/__init__.py
Normal file
@ -0,0 +1,32 @@
|
||||
from PIL import Image
|
||||
from quicktex.s3tc.bc1 import BC1Block
|
||||
from quicktex.s3tc.bc4 import BC4Block
|
||||
from quicktex import RawTexture
|
||||
import os.path
|
||||
|
||||
image_path = os.path.dirname(os.path.realpath(__file__))
|
||||
|
||||
|
||||
class BC1Blocks:
|
||||
class Entry:
|
||||
def __init__(self, filename, block):
|
||||
path = os.path.join(image_path, 'bc1', filename)
|
||||
self.image = Image.open(path).convert('RGBA')
|
||||
self.texture = RawTexture.frombytes(self.image.tobytes('raw', 'RGBA'), *self.image.size)
|
||||
self.block = block
|
||||
|
||||
greyscale = Entry('greyscale_unpacked.png', BC1Block.frombytes(b'\xFF\xFF\x49\x4A\x78\x78\x78\x78'))
|
||||
three_color = Entry('3color_unpacked.png', BC1Block.frombytes(b'\xE0\x07\x00\xF8\x29\x29\x29\x29'))
|
||||
three_color_black = Entry('3color_black_unpacked.png', BC1Block.frombytes(b'\xE0\x07\x00\xF8\x27\x27\x27\x27'))
|
||||
|
||||
|
||||
class BC4Blocks:
|
||||
class Entry:
|
||||
def __init__(self, filename, block):
|
||||
path = os.path.join(image_path, 'bc4', filename)
|
||||
self.image = Image.open(path).convert('RGBA')
|
||||
self.texture = RawTexture.frombytes(self.image.tobytes('raw', 'RGBA'), *self.image.size)
|
||||
self.block = block
|
||||
|
||||
six_value = Entry('6value.png', BC4Block(8, 248, [[0, 1, 2, 3]] * 2 + [[4, 5, 6, 7]] * 2))
|
||||
eight_value = Entry('8value.png', BC4Block(240, 16, [[0, 1, 2, 3]] * 2 + [[4, 5, 6, 7]] * 2))
|
BIN
tests/images/bc1/3color.dds
Normal file
BIN
tests/images/bc1/3color.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
tests/images/bc1/3color_black.dds
Normal file
BIN
tests/images/bc1/3color_black.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
tests/images/bc1/3color_black_unpacked.png
Normal file
After Width: | Height: | Size: 103 B |
BIN
tests/images/bc1/3color_unpacked.png
Normal file
After Width: | Height: | Size: 100 B |
BIN
tests/images/bc1/greyscale.dds
Normal file
BIN
tests/images/bc1/greyscale.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
tests/images/bc1/greyscale_unpacked.png
Normal file
After Width: | Height: | Size: 103 B |
BIN
tests/images/bc4/6value.dds
Normal file
BIN
tests/images/bc4/6value.png
Normal file
After Width: | Height: | Size: 513 B |
BIN
tests/images/bc4/8value.dds
Normal file
BIN
tests/images/bc4/8value.png
Normal file
After Width: | Height: | Size: 509 B |
BIN
tests/images/blocks.afdesign
Normal file
@ -1,5 +1,4 @@
|
||||
import unittest
|
||||
import nose
|
||||
import os.path
|
||||
from parameterized import parameterized, parameterized_class
|
||||
import quicktex
|
||||
@ -108,9 +107,9 @@ class TestBC1Texture(unittest.TestCase):
|
||||
self.assertEqual(self.tex[-1, -1], self.tex[self.wb - 1, self.hb - 1], 'incorrect negative subscripting')
|
||||
|
||||
with self.assertRaises(IndexError):
|
||||
thing = self.tex[self.wb, self.hb]
|
||||
_ = self.tex[self.wb, self.hb]
|
||||
with self.assertRaises(IndexError):
|
||||
thing = self.tex[-1 - self.wb, -1 - self.hb]
|
||||
_ = self.tex[-1 - self.wb, -1 - self.hb]
|
||||
|
||||
def test_buffer(self):
|
||||
"""Test the buffer protocol of BC1Texture"""
|
||||
@ -158,7 +157,8 @@ class TestBC1Encoder(unittest.TestCase):
|
||||
|
||||
out_block = out_tex[0, 0]
|
||||
|
||||
if self.color_mode != BC1Encoder.ColorMode.FourColor: # we only care about the selectors if we are in 3 color mode
|
||||
if self.color_mode != BC1Encoder.ColorMode.FourColor:
|
||||
# we only care about the selectors if we are in 3 color mode
|
||||
self.assertTrue(out_block.is_3color, 'returned 4-color block for 3 color test block')
|
||||
self.assertEqual(out_block, BC1Blocks.three_color.block, 'encoded block is incorrect')
|
||||
else:
|
||||
@ -173,7 +173,8 @@ class TestBC1Encoder(unittest.TestCase):
|
||||
out_block = out_tex[0, 0]
|
||||
has_black = 3 in [j for row in out_block.selectors for j in row]
|
||||
|
||||
if self.color_mode == BC1Encoder.ColorMode.ThreeColorBlack: # we only care about the selectors if we are in 3 color black mode
|
||||
if self.color_mode == BC1Encoder.ColorMode.ThreeColorBlack:
|
||||
# we only care about the selectors if we are in 3 color black mode
|
||||
self.assertTrue(out_block.is_3color, 'returned 4-color block for 3 color test block with black')
|
||||
self.assertTrue(has_black, 'block does not have black pixels as expected')
|
||||
self.assertEqual(out_block, BC1Blocks.three_color_black.block, "encoded block is incorrect")
|
||||
@ -207,7 +208,3 @@ class TestBC1Decoder(unittest.TestCase):
|
||||
img_diff = ImageChops.difference(out_img, image).convert('L')
|
||||
img_hist = img_diff.histogram()
|
||||
self.assertEqual(16, img_hist[0], 'decoded block is incorrect')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
nose.main()
|
||||
|
@ -1,13 +1,9 @@
|
||||
import unittest
|
||||
import nose
|
||||
from parameterized import parameterized, parameterized_class
|
||||
from quicktex.s3tc.bc4 import BC4Block, BC4Texture, BC4Encoder, BC4Decoder
|
||||
from tests.images import BC4Blocks
|
||||
from PIL import Image, ImageChops
|
||||
|
||||
if __name__ == '__main__':
|
||||
nose.main()
|
||||
|
||||
|
||||
class TestBC4Block(unittest.TestCase):
|
||||
"""Tests for the BC1Block class"""
|
||||
@ -119,9 +115,9 @@ class TestBC4Texture(unittest.TestCase):
|
||||
self.assertEqual(self.tex[-1, -1], self.tex[self.wb - 1, self.hb - 1], 'incorrect negative subscripting')
|
||||
|
||||
with self.assertRaises(IndexError):
|
||||
thing = self.tex[self.wb, self.hb]
|
||||
_ = self.tex[self.wb, self.hb]
|
||||
with self.assertRaises(IndexError):
|
||||
thing = self.tex[-1 - self.wb, -1 - self.hb]
|
||||
_ = self.tex[-1 - self.wb, -1 - self.hb]
|
||||
|
||||
def test_buffer(self):
|
||||
"""Test the buffer protocol of BC4Texture"""
|
||||
|
@ -3,32 +3,21 @@
|
||||
import unittest
|
||||
import os.path
|
||||
import quicktex
|
||||
import nose
|
||||
|
||||
tests_path = os.path.dirname(os.path.realpath(__file__))
|
||||
|
||||
|
||||
def test_images():
|
||||
"""Test for the images submodule"""
|
||||
class TestInstall(unittest.TestCase):
|
||||
def test_version(self):
|
||||
"""Test if the extension module version matches what setuptools returns"""
|
||||
try:
|
||||
from importlib import metadata
|
||||
except ImportError:
|
||||
# Python < 3.8, so we cant get the metadata, so just check if it exists
|
||||
assert quicktex.__version__
|
||||
print(f'Cannot check version in python < 3.8. __version__ is {quicktex.__version__}')
|
||||
return
|
||||
|
||||
images_path = os.path.join(tests_path, 'images')
|
||||
version = metadata.version('quicktex')
|
||||
|
||||
assert os.path.isdir(images_path), 'test images repo not present. run "git clone https://git.pileof.rocks/drewcassidy/quicktex-test-images.git tests/images" to download them'
|
||||
assert os.path.isfile(os.path.join(images_path, '__init__.py')), 'images __init__.py not present, is the test image repo present?'
|
||||
bp_size = os.path.getsize(os.path.join(images_path, 'Boilerplate.png'))
|
||||
assert bp_size == 955989, 'Boilerplate.png is the wrong size, is the test image repo checked out with LFS enabled?'
|
||||
|
||||
|
||||
def test_version():
|
||||
"""Test if the extension module version matches what setuptools returns"""
|
||||
try:
|
||||
from importlib import metadata
|
||||
except ImportError:
|
||||
# Python < 3.8, so we cant get the metadata, so just check if it exists
|
||||
assert quicktex.__version__
|
||||
print(f'Cannot check version in python < 3.8. __version__ is {quicktex.__version__}')
|
||||
return
|
||||
|
||||
version = metadata.version('quicktex')
|
||||
|
||||
assert version == quicktex.__version__, 'incorrect version string from extension module'
|
||||
assert version == quicktex.__version__, 'incorrect version string from extension module'
|
||||
|
@ -1,5 +1,4 @@
|
||||
import unittest
|
||||
import nose
|
||||
import os.path
|
||||
from tests.images import image_path
|
||||
from quicktex import RawTexture
|
||||
@ -57,7 +56,3 @@ class TestRawTexture(unittest.TestCase):
|
||||
"""Test the frombytes factory function"""
|
||||
bytetex = RawTexture.frombytes(self.boilerplate_bytes, *self.boilerplate.size)
|
||||
self.assertEqual(self.boilerplate_bytes, bytetex.tobytes(), 'Incorrect bytes after writing to buffer')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
nose.main()
|
||||
|