50 lines
1.8 KiB
Python
50 lines
1.8 KiB
Python
import sys
|
|
import tempfile
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
from PIL import Image, ImageDraw
|
|
|
|
SCRIPTS = Path(__file__).resolve().parents[1] / "scripts"
|
|
sys.path.insert(0, str(SCRIPTS))
|
|
|
|
from rebuild_a01_buttons import rebuild_button
|
|
|
|
|
|
class RebuildA01ButtonTests(unittest.TestCase):
|
|
def setUp(self):
|
|
self.directory = tempfile.TemporaryDirectory()
|
|
self.addCleanup(self.directory.cleanup)
|
|
self.root = Path(self.directory.name)
|
|
|
|
def make_source(self):
|
|
image = Image.new("RGBA", (60, 30), (0, 255, 0, 255))
|
|
draw = ImageDraw.Draw(image)
|
|
draw.rectangle((4, 4, 55, 25), fill=(150, 20, 12, 255))
|
|
draw.rectangle((4, 4, 13, 25), fill=(210, 160, 40, 255))
|
|
draw.rectangle((46, 4, 55, 25), fill=(210, 160, 40, 255))
|
|
return image
|
|
|
|
def test_rebuilds_three_slice_into_clean_transparent_canvas(self):
|
|
source = self.root / "source.png"
|
|
output = self.root / "output.png"
|
|
self.make_source().save(source)
|
|
|
|
rebuild_button(source, output, output_size=(180, 60), trim=4, padding=6, cap_width=10)
|
|
|
|
with Image.open(output) as image:
|
|
self.assertEqual("RGBA", image.mode)
|
|
self.assertEqual((180, 60), image.size)
|
|
self.assertEqual((0, 0, 0, 0), image.getpixel((0, 0)))
|
|
self.assertEqual((0, 0, 0, 0), image.getpixel((179, 59)))
|
|
visible_pixels = [pixel for pixel in image.get_flattened_data() if pixel[3] > 8]
|
|
self.assertFalse(
|
|
any(green > 120 and green - max(red, blue) > 80 for red, green, blue, green_alpha in visible_pixels)
|
|
)
|
|
self.assertGreater(image.getpixel((7, 30))[0], image.getpixel((90, 30))[0])
|
|
self.assertGreater(image.getpixel((172, 30))[0], image.getpixel((90, 30))[0])
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|