diff --git a/src/main/java/picocli/CommandLine.java b/src/main/java/picocli/CommandLine.java index 8c98f74e5..d370511a6 100644 --- a/src/main/java/picocli/CommandLine.java +++ b/src/main/java/picocli/CommandLine.java @@ -9526,6 +9526,7 @@ abstract static class Builder> { setter = original.setter; scope = original.scope; scopeType = original.scopeType; + mapFallbackValue = original.mapFallbackValue; originalDefaultValue = original.originalDefaultValue; originalMapFallbackValue = original.originalMapFallbackValue; } diff --git a/src/test/java/picocli/MapOptionsTest.java b/src/test/java/picocli/MapOptionsTest.java index 3bb469544..31a71c227 100644 --- a/src/test/java/picocli/MapOptionsTest.java +++ b/src/test/java/picocli/MapOptionsTest.java @@ -5,6 +5,7 @@ import org.junit.contrib.java.lang.system.ProvideSystemProperty; import org.junit.contrib.java.lang.system.RestoreSystemProperties; import org.junit.rules.TestRule; +import picocli.CommandLine.Command; import picocli.CommandLine.Option; import picocli.CommandLine.ParameterException; import picocli.CommandLine.Parameters; @@ -12,6 +13,7 @@ import java.util.Map; import static org.junit.Assert.*; +import static picocli.CommandLine.ScopeType.INHERIT; /** * Verifies https://github.com/remkop/picocli/issues/1214 @@ -75,6 +77,40 @@ class App { assertEquals(null, app.map.get("key")); } + @Test + public void testInheritedOptionMapFallbackValueEmptyString() { + class App { + @Option(names = "-D", mapFallbackValue = "", scope = INHERIT) Map map; + } + @Command(name = "sub") + class Sub { + } + App app = new App(); + Sub sub = new Sub(); + new CommandLine(app) + .addSubcommand(sub) + .parseArgs("sub", "-Dkey"); + assertEquals(1, app.map.size()); + assertEquals("", app.map.get("key")); + } + + @Test + public void testInheritedOptionMapFallbackValueNull() { + class App { + @Option(names = "-D", mapFallbackValue = Option.NULL_VALUE, scope = INHERIT) Map map; + } + @Command(name = "sub") + class Sub { + } + App app = new App(); + Sub sub = new Sub(); + new CommandLine(app) + .addSubcommand(sub) + .parseArgs("sub", "-Dkey"); + assertEquals(1, app.map.size()); + assertEquals(null, app.map.get("key")); + } + @Test public void testPositionalMapFallbackValueNull() { class App { @@ -85,6 +121,23 @@ class App { assertEquals(null, app.map.get("key")); } + @Test + public void testInheritedPositionalMapFallbackValueNull() { + class App { + @Parameters(mapFallbackValue = Option.NULL_VALUE, scope = INHERIT) Map map; + } + @Command(name = "sub") + class Sub { + } + App app = new App(); + Sub sub = new Sub(); + new CommandLine(app) + .addSubcommand(sub) + .parseArgs("sub", "key"); + assertEquals(1, app.map.size()); + assertEquals(null, app.map.get("key")); + } + @Test public void testMapFallbackValueEmptyStringMultiple() { class App {