]>
jfr.im git - yt-dlp.git/blob - test/test_swfinterp.py
3 # Allow direct execution
7 sys
.path
.insert(0, os
.path
.dirname(os
.path
.dirname(os
.path
.abspath(__file__
))))
15 from youtube_dl
.swfinterp
import SWFInterpreter
18 TEST_DIR
= os
.path
.join(
19 os
.path
.dirname(os
.path
.abspath(__file__
)), 'swftests')
22 class TestSWFInterpreter(unittest
.TestCase
):
26 def _make_testfunc(testfile
):
27 m
= re
.match(r
'^(.*)\.(as)$', testfile
)
33 as_file
= os
.path
.join(TEST_DIR
, testfile
)
34 swf_file
= os
.path
.join(TEST_DIR
, test_id
+ '.swf')
35 if ((not os
.path
.exists(swf_file
))
36 or os
.path
.getmtime(swf_file
) < os
.path
.getmtime(as_file
)):
39 subprocess
.check_call(['mxmlc', '-output', swf_file
, as_file
])
40 except OSError as ose
:
41 if ose
.errno
== errno
.ENOENT
:
42 print('mxmlc not found! Skipping test.')
46 with open(swf_file
, 'rb') as swf_f
:
47 swf_content
= swf_f
.read()
48 swfi
= SWFInterpreter(swf_content
)
50 with io
.open(as_file
, 'r', encoding
='utf-8') as as_f
:
51 as_content
= as_f
.read()
55 r
'(?m)^//\s*%s:\s*(.*?)\n' % re
.escape(key
), as_content
)
57 raise ValueError('Cannot find %s in %s' % (key
, testfile
))
58 return json
.loads(m
.group(1))
60 input_args
= _find_spec('input')
61 output
= _find_spec('output')
63 swf_class
= swfi
.extract_class(test_id
)
64 func
= swfi
.extract_function(swf_class
, 'main')
65 res
= func(input_args
)
66 self
.assertEqual(res
, output
)
68 test_func
.__name
__ = str('test_swf_' + test_id
)
69 setattr(TestSWFInterpreter
, test_func
.__name
__, test_func
)
72 for testfile
in os
.listdir(TEST_DIR
):
73 _make_testfunc(testfile
)
75 if __name__
== '__main__':