1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
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());
}
}
|