Skip to content
Permalink
Browse files

Make sure that ambiguous val() selection works correctly.

  • Loading branch information
jeresig committed Sep 28, 2010
1 parent c7c0677 commit 879799fe955f01b85b59fd8a0096d415fc48df03
Showing with 23 additions and 10 deletions.
  1. +5 −0 test/index.html
  2. +9 −1 test/unit/attributes.js
  3. +7 −7 test/unit/selector.js
  4. +2 −2 test/unit/traversing.js
@@ -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" />
@@ -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" );
@@ -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." );
@@ -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' );
@@ -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"] );
@@ -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"] );
@@ -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"] );
});
@@ -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')" );
@@ -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() {

0 comments on commit 879799f

Please sign in to comment.
You can’t perform that action at this time.