| """Common utilities for Brotli tests.""" | |
| from __future__ import print_function | |
| import glob | |
| import os | |
| import pathlib | |
| import sys | |
| import sysconfig | |
| project_dir = str(pathlib.PurePath(__file__).parent.parent.parent) | |
| runtime_dir = os.getenv('TEST_SRCDIR') | |
| test_dir = os.getenv('BROTLI_TESTS_PATH') | |
| # Fallbacks | |
| if test_dir and runtime_dir: | |
| test_dir = os.path.join(runtime_dir, test_dir) | |
| elif test_dir is None: | |
| test_dir = os.path.join(project_dir, 'tests') | |
| # Get the platform/version-specific build folder. | |
| # By default, the distutils build base is in the same location as setup.py. | |
| platform_lib_name = 'lib.{platform}-{version[0]}.{version[1]}'.format( | |
| platform=sysconfig.get_platform(), version=sys.version_info | |
| ) | |
| build_dir = os.path.join(project_dir, 'bin', platform_lib_name) | |
| # Prepend the build folder to sys.path and the PYTHONPATH environment variable. | |
| if build_dir not in sys.path: | |
| sys.path.insert(0, build_dir) | |
| TEST_ENV = dict(os.environ) | |
| if 'PYTHONPATH' not in TEST_ENV: | |
| TEST_ENV['PYTHONPATH'] = build_dir | |
| else: | |
| TEST_ENV['PYTHONPATH'] = build_dir + os.pathsep + TEST_ENV['PYTHONPATH'] | |
| TESTDATA_DIR = os.path.join(test_dir, 'testdata') | |
| def gather_text_inputs(): | |
| """Discover inputs for decompression tests.""" | |
| all_inputs = [ | |
| 'empty', # Empty file | |
| '10x10y', # Small text | |
| 'alice29.txt', # Large text | |
| 'random_org_10k.bin', # Small data | |
| 'mapsdatazrh', # Large data | |
| 'ukkonooa', # Poem | |
| 'cp1251-utf16le', # Codepage 1251 table saved in UTF16-LE encoding | |
| 'cp852-utf8', # Codepage 852 table saved in UTF8 encoding | |
| # TODO(eustas): add test on already compressed content | |
| ] | |
| # Filter out non-existing files; e.g. in lightweight sources pack. | |
| return [ | |
| f for f in all_inputs if os.path.isfile(os.path.join(TESTDATA_DIR, f)) | |
| ] | |
| def gather_compressed_inputs(): | |
| """Discover inputs for compression tests.""" | |
| candidates = glob.glob(os.path.join(TESTDATA_DIR, '*.compressed')) | |
| pairs = [(f, f.split('.compressed')[0]) for f in candidates] | |
| existing = [ | |
| pair | |
| for pair in pairs | |
| if os.path.isfile(pair[0]) and os.path.isfile(pair[1]) | |
| ] | |
| return [ | |
| (os.path.basename(pair[0]), (os.path.basename(pair[1]))) | |
| for pair in existing | |
| ] | |
| def take_input(input_name): | |
| with open(os.path.join(TESTDATA_DIR, input_name), 'rb') as f: | |
| return f.read() | |
| def has_input(input_name): | |
| return os.path.isfile(os.path.join(TESTDATA_DIR, input_name)) | |
| def chunk_input(data, chunk_size): | |
| return [data[i:i + chunk_size] for i in range(0, len(data), chunk_size)] |