[Lldb-commits] [PATCH] D123500: [lldb][NFC] Add more tests for GenerateOptionsUsage

David Spickett via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Mon Apr 25 07:33:42 PDT 2022

DavidSpickett updated this revision to Diff 424900.
DavidSpickett added a comment.

I realised that in theory the tests could still pass if your ordering
just happend to land in the right way.

For the short option `[-ABCabc]` there's not a lot I can do about that,
so I added another check for a different command. More chance to catch
non-determinism. I don't think any commands have enough options to make
it 100% sure.

For the detailed options I switched from a regex to cutting up the
output with python. Then once we've got all the short names we can
check the whole order.

(and I checked, when it fails you do get a list specific comparison output)

  rG LLVM Github Monorepo




Index: lldb/test/API/commands/help/TestHelp.py
--- lldb/test/API/commands/help/TestHelp.py
+++ lldb/test/API/commands/help/TestHelp.py
@@ -243,3 +243,63 @@
                 "-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!")

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D123500.424900.patch
Type: text/x-patch
Size: 3325 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20220425/bef99be5/attachment.bin>

More information about the lldb-commits mailing list