From 8674f719072eddfd14fb1cffff59bc56193472f2 Mon Sep 17 00:00:00 2001 From: Hugo Date: Mon, 29 Jan 2018 15:33:26 +0200 Subject: [PATCH 1/2] File exported from hopper.png using Wally --- Tests/images/hopper.wal | Bin 0 -> 21860 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Tests/images/hopper.wal diff --git a/Tests/images/hopper.wal b/Tests/images/hopper.wal new file mode 100644 index 0000000000000000000000000000000000000000..f6260c6b33b5f5dfd735caa80eb97905663b1de2 GIT binary patch literal 21860 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 literal 0 HcmV?d00001 From a852c6186f887f97849ff29fd1ebc8b7d953d090 Mon Sep 17 00:00:00 2001 From: Hugo Date: Mon, 29 Jan 2018 17:18:06 +0200 Subject: [PATCH 2/2] Basic WAL test --- Tests/test_file_wal.py | 23 +++++++++++++++++++++++ src/PIL/WalImageFile.py | 1 + 2 files changed, 24 insertions(+) create mode 100644 Tests/test_file_wal.py diff --git a/Tests/test_file_wal.py b/Tests/test_file_wal.py new file mode 100644 index 000000000..13b1e3a2f --- /dev/null +++ b/Tests/test_file_wal.py @@ -0,0 +1,23 @@ +from helper import unittest, PillowTestCase + +from PIL import WalImageFile + + +class TestFileWal(PillowTestCase): + + def test_open(self): + # Arrange + TEST_FILE = "Tests/images/hopper.wal" + + # Act + im = WalImageFile.open(TEST_FILE) + + # Assert + self.assertEqual(im.format, "WAL") + self.assertEqual(im.format_description, "Quake2 Texture") + self.assertEqual(im.mode, "P") + self.assertEqual(im.size, (128, 128)) + + +if __name__ == '__main__': + unittest.main() diff --git a/src/PIL/WalImageFile.py b/src/PIL/WalImageFile.py index 69964f7be..6602cc86b 100644 --- a/src/PIL/WalImageFile.py +++ b/src/PIL/WalImageFile.py @@ -74,6 +74,7 @@ def open(filename): with builtins.open(filename, "rb") as fp: return imopen(fp) + quake2palette = ( # default palette taken from piffo 0.93 by Hans Häggström b"\x01\x01\x01\x0b\x0b\x0b\x12\x12\x12\x17\x17\x17\x1b\x1b\x1b\x1e"