@@ -21,9 +21,15 @@ Licensed to the Apache Software Foundation (ASF) under one or more
2121import static org .junit .Assert .assertNotNull ;
2222import static org .junit .Assert .assertTrue ;
2323import static org .junit .Assert .fail ;
24+ import static org .junit .jupiter .api .Assertions .assertArrayEquals ;
25+ import static org .junit .jupiter .api .Assertions .assertThrows ;
2426
2527import java .util .ArrayList ;
28+ import java .util .Arrays ;
2629import java .util .Collection ;
30+ import java .util .HashSet ;
31+ import java .util .List ;
32+ import java .util .Set ;
2733
2834import org .junit .Test ;
2935
@@ -78,6 +84,93 @@ public void testGetOptionsGroups() {
7884 assertEquals (2 , options .getOptionGroups ().size ());
7985 }
8086
87+ @ Test
88+ public void testAddOptions () {
89+ final Options options = new Options ();
90+
91+ final OptionGroup group1 = new OptionGroup ();
92+ group1 .addOption (Option .builder ("a" ).build ());
93+ group1 .addOption (Option .builder ("b" ).build ());
94+
95+ options .addOptionGroup (group1 );
96+
97+ options .addOption (Option .builder ("X" ).build ());
98+ options .addOption (Option .builder ("y" ).build ());
99+
100+ final Options underTest = new Options ();
101+ underTest .addOptions (options );
102+
103+ assertEquals (options .getOptionGroups (), underTest .getOptionGroups ());
104+ assertArrayEquals (options .getOptions ().toArray (), underTest .getOptions ().toArray ());
105+ }
106+
107+ @ Test
108+ public void testAddOptions2X () {
109+ final Options options = new Options ();
110+
111+ final OptionGroup group1 = new OptionGroup ();
112+ group1 .addOption (Option .builder ("a" ).build ());
113+ group1 .addOption (Option .builder ("b" ).build ());
114+
115+ options .addOptionGroup (group1 );
116+
117+ options .addOption (Option .builder ("X" ).build ());
118+ options .addOption (Option .builder ("y" ).build ());
119+
120+ assertThrows (IllegalArgumentException .class , () -> options .addOptions (options ));
121+ }
122+
123+ @ Test
124+ public void testAddConflictingOptions () {
125+ final Options options1 = new Options ();
126+ final OptionGroup group1 = new OptionGroup ();
127+ group1 .addOption (Option .builder ("a" ).build ());
128+ group1 .addOption (Option .builder ("b" ).build ());
129+ options1 .addOptionGroup (group1 );
130+ options1 .addOption (Option .builder ("x" ).build ());
131+ options1 .addOption (Option .builder ("y" ).build ());
132+
133+ final Options options2 = new Options ();
134+ final OptionGroup group2 = new OptionGroup ();
135+ group2 .addOption (Option .builder ("x" ).type (Integer .class ).build ());
136+ group2 .addOption (Option .builder ("b" ).type (Integer .class ).build ());
137+ options2 .addOptionGroup (group2 );
138+ options2 .addOption (Option .builder ("c" ).build ());
139+
140+ assertThrows (IllegalArgumentException .class , () -> options1 .addOptions (options2 ));
141+ }
142+
143+ @ Test
144+ public void testAddNonConflictingOptions () {
145+ final Options options1 = new Options ();
146+ final OptionGroup group1 = new OptionGroup ();
147+ group1 .addOption (Option .builder ("a" ).build ());
148+ group1 .addOption (Option .builder ("b" ).build ());
149+ options1 .addOptionGroup (group1 );
150+ options1 .addOption (Option .builder ("x" ).build ());
151+ options1 .addOption (Option .builder ("y" ).build ());
152+
153+ final Options options2 = new Options ();
154+ final OptionGroup group2 = new OptionGroup ();
155+ group2 .addOption (Option .builder ("c" ).type (Integer .class ).build ());
156+ group2 .addOption (Option .builder ("d" ).type (Integer .class ).build ());
157+ options2 .addOptionGroup (group2 );
158+ options1 .addOption (Option .builder ("e" ).build ());
159+ options1 .addOption (Option .builder ("f" ).build ());
160+
161+ Options underTest = new Options ();
162+ underTest .addOptions (options1 );
163+ underTest .addOptions (options2 );
164+
165+ List <OptionGroup > expected = Arrays .asList (group1 , group2 );
166+ assertTrue (expected .size () == underTest .getOptionGroups ().size () && expected .containsAll (underTest .getOptionGroups ()));
167+ Set <Option > expectOpt = new HashSet <>();
168+ expectOpt .addAll (options1 .getOptions ());
169+ expectOpt .addAll (options2 .getOptions ());
170+ assertEquals (8 , expectOpt .size ());
171+ assertTrue (expectOpt .size () == underTest .getOptions ().size () && expectOpt .containsAll (underTest .getOptions ()));
172+ }
173+
81174 @ Test
82175 public void testHelpOptions () {
83176 OptionBuilder .withLongOpt ("long-only1" );
0 commit comments