mirror of
https://github.com/google/brotli.git
synced 2024-11-25 21:10:05 +00:00
101 lines
3.0 KiB
Python
101 lines
3.0 KiB
Python
|
from __future__ import print_function
|
||
|
import filecmp
|
||
|
import glob
|
||
|
import os
|
||
|
import sys
|
||
|
import sysconfig
|
||
|
import unittest
|
||
|
|
||
|
|
||
|
def diff_q(first_file, second_file):
|
||
|
"""Simulate call to POSIX diff with -q argument"""
|
||
|
if not filecmp.cmp(first_file, second_file, shallow=False):
|
||
|
print(
|
||
|
'Files %s and %s differ' % (first_file, second_file),
|
||
|
file=sys.stderr)
|
||
|
return 1
|
||
|
return 0
|
||
|
|
||
|
|
||
|
project_dir = os.path.abspath(os.path.join(__file__, '..', '..', '..'))
|
||
|
|
||
|
PYTHON = sys.executable or 'python'
|
||
|
|
||
|
BRO = os.path.join(project_dir, 'python', 'bro.py')
|
||
|
|
||
|
# 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 = os.environ.copy()
|
||
|
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(project_dir, 'tests', 'testdata')
|
||
|
|
||
|
TESTDATA_FILES = [
|
||
|
'empty', # Empty file
|
||
|
'10x10y', # Small text
|
||
|
'alice29.txt', # Large text
|
||
|
'random_org_10k.bin', # Small data
|
||
|
'mapsdatazrh', # Large data
|
||
|
]
|
||
|
|
||
|
TESTDATA_PATHS = [os.path.join(TESTDATA_DIR, f) for f in TESTDATA_FILES]
|
||
|
|
||
|
TESTDATA_PATHS_FOR_DECOMPRESSION = glob.glob(
|
||
|
os.path.join(TESTDATA_DIR, '*.compressed'))
|
||
|
|
||
|
|
||
|
def get_temp_compressed_name(filename):
|
||
|
return filename + '.bro'
|
||
|
|
||
|
|
||
|
def get_temp_uncompressed_name(filename):
|
||
|
return filename + '.unbro'
|
||
|
|
||
|
|
||
|
def bind_method_args(method, *args):
|
||
|
return lambda self: method(self, *args)
|
||
|
|
||
|
|
||
|
def generate_test_methods(test_case_class, for_decompression=False):
|
||
|
# Add test methods for each test data file. This makes identifying problems
|
||
|
# with specific compression scenarios easier.
|
||
|
if for_decompression:
|
||
|
paths = TESTDATA_PATHS_FOR_DECOMPRESSION
|
||
|
else:
|
||
|
paths = TESTDATA_PATHS
|
||
|
for method in [m for m in dir(test_case_class) if m.startswith('_test')]:
|
||
|
for testdata in paths:
|
||
|
f = os.path.splitext(os.path.basename(testdata))[0]
|
||
|
name = 'test_{method}_{file}'.format(method=method, file=f)
|
||
|
func = bind_method_args(getattr(test_case_class, method), testdata)
|
||
|
setattr(test_case_class, name, func)
|
||
|
|
||
|
|
||
|
class TestCase(unittest.TestCase):
|
||
|
|
||
|
def tearDown(self):
|
||
|
for f in TESTDATA_PATHS:
|
||
|
try:
|
||
|
os.unlink(get_temp_compressed_name(f))
|
||
|
except OSError:
|
||
|
pass
|
||
|
try:
|
||
|
os.unlink(get_temp_uncompressed_name(f))
|
||
|
except OSError:
|
||
|
pass
|
||
|
|
||
|
def assertFilesMatch(self, first, second):
|
||
|
self.assertTrue(
|
||
|
filecmp.cmp(first, second, shallow=False),
|
||
|
'File {} differs from {}'.format(first, second))
|