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()