View Javadoc

1   /**
2    * Copyright (c) 2002-2015, JWebUnit team.
3    *
4    * This file is part of JWebUnit.
5    *
6    * JWebUnit is free software: you can redistribute it and/or modify
7    * it under the terms of the GNU Lesser General Public License as published by
8    * the Free Software Foundation, either version 3 of the License, or
9    * (at your option) any later version.
10   *
11   * JWebUnit is distributed in the hope that it will be useful,
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   * GNU General Public License for more details.
15   *
16   * You should have received a copy of the GNU Lesser General Public License
17   * along with JWebUnit.  If not, see <http://www.gnu.org/licenses/>.
18   */
19  package net.sourceforge.jwebunit.tests;
20  
21  import static net.sourceforge.jwebunit.junit.JWebUnit.assertSelectOptionNotPresent;
22  import static net.sourceforge.jwebunit.junit.JWebUnit.assertSelectOptionPresent;
23  import static net.sourceforge.jwebunit.junit.JWebUnit.assertSelectOptionValueNotPresent;
24  import static net.sourceforge.jwebunit.junit.JWebUnit.assertSelectOptionValuePresent;
25  import static net.sourceforge.jwebunit.junit.JWebUnit.assertSelectOptionValuesEqual;
26  import static net.sourceforge.jwebunit.junit.JWebUnit.assertSelectOptionValuesNotEqual;
27  import static net.sourceforge.jwebunit.junit.JWebUnit.assertSelectOptionValuesPresent;
28  import static net.sourceforge.jwebunit.junit.JWebUnit.assertSelectOptionsEqual;
29  import static net.sourceforge.jwebunit.junit.JWebUnit.assertSelectOptionsNotEqual;
30  import static net.sourceforge.jwebunit.junit.JWebUnit.assertSelectOptionsPresent;
31  import static net.sourceforge.jwebunit.junit.JWebUnit.assertSelectedOptionEquals;
32  import static net.sourceforge.jwebunit.junit.JWebUnit.assertSelectedOptionMatches;
33  import static net.sourceforge.jwebunit.junit.JWebUnit.assertSelectedOptionValueEquals;
34  import static net.sourceforge.jwebunit.junit.JWebUnit.assertSelectedOptionValuesEqual;
35  import static net.sourceforge.jwebunit.junit.JWebUnit.assertSelectedOptionsEqual;
36  import static net.sourceforge.jwebunit.junit.JWebUnit.assertSelectedOptionsMatch;
37  import static net.sourceforge.jwebunit.junit.JWebUnit.beginAt;
38  import static net.sourceforge.jwebunit.junit.JWebUnit.selectOption;
39  import static net.sourceforge.jwebunit.junit.JWebUnit.selectOptionByValue;
40  import static net.sourceforge.jwebunit.junit.JWebUnit.selectOptions;
41  import static net.sourceforge.jwebunit.junit.JWebUnit.selectOptionsByValues;
42  import static net.sourceforge.jwebunit.junit.JWebUnit.setBaseUrl;
43  import static net.sourceforge.jwebunit.junit.JWebUnit.setWorkingForm;
44  
45  import org.junit.Test;
46  
47  /**
48   * Tests for <select> elements.
49   */
50  public class SelectOptionsTest extends JWebUnitAPITestCase 
51  {
52  
53      public void setUp() throws Exception 
54      {
55          super.setUp();
56          setBaseUrl(HOST_PATH + "/SelectOptionsTest");
57      }
58  
59      @Test public void testAssertSelectOptionsOneForm() 
60      {
61          beginAt("/pageWithOneForm.html");
62  		assertSelectOptionsForm1();
63          //set the working form an repeat.
64          setWorkingForm("form1");
65      	assertSelectOptionsForm1();
66          beginAt("/pageWithOneFormMulti.html");
67  		assertSelectOptionsForm1();
68          //set the working form an repeat.
69          setWorkingForm("form1");
70      	assertSelectOptionsForm1();
71      }
72  
73      @Test public void testAssertSelectOptionsTwoForms() 
74      {
75          beginAt("/pageWithTwoForms.html");
76          setWorkingForm("form1");
77          assertSelectOptionsForm1();
78          setWorkingForm("form2");
79          assertSelectOptionsForm2();
80          beginAt("/pageWithTwoFormsMulti.html");
81          setWorkingForm("form1");
82          assertSelectOptionsForm1();
83          setWorkingForm("form2");
84          assertSelectOptionsForm2();
85      }
86  
87  	@Test public void testSelectOptionsOneForm()
88  	{
89          //by label.
90          beginAt("/pageWithOneForm.html");
91          selectOption("singleSelect", "Option 2");
92          assertSelectedOptionEquals("singleSelect", "Option 2");
93          selectOption("duplicateSelect", "Option 2");
94          assertSelectedOptionEquals("duplicateSelect", "Option 2");
95          selectOption("duplicateSelect", 0, "Option 3");
96          assertSelectedOptionEquals("duplicateSelect", 0, "Option 3");
97          selectOption("duplicateSelect", 1, "Option B");
98          assertSelectedOptionEquals("duplicateSelect", 1, "Option B");
99  
100         beginAt("/pageWithOneFormMulti.html");
101         selectOption("singleSelect", "Option 2");
102         assertSelectedOptionEquals("singleSelect", "Option 2");
103         selectOption("duplicateSelect", "Option 2");
104         assertSelectedOptionEquals("duplicateSelect", "Option 2");
105         //re-begin since unselectOption is not exposed via WebTester.
106         beginAt("/pageWithOneFormMulti.html");
107         selectOption("duplicateSelect", 0, "Option 3");
108         assertSelectedOptionEquals("duplicateSelect", 0, "Option 3");
109         selectOption("duplicateSelect", 1, "Option B");
110         assertSelectedOptionEquals("duplicateSelect", 1, "Option B");
111 
112         //re-begin since unselectOption is not exposed via WebTester.
113         beginAt("/pageWithOneFormMulti.html");
114 		selectOptions("singleSelect", new String[] { "Option 3", "Option 4"});
115 		assertSelectedOptionsEqual("singleSelect", new String[] { "Option 3", "Option 4"});
116 		selectOptions("duplicateSelect", new String[] { "Option 1", "Option 4"});
117 		assertSelectedOptionsEqual("duplicateSelect", new String[] { "Option 1", "Option 4"});
118         //re-begin since unselectOption is not exposed via WebTester.
119         beginAt("/pageWithOneFormMulti.html");
120 		selectOptions("duplicateSelect", 0, new String[] { "Option 2", "Option 4"});
121 		assertSelectedOptionsEqual("duplicateSelect", 0, new String[] { "Option 2", "Option 4"});
122 		selectOptions("duplicateSelect", 1, new String[] { "Option C", "Option B"});
123 		assertSelectedOptionsEqual("duplicateSelect", 1, new String[] { "Option B", "Option C"});
124 
125 		//by value.        
126 		beginAt("/pageWithOneForm.html");
127         selectOptionByValue("singleSelect", "option2");
128         assertSelectedOptionValueEquals("singleSelect", "option2");
129         selectOptionByValue("duplicateSelect", "option2");
130         assertSelectedOptionValueEquals("duplicateSelect", "option2");
131         selectOptionByValue("duplicateSelect", 0, "option3");
132         assertSelectedOptionValueEquals("duplicateSelect", 0, "option3");
133         selectOptionByValue("duplicateSelect", 1, "optionB");
134         assertSelectedOptionValueEquals("duplicateSelect", 1, "optionB");
135 
136         beginAt("/pageWithOneFormMulti.html");
137         selectOptionByValue("singleSelect", "option2");
138         assertSelectedOptionValueEquals("singleSelect", "option2");
139         assertSelectedOptionMatches("singleSelect", "option2");
140         selectOptionByValue("duplicateSelect", "option2");
141         assertSelectedOptionValueEquals("duplicateSelect", "option2");
142         //re-begin since unselectOption is not exposed via WebTester.
143         beginAt("/pageWithOneFormMulti.html");
144         selectOptionByValue("duplicateSelect", 0, "option3");
145         assertSelectedOptionValueEquals("duplicateSelect", 0, "option3");
146         assertSelectedOptionMatches("duplicateSelect", 0, "option3");
147         selectOptionByValue("duplicateSelect", 1, "optionB");
148         assertSelectedOptionValueEquals("duplicateSelect", 1, "optionB");
149 
150         //re-begin since unselectOption is not exposed via WebTester.
151         beginAt("/pageWithOneFormMulti.html");
152 		selectOptionsByValues("singleSelect", new String[] { "option3", "option4"});
153 		assertSelectedOptionValuesEqual("singleSelect", new String[] { "option3", "option4"});
154 		//Note that this matches values, not labels, even though its name doesn't
155 		//include Values like other methods do.
156 		assertSelectedOptionsMatch("singleSelect", new String[] { "option3", "option4"});
157 		selectOptionsByValues("duplicateSelect", new String[] { "option1", "option4"});
158 		assertSelectedOptionValuesEqual("duplicateSelect", new String[] { "option1", "option4"});
159         //re-begin since unselectOption is not exposed via WebTester.
160         beginAt("/pageWithOneFormMulti.html");
161 		selectOptionsByValues("duplicateSelect", 0, new String[] { "option2", "option4"});
162 		assertSelectedOptionValuesEqual("duplicateSelect", 0, new String[] { "option2", "option4"});
163 		assertSelectedOptionsMatch("duplicateSelect", 0, new String[] { "option2", "option4"});
164 		selectOptions("duplicateSelect", 1, new String[] { "Option C", "Option B"});
165 		assertSelectedOptionValuesEqual("duplicateSelect", 1, new String[] { "optionB", "optionC"});
166 		assertSelectedOptionsMatch("duplicateSelect", 0, new String[] { "option2", "option4"});
167 	}
168 
169 
170 
171 
172 	private void assertSelectOptions(String selectName, 
173 									 String[] validOptions, String invalidOption,
174 								     String[] validOptionValues, String invalidOptionValue)
175 	{
176 		for ( int i = 0; i < validOptions.length; ++i )
177 		{
178 			assertSelectOptionPresent(selectName, validOptions[i]);
179 		}
180 		assertSelectOptionsPresent(selectName, validOptions);
181 		assertSelectOptionsEqual(selectName, validOptions);
182 		for ( int i = 0; i < validOptionValues.length; ++i )
183 		{
184 			assertSelectOptionValuePresent(selectName, validOptionValues[i]);
185 		}
186 		assertSelectOptionValuesPresent(selectName, validOptionValues);
187 		assertSelectOptionValuesEqual(selectName, validOptionValues);
188 
189 		assertSelectOptionNotPresent(selectName, invalidOption);
190 		assertSelectOptionsNotEqual(selectName, new String[] { invalidOption});
191 		assertSelectOptionValueNotPresent(selectName, invalidOptionValue);
192 		assertSelectOptionValuesNotEqual(selectName, new String[] { invalidOptionValue });
193 	}	
194 
195 	private void assertSelectOptions(String selectName, int index, 
196 				   				     String[] validOptions, String invalidOption,
197 								     String[] validOptionValues, String invalidOptionValue)
198 	{
199 		for ( int i = 0; i < validOptions.length; ++i )
200 		{
201 			assertSelectOptionPresent(selectName, index, validOptions[i]);
202 		}
203 		assertSelectOptionsPresent(selectName, index, validOptions);
204 		assertSelectOptionsEqual(selectName, index, validOptions);
205 		for ( int i = 0; i < validOptionValues.length; ++i )
206 		{
207 			assertSelectOptionValuePresent(selectName, index, validOptionValues[i]);
208 		}
209 		assertSelectOptionValuesPresent(selectName, index, validOptionValues);
210 		assertSelectOptionValuesEqual(selectName, index, validOptionValues);
211 
212 		assertSelectOptionNotPresent(selectName, index, invalidOption);
213 		assertSelectOptionsNotEqual(selectName, index, new String[] { invalidOption});
214 		assertSelectOptionValueNotPresent(selectName, index, invalidOptionValue);
215 		assertSelectOptionValuesNotEqual(selectName, index, new String[] { invalidOptionValue });
216 	}
217 
218 	
219 	private void assertSelectOptionsForm1()
220 	{
221         //there is just one form element named "singleSelect".
222         //find its options by label.
223 		assertSelectOptions("singleSelect",
224 							new String[] { "Option 1", "Option 2", "Option 3", "Option 4"},
225 							"badoption",
226 							new String[] { "option1", "option2", "option3", "option4"},
227 							"badoption");
228 		assertSelectOptions("singleSelect", 0,
229 							new String[] { "Option 1", "Option 2", "Option 3", "Option 4"},
230 							"badoption",
231 							new String[] { "option1", "option2", "option3", "option4"},
232 							"badoption");
233 
234         //there are two form elements named "duplicateSelect"
235         //first one has option1,option2.  second one has optionA,optionB
236 		//non-indexed version should always get the first one.
237 		assertSelectOptions("duplicateSelect",
238 							new String[] { "Option 1", "Option 2", "Option 3", "Option 4"},
239 							"badoption",
240 							new String[] { "option1", "option2", "option3", "option4"},
241 							"badoption");
242 		assertSelectOptions("duplicateSelect", 0,
243 							new String[] { "Option 1", "Option 2", "Option 3", "Option 4"},
244 							"badoption",
245 							new String[] { "option1", "option2", "option3", "option4"},
246 							"badoption");
247 		assertSelectOptions("duplicateSelect", 1,
248 							new String[] { "Option A", "Option B", "Option C", "Option D"},
249 							"badoption",
250 							new String[] { "optionA", "optionB", "optionC", "optionD"},
251 							"badoption");
252 	}
253 	private void assertSelectOptionsForm2()
254 	{
255         //there is just one form element named "singleSelect".
256         //find its options by label.
257 		assertSelectOptions("singleSelectA",
258 							new String[] { "Option 1a", "Option 2a", "Option 3a", "Option 4a"},
259 							"badoption",
260 							new String[] { "option1a", "option2a", "option3a", "option4a"},
261 							"badoption");
262 		assertSelectOptions("singleSelectA", 0,
263 							new String[] { "Option 1a", "Option 2a", "Option 3a", "Option 4a"},
264 							"badoption",
265 							new String[] { "option1a", "option2a", "option3a", "option4a"},
266 							"badoption");
267 
268         //there are two form elements named "duplicateSelect"
269         //first one has option1,option2.  second one has optionA,optionB
270 		//non-indexed version should always get the first one.
271 		assertSelectOptions("duplicateSelectA",
272 							new String[] { "Option 1a", "Option 2a", "Option 3a", "Option 4a"},
273 							"badoption",
274 							new String[] { "option1a", "option2a", "option3a", "option4a"},
275 							"badoption");
276 		assertSelectOptions("duplicateSelectA", 0,
277 							new String[] { "Option 1a", "Option 2a", "Option 3a", "Option 4a"},
278 							"badoption",
279 							new String[] { "option1a", "option2a", "option3a", "option4a"},
280 							"badoption");
281 		assertSelectOptions("duplicateSelectA", 1,
282 							new String[] { "Option Aa", "Option Ba", "Option Ca", "Option Da"},
283 							"badoption",
284 							new String[] { "optionAa", "optionBa", "optionCa", "optionDa"},
285 							"badoption");
286 	}
287 }