]>
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__
))))
16 from youtube_dl
.swfinterp
import SWFInterpreter
19 TEST_DIR
= os
.path
.join(
20 os
.path
.dirname(os
.path
.abspath(__file__
)), 'swftests')
23 class TestSWFInterpreter(unittest
.TestCase
):
27 def _make_testfunc(testfile
):
28 m
= re
.match(r
'^(.*)\.(as)$', testfile
)
34 as_file
= os
.path
.join(TEST_DIR
, testfile
)
35 swf_file
= os
.path
.join(TEST_DIR
, test_id
+ '.swf')
36 if ((not os
.path
.exists(swf_file
))
37 or os
.path
.getmtime(swf_file
) < os
.path
.getmtime(as_file
)):
40 subprocess
.check_call([
41 'mxmlc', '-output', swf_file
,
42 '-static-link-runtime-shared-libraries', as_file
])
43 except OSError as ose
:
44 if ose
.errno
== errno
.ENOENT
:
45 print('mxmlc not found! Skipping test.')
49 with open(swf_file
, 'rb') as swf_f
:
50 swf_content
= swf_f
.read()
51 swfi
= SWFInterpreter(swf_content
)
53 with io
.open(as_file
, 'r', encoding
='utf-8') as as_f
:
54 as_content
= as_f
.read()
58 r
'(?m)^//\s*%s:\s*(.*?)\n' % re
.escape(key
), as_content
)
60 raise ValueError('Cannot find %s in %s' % (key
, testfile
))
61 return json
.loads(m
.group(1))
63 input_args
= _find_spec('input')
64 output
= _find_spec('output')
66 swf_class
= swfi
.extract_class(test_id
)
67 func
= swfi
.extract_function(swf_class
, 'main')
68 res
= func(input_args
)
69 self
.assertEqual(res
, output
)
71 test_func
.__name
__ = str('test_swf_' + test_id
)
72 setattr(TestSWFInterpreter
, test_func
.__name
__, test_func
)
75 for testfile
in os
.listdir(TEST_DIR
):
76 _make_testfunc(testfile
)
78 if __name__
== '__main__':