You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#!/usr/bin/env python
# Allow direct execution import os import sys import unittest sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
import errno import io import json import re import subprocess
from youtube_dl.swfinterp import SWFInterpreter
TEST_DIR = os.path.join( os.path.dirname(os.path.abspath(__file__)), 'swftests')
class TestSWFInterpreter(unittest.TestCase): pass
def _make_testfunc(testfile): m = re.match(r'^(.*)\.(as)$', testfile) if not m: return test_id = m.group(1)
def test_func(self): as_file = os.path.join(TEST_DIR, testfile) swf_file = os.path.join(TEST_DIR, test_id + '.swf') if ((not os.path.exists(swf_file)) or os.path.getmtime(swf_file) < os.path.getmtime(as_file)): # Recompile try: subprocess.check_call([ 'mxmlc', '-output', swf_file, '-static-link-runtime-shared-libraries', as_file]) except OSError as ose: if ose.errno == errno.ENOENT: print('mxmlc not found! Skipping test.') return raise
with open(swf_file, 'rb') as swf_f: swf_content = swf_f.read() swfi = SWFInterpreter(swf_content)
with io.open(as_file, 'r', encoding='utf-8') as as_f: as_content = as_f.read()
def _find_spec(key): m = re.search( r'(?m)^//\s*%s:\s*(.*?)\n' % re.escape(key), as_content) if not m: raise ValueError('Cannot find %s in %s' % (key, testfile)) return json.loads(m.group(1))
input_args = _find_spec('input') output = _find_spec('output')
swf_class = swfi.extract_class(test_id) func = swfi.extract_function(swf_class, 'main') res = func(input_args) self.assertEqual(res, output)
test_func.__name__ = str('test_swf_' + test_id) setattr(TestSWFInterpreter, test_func.__name__, test_func)
for testfile in os.listdir(TEST_DIR): _make_testfunc(testfile)
if __name__ == '__main__': unittest.main()
|