summaryrefslogtreecommitdiff
path: root/src/test/java/com/beust/jcommander/TypeHierarchyTest.java
blob: 1ae377162b059a8b49e268449781a54f105abb63 (plain)
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());
    }
}