diff --git a/lldb/test/API/commands/help/TestHelp.py b/lldb/test/API/commands/help/TestHelp.py --- a/lldb/test/API/commands/help/TestHelp.py +++ b/lldb/test/API/commands/help/TestHelp.py @@ -243,3 +243,63 @@ "-f ( --format )", "The format to use for each of the value to be written.", "-s ( --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=[ + "[]\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: + # .*.*.* + # 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!")