def run_test(base_path, plots_path, test_name, params): def safe_add_key(args, key, name): if name in params: args.extend((key, str(params[name]))) def safe_add_path(args, folder, key, name): if name in params: args.extend((key, os.path.join(folder, params[name]))) logging.info('Testing "{0}"'.format(test_name)) folder = os.path.join(base_path, params['folder']) cmd = [] safe_add_path(cmd, folder, '--src', 'src') safe_add_path(cmd, folder, '--dst', 'dst') safe_add_path(cmd, folder, '--src-keyframes', 'src-keyframes') safe_add_path(cmd, folder, '--dst-keyframes', 'dst-keyframes') safe_add_path(cmd, folder, '--src-timecodes', 'src-timecodes') safe_add_path(cmd, folder, '--dst-timecodes', 'dst-timecodes') safe_add_path(cmd, folder, '--script', 'script') safe_add_path(cmd, folder, '--chapters', 'chapters') safe_add_path(cmd, folder, '--src-script', 'src-script') safe_add_path(cmd, folder, '--dst-script', 'dst-script') safe_add_key(cmd, '--max-kf-distance', 'max-kf-distance') safe_add_key(cmd, '--max-ts-distance', 'max-ts-distance') safe_add_key(cmd, '--max-ts-duration', 'max-ts-duration') output_path = os.path.join(folder, params['dst']) + '.sushi.test.ass' cmd.extend(('-o', output_path)) if plots_path: cmd.extend(('--test-shift-plot', os.path.join(plots_path, '{0}.png'.format(test_name)))) with set_file_logger(os.path.join(folder, 'sushi_test.log')): try: with remove_console_logger(): parse_args_and_run(cmd) except Exception as e: logging.critical('Sushi failed on test "{0}": {1}'.format(test_name, e.message)) return False ideal_path = os.path.join(folder, params['ideal']) try: timecodes = Timecodes.from_file(os.path.join(folder, params['dst-timecodes'])) except KeyError: timecodes = Timecodes.cfr(params['fps']) return compare_scripts(ideal_path, output_path, timecodes, test_name, params['expected_errors'])
def test_raises_on_timecodes_and_fps_being_defined_together(self, ignore): keys = [ '--src', 's.wav', '--dst', 'd.wav', '--script', 's.ass', '--src-timecodes', 'tc.txt', '--src-fps', '25' ] self.assertRaisesRegexp(SushiError, self.any_case_regex(r'timecodes'), lambda: parse_args_and_run(keys))
def test_checks_that_files_exist(self, mock_object): keys = ['--dst', 'dst', '--src', 'src', '--script', 'script', '--chapters', 'chapters', '--dst-keyframes', 'dst-keyframes', '--src-keyframes', 'src-keyframes', '--src-timecodes', 'src-tcs', '--dst-timecodes', 'dst-tcs'] try: sushi.parse_args_and_run(keys) except SushiError: pass mock_object.assert_any_call('src', ANY) mock_object.assert_any_call('dst', ANY) mock_object.assert_any_call('script', ANY) mock_object.assert_any_call('chapters', ANY) mock_object.assert_any_call('dst-keyframes', ANY) mock_object.assert_any_call('src-keyframes', ANY) mock_object.assert_any_call('dst-tcs', ANY) mock_object.assert_any_call('src-tcs', ANY)
def test_raises_on_script_type_not_matching(self, ignore): keys = [ '--src', 's.wav', '--dst', 'd.wav', '--script', 's.ass', '-o', 'd.srt' ] self.assertRaisesRegexp(SushiError, self.any_case_regex(r'script.*type.*match'), lambda: parse_args_and_run(keys))
def test_checks_that_files_exist(self, mock_object): keys = [ '--dst', 'dst', '--src', 'src', '--script', 'script', '--chapters', 'chapters', '--dst-keyframes', 'dst-keyframes', '--src-keyframes', 'src-keyframes', '--src-timecodes', 'src-tcs', '--dst-timecodes', 'dst-tcs' ] try: parse_args_and_run(keys) except SushiError: pass mock_object.assert_any_call('src', ANY) mock_object.assert_any_call('dst', ANY) mock_object.assert_any_call('script', ANY) mock_object.assert_any_call('chapters', ANY) mock_object.assert_any_call('dst-keyframes', ANY) mock_object.assert_any_call('src-keyframes', ANY) mock_object.assert_any_call('dst-tcs', ANY) mock_object.assert_any_call('src-tcs', ANY)
def test_raises_on_unknown_script_type(self, ignore): keys = ['--src', 's.wav', '--dst', 'd.wav', '--script', 's.mp4'] self.assertRaisesRegexp(SushiError, self.any_case_regex(r'script.*type'), lambda: parse_args_and_run(keys))
def test_raises_on_timecodes_and_fps_being_defined_together(self, ignore): keys = ['--src', 's.wav', '--dst', 'd.wav', '--script', 's.ass', '--src-timecodes', 'tc.txt', '--src-fps', '25'] self.assertRaisesRegexp(SushiError, self.any_case_regex(r'timecodes'), lambda: sushi.parse_args_and_run(keys))
def test_raises_on_script_type_not_matching(self, ignore): keys = ['--src', 's.wav', '--dst', 'd.wav', '--script', 's.ass', '-o', 'd.srt'] self.assertRaisesRegexp(SushiError, self.any_case_regex(r'script.*type.*match'), lambda: sushi.parse_args_and_run(keys))
def test_raises_on_unknown_script_type(self, ignore): keys = ['--src', 's.wav', '--dst', 'd.wav', '--script', 's.mp4'] self.assertRaisesRegexp(SushiError, self.any_case_regex(r'script.*type'), lambda: sushi.parse_args_and_run(keys))