[Lldb-commits] [lldb] ca0b416 - [lldb][NFC] Add more tests for GenerateOptionsUsage

David Spickett via lldb-commits lldb-commits at lists.llvm.org
Tue May 3 06:40:20 PDT 2022


Author: David Spickett
Date: 2022-05-03T13:40:14Z
New Revision: ca0b41665978d5efd8482188a0541342cb298031

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

LOG: [lldb][NFC] Add more tests for GenerateOptionsUsage

This adds a few targeted tests to make sure that when refactoring
this function later I don't break these properties.

Some are tested in passing elsewhere but this makes it more
obvious what went wrong when it fails.

This doesn't cover everything the function does, I couldn't
find any examples that would exercise some of the code.

Reviewed By: jingham

Differential Revision: https://reviews.llvm.org/D123500

Added: 
    

Modified: 
    lldb/test/API/commands/help/TestHelp.py

Removed: 
    


################################################################################
diff  --git a/lldb/test/API/commands/help/TestHelp.py b/lldb/test/API/commands/help/TestHelp.py
index 5bd85ddcf7062..49f83411413a9 100644
--- a/lldb/test/API/commands/help/TestHelp.py
+++ b/lldb/test/API/commands/help/TestHelp.py
@@ -243,3 +243,63 @@ def test_help_option_group_format_options_usage(self):
                 "-f <format> ( --format <format> )", "The format to use for each of the value to be written.",
                 "-s <byte-size> ( --size <byte-size> )", "The size in bytes to write from input file or each value."])
 
+    @no_debug_info_test
+    def test_help_shows_optional_short_options(self):
+        """Test that optional short options are printed and that they are in
+           alphabetical order with upper case options first."""
+        self.expect("help memory read",
+                    substrs=["memory read [-br]", "memory read [-AFLORTr]"])
+        self.expect("help target modules lookup",
+                    substrs=["target modules lookup [-Airv]"])
+
+    @no_debug_info_test
+    def test_help_shows_command_options_usage(self):
+        """Test that we start the usage section with a specific line."""
+        self.expect("help memory read", substrs=["Command Options Usage:\n  memory read"])
+
+    @no_debug_info_test
+    def test_help_detailed_information_spacing(self):
+        """Test that we put a break between the usage and the options help lines,
+           and between the options themselves."""
+        self.expect("help memory read", substrs=[
+                    "[<address-expression>]\n\n       --show-tags",
+                    # Starts with the end of the show-tags line
+                    "output).\n\n       -A"])
+
+    @no_debug_info_test
+    def test_help_detailed_information_ordering(self):
+        """Test that we order options alphabetically, upper case first."""
+        # You could test this with a simple regex like:
+        # <upper case>.*<later upper case>.*<lower case>.*<later lower case>
+        # Except that that could pass sometimes even with shuffled output.
+        # This makes sure that doesn't happen.
+
+        self.runCmd("help memory read")
+        got = self.res.GetOutput()
+        _, options_lines = got.split("Command Options Usage:")
+        options_lines = options_lines.lstrip().splitlines()
+
+        # Skip over "memory read [-xyz] lines.
+        while("memory read" in options_lines[0]):
+            options_lines.pop(0)
+        # Plus the newline after that.
+        options_lines.pop(0)
+
+        short_options = []
+        for line in options_lines:
+            # Ignore line breaks and descriptions.
+            # (not stripping the line here in case some line of the descriptions
+            # happens to start with "-")
+            if not line or not line.startswith("       -"):
+                continue
+            # This apears at the end after the options.
+            if "This command takes options and free form arguments." in line:
+                break
+            line = line.strip()
+            # The order of -- only options is not enforced so ignore their position.
+            if not line.startswith("--"):
+                # Save its short char name.
+                short_options.append(line[1])
+
+        self.assertEqual(sorted(short_options), short_options,
+                         "Short option help displayed in an incorrect order!")


        


More information about the lldb-commits mailing list