You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
141 lines
4.7 KiB
141 lines
4.7 KiB
#!/usr/bin/env python
|
|
# -*- coding: UTF-8 -*-
|
|
|
|
"""Contains test cases for the parsers module."""
|
|
|
|
from __future__ import unicode_literals
|
|
|
|
import sys
|
|
import os.path
|
|
import unittest
|
|
|
|
PATH = os.path.realpath(os.path.abspath(__file__))
|
|
sys.path.insert(0, os.path.dirname(os.path.dirname(PATH)))
|
|
|
|
try:
|
|
from youtube_dl_gui.parsers import OptionsParser
|
|
except ImportError as error:
|
|
print error
|
|
sys.exit(1)
|
|
|
|
|
|
class TestParse(unittest.TestCase):
|
|
|
|
"""Test case for OptionsParser parse method."""
|
|
|
|
def setUp(self):
|
|
# Create the options_dict based on the OptionHolder
|
|
# items inside the OptionsParser object
|
|
self.options_dict = {item.name:item.default_value for item in OptionsParser()._ydl_options}
|
|
|
|
# Add extra options used by the OptionsParser.parse method
|
|
self.options_dict["save_path"] = "/home/user/Workplace/test/youtube"
|
|
self.options_dict["cmd_args"] = ""
|
|
self.options_dict["output_format"] = 1 # Title
|
|
self.options_dict["second_video_format"] = "0"
|
|
self.options_dict["min_filesize_unit"] = ""
|
|
self.options_dict["max_filesize_unit"] = ""
|
|
|
|
def check_options_parse(self, expected_options):
|
|
options_parser = OptionsParser()
|
|
|
|
self.assertItemsEqual(options_parser.parse(self.options_dict), expected_options)
|
|
|
|
def test_parse_to_audio_requirement_bug(self):
|
|
"""Test case for the 'to_audio' requirement."""
|
|
|
|
self.options_dict["audio_quality"] = "9"
|
|
self.options_dict["audio_format"] = "mp3"
|
|
self.options_dict["embed_thumbnail"] = True
|
|
|
|
expected_cmd_list = ["--newline",
|
|
"-x",
|
|
"--audio-format",
|
|
"mp3",
|
|
"--embed-thumbnail",
|
|
"--audio-quality",
|
|
"9",
|
|
"-o",
|
|
"/home/user/Workplace/test/youtube/%(title)s.%(ext)s"]
|
|
|
|
self.check_options_parse(expected_cmd_list)
|
|
|
|
# Setting 'to_audio' to True should return the same results
|
|
# since the '-x' flag is already set on audio extraction
|
|
self.options_dict["to_audio"] = True
|
|
|
|
self.check_options_parse(expected_cmd_list)
|
|
|
|
def test_parse_cmd_args_with_quotes(self):
|
|
"""Test the youtube-dl cmd line args parsing when quotes are presented.
|
|
|
|
See: https://github.com/MrS0m30n3/youtube-dl-gui/issues/54
|
|
|
|
"""
|
|
|
|
self.options_dict["video_format"] = "mp4"
|
|
|
|
# Test with three quoted 'cmd_args'
|
|
self.options_dict["cmd_args"] = "--recode-video mkv --postprocessor-args \"-codec copy -report\""
|
|
|
|
expected_cmd_list = ["--newline",
|
|
"-f",
|
|
"mp4",
|
|
"-o",
|
|
"/home/user/Workplace/test/youtube/%(title)s.%(ext)s",
|
|
"--recode-video",
|
|
"mkv",
|
|
"--postprocessor-args",
|
|
"-codec copy -report"]
|
|
|
|
self.check_options_parse(expected_cmd_list)
|
|
|
|
|
|
# Test with two quoted 'cmd_args'
|
|
self.options_dict["cmd_args"] = "--postprocessor-args \"-y -report\""
|
|
|
|
expected_cmd_list = ["--newline",
|
|
"-f",
|
|
"mp4",
|
|
"-o",
|
|
"/home/user/Workplace/test/youtube/%(title)s.%(ext)s",
|
|
"--postprocessor-args",
|
|
"-y -report"]
|
|
|
|
self.check_options_parse(expected_cmd_list)
|
|
|
|
|
|
# Test with one quoted 'cmd_arg' followed by other cmd line args
|
|
self.options_dict["cmd_args"] = "--postprocessor-args \"-y\" -v"
|
|
|
|
expected_cmd_list = ["--newline",
|
|
"-f",
|
|
"mp4",
|
|
"-o",
|
|
"/home/user/Workplace/test/youtube/%(title)s.%(ext)s",
|
|
"--postprocessor-args",
|
|
"-y",
|
|
"-v"]
|
|
|
|
self.check_options_parse(expected_cmd_list)
|
|
|
|
|
|
# Test the example presented in issue #54
|
|
self.options_dict["cmd_args"] = "-f \"(mp4)[width<1300]\""
|
|
self.options_dict["video_format"] = "0" # Set video format to 'default'
|
|
|
|
expected_cmd_list = ["--newline",
|
|
"-o",
|
|
"/home/user/Workplace/test/youtube/%(title)s.%(ext)s",
|
|
"-f",
|
|
"(mp4)[width<1300]"]
|
|
|
|
self.check_options_parse(expected_cmd_list)
|
|
|
|
|
|
def main():
|
|
unittest.main()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|