From fccb44f33495920a916b4bbab1b6dc466f3a3b26 Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Mon, 13 Jul 2015 00:09:15 -0400 Subject: [PATCH] Test: Disentangled the backslash mess --- test/tw-1436.t | 37 +++++++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/test/tw-1436.t b/test/tw-1436.t index 2538bd5f1..a721f90c1 100755 --- a/test/tw-1436.t +++ b/test/tw-1436.t @@ -32,7 +32,7 @@ import unittest # Ensure python finds the local simpletap module sys.path.append(os.path.dirname(os.path.abspath(__file__))) -from basetest import Task, TestCase +from basetest import Task, TestCase, utils class TestBug1436(TestCase): @@ -41,21 +41,46 @@ class TestBug1436(TestCase): def test_parser_hangs_with_slashes(self): """Parser hangs with backslashes""" - expected = "Cheer everyone up \o/" - code, out, err = self.t(("add", expected)) + + # Yes, seven: + # Python turns \\ --> \, therefore \\\\\\\o/ --> \\\\o/ + # Some process launch thing does the same, therefore \\\\o/ --> \\o/ + # Taskwarrior sees \\o/, which means \o/ + code, out, err = self.t("add Cheer everyone up \\\\\\\o/") self.assertIn("Created task 1", out) - code, out, err = self.t(("list",)) - self.assertIn(expected, out) + code, out, err = self.t("_get 1.description") + self.assertEqual("Cheer everyone up \\o/\n", out) def test_parser_ending_escape_slash(self): """Task created but not found with ending backslash""" - code, out, err = self.t(("add", "Use this backslash \\\\")) + + # Yes, eight: + # Python turns \\ --> \, therefore \\\\\\\\ --> \\\\ + # Some process launch thing does the same, therefore \\\\ --> \\ + # Taskwarrior sees \\, which means \ + code, out, err = self.t("add Use this backslash \\\\\\\\") self.assertIn("Created task 1", out) code, out, err = self.t(("list",)) self.assertIn("Use this backslash \\", out) + def test_backslashes(self): + """Prove to the reader that backslashes are eaten twice (which means + \\ --> \) once by Python, and once more by some mystery process + launch thing. + + This problem is entirely testing artifact, and not Taskwarrior. + """ + self.echo = Task(taskw=utils.binary_location("/bin/echo")) + + code, out, err = self.echo("xxx \\\\\\\\yyy zzz") # Shows as 'xxx \\yyy zzz' + self.tap(out) + code, out, err = self.echo("xxx \\\\yyy zzz") # Shows as 'xxx \yyy zzz' + self.tap(out) + code, out, err = self.echo("xxx \\yyy zzz") # Shows as 'xxx yyy zzz' + self.tap(out) + if __name__ == "__main__": from simpletap import TAPTestRunner