From 50a8df2728c2fda63569415099ee7cbd54aba521 Mon Sep 17 00:00:00 2001 From: Remko Popma Date: Tue, 15 Feb 2022 11:05:33 +0900 Subject: [PATCH] [#1574][#1408][#964] add tests --- src/test/java/picocli/HelpTest.java | 87 +++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) diff --git a/src/test/java/picocli/HelpTest.java b/src/test/java/picocli/HelpTest.java index 0e62bb5bc..9da119063 100644 --- a/src/test/java/picocli/HelpTest.java +++ b/src/test/java/picocli/HelpTest.java @@ -1339,6 +1339,64 @@ class App { assertEquals(expectedUsage, new CommandLine(new App()).getUsageMessage()); } + @Test + public void testSortSynopsisByOptionOrderAllowsGaps() throws Exception { + @Command(sortOptions = false, sortSynopsis = false) + class App { + @Option(names = {"-a"}, order = 9) boolean a; + @Option(names = {"-b"}, order = 8) boolean b; + @Option(names = {"-c"}, order = 7) boolean c; + @Option(names = {"-d"}, order = 6) int d; + @Option(names = {"-e"}, order = 3) String[] e; + @Option(names = {"-f"}, order = 1) String[] f; + @Option(names = {"-g"}, order = 0) boolean g; + } + OptionSpec[] fields = options(new App(), "a", "b", "c", "d", "e", "f", "g"); + Arrays.sort(fields, Help.createOrderComparator()); + OptionSpec[] expected = options(new App(), "g", "f", "e", "d", "c", "b", "a"); + assertArrayEquals(expected, fields); + + String expectedUsage = String.format("" + + "Usage:
[-gcba] [-f=]... [-e=]... [-d=]%n" + + " -g%n" + + " -f=%n" + + " -e=%n" + + " -d=%n" + + " -c%n" + + " -b%n" + + " -a%n"); + assertEquals(expectedUsage, new CommandLine(new App()).getUsageMessage()); + } + + @Test + public void testSortSynopsisWithoutSortingOptions() throws Exception { + @Command(sortSynopsis = false) + class App { + @Option(names = {"-a"}, order = 9) boolean a; + @Option(names = {"-b"}, order = 8) boolean b; + @Option(names = {"-c"}, order = 7) boolean c; + @Option(names = {"-d"}, order = 6) int d; + @Option(names = {"-e"}, order = 3) String[] e; + @Option(names = {"-f"}, order = 1) String[] f; + @Option(names = {"-g"}, order = 0) boolean g; + } + OptionSpec[] fields = options(new App(), "a", "b", "c", "d", "e", "f", "g"); + Arrays.sort(fields, Help.createOrderComparator()); + OptionSpec[] expected = options(new App(), "g", "f", "e", "d", "c", "b", "a"); + assertArrayEquals(expected, fields); + + String expectedUsage = String.format("" + + "Usage:
[-gcba] [-f=]... [-e=]... [-d=]%n" + + " -a%n" + + " -b%n" + + " -c%n" + + " -d=%n" + + " -e=%n" + + " -f=%n" + + " -g%n"); + assertEquals(expectedUsage, new CommandLine(new App()).getUsageMessage()); + } + @Test public void testSortByOptionOrderStableSortWhenEqualOrder() throws Exception { @Command(sortOptions = false) @@ -1368,6 +1426,35 @@ class App { assertEquals(expectedUsage, new CommandLine(new App()).getUsageMessage()); } + @Test + public void testSortSynopsisByOptionOrderStableSortWhenEqualOrder() throws Exception { + @Command(sortOptions = false, sortSynopsis = false) + class App { + @Option(names = {"-a"}, order = 9) boolean a; + @Option(names = {"-b"}, order = 8) boolean b; + @Option(names = {"-c"}, order = 7) boolean c; + @Option(names = {"-d"}, order = 7) int d; + @Option(names = {"-e"}, order = 7) String[] e; + @Option(names = {"-f"}, order = 7) String[] f; + @Option(names = {"-g"}, order = 0) boolean g; + } + OptionSpec[] fields = options(new App(), "a", "b", "c", "d", "e", "f", "g"); + Arrays.sort(fields, Help.createOrderComparator()); + OptionSpec[] expected = options(new App(), "g", "c", "d", "e", "f", "b", "a"); + assertArrayEquals(expected, fields); + + String expectedUsage = String.format("" + + "Usage:
[-gcba] [-d=] [-e=]... [-f=]...%n" + + " -g%n" + + " -c%n" + + " -d=%n" + + " -e=%n" + + " -f=%n" + + " -b%n" + + " -a%n"); + assertEquals(expectedUsage, new CommandLine(new App()).getUsageMessage()); + } + @Test public void testSortDeclarationOrderWhenOrderAttributeOmitted() { @Command(sortOptions = false)