Skip to content
This repository was archived by the owner on Apr 7, 2022. It is now read-only.

Commit 335f2ac

Browse files
committed
[1874212] support multiple selects with same name. Thanks to Mike C.
1 parent 41e409e commit 335f2ac

12 files changed

Lines changed: 1167 additions & 62 deletions

File tree

Lines changed: 247 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,247 @@
1+
/******************************************************************************
2+
* JWebUnit project (http://jwebunit.sourceforge.net) *
3+
* Distributed open-source, see full license under LICENCE.txt *
4+
******************************************************************************/
5+
package net.sourceforge.jwebunit.tests;
6+
7+
/**
8+
* Tests for <select> elements.
9+
*/
10+
public class SelectOptionsTest extends JWebUnitAPITestCase
11+
{
12+
13+
public void setUp() throws Exception
14+
{
15+
super.setUp();
16+
getTestContext().setBaseUrl(HOST_PATH + "/SelectOptionsTest");
17+
}
18+
19+
public void testAssertSelectOptionsOneForm()
20+
{
21+
beginAt("/pageWithOneForm.html");
22+
assertSelectOptionsForm1();
23+
//set the working form an repeat.
24+
setWorkingForm("form1");
25+
assertSelectOptionsForm1();
26+
beginAt("/pageWithOneFormMulti.html");
27+
assertSelectOptionsForm1();
28+
//set the working form an repeat.
29+
setWorkingForm("form1");
30+
assertSelectOptionsForm1();
31+
}
32+
33+
public void testAssertSelectOptionsTwoForms()
34+
{
35+
beginAt("/pageWithTwoForms.html");
36+
setWorkingForm("form1");
37+
assertSelectOptionsForm1();
38+
setWorkingForm("form2");
39+
assertSelectOptionsForm2();
40+
beginAt("/pageWithTwoFormsMulti.html");
41+
setWorkingForm("form1");
42+
assertSelectOptionsForm1();
43+
setWorkingForm("form2");
44+
assertSelectOptionsForm2();
45+
}
46+
47+
public void testSelectOptionsOneForm()
48+
{
49+
//by label.
50+
beginAt("/pageWithOneForm.html");
51+
selectOption("singleSelect", "Option 2");
52+
assertSelectedOptionEquals("singleSelect", "Option 2");
53+
selectOption("duplicateSelect", "Option 2");
54+
assertSelectedOptionEquals("duplicateSelect", "Option 2");
55+
selectOption("duplicateSelect", 0, "Option 3");
56+
assertSelectedOptionEquals("duplicateSelect", 0, "Option 3");
57+
selectOption("duplicateSelect", 1, "Option B");
58+
assertSelectedOptionEquals("duplicateSelect", 1, "Option B");
59+
60+
beginAt("/pageWithOneFormMulti.html");
61+
selectOption("singleSelect", "Option 2");
62+
assertSelectedOptionEquals("singleSelect", "Option 2");
63+
selectOption("duplicateSelect", "Option 2");
64+
assertSelectedOptionEquals("duplicateSelect", "Option 2");
65+
//re-begin since unselectOption is not exposed via WebTester.
66+
beginAt("/pageWithOneFormMulti.html");
67+
selectOption("duplicateSelect", 0, "Option 3");
68+
assertSelectedOptionEquals("duplicateSelect", 0, "Option 3");
69+
selectOption("duplicateSelect", 1, "Option B");
70+
assertSelectedOptionEquals("duplicateSelect", 1, "Option B");
71+
72+
//re-begin since unselectOption is not exposed via WebTester.
73+
beginAt("/pageWithOneFormMulti.html");
74+
selectOptions("singleSelect", new String[] { "Option 3", "Option 4"});
75+
assertSelectedOptionsEqual("singleSelect", new String[] { "Option 3", "Option 4"});
76+
selectOptions("duplicateSelect", new String[] { "Option 1", "Option 4"});
77+
assertSelectedOptionsEqual("duplicateSelect", new String[] { "Option 1", "Option 4"});
78+
//re-begin since unselectOption is not exposed via WebTester.
79+
beginAt("/pageWithOneFormMulti.html");
80+
selectOptions("duplicateSelect", 0, new String[] { "Option 2", "Option 4"});
81+
assertSelectedOptionsEqual("duplicateSelect", 0, new String[] { "Option 2", "Option 4"});
82+
selectOptions("duplicateSelect", 1, new String[] { "Option C", "Option B"});
83+
assertSelectedOptionsEqual("duplicateSelect", 1, new String[] { "Option B", "Option C"});
84+
85+
//by value.
86+
beginAt("/pageWithOneForm.html");
87+
selectOptionByValue("singleSelect", "option2");
88+
assertSelectedOptionValueEquals("singleSelect", "option2");
89+
selectOptionByValue("duplicateSelect", "option2");
90+
assertSelectedOptionValueEquals("duplicateSelect", "option2");
91+
selectOptionByValue("duplicateSelect", 0, "option3");
92+
assertSelectedOptionValueEquals("duplicateSelect", 0, "option3");
93+
selectOptionByValue("duplicateSelect", 1, "optionB");
94+
assertSelectedOptionValueEquals("duplicateSelect", 1, "optionB");
95+
96+
beginAt("/pageWithOneFormMulti.html");
97+
selectOptionByValue("singleSelect", "option2");
98+
assertSelectedOptionValueEquals("singleSelect", "option2");
99+
assertSelectedOptionMatches("singleSelect", "option2");
100+
selectOptionByValue("duplicateSelect", "option2");
101+
assertSelectedOptionValueEquals("duplicateSelect", "option2");
102+
//re-begin since unselectOption is not exposed via WebTester.
103+
beginAt("/pageWithOneFormMulti.html");
104+
selectOptionByValue("duplicateSelect", 0, "option3");
105+
assertSelectedOptionValueEquals("duplicateSelect", 0, "option3");
106+
assertSelectedOptionMatches("duplicateSelect", 0, "option3");
107+
selectOptionByValue("duplicateSelect", 1, "optionB");
108+
assertSelectedOptionValueEquals("duplicateSelect", 1, "optionB");
109+
110+
//re-begin since unselectOption is not exposed via WebTester.
111+
beginAt("/pageWithOneFormMulti.html");
112+
selectOptionsByValues("singleSelect", new String[] { "option3", "option4"});
113+
assertSelectedOptionValuesEqual("singleSelect", new String[] { "option3", "option4"});
114+
//Note that this matches values, not labels, even though its name doesn't
115+
//include Values like other methods do.
116+
assertSelectedOptionsMatch("singleSelect", new String[] { "option3", "option4"});
117+
selectOptionsByValues("duplicateSelect", new String[] { "option1", "option4"});
118+
assertSelectedOptionValuesEqual("duplicateSelect", new String[] { "option1", "option4"});
119+
//re-begin since unselectOption is not exposed via WebTester.
120+
beginAt("/pageWithOneFormMulti.html");
121+
selectOptionsByValues("duplicateSelect", 0, new String[] { "option2", "option4"});
122+
assertSelectedOptionValuesEqual("duplicateSelect", 0, new String[] { "option2", "option4"});
123+
assertSelectedOptionsMatch("duplicateSelect", 0, new String[] { "option2", "option4"});
124+
selectOptions("duplicateSelect", 1, new String[] { "Option C", "Option B"});
125+
assertSelectedOptionValuesEqual("duplicateSelect", 1, new String[] { "optionB", "optionC"});
126+
assertSelectedOptionsMatch("duplicateSelect", 0, new String[] { "option2", "option4"});
127+
}
128+
129+
130+
131+
132+
private void assertSelectOptions(String selectName,
133+
String[] validOptions, String invalidOption,
134+
String[] validOptionValues, String invalidOptionValue)
135+
{
136+
for ( int i = 0; i < validOptions.length; ++i )
137+
{
138+
assertSelectOptionPresent(selectName, validOptions[i]);
139+
}
140+
assertSelectOptionsPresent(selectName, validOptions);
141+
assertSelectOptionsEqual(selectName, validOptions);
142+
for ( int i = 0; i < validOptionValues.length; ++i )
143+
{
144+
assertSelectOptionValuePresent(selectName, validOptionValues[i]);
145+
}
146+
assertSelectOptionValuesPresent(selectName, validOptionValues);
147+
assertSelectOptionValuesEqual(selectName, validOptionValues);
148+
149+
assertSelectOptionNotPresent(selectName, invalidOption);
150+
assertSelectOptionsNotEqual(selectName, new String[] { invalidOption});
151+
assertSelectOptionValueNotPresent(selectName, invalidOptionValue);
152+
assertSelectOptionValuesNotEqual(selectName, new String[] { invalidOptionValue });
153+
}
154+
155+
private void assertSelectOptions(String selectName, int index,
156+
String[] validOptions, String invalidOption,
157+
String[] validOptionValues, String invalidOptionValue)
158+
{
159+
for ( int i = 0; i < validOptions.length; ++i )
160+
{
161+
assertSelectOptionPresent(selectName, index, validOptions[i]);
162+
}
163+
assertSelectOptionsPresent(selectName, index, validOptions);
164+
assertSelectOptionsEqual(selectName, index, validOptions);
165+
for ( int i = 0; i < validOptionValues.length; ++i )
166+
{
167+
assertSelectOptionValuePresent(selectName, index, validOptionValues[i]);
168+
}
169+
assertSelectOptionValuesPresent(selectName, index, validOptionValues);
170+
assertSelectOptionValuesEqual(selectName, index, validOptionValues);
171+
172+
assertSelectOptionNotPresent(selectName, index, invalidOption);
173+
assertSelectOptionsNotEqual(selectName, index, new String[] { invalidOption});
174+
assertSelectOptionValueNotPresent(selectName, index, invalidOptionValue);
175+
assertSelectOptionValuesNotEqual(selectName, index, new String[] { invalidOptionValue });
176+
}
177+
178+
179+
private void assertSelectOptionsForm1()
180+
{
181+
//there is just one form element named "singleSelect".
182+
//find its options by label.
183+
assertSelectOptions("singleSelect",
184+
new String[] { "Option 1", "Option 2", "Option 3", "Option 4"},
185+
"badoption",
186+
new String[] { "option1", "option2", "option3", "option4"},
187+
"badoption");
188+
assertSelectOptions("singleSelect", 0,
189+
new String[] { "Option 1", "Option 2", "Option 3", "Option 4"},
190+
"badoption",
191+
new String[] { "option1", "option2", "option3", "option4"},
192+
"badoption");
193+
194+
//there are two form elements named "duplicateSelect"
195+
//first one has option1,option2. second one has optionA,optionB
196+
//non-indexed version should always get the first one.
197+
assertSelectOptions("duplicateSelect",
198+
new String[] { "Option 1", "Option 2", "Option 3", "Option 4"},
199+
"badoption",
200+
new String[] { "option1", "option2", "option3", "option4"},
201+
"badoption");
202+
assertSelectOptions("duplicateSelect", 0,
203+
new String[] { "Option 1", "Option 2", "Option 3", "Option 4"},
204+
"badoption",
205+
new String[] { "option1", "option2", "option3", "option4"},
206+
"badoption");
207+
assertSelectOptions("duplicateSelect", 1,
208+
new String[] { "Option A", "Option B", "Option C", "Option D"},
209+
"badoption",
210+
new String[] { "optionA", "optionB", "optionC", "optionD"},
211+
"badoption");
212+
}
213+
private void assertSelectOptionsForm2()
214+
{
215+
//there is just one form element named "singleSelect".
216+
//find its options by label.
217+
assertSelectOptions("singleSelectA",
218+
new String[] { "Option 1a", "Option 2a", "Option 3a", "Option 4a"},
219+
"badoption",
220+
new String[] { "option1a", "option2a", "option3a", "option4a"},
221+
"badoption");
222+
assertSelectOptions("singleSelectA", 0,
223+
new String[] { "Option 1a", "Option 2a", "Option 3a", "Option 4a"},
224+
"badoption",
225+
new String[] { "option1a", "option2a", "option3a", "option4a"},
226+
"badoption");
227+
228+
//there are two form elements named "duplicateSelect"
229+
//first one has option1,option2. second one has optionA,optionB
230+
//non-indexed version should always get the first one.
231+
assertSelectOptions("duplicateSelectA",
232+
new String[] { "Option 1a", "Option 2a", "Option 3a", "Option 4a"},
233+
"badoption",
234+
new String[] { "option1a", "option2a", "option3a", "option4a"},
235+
"badoption");
236+
assertSelectOptions("duplicateSelectA", 0,
237+
new String[] { "Option 1a", "Option 2a", "Option 3a", "Option 4a"},
238+
"badoption",
239+
new String[] { "option1a", "option2a", "option3a", "option4a"},
240+
"badoption");
241+
assertSelectOptions("duplicateSelectA", 1,
242+
new String[] { "Option Aa", "Option Ba", "Option Ca", "Option Da"},
243+
"badoption",
244+
new String[] { "optionAa", "optionBa", "optionCa", "optionDa"},
245+
"badoption");
246+
}
247+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE html
3+
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
4+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
5+
<html>
6+
<body>
7+
<form id="form1">
8+
<select name="singleSelect">
9+
<option value="option1">Option 1</option>
10+
<option value="option2">Option 2</option>
11+
<option value="option3">Option 3</option>
12+
<option value="option4">Option 4</option>
13+
</select>
14+
<select name="duplicateSelect" disabled="true">
15+
<option value="option1">Option 1</option>
16+
<option value="option2">Option 2</option>
17+
<option value="option3">Option 3</option>
18+
<option value="option4">Option 4</option>
19+
</select>
20+
<select name="duplicateSelect" disabled="false">
21+
<option value="optionA">Option A</option>
22+
<option value="optionB">Option B</option>
23+
<option value="optionC">Option C</option>
24+
<option value="optionD">Option D</option>
25+
</select>
26+
</form>
27+
</body>
28+
</html>
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE html
3+
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
4+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
5+
<html>
6+
<body>
7+
<form id="form1">
8+
<select name="singleSelect" multiple="true">
9+
<option value="option1">Option 1</option>
10+
<option value="option2">Option 2</option>
11+
<option value="option3">Option 3</option>
12+
<option value="option4">Option 4</option>
13+
</select>
14+
<select name="duplicateSelect" disabled="true" multiple="true">
15+
<option value="option1">Option 1</option>
16+
<option value="option2">Option 2</option>
17+
<option value="option3">Option 3</option>
18+
<option value="option4">Option 4</option>
19+
</select>
20+
<select name="duplicateSelect" disabled="false" multiple="true">
21+
<option value="optionA">Option A</option>
22+
<option value="optionB">Option B</option>
23+
<option value="optionC">Option C</option>
24+
<option value="optionD">Option D</option>
25+
</select>
26+
</form>
27+
</body>
28+
</html>
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE html
3+
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
4+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
5+
<html>
6+
<body>
7+
<form id="form1">
8+
<select name="singleSelect">
9+
<option value="option1">Option 1</option>
10+
<option value="option2">Option 2</option>
11+
<option value="option3">Option 3</option>
12+
<option value="option4">Option 4</option>
13+
</select>
14+
<select name="duplicateSelect" disabled="true">
15+
<option value="option1">Option 1</option>
16+
<option value="option2">Option 2</option>
17+
<option value="option3">Option 3</option>
18+
<option value="option4">Option 4</option>
19+
</select>
20+
<select name="duplicateSelect" disabled="false">
21+
<option value="optionA">Option A</option>
22+
<option value="optionB">Option B</option>
23+
<option value="optionC">Option C</option>
24+
<option value="optionD">Option D</option>
25+
</select>
26+
</form>
27+
<form id="form2">
28+
<select name="singleSelectA">
29+
<option value="option1a">Option 1a</option>
30+
<option value="option2a">Option 2a</option>
31+
<option value="option3a">Option 3a</option>
32+
<option value="option4a">Option 4a</option>
33+
</select>
34+
<select name="duplicateSelectA" disabled="true">
35+
<option value="option1a">Option 1a</option>
36+
<option value="option2a">Option 2a</option>
37+
<option value="option3a">Option 3a</option>
38+
<option value="option4a">Option 4a</option>
39+
</select>
40+
<select name="duplicateSelectA" disabled="false">
41+
<option value="optionAa">Option Aa</option>
42+
<option value="optionBa">Option Ba</option>
43+
<option value="optionCa">Option Ca</option>
44+
<option value="optionDa">Option Da</option>
45+
</select>
46+
</form>
47+
</body>
48+
</html>

0 commit comments

Comments
 (0)