def test_create_output_record_and_other_file_output(self, console: Mock, args: Mock): formatter = Formatter({}) args.output = None args.stdout = True args.record_and_pipe = True create_output(formatter) console.exit.assert_called_with("Cannot use record options with other file output options.")
def test_create_output_record(self, mock_check_file_output: Mock, args: Mock): formatter = Formatter({"author": lambda: "foo"}) mock_check_file_output.side_effect = lambda path, force: FileOutput( path) args.output = None args.stdout = None args.record = "foo" args.record_and_pipe = None args.force = False args.fs_safe_rules = None args.title = None args.url = "URL" args.player = "mpv" args.player_args = "" args.player_fifo = None args.player_http = None output = create_output(formatter) assert type(output) is PlayerOutput assert output.title == "URL" assert type(output.record) is FileOutput assert output.record.filename == Path("foo") assert output.record.fd is None assert output.record.record is None args.title = "{author} - {title}" output = create_output(formatter) assert type(output) is PlayerOutput assert output.title == "foo - bar" assert type(output.record) is FileOutput assert output.record.filename == Path("foo") assert output.record.fd is None assert output.record.record is None
def test_create_output_record(self, args: Mock): formatter = Formatter({ "author": lambda: "foo" }) args.output = None args.stdout = None args.record = "foo" args.record_and_pipe = None args.fs_safe_rules = None args.title = None args.url = "URL" args.player = "mpv" args.player_args = "" args.player_fifo = None args.player_http = None output = create_output(formatter) self.assertIsInstance(output, PlayerOutput) self.assertEqual(output.title, "URL") self.assertIsInstance(output.record, FileOutput) self.assertEqual(output.record.filename, "foo") self.assertEqual(output.record.fd, None) self.assertEqual(output.record.record, None) args.title = "{author} - {title}" output = create_output(formatter) self.assertIsInstance(output, PlayerOutput) self.assertEqual(output.title, "foo - bar") self.assertIsInstance(output.record, FileOutput) self.assertEqual(output.record.filename, "foo") self.assertEqual(output.record.fd, None) self.assertEqual(output.record.record, None)
def test_create_output_record(self, mock_check_file_output: Mock, args: Mock): formatter = Formatter({"author": lambda: "foo"}) mock_check_file_output.side_effect = lambda path, force: FileOutput( path) args.output = None args.stdout = None args.record = "foo" args.record_and_pipe = None args.force = False args.fs_safe_rules = None args.title = None args.url = "URL" args.player = "mpv" args.player_args = "" args.player_fifo = None args.player_http = None output = create_output(formatter) self.assertIsInstance(output, PlayerOutput) self.assertEqual(output.title, "URL") self.assertIsInstance(output.record, FileOutput) self.assertEqual(output.record.filename, Path("foo")) self.assertIsNone(output.record.fd) self.assertIsNone(output.record.record) args.title = "{author} - {title}" output = create_output(formatter) self.assertIsInstance(output, PlayerOutput) self.assertEqual(output.title, "foo - bar") self.assertIsInstance(output.record, FileOutput) self.assertEqual(output.record.filename, Path("foo")) self.assertIsNone(output.record.fd) self.assertIsNone(output.record.record)
def test_create_output_file_output(self, mock_check_file_output, args): # type: (Mock, Mock) formatter = Formatter({}) mock_check_file_output.side_effect = lambda path, force: FileOutput( path) formatter = Formatter({}) args.output = "foo" args.stdout = None args.record = None args.record_and_pipe = None args.force = False args.fs_safe_rules = None output = create_output(formatter) self.assertEqual(mock_check_file_output.call_args_list, [call("foo", False)]) self.assertIsInstance(output, FileOutput) self.assertEqual(output.filename, "foo") self.assertIsNone(output.fd) self.assertIsNone(output.record)
def test_create_output_file_output(self, args: Mock, mock_isfile): formatter = Formatter({}) args.output = "foo" args.force = False args.fs_safe_rules = None mock_isfile.return_value = False output = create_output(formatter) self.assertIsInstance(output, FileOutput) self.assertEqual(output.filename, "foo") self.assertEqual(output.fd, None) self.assertEqual(output.record, None)
def test_create_output_no_default_player(self, console: Mock, args: Mock): formatter = Formatter({}) args.output = None args.stdout = False args.record_and_pipe = False args.player = None console.exit.side_effect = SystemExit with self.assertRaises(SystemExit): create_output(formatter) self.assertRegex( console.exit.call_args_list[0][0][0], r"^The default player \(\w+\) does not seem to be installed\.")
def test_create_output_record_and_pipe(self, args: Mock, mock_isfile: Mock): formatter = Formatter({}) args.output = None args.stdout = None args.record_and_pipe = "foo" args.fs_safe_rules = None mock_isfile.return_value = False output = create_output(formatter) self.assertIsInstance(output, FileOutput) self.assertEqual(output.filename, None) self.assertEqual(output.fd, stdout) self.assertIsInstance(output.record, FileOutput) self.assertEqual(output.record.filename, "foo") self.assertEqual(output.record.fd, None) self.assertEqual(output.record.record, None)
def test_create_output_stdout(self, args: Mock): formatter = Formatter({}) args.output = None args.stdout = True output = create_output(formatter) self.assertIsInstance(output, FileOutput) self.assertEqual(output.filename, None) self.assertEqual(output.fd, stdout) self.assertEqual(output.record, None) args.output = "-" args.stdout = False output = create_output(formatter) self.assertIsInstance(output, FileOutput) self.assertEqual(output.filename, None) self.assertEqual(output.fd, stdout) self.assertEqual(output.record, None)
def test_create_output_no_file_output_options(self, args: Mock): formatter = Formatter({"author": lambda: "foo"}) args.output = None args.stdout = None args.record = None args.record_and_pipe = None args.title = None args.url = "URL" args.player = "mpv" args.player_args = "" output = create_output(formatter) self.assertIsInstance(output, PlayerOutput) self.assertEqual(output.title, "URL") args.title = "{author} - {title}" output = create_output(formatter) self.assertIsInstance(output, PlayerOutput) self.assertEqual(output.title, "foo - bar")
def test_create_output_stdout(self, args: Mock): formatter = Formatter({}) args.output = None args.stdout = True args.record = None args.record_and_pipe = None output = create_output(formatter) self.assertIsInstance(output, FileOutput) self.assertIsNone(output.filename) self.assertIs(output.fd, stdout) self.assertIsNone(output.record) args.output = "-" args.stdout = False output = create_output(formatter) self.assertIsInstance(output, FileOutput) self.assertIsNone(output.filename) self.assertIs(output.fd, stdout) self.assertIsNone(output.record)
def test_create_output_file_output(self, mock_check_file_output: Mock, args: Mock): formatter = Formatter({}) mock_check_file_output.side_effect = lambda path, force: FileOutput( path) args.output = "foo" args.stdout = None args.record = None args.record_and_pipe = None args.force = False args.fs_safe_rules = None output = create_output(formatter) assert mock_check_file_output.call_args_list == [ call(Path("foo"), False) ] assert type(output) is FileOutput assert output.filename == Path("foo") assert output.fd is None assert output.record is None
def test_create_output_no_default_player(self, console): # type: (Mock, Mock) streamlink_cli.main.args = args = Mock() console.exit = Mock() formatter = Formatter({}) args.output = None args.stdout = False args.record_and_pipe = False args.player = None console.exit.side_effect = SystemExit with self.assertRaises(SystemExit): create_output(formatter) if is_py2: self.assertRegexpMatches( console.exit.call_args_list[0][0][0], r"^The default player \(\w+\) does not seem to be installed\.") else: self.assertRegex( console.exit.call_args_list[0][0][0], r"^The default player \(\w+\) does not seem to be installed\.")
def test_create_output_stdout(self, args: Mock): formatter = Formatter({}) args.output = None args.stdout = True args.record = None args.record_and_pipe = None output = create_output(formatter) assert type(output) is FileOutput assert output.filename is None assert output.fd is stdout assert output.record is None args.output = "-" args.stdout = False output = create_output(formatter) assert type(output) is FileOutput assert output.filename is None assert output.fd is stdout assert output.record is None
def test_create_output_no_file_output_options(self, args: Mock): formatter = Formatter({"author": lambda: "foo"}) args.output = None args.stdout = None args.record = None args.record_and_pipe = None args.player_fifo = False args.title = None args.url = "URL" args.player = "mpv" args.player_args = "" output = create_output(formatter) assert type(output) is PlayerOutput assert output.title == "URL" args.title = "{author} - {title}" output = create_output(formatter) assert type(output) is PlayerOutput assert output.title == "foo - bar"
def test_create_output_record_and_pipe(self, mock_check_file_output: Mock, args: Mock): formatter = Formatter({}) mock_check_file_output.side_effect = lambda path, force: FileOutput( path) args.output = None args.stdout = None args.record_and_pipe = "foo" args.force = False args.fs_safe_rules = None output = create_output(formatter) self.assertEqual(mock_check_file_output.call_args_list, [call(Path("foo"), False)]) self.assertIsInstance(output, FileOutput) self.assertIsNone(output.filename) self.assertIs(output.fd, stdout) self.assertIsInstance(output.record, FileOutput) self.assertEqual(output.record.filename, Path("foo")) self.assertIsNone(output.record.fd) self.assertIsNone(output.record.record)
def test_create_output_record_stdout(self, args: Mock): formatter = Formatter({"author": lambda: "foo"}) args.output = None args.stdout = None args.record = "-" args.record_and_pipe = None args.force = False args.fs_safe_rules = None args.title = "{author} - {title}" args.url = "URL" args.player = "mpv" args.player_args = "" args.player_fifo = None args.player_http = None output = create_output(formatter) assert type(output) is PlayerOutput assert output.title == "foo - bar" assert type(output.record) is FileOutput assert output.record.filename is None assert output.record.fd is stdout assert output.record.record is None
def test_stream_failure_no_output_open(self, mock_console: Mock, mock_log: Mock): output = Mock() stream = Mock(__str__=lambda _: "fake-stream", open=Mock(side_effect=StreamError("failure"))) formatter = Formatter({}) with patch("streamlink_cli.main.output", Mock()), \ patch("streamlink_cli.main.create_output", return_value=output): output_stream(stream, formatter) self.assertEqual(mock_log.error.call_args_list, [ call( "Try 1/2: Could not open stream fake-stream (Could not open stream: failure)" ), call( "Try 2/2: Could not open stream fake-stream (Could not open stream: failure)" ), ]) self.assertEqual(mock_console.exit.call_args_list, [ call("Could not open stream fake-stream, tried 2 times, exiting") ]) self.assertFalse(output.open.called, "Does not open the output on stream error")