| 
									
										
										
										
											2014-07-18 14:20:34 +02:00
										 |  |  | #!/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__)))) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from youtube_dl.swfinterp import SWFInterpreter | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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') | 
					
						
							|  |  |  |         if ((not os.path.exists(swf_file)) | 
					
						
							|  |  |  |                 or os.path.getmtime(swf_file) < os.path.getmtime(as_file)): | 
					
						
							|  |  |  |             # Recompile | 
					
						
							|  |  |  |             try: | 
					
						
							| 
									
										
										
										
											2014-07-20 00:03:54 +02:00
										 |  |  |                 subprocess.check_call(['mxmlc', '-output', swf_file, 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() |