mirror of
https://github.com/google/brotli.git
synced 2026-02-05 21:24:43 +00:00
Avoid file IO. Drive-by: drop bro.py and bro_test.py; we do not support it well and likely no one uses it. PiperOrigin-RevId: 834206605
84 lines
2.5 KiB
Python
84 lines
2.5 KiB
Python
"""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)]
|