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

#!/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()