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