Ejemplo n.º 1
0
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'])
Ejemplo n.º 2
0
 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))
Ejemplo n.º 3
0
Archivo: main.py Proyecto: tp7/Sushi
 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)
Ejemplo n.º 4
0
 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))
Ejemplo n.º 5
0
 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)
Ejemplo n.º 6
0
 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))
Ejemplo n.º 7
0
Archivo: main.py Proyecto: tp7/Sushi
 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))
Ejemplo n.º 8
0
Archivo: main.py Proyecto: tp7/Sushi
 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))
Ejemplo n.º 9
0
Archivo: main.py Proyecto: tp7/Sushi
 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))