2021-06-03 11:43:42 +02:00
|
|
|
#!/usr/bin/env python3
|
2014-11-16 15:17:48 +01:00
|
|
|
from __future__ import unicode_literals
|
2014-07-18 14:20:34 +02:00
|
|
|
|
|
|
|
# Allow direct execution
|
|
|
|
import os
|
|
|
|
import sys
|
|
|
|
import unittest
|
|
|
|
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|
|
|
|
|
|
|
|
2014-07-21 12:07:26 +02:00
|
|
|
import errno
|
2014-07-18 14:20:34 +02:00
|
|
|
import io
|
|
|
|
import json
|
|
|
|
import re
|
|
|
|
import subprocess
|
|
|
|
|
2021-02-24 19:45:56 +01:00
|
|
|
from yt_dlp.swfinterp import SWFInterpreter
|
2014-07-18 14:20:34 +02:00
|
|
|
|
|
|
|
|
|
|
|
TEST_DIR = os.path.join(
|
|
|
|
os.path.dirname(os.path.abspath(__file__)), 'swftests')
|
|
|
|
|
|
|
|
|
|
|
|
class TestSWFInterpreter(unittest.TestCase):
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
2014-07-20 00:03:54 +02:00
|
|
|
def _make_testfunc(testfile):
|
2014-07-18 14:20:34 +02:00
|
|
|
m = re.match(r'^(.*)\.(as)$', testfile)
|
|
|
|
if not m:
|
2014-07-20 00:03:54 +02:00
|
|
|
return
|
2014-07-18 14:20:34 +02:00
|
|
|
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')
|
2019-05-10 22:56:22 +02:00
|
|
|
if ((not os.path.exists(swf_file))
|
|
|
|
or os.path.getmtime(swf_file) < os.path.getmtime(as_file)):
|
2014-07-18 14:20:34 +02:00
|
|
|
# Recompile
|
|
|
|
try:
|
2014-11-02 11:41:33 +01:00
|
|
|
subprocess.check_call([
|
|
|
|
'mxmlc', '-output', swf_file,
|
|
|
|
'-static-link-runtime-shared-libraries', as_file])
|
2014-07-18 14:20:34 +02:00
|
|
|
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)
|
|
|
|
|
|
|
|
|
2014-07-20 00:03:54 +02:00
|
|
|
for testfile in os.listdir(TEST_DIR):
|
|
|
|
_make_testfunc(testfile)
|
|
|
|
|
2014-07-18 14:20:34 +02:00
|
|
|
if __name__ == '__main__':
|
|
|
|
unittest.main()
|