Skip to content

Commit

Permalink
Make sure that ambiguous val() selection works correctly.
Browse files Browse the repository at this point in the history
  • Loading branch information
jeresig committed Sep 28, 2010
1 parent c7c0677 commit 879799f
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 10 deletions.
5 changes: 5 additions & 0 deletions test/index.html
Expand Up @@ -123,6 +123,11 @@ <h2 id="qunit-userAgent"></h2>
<option selected="selected" disabled="disabled" id="option4d" value="3">3</option>
<option id="option4e">no value</option>
</select>
<select name="select5" id="select5">
<option id="option5a" value="3">1</option>
<option id="option5b" value="2">2</option>
<option id="option5c" value="1">3</option>
</select>

This comment has been minimized.

Copy link
@jitter

jitter Sep 29, 2010

Contributor

Adding this select breaks the event-unit-test bind(), trigger change on select as it depends on the number of select-tags present in #form. Updating line 258 to expect(5); is required

This comment has been minimized.

Copy link
@jeresig

jeresig Sep 29, 2010

Author Member

Good catch - fix landed in 49f6f34.

This comment has been minimized.

Copy link
@dmethvin

dmethvin Sep 29, 2010

Member

I ran into this same problem with the disabled-option patch as well, and was thinking we might want to have the unit tests be more self-contained. Right now any addition to index.html is likely to break completely unrelated things because of the use of selectors like "select". Perhaps more of the unit tests could inject/remove the html they need so it's not affecting tests globally, or we could come up with better markup within index.html and change the test selectors to avoid the problem. Maybe I could tackle that post-1.4.3?

This comment has been minimized.

Copy link
@jeresig

jeresig Sep 29, 2010

Author Member

Dynamically injecting the test HTML (and resetting at the end of the test) is totally the way we should be going. That'd be a great thing to tackle post-1.4.3, absolutely.

This comment has been minimized.

Copy link
@jaubourg

jaubourg Sep 30, 2010

Member

Aren't these new selects breaking the param serialization tests in unit/ajax.js (working on getting the ajax rewrite up to date)?

This comment has been minimized.

Copy link
@jeresig

jeresig Sep 30, 2010

Author Member

@jaubourg: Good catch - landed here: 57c046f

<object id="object1" codebase="stupid">
<param name="p1" value="x1" />
Expand Down
10 changes: 9 additions & 1 deletion test/unit/attributes.js
Expand Up @@ -307,7 +307,7 @@ test("removeAttr(String)", function() {
});

