diff --git a/test_convert_command.py b/test_convert_command.py new file mode 100644 index 0000000..f28c6aa --- /dev/null +++ b/test_convert_command.py @@ -0,0 +1,120 @@ +import shutil +import unittest + +from shell_command import ( + ShellCommand, ConvertCommand +) + + +class TestConvertCommand(unittest.TestCase): + """Test the ConvertCommand class. + """ + + # Local ConvertCommand. + command = None + + # Path to convert executable. + expected_executable = shutil.which("convert") + + # Expected base options. + expected_base_options = [ + "-size", "2048x1536", + "-density", "600", + "xc:dimgrey", "null:", + "(" + ] + + # Expected input options. + expected_input_options = [ + "foo", + "-resize", "2048x1536", + "-background", "white", + "-alpha", "remove", + "-type", "truecolor", + "-define", "colorspace:auto-grayscale=off", + ] + + # Expected output options. + expected_output_options = [ + ")", + "-gravity", "center", + "-layers", "composite", + "-flatten", + "bar", + ] + + def setUp(self): + """Initialisation. Make sure the input and output options are + explicitly set otherwise they hang around from previous tests. + """ + self.command = ConvertCommand( + input_options=["foo"], output_options=["bar"]) + + def tearDown(self): + """Cleanup. + """ + self.command = None + + def test_base_options(self): + """Test that base options match expected. + """ + self.assertEqual( + self.command._base_options, self.expected_base_options) + + def test_input_options(self): + """Test that input options match expected. + """ + self.assertEqual( + self.command.input_options, self.expected_input_options) + + def test_output_options(self): + """Test that output options match expected. + """ + self.assertEqual( + self.command.output_options, self.expected_output_options) + + def test_executable_string(self): + """Test that executable path matches expected. + """ + self.assertEqual(self.command.executable_string(quote=False), + self.expected_executable) + # Note: don't explicitly specify quoted value, because + # the executable path will vary across different systems. + self.assertEqual(self.command.executable_string(quote=True), + ShellCommand.shellquote(self.expected_executable)) + + def test_argument_string(self): + """Test that the argument string matches expected. + """ + args = (self.expected_base_options + self.expected_input_options + + self.expected_output_options) + self.assertEqual(self.command.argument_string(quote=False), + " ".join(args)) + self.assertEqual(self.command.argument_string(quote=True), + " ".join([ShellCommand.shellquote(a) for a in args])) + + def test_argument_list(self): + """Test that the argument list matches expected. + """ + self.assertEqual(self.command.argument_list(), + self.expected_base_options + self.expected_input_options + + self.expected_output_options) + + def test_command_string(self): + """Test that the command string matches expected. + """ + args = (self.expected_base_options + self.expected_input_options + + self.expected_output_options) + expected_cmd_unquoted = ( + "{exe} {arg}".format(exe=self.expected_executable, + arg=" ".join(args)) + ) + expected_cmd_quoted = ( + '{exe} {arg}'.format( + exe=ShellCommand.shellquote(self.expected_executable), + arg=" ".join([ShellCommand.shellquote(a) for a in args])) + ) + self.assertEqual(self.command.command_string(quote=False), + expected_cmd_unquoted) + self.assertEqual(self.command.command_string(quote=True), + expected_cmd_quoted)