summaryrefslogtreecommitdiffstats
path: root/src/test/java/com/beust/jcommander/TypeHierarchyTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/com/beust/jcommander/TypeHierarchyTest.java')
-rw-r--r--src/test/java/com/beust/jcommander/TypeHierarchyTest.java111
1 files changed, 111 insertions, 0 deletions
diff --git a/src/test/java/com/beust/jcommander/TypeHierarchyTest.java b/src/test/java/com/beust/jcommander/TypeHierarchyTest.java
new file mode 100644
index 0000000..1ae3771
--- /dev/null
+++ b/src/test/java/com/beust/jcommander/TypeHierarchyTest.java
@@ -0,0 +1,111 @@
+package com.beust.jcommander;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+/**
+ * <p>Test that parent classes and interfaces are used correctly</p>
+ */
+public class TypeHierarchyTest {
+
+ public interface Marker {
+ @Parameter(names = {"--available"})
+ void setAvailable(boolean available);
+ }
+
+ public class Base implements Marker {
+ boolean available = false;
+
+ public boolean isAvailable() {
+ return available;
+ }
+
+ @Override
+ public void setAvailable(boolean available) {
+ this.available = true;
+ }
+ }
+
+ public interface IMiddle {
+ @Parameter(names = {"--count"})
+ void setCount(int count);
+ }
+
+ public interface IMiddleMiddle extends IMiddle {
+ @Parameter(names = {"--again"})
+ void setCountAgain(int count);
+ }
+
+ public class Middle extends Base implements IMiddleMiddle {
+
+ private int count;
+ private int again;
+
+ public int getCount() {
+ return count;
+ }
+
+ @Override
+ public void setCount(int count) {
+ this.count = count;
+ }
+
+ public int getCountAgain() {
+ return again;
+ }
+
+ @Override
+ public void setCountAgain(int again) {
+ this.again = again;
+ }
+ }
+
+ // trying to trip it up and get it to go from Child -> Composite -> Visitor
+ public interface Composite extends Visitor {
+ @Parameter(names = {"-n", "--name"})
+ void setName(String validate);
+ }
+
+ public interface Visitor {
+ @Parameter(names = {"--validate"})
+ void setValidate(boolean validate);
+ }
+
+ public class Child extends Middle implements Composite, Visitor{
+
+ private String name;
+ private boolean validate = false;
+
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public boolean isValidate() {
+ return validate;
+ }
+
+ @Override
+ public void setValidate(boolean validate) {
+ this.validate = validate;
+ }
+ }
+
+ @Test
+ public void testTypeHierarchy() {
+ final Child child = new Child();
+ JCommander commander = new JCommander(child);
+ commander.parse("--validate","-n","child-one","--count","14","--again","22","--available");
+
+ // test values through entire hierarchy
+ Assert.assertTrue(child.isValidate());
+ Assert.assertTrue(child.isAvailable());
+ Assert.assertEquals(14, child.getCount());
+ Assert.assertEquals(22, child.getCountAgain());
+ Assert.assertEquals("child-one", child.getName());
+ }
+}