test("val()", function() {
expect(20);
expect(23);

document.getElementById('text1').value = "bla";
equals( jQuery("#text1").val(), "bla", "Check for modified value of input element" );
Expand Down Expand Up @@ -342,6 +342,14 @@ test("val()", function() {
jQuery('#select4').attr('disabled', true);
same( jQuery('#select4').val(), ['2', '3'], 'Call val() on disabled multiple="multiple" select' );

equals( jQuery('#select5').val(), "3", "Check value on ambiguous select." );

jQuery('#select5').val(1);
equals( jQuery('#select5').val(), "1", "Check value on ambiguous select." );

jQuery('#select5').val(3);
equals( jQuery('#select5').val(), "3", "Check value on ambiguous select." );

var checks = jQuery("<input type='checkbox' name='test' value='1'/><input type='checkbox' name='test' value='2'/><input type='checkbox' name='test' value=''/><input type='checkbox' name='test'/>").appendTo("#form");

same( checks.serialize(), "", "Get unchecked values." );
Expand Down
14 changes: 7 additions & 7 deletions test/unit/selector.js
Expand Up @@ -21,7 +21,7 @@ test("element", function() {
same( jQuery("p", jQuery("div")).get(), q("firstp","ap","sndp","en","sap","first"), "Finding elements with a context." );
same( jQuery("div").find("p").get(), q("firstp","ap","sndp","en","sap","first"), "Finding elements with a context." );

same( jQuery("#form").find("select").get(), q("select1","select2","select3","select4"), "Finding selects with a context." );
same( jQuery("#form").find("select").get(), q("select1","select2","select3","select4","select5"), "Finding selects with a context." );

ok( jQuery("#length").length, '&lt;input name="length"&gt; cannot be found under IE, see #945' );
ok( jQuery("#lengthtest input").length, '&lt;input name="length"&gt; cannot be found under IE, see #945' );
Expand Down Expand Up @@ -338,7 +338,7 @@ test("pseudo - :not", function() {
expect(24);
t( "Not", "a.blog:not(.link)", ["mark"] );

t( "Not - multiple", "#form option:not(:contains(Nothing),#option1b,:selected)", ["option1c", "option1d", "option2b", "option2c", "option3d", "option3e", "option4e"] );
t( "Not - multiple", "#form option:not(:contains(Nothing),#option1b,:selected)", ["option1c", "option1d", "option2b", "option2c", "option3d", "option3e", "option4e", "option5b", "option5c"] );
t( "Not - recursive", "#form option:not(:not(:selected))[id^='option3']", [ "option3b", "option3c"] );

t( ":not() failing interior", "p:not(.foo)", ["firstp","ap","sndp","en","sap","first"] );
Expand All @@ -359,9 +359,9 @@ test("pseudo - :not", function() {

t( "No element not selector", ".container div:not(.excluded) div", [] );

t( ":not() Existing attribute", "#form select:not([multiple])", ["select1", "select2"]);
t( ":not() Equals attribute", "#form select:not([name=select1])", ["select2", "select3", "select4"]);
t( ":not() Equals quoted attribute", "#form select:not([name='select1'])", ["select2", "select3", "select4"]);
t( ":not() Existing attribute", "#form select:not([multiple])", ["select1", "select2", "select5"]);
t( ":not() Equals attribute", "#form select:not([name=select1])", ["select2", "select3", "select4","select5"]);
t( ":not() Equals quoted attribute", "#form select:not([name='select1'])", ["select2", "select3", "select4", "select5"]);

t( ":not() Multiple Class", "#foo a:not(.blog)", ["yahoo","anchor2"] );
t( ":not() Multiple Class", "#foo a:not(.link)", ["yahoo","anchor2"] );
Expand Down Expand Up @@ -427,13 +427,13 @@ test("pseudo - visibility", function() {
test("pseudo - form", function() {
expect(8);

t( "Form element :input", "#form :input", ["text1", "text2", "radio1", "radio2", "check1", "check2", "hidden1", "hidden2", "name", "search", "button", "area1", "select1", "select2", "select3", "select4"] );
t( "Form element :input", "#form :input", ["text1", "text2", "radio1", "radio2", "check1", "check2", "hidden1", "hidden2", "name", "search", "button", "area1", "select1", "select2", "select3", "select4", "select5"] );
t( "Form element :radio", "#form :radio", ["radio1", "radio2"] );
t( "Form element :checkbox", "#form :checkbox", ["check1", "check2"] );
t( "Form element :text", "#form :text:not(#search)", ["text1", "text2", "hidden2", "name"] );
t( "Form element :radio:checked", "#form :radio:checked", ["radio2"] );
t( "Form element :checkbox:checked", "#form :checkbox:checked", ["check1"] );
t( "Form element :radio:checked, :checkbox:checked", "#form :radio:checked, #form :checkbox:checked", ["radio2", "check1"] );

t( "Selected Option Element", "#form option:selected", ["option1a","option2d","option3b","option3c","option4b","option4c","option4d"] );
t( "Selected Option Element", "#form option:selected", ["option1a","option2d","option3b","option3c","option4b","option4c","option4d","option5a"] );
});
4 changes: 2 additions & 2 deletions test/unit/traversing.js
Expand Up @@ -157,7 +157,7 @@ test("not(Selector)", function() {
equals( jQuery("#main > p#ap > a").not("#google").length, 2, "not('selector')" );
same( jQuery("p").not(".result").get(), q("firstp", "ap", "sndp", "en", "sap", "first"), "not('.class')" );
same( jQuery("p").not("#ap, #sndp, .result").get(), q("firstp", "en", "sap", "first"), "not('selector, selector')" );
same( jQuery("#form option").not("option.emptyopt:contains('Nothing'),[selected],[value='1']").get(), q("option1c", "option1d", "option2c", "option3d", "option3e", "option4e" ), "not('complex selector')");
same( jQuery("#form option").not("option.emptyopt:contains('Nothing'),[selected],[value='1']").get(), q("option1c", "option1d", "option2c", "option3d", "option3e", "option4e","option5b"), "not('complex selector')");

same( jQuery('#ap *').not('code').get(), q("google", "groups", "anchor1", "mark"), "not('tag selector')" );
same( jQuery('#ap *').not('code, #mark').get(), q("google", "groups", "anchor1"), "not('tag, ID selector')" );
Expand All @@ -168,7 +168,7 @@ test("not(Element)", function() {
expect(1);

var selects = jQuery("#form select");
same( selects.not( selects[1] ).get(), q("select1", "select3", "select4"), "filter out DOM element");
same( selects.not( selects[1] ).get(), q("select1", "select3", "select4", "select5"), "filter out DOM element");
});

test("not(Function)", function() {
Expand Down

0 comments on commit 879799f

Please sign in to comment.