Skip to content

Commit

Permalink
Now handle the case where Safari's querySelectorAll fails on uppercas…
Browse files Browse the repository at this point in the history
…e characters in quirks mode. Added a test to check for it and re-worked some of the existing tests to better handle document order issues. Fixes jQuery bug #3840.
  • Loading branch information
jeresig committed Jan 21, 2009
1 parent 9b3804a commit f9a5849
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 23 deletions.
9 changes: 8 additions & 1 deletion src/selector.js
Expand Up @@ -709,7 +709,14 @@ try {
})();

if ( document.querySelectorAll ) (function(){
var oldSizzle = Sizzle;
var oldSizzle = Sizzle, div = document.createElement("div");
div.innerHTML = "<p class='TEST'></p>";

// Safari can't handle uppercase or unicode characters when
// in quirks mode.
if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
return;
}

Sizzle = function(query, context, extra, seed){
context = context || document;
Expand Down
2 changes: 1 addition & 1 deletion test/index.html
Expand Up @@ -39,7 +39,7 @@ <h2 id="userAgent"></h2>
<p id="firstp">See <a id="simon1" href="http://simon.incutio.com/archive/2003/03/25/#getElementsBySelector" rel="bookmark">this blog entry</a> for more information.</p>
<p id="ap">
Here are some links in a normal paragraph: <a id="google" href="http://www.google.com/" title="Google!">Google</a>,
<a id="groups" href="http://groups.google.com/">Google Groups (Link)</a>.
<a id="groups" href="http://groups.google.com/" class="GROUPS">Google Groups (Link)</a>.
This link has <code><a href="http://smin" id="anchor1">class="blog"</a></code>:
<a href="http://diveintomark.org/" class="blog" hreflang="en" id="mark">diveintomark</a>

Expand Down
31 changes: 10 additions & 21 deletions test/unit/selector.js
Expand Up @@ -88,8 +88,9 @@ test("id", function() {
});

test("class", function() {
expect(15);
expect(16);
t( "Class Selector", ".blog", ["mark","simon"] );
t( "Class Selector", ".GROUPS", ["groups"] );
t( "Class Selector", ".blog.link", ["simon"] );
t( "Class Selector w/ Element", "a.blog", ["mark","simon"] );
t( "Parent Class Selector", "p .blog", ["mark","simon"] );
Expand All @@ -100,7 +101,7 @@ test("class", function() {
t( "Class selector using UTF8", ".台北Táiběi, .台北", ["utf8class1","utf8class2"] );
t( "Descendant class selector using UTF8", "div .台北Táiběi", ["utf8class1"] );
t( "Child class selector using UTF8", "form > .台北Táiběi", ["utf8class1"] );

t( "Escaped Class", ".foo\\:bar", ["foo:bar"] );
t( "Escaped Class", ".test\\.foo\\[5\\]bar", ["test.foo[5]bar"] );
t( "Descendant scaped Class", "div .foo\\:bar", ["foo:bar"] );
Expand Down Expand Up @@ -128,16 +129,10 @@ test("name", function() {
test("multiple", function() {
expect(4);

var results = ["mark","simon","firstp","ap","sndp","en","sap","first"];

if ( document.querySelectorAll ) {
results = ["firstp","ap","mark","sndp","en","sap","simon","first"];
}

t( "Comma Support", "a.blog, p", results);
t( "Comma Support", "a.blog , p", results);
t( "Comma Support", "a.blog ,p", results);
t( "Comma Support", "a.blog,p", results);
t( "Comma Support", "h2, p", ["banner","userAgent","firstp","ap","sndp","en","sap","first"]);
t( "Comma Support", "h2 , p", ["banner","userAgent","firstp","ap","sndp","en","sap","first"]);
t( "Comma Support", "h2 , p", ["banner","userAgent","firstp","ap","sndp","en","sap","first"]);
t( "Comma Support", "h2,p", ["banner","userAgent","firstp","ap","sndp","en","sap","first"]);
});

test("child and adjacent", function() {
Expand Down Expand Up @@ -224,12 +219,6 @@ test("attributes", function() {
t( "for Attribute", "form label[for]", ["label-for"] );
t( "for Attribute in form", "#form [for=action]", ["label-for"] );

var results = ["hidden1","radio1","radio2"];

if ( document.querySelectorAll ) {
results = ["radio1", "radio2", "hidden1"];
}

t( "Attribute containing []", "input[name^='foo[']", ["hidden2"] );
t( "Attribute containing []", "input[name^='foo[bar]']", ["hidden2"] );
t( "Attribute containing []", "input[name*='[bar]']", ["hidden2"] );
Expand All @@ -238,9 +227,9 @@ test("attributes", function() {
t( "Attribute containing []", "input[name$='foo[bar]']", ["hidden2"] );
t( "Attribute containing []", "input[name*='foo[bar]']", ["hidden2"] );

t( "Multiple Attribute Equals", "#form input[type='hidden'],#form input[type='radio']", results );
t( "Multiple Attribute Equals", "#form input[type=\"hidden\"],#form input[type='radio']", results );
t( "Multiple Attribute Equals", "#form input[type=hidden],#form input[type=radio]", results );
t( "Multiple Attribute Equals", "#form input[type='radio'], #form input[type='hidden']", ["radio1", "radio2", "hidden1"] );
t( "Multiple Attribute Equals", "#form input[type='radio'], #form input[type=\"hidden\"]", ["radio1", "radio2", "hidden1"] );
t( "Multiple Attribute Equals", "#form input[type='radio'], #form input[type=hidden]", ["radio1", "radio2", "hidden1"] );

t( "Attribute selector using UTF8", "span[lang=中文]", ["台北"] );

Expand Down

0 comments on commit f9a5849

Please sign in to comment.