[Lldb-commits] [lldb] 1f933ff - [lldb][NFC] Rewrite TestQuoting

Raphael Isemann via lldb-commits lldb-commits at lists.llvm.org
Tue Oct 27 03:12:48 PDT 2020


Author: Raphael Isemann
Date: 2020-10-27T11:12:17+01:00
New Revision: 1f933ff999f2c0373c79ddf23539873cbfa923e5

URL: https://github.com/llvm/llvm-project/commit/1f933ff999f2c0373c79ddf23539873cbfa923e5
DIFF: https://github.com/llvm/llvm-project/commit/1f933ff999f2c0373c79ddf23539873cbfa923e5.diff

LOG: [lldb][NFC] Rewrite TestQuoting

TestQuoting's different test methods all build their own test binaries but
we can just reuse the same test binary by merging all asserts into one method.
This reduces the test runtime from 8 seconds to 4 seconds on my machine.
This also removes the ability to have partial failures in this test, but given
how rarely this code is touched this seems like a fair tradeoff (and we will be
able to re-add this feature once we updated our test framework).

Some other small changes:
  * Fixed that we cleanup "stdout.txt" instead of "output.txt" in the cleanup.
  * Fixed some formatting issues.
  * Call `build` instead of directly calling `buildDefault`.

Added: 
    

Modified: 
    lldb/test/API/commands/settings/quoting/TestQuoting.py

Removed: 
    


################################################################################
diff  --git a/lldb/test/API/commands/settings/quoting/TestQuoting.py b/lldb/test/API/commands/settings/quoting/TestQuoting.py
index a415ea8ee247..a64c34a6ff38 100644
--- a/lldb/test/API/commands/settings/quoting/TestQuoting.py
+++ b/lldb/test/API/commands/settings/quoting/TestQuoting.py
@@ -1,10 +1,7 @@
 """
-Test quoting of arguments to lldb commands
+Test quoting of arguments to lldb commands.
 """
 
-
-
-
 import lldb
 from lldbsuite.test.decorators import *
 from lldbsuite.test.lldbtest import *
@@ -14,81 +11,62 @@
 class SettingsCommandTestCase(TestBase):
 
     mydir = TestBase.compute_mydir(__file__)
+    output_file_name = "output.txt"
 
     @classmethod
     def classCleanup(cls):
         """Cleanup the test byproducts."""
-        cls.RemoveTempFile("stdout.txt")
-
-    @no_debug_info_test
-    def test_no_quote(self):
-        self.do_test_args("a b c", "a\0b\0c\0")
-
-    @no_debug_info_test
-    def test_single_quote(self):
-        self.do_test_args("'a b c'", "a b c\0")
+        cls.RemoveTempFile(SettingsCommandTestCase.output_file_name)
 
+    @skipIfReproducer  # Reproducers don't know about output.txt
     @no_debug_info_test
-    def test_double_quote(self):
-        self.do_test_args('"a b c"', "a b c\0")
-
-    @no_debug_info_test
-    def test_single_quote_escape(self):
-        self.do_test_args("'a b\\' c", "a b\\\0c\0")
-
-    @no_debug_info_test
-    def test_double_quote_escape(self):
-        self.do_test_args('"a b\\" c"', 'a b" c\0')
-
-    @no_debug_info_test
-    def test_double_quote_escape2(self):
-        self.do_test_args('"a b\\\\" c', 'a b\\\0c\0')
-
-    @no_debug_info_test
-    def test_single_in_double(self):
-        self.do_test_args('"a\'b"', "a'b\0")
-
-    @no_debug_info_test
-    def test_double_in_single(self):
-        self.do_test_args("'a\"b'", 'a"b\0')
-
-    @no_debug_info_test
-    def test_combined(self):
-        self.do_test_args('"a b"c\'d e\'', 'a bcd e\0')
-
-    @no_debug_info_test
-    def test_bare_single(self):
-        self.do_test_args("a\\'b", "a'b\0")
-
-    @no_debug_info_test
-    def test_bare_double(self):
-        self.do_test_args('a\\"b', 'a"b\0')
+    def test(self):
+        self.build()
+        exe = self.getBuildArtifact("a.out")
+        self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET)
 
-    @skipIfReproducer # Reproducers don't know about output.txt
-    def do_test_args(self, args_in, args_out):
+        # No quotes.
+        self.expect_args("a b c", "a\0b\0c\0")
+        # Single quotes.
+        self.expect_args("'a b c'", "a b c\0")
+        # Double quotes.
+        self.expect_args('"a b c"', "a b c\0")
+        # Single quote escape.
+        self.expect_args("'a b\\' c", "a b\\\0c\0")
+        # Double quote escape.
+        self.expect_args('"a b\\" c"', 'a b" c\0')
+        self.expect_args('"a b\\\\" c', 'a b\\\0c\0')
+        # Single quote in double quotes.
+        self.expect_args('"a\'b"', "a'b\0")
+        # Double quotes in single quote.
+        self.expect_args("'a\"b'", 'a"b\0')
+        # Combined quotes.
+        self.expect_args('"a b"c\'d e\'', 'a bcd e\0')
+        # Bare single/double quotes.
+        self.expect_args("a\\'b", "a'b\0")
+        self.expect_args('a\\"b', 'a"b\0')
+
+    def expect_args(self, args_in, args_out):
         """Test argument parsing. Run the program with args_in. The program dumps its arguments
         to stdout. Compare the stdout with args_out."""
-        self.buildDefault()
 
-        exe = self.getBuildArtifact("a.out")
-        self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET)
+        filename = SettingsCommandTestCase.output_file_name
 
-        local_outfile = self.getBuildArtifact("output.txt")
         if lldb.remote_platform:
-            remote_outfile = lldb.remote_platform.GetWorkingDirectory() + "/output.txt"
+            outfile = lldb.remote_platform.GetWorkingDirectory() + filename
         else:
-            remote_outfile = local_outfile
+            outfile = self.getBuildArtifact(filename)
 
-        self.runCmd("process launch -- %s %s" %(remote_outfile, args_in))
+        self.runCmd("process launch -- %s %s" % (outfile, args_in))
 
         if lldb.remote_platform:
-            src_file_spec = lldb.SBFileSpec(remote_outfile, False)
-            dst_file_spec = lldb.SBFileSpec(local_outfile, True)
+            src_file_spec = lldb.SBFileSpec(outfile, False)
+            dst_file_spec = lldb.SBFileSpec(outfile, True)
             lldb.remote_platform.Get(src_file_spec, dst_file_spec)
 
-        with open(local_outfile, 'r') as f:
+        with open(outfile, 'r') as f:
             output = f.read()
 
-        self.RemoveTempFile(local_outfile)
+        self.RemoveTempFile(outfile)
 
         self.assertEqual(output, args_out)


        


More information about the lldb-commits mailing list