[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