diff options
Diffstat (limited to 'src/test/java/com/beust/jcommander/ParametersDelegateTest.java')
-rw-r--r-- | src/test/java/com/beust/jcommander/ParametersDelegateTest.java | 227 |
1 files changed, 227 insertions, 0 deletions
diff --git a/src/test/java/com/beust/jcommander/ParametersDelegateTest.java b/src/test/java/com/beust/jcommander/ParametersDelegateTest.java new file mode 100644 index 0000000..46c7c6a --- /dev/null +++ b/src/test/java/com/beust/jcommander/ParametersDelegateTest.java @@ -0,0 +1,227 @@ +package com.beust.jcommander; + +import org.testng.Assert; +import org.testng.annotations.Test; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author rodionmoiseev + */ +public class ParametersDelegateTest { + + @Test + public void delegatingEmptyClassHasNoEffect() { + class EmptyDelegate { + public String nonParamString = "a"; + } + class MainParams { + @Parameter(names = "-a") + public boolean isA; + @Parameter(names = {"-b", "--long-b"}) + public String bValue = ""; + @ParametersDelegate + public EmptyDelegate delegate = new EmptyDelegate(); + } + + MainParams p = new MainParams(); + JCommander cmd = new JCommander(p); + cmd.parse("-a", "-b", "someValue"); + Assert.assertTrue(p.isA); + Assert.assertEquals(p.bValue, "someValue"); + Assert.assertEquals(p.delegate.nonParamString, "a"); + } + + @Test + public void delegatingSetsFieldsOnBothMainParamsAndTheDelegatedParams() { + class ComplexDelegate { + @Parameter(names = "-c") + public boolean isC; + @Parameter(names = {"-d", "--long-d"}) + public Integer d; + } + class MainParams { + @Parameter(names = "-a") + public boolean isA; + @Parameter(names = {"-b", "--long-b"}) + public String bValue = ""; + @ParametersDelegate + public ComplexDelegate delegate = new ComplexDelegate(); + } + + MainParams p = new MainParams(); + JCommander cmd = new JCommander(p); + cmd.parse("-c", "--long-d", "123", "--long-b", "bValue"); + Assert.assertFalse(p.isA); + Assert.assertEquals(p.bValue, "bValue"); + Assert.assertTrue(p.delegate.isC); + Assert.assertEquals(p.delegate.d, Integer.valueOf(123)); + } + + @Test + public void combinedAndNestedDelegates() { + abstract class LeafAbstractDelegate { + abstract float getFloat(); + } + class LeafDelegate { + @Parameter(names = "--list") + public List<String> list = new ArrayList<String>() {{ + add("value1"); + add("value2"); + }}; + @Parameter(names = "--bool") + public boolean bool; + } + class NestedDelegate1 { + @ParametersDelegate + public LeafDelegate leafDelegate = new LeafDelegate(); + @Parameter(names = {"-d", "--long-d"}) + public Integer d; + } + class NestedDelegate2 { + @Parameter(names = "-c") + public boolean isC; + @ParametersDelegate + public NestedDelegate1 nestedDelegate1 = new NestedDelegate1(); + @ParametersDelegate + public LeafAbstractDelegate anonymousDelegate = new LeafAbstractDelegate() { + @Parameter(names = "--anon-float") + public float anon = 999f; + + @Override + float getFloat() { + return anon; + } + }; + } + class MainParams { + @Parameter(names = "-a") + public boolean isA; + @Parameter(names = {"-b", "--long-b"}) + public String bValue = ""; + @ParametersDelegate + public NestedDelegate2 nestedDelegate2 = new NestedDelegate2(); + } + + MainParams p = new MainParams(); + JCommander cmd = new JCommander(p); + cmd.parse("--anon-float 1.2 -d 234 --list a --list b -a".split(" ")); + Assert.assertEquals(p.nestedDelegate2.anonymousDelegate.getFloat(), 1.2f); + Assert.assertEquals(p.nestedDelegate2.nestedDelegate1.leafDelegate.list, new ArrayList<String>() {{ + add("a"); + add("b"); + }}); + Assert.assertFalse(p.nestedDelegate2.nestedDelegate1.leafDelegate.bool); + Assert.assertEquals(p.nestedDelegate2.nestedDelegate1.d, Integer.valueOf(234)); + Assert.assertFalse(p.nestedDelegate2.isC); + Assert.assertTrue(p.isA); + Assert.assertEquals(p.bValue, ""); + } + + @Test + public void commandTest() { + class Delegate { + @Parameter(names = "-a") + public String a = "b"; + } + class Command { + @ParametersDelegate + public Delegate delegate = new Delegate(); + } + + Command c = new Command(); + + JCommander cmd = new JCommander(); + cmd.addCommand("command", c); + + cmd.parse("command -a a".split(" ")); + Assert.assertEquals(c.delegate.a, "a"); + } + + @Test + public void mainParametersTest() { + class Delegate { + @Parameter + public List<String> mainParams = new ArrayList<String>(); + } + class Command { + @ParametersDelegate + public Delegate delegate = new Delegate(); + } + + Command c = new Command(); + + JCommander cmd = new JCommander(); + cmd.addCommand("command", c); + + cmd.parse("command main params".split(" ")); + Assert.assertEquals(c.delegate.mainParams, new ArrayList<String>() {{ + add("main"); + add("params"); + }}); + } + + @Test(expectedExceptions = ParameterException.class, + expectedExceptionsMessageRegExp = ".*delegate.*null.*") + public void nullDelegatesAreProhibited() { + class ComplexDelegate { + } + class MainParams { + @ParametersDelegate + public ComplexDelegate delegate; + } + + MainParams p = new MainParams(); + JCommander cmd = new JCommander(p); + cmd.parse(); + } + + @Test(expectedExceptions = ParameterException.class, + expectedExceptionsMessageRegExp = ".*-a.*") + public void duplicateDelegateThrowDuplicateOptionException() { + class Delegate { + @Parameter(names = "-a") + public String a; + } + class MainParams { + @ParametersDelegate + public Delegate d1 = new Delegate(); + @ParametersDelegate + public Delegate d2 = new Delegate(); + } + + MainParams p = new MainParams(); + JCommander cmd = new JCommander(p); + cmd.parse("-a value".split(" ")); + } + + @Test(expectedExceptions = ParameterException.class, expectedExceptionsMessageRegExp = "Only one.*is allowed.*") + public void duplicateMainParametersAreNotAllowed() { + class Delegate1 { + @Parameter + public List<String> mainParams1 = new ArrayList<String>(); + } + class Delegate2 { + @Parameter + public List<String> mainParams2 = new ArrayList<String>(); + } + class Command { + @ParametersDelegate + public Delegate1 delegate1 = new Delegate1(); + @ParametersDelegate + public Delegate2 delegate2 = new Delegate2(); + } + + Command c = new Command(); + + JCommander cmd = new JCommander(); + cmd.addCommand("command", c); + + cmd.parse("command main params".split(" ")); + } + + public static void main(String[] args) { + new ParametersDelegateTest().commandTest(); + } +} |