diff options
| author | Philipp Hagemeister <phihag@phihag.de> | 2014-07-18 14:20:34 +0200 | 
|---|---|---|
| committer | Philipp Hagemeister <phihag@phihag.de> | 2014-07-19 23:05:07 +0200 | 
| commit | 0cb2056304178ae8944e84c5bc72f96102291a12 (patch) | |
| tree | 440fb20b2907a34f89cd9a4f4cbf04313b7d572b /test/test_swfinterp.py | |
| parent | 5425626790a46f9b5bdecf4e33bb254c4c2423ea (diff) | |
[swfinterp] Start working on basic tests
Diffstat (limited to 'test/test_swfinterp.py')
| -rw-r--r-- | test/test_swfinterp.py | 73 | 
1 files changed, 73 insertions, 0 deletions
| diff --git a/test/test_swfinterp.py b/test/test_swfinterp.py new file mode 100644 index 000000000..98a14a006 --- /dev/null +++ b/test/test_swfinterp.py @@ -0,0 +1,73 @@ +#!/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 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 + + +for testfile in os.listdir(TEST_DIR): +    m = re.match(r'^(.*)\.(as)$', testfile) +    if not m: +        continue +    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, 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) + + +if __name__ == '__main__': +    unittest.main() | 
