diff --git a/core/image/tests/.gitignore b/core/image/tests/.gitignore new file mode 100644 index 000000000..7d4a2f148 --- /dev/null +++ b/core/image/tests/.gitignore @@ -0,0 +1,2 @@ +*.zip +*.png \ No newline at end of file diff --git a/core/image/tests/build.bat b/core/image/tests/build.bat new file mode 100644 index 000000000..9c300d225 --- /dev/null +++ b/core/image/tests/build.bat @@ -0,0 +1,2 @@ +@echo off +python3 download_assets.py \ No newline at end of file diff --git a/core/image/tests/download_assets.py b/core/image/tests/download_assets.py new file mode 100644 index 000000000..da77d15da --- /dev/null +++ b/core/image/tests/download_assets.py @@ -0,0 +1,99 @@ +#!/usr/bin/env python3 +import urllib.request +import shutil +import sys +import os +import zipfile + +DOWNLOAD_BASE_PATH = "assets/{}" +ASSETS_BASE_URL = "https://raw.githubusercontent.com/Kelimion/compress-odin/master/tests/assets/{}/{}" +PNG_IMAGES = [ + "basi0g01.png", "basi0g02.png", "basi0g04.png", "basi0g08.png", "basi0g16.png", "basi2c08.png", + "basi2c16.png", "basi3p01.png", "basi3p02.png", "basi3p04.png", "basi3p08.png", "basi4a08.png", + "basi4a16.png", "basi6a08.png", "basi6a16.png", "basn0g01.png", "basn0g02.png", "basn0g04.png", + "basn0g08.png", "basn0g16.png", "basn2c08.png", "basn2c16.png", "basn3p01.png", "basn3p02.png", + "basn3p04.png", "basn3p08.png", "basn4a08.png", "basn4a16.png", "basn6a08.png", "basn6a16.png", + "bgai4a08.png", "bgai4a16.png", "bgan6a08.png", "bgan6a16.png", "bgbn4a08.png", "bggn4a16.png", + "bgwn6a08.png", "bgyn6a16.png", "ccwn2c08.png", "ccwn3p08.png", "cdfn2c08.png", "cdhn2c08.png", + "cdsn2c08.png", "cdun2c08.png", "ch1n3p04.png", "ch2n3p08.png", "cm0n0g04.png", "cm7n0g04.png", + "cm9n0g04.png", "cs3n2c16.png", "cs3n3p08.png", "cs5n2c08.png", "cs5n3p08.png", "cs8n2c08.png", + "cs8n3p08.png", "ct0n0g04.png", "ct1n0g04.png", "cten0g04.png", "ctfn0g04.png", "ctgn0g04.png", + "cthn0g04.png", "ctjn0g04.png", "ctzn0g04.png", "exif2c08.png", "f00n0g08.png", "f00n2c08.png", + "f01n0g08.png", "f01n2c08.png", "f02n0g08.png", "f02n2c08.png", "f03n0g08.png", "f03n2c08.png", + "f04n0g08.png", "f04n2c08.png", "f99n0g04.png", "g03n0g16.png", "g03n2c08.png", "g03n3p04.png", + "g04n0g16.png", "g04n2c08.png", "g04n3p04.png", "g05n0g16.png", "g05n2c08.png", "g05n3p04.png", + "g07n0g16.png", "g07n2c08.png", "g07n3p04.png", "g10n0g16.png", "g10n2c08.png", "g10n3p04.png", + "g25n0g16.png", "g25n2c08.png", "g25n3p04.png", "oi1n0g16.png", "oi1n2c16.png", "oi2n0g16.png", + "oi2n2c16.png", "oi4n0g16.png", "oi4n2c16.png", "oi9n0g16.png", "oi9n2c16.png", "pp0n2c16.png", + "pp0n6a08.png", "ps1n0g08.png", "ps1n2c16.png", "ps2n0g08.png", "ps2n2c16.png", "s01i3p01.png", + "s01n3p01.png", "s02i3p01.png", "s02n3p01.png", "s03i3p01.png", "s03n3p01.png", "s04i3p01.png", + "s04n3p01.png", "s05i3p02.png", "s05n3p02.png", "s06i3p02.png", "s06n3p02.png", "s07i3p02.png", + "s07n3p02.png", "s08i3p02.png", "s08n3p02.png", "s09i3p02.png", "s09n3p02.png", "s32i3p04.png", + "s32n3p04.png", "s33i3p04.png", "s33n3p04.png", "s34i3p04.png", "s34n3p04.png", "s35i3p04.png", + "s35n3p04.png", "s36i3p04.png", "s36n3p04.png", "s37i3p04.png", "s37n3p04.png", "s38i3p04.png", + "s38n3p04.png", "s39i3p04.png", "s39n3p04.png", "s40i3p04.png", "s40n3p04.png", "tbbn0g04.png", + "tbbn2c16.png", "tbbn3p08.png", "tbgn2c16.png", "tbgn3p08.png", "tbrn2c08.png", "tbwn0g16.png", + "tbwn3p08.png", "tbyn3p08.png", "tm3n3p02.png", "tp0n0g08.png", "tp0n2c08.png", "tp0n3p08.png", + "tp1n3p08.png", "xc1n0g08.png", "xc9n2c08.png", "xcrn0g04.png", "xcsn0g01.png", "xd0n2c08.png", + "xd3n2c08.png", "xd9n2c08.png", "xdtn0g01.png", "xhdn0g08.png", "xlfn0g04.png", "xs1n0g01.png", + "xs2n0g01.png", "xs4n0g01.png", "xs7n0g01.png", "z00n2c08.png", "z03n2c08.png", "z06n2c08.png", + "z09n2c08.png", + "PngSuite.png", "logo-slim.png", +] + +def try_download_file(url, out_file): + try: + with urllib.request.urlopen(url) as response, open(out_file, 'wb') as of: + shutil.copyfileobj(response, of) + print("... ", out_file) + except urllib.error.HTTPError: + print("Could not download", url) + return 1 + +def try_download_and_unpack_zip(suite): + url = ASSETS_BASE_URL.format(suite, "{}.zip".format(suite)) + out_file = DOWNLOAD_BASE_PATH.format(suite) + "/{}.zip".format(suite) + + print("\tDownloading {} to {}.".format(url, out_file)) + + if try_download_file(url, out_file) is not None: + print("Could not download ZIP file") + return 1 + + # Try opening the ZIP file and extracting the test images + try: + with zipfile.ZipFile(out_file) as z: + for file in z.filelist: + filename = file.filename + assert(filename in PNG_IMAGES) + extract_path = DOWNLOAD_BASE_PATH.format(suite) + + print("\t\tExtracting: {}".format(filename)) + z.extract(file, extract_path) + except: + print("Could not extract ZIP file") + return 2 + + +def main(): + print("Downloading PNG assets") + + # Make PNG assets path + try: + path = DOWNLOAD_BASE_PATH.format("PNG") + os.makedirs(path) + except FileExistsError: + pass + + # Try downloading and unpacking the PNG assets + r = try_download_and_unpack_zip("PNG") + if r is not None: + return r + + # We could fall back on downloading the PNG files individually, but it's slow + + print("Done downloading PNG assets") + return 0 + +if __name__ == '__main__': + sys.exit(main())