mirror of
				https://github.com/ytdl-org/youtube-dl
				synced 2025-11-04 11:43:47 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			81 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
#!/usr/bin/env python
 | 
						|
from __future__ import unicode_literals
 | 
						|
 | 
						|
# 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()
 |