From 02855a44bd9f591eb1d1406b59975b6ff02fc212 Mon Sep 17 00:00:00 2001 From: Bruno Cauet Date: Fri, 13 Mar 2015 11:51:26 +0100 Subject: [PATCH] Fix exception construction in util.command_output() `cmd` being a byte string array, it should be joined by b" " and not u" ". --- beets/util/__init__.py | 2 +- test/test_util.py | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/beets/util/__init__.py b/beets/util/__init__.py index 53156143f..a3b57eea6 100644 --- a/beets/util/__init__.py +++ b/beets/util/__init__.py @@ -664,7 +664,7 @@ def command_output(cmd, shell=False): if proc.returncode: raise subprocess.CalledProcessError( returncode=proc.returncode, - cmd=' '.join(cmd), + cmd=b' '.join(cmd), ) return stdout diff --git a/test/test_util.py b/test/test_util.py index 20c7708d5..3de8bfffc 100644 --- a/test/test_util.py +++ b/test/test_util.py @@ -19,8 +19,9 @@ from __future__ import (division, absolute_import, print_function, import sys import re import os +import subprocess -from mock import patch +from mock import patch, Mock from test._common import unittest from test import _common @@ -102,6 +103,19 @@ class UtilTest(unittest.TestCase): ]) self.assertEqual(p, u'foo/_/bar') + @patch('beets.util.subprocess.Popen') + def test_command_output(self, mock_popen): + def popen_fail(*args, **kwargs): + m = Mock(returncode=1) + m.communicate.return_value = None, None + return m + + mock_popen.side_effect = popen_fail + with self.assertRaises(subprocess.CalledProcessError) as exc_context: + util.command_output([b"taga", b"\xc3\xa9"]) + self.assertEquals(exc_context.exception.returncode, 1) + self.assertEquals(exc_context.exception.cmd, b"taga \xc3\xa9") + class PathConversionTest(_common.TestCase): def test_syspath_windows_format(self):