diff options
-rw-r--r-- | test/unit/selector.js | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/test/unit/selector.js b/test/unit/selector.js index df0282e08..e5e3185ae 100644 --- a/test/unit/selector.js +++ b/test/unit/selector.js @@ -246,6 +246,85 @@ test( "jQuery.contains", function() { ok( !jQuery.contains(document, detached), "document container (negative)" ); }); +test("jQuery.unique", function() { + expect( 14 ); + + function Arrayish( arr ) { + var i = this.length = arr.length; + while ( i-- ) { + this[ i ] = arr[ i ]; + } + } + Arrayish.prototype = { + slice: [].slice, + sort: [].sort, + splice: [].splice + }; + + var i, tests, + detached = [], + body = document.body, + fixture = document.getElementById("qunit-fixture"), + detached1 = document.createElement("p"), + detached2 = document.createElement("ul"), + detachedChild = detached1.appendChild( document.createElement("a") ), + detachedGrandchild = detachedChild.appendChild( document.createElement("b") ); + + for ( i = 0; i < 12; i++ ) { + detached.push( document.createElement("li") ); + detached[i].id = "detached" + i; + detached2.appendChild( document.createElement("li") ).id = "detachedChild" + i; + } + + tests = { + "Empty": { + input: [], + expected: [] + }, + "Single-element": { + input: [ fixture ], + expected: [ fixture ] + }, + "No duplicates": { + input: [ fixture, body ], + expected: [ body, fixture ] + }, + "Duplicates": { + input: [ body, fixture, fixture, body ], + expected: [ body, fixture ] + }, + "Detached": { + input: detached.slice( 0 ), + expected: detached.slice( 0 ) + }, + "Detached children": { + input: [ + detached2.childNodes[0], + detached2.childNodes[1], + detached2.childNodes[2], + detached2.childNodes[3] + ], + expected: [ + detached2.childNodes[0], + detached2.childNodes[1], + detached2.childNodes[2], + detached2.childNodes[3] + ] + }, + "Attached/detached mixture": { + input: [ detached1, fixture, detached2, document, detachedChild, body, detachedGrandchild ], + expected: [ document, body, fixture ], + length: 3 + } + }; + + jQuery.each( tests, function( label, test ) { + var length = test.length || test.input.length; + deepEqual( jQuery.unique( test.input ).slice( 0, length ), test.expected, label + " (array)" ); + deepEqual( jQuery.unique( new Arrayish(test.input) ).slice( 0, length ), test.expected, label + " (quasi-array)" ); + }); +}); + testIframe("selector/sizzle_cache", "Sizzle cache collides with multiple Sizzles on a page", function( jQuery, window, document ) { var $cached = window["$cached"]; |