From 5e4ff5fcc59534651be120281736227fc99e2c61 Mon Sep 17 00:00:00 2001 From: Yossi Farjoun Date: Sat, 9 Dec 2017 22:26:01 -0500 Subject: [PATCH 1/3] - Removed note "This option can be set to 'null' to clear the default value." for primitive types. - Added a test to show that it works --- .../LegacyCommandLineArgumentParser.java | 4 +- .../LegacyCommandLineArgumentParserTest.java | 69 ++++++++++++++++++- 2 files changed, 70 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/broadinstitute/barclay/argparser/LegacyCommandLineArgumentParser.java b/src/main/java/org/broadinstitute/barclay/argparser/LegacyCommandLineArgumentParser.java index 61fb2b81..7251f28c 100644 --- a/src/main/java/org/broadinstitute/barclay/argparser/LegacyCommandLineArgumentParser.java +++ b/src/main/java/org/broadinstitute/barclay/argparser/LegacyCommandLineArgumentParser.java @@ -644,7 +644,7 @@ private void printOptionParamUsage(final StringBuilder sb, final String name, fi } int numSpaces = OPTION_COLUMN_WIDTH - optionLabel.length(); - if (optionLabel.length() > OPTION_COLUMN_WIDTH) { + if (optionLabel.length() > OPTION_COLUMN_WIDTH - 1) { sb.append("\n"); numSpaces = OPTION_COLUMN_WIDTH; } @@ -672,7 +672,7 @@ private String makeOptionDescription(final OptionDefinition optionDefinition) { sb.append("Default value: "); sb.append(optionDefinition.defaultValue); sb.append(". "); - if (!optionDefinition.defaultValue.equals("null")) { + if (!optionDefinition.defaultValue.equals("null") && !optionDefinition.field.getType().isPrimitive() ) { sb.append("This option can be set to 'null' to clear the default value. "); } } else if (!optionDefinition.isCollection) { diff --git a/src/test/java/org/broadinstitute/barclay/argparser/LegacyCommandLineArgumentParserTest.java b/src/test/java/org/broadinstitute/barclay/argparser/LegacyCommandLineArgumentParserTest.java index 12e3ac0b..3f078f71 100644 --- a/src/test/java/org/broadinstitute/barclay/argparser/LegacyCommandLineArgumentParserTest.java +++ b/src/test/java/org/broadinstitute/barclay/argparser/LegacyCommandLineArgumentParserTest.java @@ -23,12 +23,15 @@ */ package org.broadinstitute.barclay.argparser; +import com.sun.org.apache.xpath.internal.operations.Bool; import org.testng.Assert; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import java.io.*; import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; public class LegacyCommandLineArgumentParserTest { @@ -59,6 +62,40 @@ class FrobnicateOptions { public Boolean TRUTHINESS; } + @CommandLineProgramProperties( + summary = "Usage: frobnicate [options] input-file output-file\n\nRead input-file, frobnicate it, " + + "and write frobnicated results to output-file\n", + oneLineSummary = "Read input-file, frobnicate it, and write frobnicated results to output-file", + programGroup = TestProgramGroup.class + ) + class FrobnicateOptionsWithPrimitives { + + @Argument(doc = "Primitive long") + public long Prim_longArgument = 1L; + + @Argument(doc = "Primitive int") + public int Prim_FROBNICATION_THRESHOLD = 20; + + @Argument(doc = "Primitive short") + public short Prim_FROBNICATION_FLAVOR = 2; + + @Argument(doc = "Primitive boolean") + public boolean Prim_SHMIGGLE_TYPE = false; + + @Argument(doc = "Boxed Long") + public Long longArgument = 1L; + + @Argument(doc = "Boxed Integer") + public Integer FROBNICATION_THRESHOLD = 20; + + @Argument(doc = "Boxed Short") + public Short FROBNICATION_FLAVOR = 2; + + @Argument(doc = "Boxed Boolean") + public Boolean SHMIGGLE_TYPE = false; + } + + @CommandLineProgramProperties( summary = "Usage: frobnicate [options] input-file output-file\n\nRead input-file, frobnicate it, and write frobnicated results to output-file\n", oneLineSummary = "Read input-file, frobnicate it, and write frobnicated results to output-file", @@ -80,6 +117,8 @@ class FrobnicateOptionsWithNullList { @Argument public Boolean TRUTHINESS; + + } @CommandLineProgramProperties( @@ -129,9 +168,9 @@ class MutexOptions { public String Y; @Argument(mutex = {"A", "B", "M", "N"}) public String Z; - } + @Test public void testUsage() { final FrobnicateOptions fo = new FrobnicateOptions(); @@ -139,6 +178,34 @@ public void testUsage() { clp.usage(false, true); } + @Test + public void testUsageWithPrimitives() { + final FrobnicateOptionsWithPrimitives fo = new FrobnicateOptionsWithPrimitives(); + final LegacyCommandLineArgumentParser clp = new LegacyCommandLineArgumentParser(fo); + final String usage = clp.usage(false, true); + + final Pattern primitiveVars = Pattern.compile(" +Primitive .*"); + final Pattern boxedVars = Pattern.compile(" +Boxed .*"); + final Pattern nulls = Pattern.compile("null"); + + final Matcher primMatcher = primitiveVars.matcher(usage); + int countPrimitives = 0; + while (primMatcher.find()) { + Assert.assertFalse(nulls.matcher(primMatcher.toMatchResult().group()).find()); + countPrimitives++; + } + Assert.assertEquals(countPrimitives, 4); + + final Matcher boxedMatcher = boxedVars + .matcher(usage); + int countBoxed = 0; + while (boxedMatcher.find()) { + Assert.assertTrue(nulls.matcher(boxedMatcher.toMatchResult().group()).find()); + countBoxed++; + } + Assert.assertEquals(countBoxed, 4); + } + @Test public void testUsageWithDefault() { final FrobnicateOptions fo = new FrobnicateOptions(); From 584a34b614605990455d3dc5d6f361b1037f0de4 Mon Sep 17 00:00:00 2001 From: Yossi Farjoun Date: Sat, 9 Dec 2017 23:09:39 -0500 Subject: [PATCH 2/3] - oops --- .../barclay/argparser/LegacyCommandLineArgumentParserTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/java/org/broadinstitute/barclay/argparser/LegacyCommandLineArgumentParserTest.java b/src/test/java/org/broadinstitute/barclay/argparser/LegacyCommandLineArgumentParserTest.java index 3f078f71..4d3ca436 100644 --- a/src/test/java/org/broadinstitute/barclay/argparser/LegacyCommandLineArgumentParserTest.java +++ b/src/test/java/org/broadinstitute/barclay/argparser/LegacyCommandLineArgumentParserTest.java @@ -23,7 +23,6 @@ */ package org.broadinstitute.barclay.argparser; -import com.sun.org.apache.xpath.internal.operations.Bool; import org.testng.Assert; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; From f3d3d341c03b22a5f44953743479310ad3837b74 Mon Sep 17 00:00:00 2001 From: Yossi Farjoun Date: Sat, 9 Dec 2017 23:13:56 -0500 Subject: [PATCH 3/3] - newlines and <> --- .../LegacyCommandLineArgumentParserTest.java | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/test/java/org/broadinstitute/barclay/argparser/LegacyCommandLineArgumentParserTest.java b/src/test/java/org/broadinstitute/barclay/argparser/LegacyCommandLineArgumentParserTest.java index 4d3ca436..1ad40320 100644 --- a/src/test/java/org/broadinstitute/barclay/argparser/LegacyCommandLineArgumentParserTest.java +++ b/src/test/java/org/broadinstitute/barclay/argparser/LegacyCommandLineArgumentParserTest.java @@ -46,7 +46,7 @@ enum FrobnicationFlavor { class FrobnicateOptions { @PositionalArguments(minElements = 2, maxElements = 2) - public List positionalArguments = new ArrayList(); + public List positionalArguments = new ArrayList<>(); @Argument(shortName = "T", doc = "Frobnication threshold setting.") public Integer FROBNICATION_THRESHOLD = 20; @@ -55,7 +55,7 @@ class FrobnicateOptions { public FrobnicationFlavor FROBNICATION_FLAVOR; @Argument(doc = "Allowed shmiggle types.", minElements = 1, maxElements = 3) - public List SHMIGGLE_TYPE = new ArrayList(); + public List SHMIGGLE_TYPE = new ArrayList<>(); @Argument public Boolean TRUTHINESS; @@ -94,7 +94,6 @@ class FrobnicateOptionsWithPrimitives { public Boolean SHMIGGLE_TYPE = false; } - @CommandLineProgramProperties( summary = "Usage: frobnicate [options] input-file output-file\n\nRead input-file, frobnicate it, and write frobnicated results to output-file\n", oneLineSummary = "Read input-file, frobnicate it, and write frobnicated results to output-file", @@ -103,7 +102,7 @@ class FrobnicateOptionsWithPrimitives { class FrobnicateOptionsWithNullList { @PositionalArguments(minElements = 2, maxElements = 2) - public List positionalArguments = new ArrayList(); + public List positionalArguments = new ArrayList<>(); @Argument(shortName = "T", doc = "Frobnication threshold setting.") public Integer FROBNICATION_THRESHOLD = 20; @@ -112,12 +111,10 @@ class FrobnicateOptionsWithNullList { public FrobnicationFlavor FROBNICATION_FLAVOR; @Argument(doc = "Allowed shmiggle types.", minElements = 0, maxElements = 3) - public List SHMIGGLE_TYPE = new ArrayList(); + public List SHMIGGLE_TYPE = new ArrayList<>(); @Argument public Boolean TRUTHINESS; - - } @CommandLineProgramProperties( @@ -134,7 +131,7 @@ class OptionsWithoutPositional { public FrobnicationFlavor FROBNICATION_FLAVOR; @Argument(doc = "Allowed shmiggle types.", minElements = 1, maxElements = 3) - public List SHMIGGLE_TYPE = new ArrayList(); + public List SHMIGGLE_TYPE = new ArrayList<>(); @Argument public Boolean TRUTHINESS; @@ -169,7 +166,6 @@ class MutexOptions { public String Z; } - @Test public void testUsage() { final FrobnicateOptions fo = new FrobnicateOptions();