diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..50fc1994 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "test/qunit"] + path = test/qunit + url = git://github.com/jquery/qunit.git diff --git a/test/data/testinit.js b/test/data/testinit.js new file mode 100644 index 00000000..a66f71d2 --- /dev/null +++ b/test/data/testinit.js @@ -0,0 +1,47 @@ +var jQuery = this.jQuery || "jQuery", // For testing .noConflict() + $ = this.$ || "$", + originaljQuery = jQuery, + original$ = $; + +/** + * Returns an array of elements with the given IDs, eg. + * @example q("main", "foo", "bar") + * @result [
, , ] + */ +function q() { + var r = []; + + for ( var i = 0; i < arguments.length; i++ ) { + r.push( document.getElementById( arguments[i] ) ); + } + + return r; +} + +/** + * Asserts that a select matches the given IDs * @example t("Check for something", "//[a]", ["foo", "baar"]); + * @result returns true if "//[a]" return two elements with the IDs 'foo' and 'baa +r' + */ +function t(a,b,c) { + var f = jQuery(b).get(), s = ""; + + for ( var i = 0; i < f.length; i++ ) { + s += (s && ",") + '"' + f[i].id + '"'; + } + + same(f, q.apply(q,c), a + " (" + b + ")"); +} + +/** + * Add random number to url to stop IE from caching + * + * @example url("data/test.html") + * @result "data/test.html?10538358428943" + * + * @example url("data/test.php?foo=bar") + * @result "data/test.php?foo=bar&10538358345554" + */ +function url(value) { + return value + (/\?/.test(value) ? "&" : "?") + new Date().getTime() + "" + parseInt(Math.random()*100000); +} diff --git a/test/index.html b/test/index.html index 81151cb7..9e4f22e3 100644 --- a/test/index.html +++ b/test/index.html @@ -3,14 +3,8 @@ jQuery Test Suite - + - - + + -

jQuery Test Suite

- -

+

jQuery Test Suite

+

+
+

@@ -225,6 +221,6 @@

-
    +
      diff --git a/test/qunit b/test/qunit new file mode 160000 index 00000000..958c03fb --- /dev/null +++ b/test/qunit @@ -0,0 +1 @@ +Subproject commit 958c03fbab15c7fd9b607a3961e92e66b3861814 diff --git a/test/qunit/testrunner.js b/test/qunit/testrunner.js deleted file mode 100644 index 6782b01d..00000000 --- a/test/qunit/testrunner.js +++ /dev/null @@ -1,797 +0,0 @@ -/* - * QUnit - jQuery unit testrunner - * - * http://docs.jquery.com/QUnit - * - * Copyright (c) 2008 John Resig, Jörn Zaefferer - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * $Id: testrunner.js 6574 2009-09-15 20:30:29Z joern.zaefferer $ - */ - -(function($) { - -// Test for equality any JavaScript type. -// Discussions and reference: http://philrathe.com/articles/equiv -// Test suites: http://philrathe.com/tests/equiv -// Author: Philippe Rathé -var equiv = function () { - - var innerEquiv; // the real equiv function - var callers = []; // stack to decide between skip/abort functions - - - // Determine what is o. - function hoozit(o) { - if (o.constructor === String) { - return "string"; - - } else if (o.constructor === Boolean) { - return "boolean"; - - } else if (o.constructor === Number) { - - if (isNaN(o)) { - return "nan"; - } else { - return "number"; - } - - } else if (typeof o === "undefined") { - return "undefined"; - - // consider: typeof null === object - } else if (o === null) { - return "null"; - - // consider: typeof [] === object - } else if (o instanceof Array) { - return "array"; - - // consider: typeof new Date() === object - } else if (o instanceof Date) { - return "date"; - - // consider: /./ instanceof Object; - // /./ instanceof RegExp; - // typeof /./ === "function"; // => false in IE and Opera, - // true in FF and Safari - } else if (o instanceof RegExp) { - return "regexp"; - - } else if (typeof o === "object") { - return "object"; - - } else if (o instanceof Function) { - return "function"; - } else { - return undefined; - } - } - - // Call the o related callback with the given arguments. - function bindCallbacks(o, callbacks, args) { - var prop = hoozit(o); - if (prop) { - if (hoozit(callbacks[prop]) === "function") { - return callbacks[prop].apply(callbacks, args); - } else { - return callbacks[prop]; // or undefined - } - } - } - - var callbacks = function () { - - // for string, boolean, number and null - function useStrictEquality(b, a) { - if (b instanceof a.constructor || a instanceof b.constructor) { - // to catch short annotaion VS 'new' annotation of a declaration - // e.g. var i = 1; - // var j = new Number(1); - return a == b; - } else { - return a === b; - } - } - - return { - "string": useStrictEquality, - "boolean": useStrictEquality, - "number": useStrictEquality, - "null": useStrictEquality, - "undefined": useStrictEquality, - - "nan": function (b) { - return isNaN(b); - }, - - "date": function (b, a) { - return hoozit(b) === "date" && a.valueOf() === b.valueOf(); - }, - - "regexp": function (b, a) { - return hoozit(b) === "regexp" && - a.source === b.source && // the regex itself - a.global === b.global && // and its modifers (gmi) ... - a.ignoreCase === b.ignoreCase && - a.multiline === b.multiline; - }, - - // - skip when the property is a method of an instance (OOP) - // - abort otherwise, - // initial === would have catch identical references anyway - "function": function () { - var caller = callers[callers.length - 1]; - return caller !== Object && - typeof caller !== "undefined"; - }, - - "array": function (b, a) { - var i; - var len; - - // b could be an object literal here - if ( ! (hoozit(b) === "array")) { - return false; - } - - len = a.length; - if (len !== b.length) { // safe and faster - return false; - } - for (i = 0; i < len; i++) { - if( ! innerEquiv(a[i], b[i])) { - return false; - } - } - return true; - }, - - "object": function (b, a) { - var i; - var eq = true; // unless we can proove it - var aProperties = [], bProperties = []; // collection of strings - - // comparing constructors is more strict than using instanceof - if ( a.constructor !== b.constructor) { - return false; - } - - // stack constructor before traversing properties - callers.push(a.constructor); - - for (i in a) { // be strict: don't ensures hasOwnProperty and go deep - - aProperties.push(i); // collect a's properties - - if ( ! innerEquiv(a[i], b[i])) { - eq = false; - } - } - - callers.pop(); // unstack, we are done - - for (i in b) { - bProperties.push(i); // collect b's properties - } - - // Ensures identical properties name - return eq && innerEquiv(aProperties.sort(), bProperties.sort()); - } - }; - }(); - - innerEquiv = function () { // can take multiple arguments - var args = Array.prototype.slice.apply(arguments); - if (args.length < 2) { - return true; // end transition - } - - return (function (a, b) { - if (a === b) { - return true; // catch the most you can - } else if (a === null || b === null || typeof a === "undefined" || typeof b === "undefined" || hoozit(a) !== hoozit(b)) { - return false; // don't lose time with error prone cases - } else { - return bindCallbacks(a, callbacks, [b, a]); - } - - // apply transition with (1..n) arguments - })(args[0], args[1]) && arguments.callee.apply(this, args.splice(1, args.length -1)); - }; - - return innerEquiv; - -}(); - -var GETParams = $.map( location.search.slice(1).split('&'), decodeURIComponent ); - -var config = { - stats: { - all: 0, - bad: 0 - }, - queue: [], - // block until document ready - blocking: true, - //restrict modules/tests by get parameters - filters: GETParams, - isLocal: !!(window.location.protocol == 'file:') -}; - -// public API as global methods -$.extend(window, { - test: test, - module: module, - expect: expect, - ok: ok, - equals: equals, - start: start, - stop: stop, - reset: reset, - isLocal: config.isLocal, - same: function(a, b, message) { - push(equiv(a, b), a, b, message); - }, - QUnit: { - equiv: equiv, - ok: ok, - done: function(failures, total){}, - log: function(result, message){} - }, - // legacy methods below - isSet: isSet, - isObj: isObj, - compare: function() { - throw "compare is deprecated - use same() instead"; - }, - compare2: function() { - throw "compare2 is deprecated - use same() instead"; - }, - serialArray: function() { - throw "serialArray is deprecated - use jsDump.parse() instead"; - }, - q: q, - t: t, - url: url, - triggerEvent: triggerEvent -}); - -$(window).load(function() { - - if (!$("#header, #banner, #userAgent, #tests").length) { - $('body').prepend( - '

      ' + document.title + '

      ' + - '' + - '

      ' + - '
        ' - ); - } - - $('#userAgent').html(navigator.userAgent); - var head = $('
        ').insertAfter("#userAgent"); - $('').attr("disabled", true).prependTo(head).click(function() { - $('li.pass')[this.checked ? 'hide' : 'show'](); - }); - $('').attr("disabled", true).appendTo(head).click(function() { - $("li.fail:contains('missing test - untested code is broken code')").parent('ol').parent('li.fail')[this.checked ? 'hide' : 'show'](); - }); - $("#filter-missing").after(''); - runTest(); -}); - -function synchronize(callback) { - config.queue.push(callback); - if(!config.blocking) { - process(); - } -} - -function process() { - while(config.queue.length && !config.blocking) { - config.queue.shift()(); - } -} - -function stop(timeout) { - config.blocking = true; - if (timeout) - config.timeout = setTimeout(function() { - QUnit.ok( false, "Test timed out" ); - start(); - }, timeout); -} -function start() { - // A slight delay, to avoid any current callbacks - setTimeout(function() { - if(config.timeout) - clearTimeout(config.timeout); - config.blocking = false; - process(); - }, 13); -} - -function validTest( name ) { - var i = config.filters.length, - run = false; - - if( !i ) - return true; - - while( i-- ){ - var filter = config.filters[i], - not = filter.charAt(0) == '!'; - if( not ) - filter = filter.slice(1); - if( name.indexOf(filter) != -1 ) - return !not; - if( not ) - run = true; - } - return run; -} - -function runTest() { - config.blocking = false; - var started = +new Date; - config.fixture = document.getElementById('main').innerHTML; - config.ajaxSettings = $.ajaxSettings; - synchronize(function() { - $('

        ').html(['Tests completed in ', - +new Date - started, ' milliseconds.
        ', - '', config.stats.all - config.stats.bad, ' tests of ', config.stats.all, ' passed, ', config.stats.bad,' failed.'] - .join('')) - .appendTo("body"); - $("#banner").addClass(config.stats.bad ? "fail" : "pass"); - QUnit.done( config.stats.bad, config.stats.all ); - }); -} - -var pollution; - -function saveGlobal(){ - pollution = [ ]; - - for( var key in window ) - pollution.push(key); -} -function checkPollution( name ){ - var old = pollution; - saveGlobal(); - - if( pollution.length > old.length ){ - ok( false, "Introduced global variable(s): " + diff(old, pollution).join(", ") ); - config.expected++; - } -} - -function diff( clean, dirty ){ - return $.grep( dirty, function(name){ - return $.inArray( name, clean ) == -1; - }); -} - -function test(name, callback) { - if(config.currentModule) - name = config.currentModule + " module: " + name + ""; - var lifecycle = $.extend({ - setup: function() {}, - teardown: function() {} - }, config.moduleLifecycle); - - if ( !validTest(name) ) - return; - - var testEnvironment = {}; - - synchronize(function() { - config.assertions = []; - config.expected = null; - try { - if( !pollution ) - saveGlobal(); - lifecycle.setup.call(testEnvironment); - } catch(e) { - QUnit.ok( false, "Setup failed on " + name + ": " + e.message ); - } - }); - synchronize(function() { - try { - callback.call(testEnvironment); - } catch(e) { - fail("Test " + name + " died, exception and test follows", e, callback); - QUnit.ok( false, "Died on test #" + (config.assertions.length + 1) + ": " + e.message ); - // else next test will carry the responsibility - saveGlobal(); - } - }); - synchronize(function() { - try { - lifecycle.teardown.call(testEnvironment); - checkPollution(); - } catch(e) { - QUnit.ok( false, "Teardown failed on " + name + ": " + e.message ); - } - }); - synchronize(function() { - try { - reset(); - } catch(e) { - fail("reset() failed, following Test " + name + ", exception and reset fn follows", e, reset); - } - - if(config.expected && config.expected != config.assertions.length) { - QUnit.ok( false, "Expected " + config.expected + " assertions, but " + config.assertions.length + " were run" ); - } - - var good = 0, bad = 0; - var ol = $("

          ").hide(); - config.stats.all += config.assertions.length; - for ( var i = 0; i < config.assertions.length; i++ ) { - var assertion = config.assertions[i]; - $("
        1. ").addClass(assertion.result ? "pass" : "fail").text(assertion.message || "(no message)").appendTo(ol); - assertion.result ? good++ : bad++; - } - config.stats.bad += bad; - - var b = $("").html(name + " (" + bad + ", " + good + ", " + config.assertions.length + ")") - .click(function(){ - $(this).next().toggle(); - }) - .dblclick(function(event) { - var target = $(event.target).filter("strong").clone(); - if ( target.length ) { - target.children().remove(); - location.href = location.href.match(/^(.+?)(\?.*)?$/)[1] + "?" + encodeURIComponent($.trim(target.text())); - } - }); - - $("
        2. ").addClass(bad ? "fail" : "pass").append(b).append(ol).appendTo("#tests"); - - if(bad) { - $("#filter-pass").attr("disabled", null); - $("#filter-missing").attr("disabled", null); - } - }); -} - -function fail(message, exception, callback) { - if( typeof console != "undefined" && console.error && console.warn ) { - console.error(message); - console.error(exception); - console.warn(callback.toString()); - } else if (window.opera && opera.postError) { - opera.postError(message, exception, callback.toString); - } -} - -// call on start of module test to prepend name to all tests -function module(name, lifecycle) { - config.currentModule = name; - config.moduleLifecycle = lifecycle; -} - -/** - * Specify the number of expected assertions to gurantee that failed test (no assertions are run at all) don't slip through. - */ -function expect(asserts) { - config.expected = asserts; -} - -/** - * Resets the test setup. Useful for tests that modify the DOM. - */ -function reset() { - $("#main").html( config.fixture ); - $.event.global = {}; - $.ajaxSettings = $.extend({}, config.ajaxSettings); -} - -/** - * Asserts true. - * @example ok( $("a").size() > 5, "There must be at least 5 anchors" ); - */ -function ok(a, msg) { - QUnit.log(a, msg); - - config.assertions.push({ - result: !!a, - message: msg - }); -} - -/** - * Asserts that two arrays are the same - */ -function isSet(a, b, msg) { - function serialArray( a ) { - var r = []; - - if ( a && a.length ) - for ( var i = 0; i < a.length; i++ ) { - var str = a[i].nodeName; - if ( str ) { - str = str.toLowerCase(); - if ( a[i].id ) - str += "#" + a[i].id; - } else - str = a[i]; - r.push( str ); - } - - return "[ " + r.join(", ") + " ]"; - } - var ret = true; - if ( a && b && a.length != undefined && a.length == b.length ) { - for ( var i = 0; i < a.length; i++ ) - if ( a[i] != b[i] ) - ret = false; - } else - ret = false; - QUnit.ok( ret, !ret ? (msg + " expected: " + serialArray(b) + " result: " + serialArray(a)) : msg ); -} - -/** - * Asserts that two objects are equivalent - */ -function isObj(a, b, msg) { - var ret = true; - - if ( a && b ) { - for ( var i in a ) - if ( a[i] != b[i] ) - ret = false; - - for ( i in b ) - if ( a[i] != b[i] ) - ret = false; - } else - ret = false; - - QUnit.ok( ret, msg ); -} - -/** - * Returns an array of elements with the given IDs, eg. - * @example q("main", "foo", "bar") - * @result [
          , , ] - */ -function q() { - var r = []; - for ( var i = 0; i < arguments.length; i++ ) - r.push( document.getElementById( arguments[i] ) ); - return r; -} - -/** - * Asserts that a select matches the given IDs - * @example t("Check for something", "//[a]", ["foo", "baar"]); - * @result returns true if "//[a]" return two elements with the IDs 'foo' and 'baar' - */ -function t(a,b,c) { - var f = $(b); - var s = ""; - for ( var i = 0; i < f.length; i++ ) - s += (s && ",") + '"' + f[i].id + '"'; - isSet(f, q.apply(q,c), a + " (" + b + ")"); -} - -/** - * Add random number to url to stop IE from caching - * - * @example url("data/test.html") - * @result "data/test.html?10538358428943" - * - * @example url("data/test.php?foo=bar") - * @result "data/test.php?foo=bar&10538358345554" - */ -function url(value) { - return value + (/\?/.test(value) ? "&" : "?") + new Date().getTime() + "" + parseInt(Math.random()*100000); -} - -/** - * Checks that the first two arguments are equal, with an optional message. - * Prints out both actual and expected values. - * - * Prefered to ok( actual == expected, message ) - * - * @example equals( $.format("Received {0} bytes.", 2), "Received 2 bytes." ); - * - * @param Object actual - * @param Object expected - * @param String message (optional) - */ -function equals(actual, expected, message) { - push(expected == actual, actual, expected, message); -} - -function push(result, actual, expected, message) { - message = message || (result ? "okay" : "failed"); - QUnit.ok( result, result ? message + ": " + expected : message + ", expected: " + jsDump.parse(expected) + " result: " + jsDump.parse(actual) ); -} - -/** - * Trigger an event on an element. - * - * @example triggerEvent( document.body, "click" ); - * - * @param DOMElement elem - * @param String type - */ -function triggerEvent( elem, type, event ) { - if ( $.browser.mozilla || $.browser.opera ) { - event = document.createEvent("MouseEvents"); - event.initMouseEvent(type, true, true, elem.ownerDocument.defaultView, - 0, 0, 0, 0, 0, false, false, false, false, 0, null); - elem.dispatchEvent( event ); - } else if ( $.browser.msie ) { - elem.fireEvent("on"+type); - } -} - -})(jQuery); - -/** - * jsDump - * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com - * Licensed under BSD (http://www.opensource.org/licenses/bsd-license.php) - * Date: 5/15/2008 - * @projectDescription Advanced and extensible data dumping for Javascript. - * @version 1.0.0 - * @author Ariel Flesler - * @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html} - */ -(function(){ - function quote( str ){ - return '"' + str.toString().replace(/"/g, '\\"') + '"'; - }; - function literal( o ){ - return o + ''; - }; - function join( pre, arr, post ){ - var s = jsDump.separator(), - base = jsDump.indent(), - inner = jsDump.indent(1); - if( arr.join ) - arr = arr.join( ',' + s + inner ); - if( !arr ) - return pre + post; - return [ pre, inner + arr, base + post ].join(s); - }; - function array( arr ){ - var i = arr.length, ret = Array(i); - this.up(); - while( i-- ) - ret[i] = this.parse( arr[i] ); - this.down(); - return join( '[', ret, ']' ); - }; - - var reName = /^function (\w+)/; - - var jsDump = window.jsDump = { - parse:function( obj, type ){//type is used mostly internally, you can fix a (custom)type in advance - var parser = this.parsers[ type || this.typeOf(obj) ]; - type = typeof parser; - - return type == 'function' ? parser.call( this, obj ) : - type == 'string' ? parser : - this.parsers.error; - }, - typeOf:function( obj ){ - var type = typeof obj, - f = 'function';//we'll use it 3 times, save it - return type != 'object' && type != f ? type : - !obj ? 'null' : - obj.exec ? 'regexp' :// some browsers (FF) consider regexps functions - obj.getHours ? 'date' : - obj.scrollBy ? 'window' : - obj.nodeName == '#document' ? 'document' : - obj.nodeName ? 'node' : - obj.item ? 'nodelist' : // Safari reports nodelists as functions - obj.callee ? 'arguments' : - obj.call || obj.constructor != Array && //an array would also fall on this hack - (obj+'').indexOf(f) != -1 ? f : //IE reports functions like alert, as objects - 'length' in obj ? 'array' : - type; - }, - separator:function(){ - return this.multiline ? this.HTML ? '
          ' : '\n' : this.HTML ? ' ' : ' '; - }, - indent:function( extra ){// extra can be a number, shortcut for increasing-calling-decreasing - if( !this.multiline ) - return ''; - var chr = this.indentChar; - if( this.HTML ) - chr = chr.replace(/\t/g,' ').replace(/ /g,' '); - return Array( this._depth_ + (extra||0) ).join(chr); - }, - up:function( a ){ - this._depth_ += a || 1; - }, - down:function( a ){ - this._depth_ -= a || 1; - }, - setParser:function( name, parser ){ - this.parsers[name] = parser; - }, - // The next 3 are exposed so you can use them - quote:quote, - literal:literal, - join:join, - // - _depth_: 1, - // This is the list of parsers, to modify them, use jsDump.setParser - parsers:{ - window: '[Window]', - document: '[Document]', - error:'[ERROR]', //when no parser is found, shouldn't happen - unknown: '[Unknown]', - 'null':'null', - undefined:'undefined', - 'function':function( fn ){ - var ret = 'function', - name = 'name' in fn ? fn.name : (reName.exec(fn)||[])[1];//functions never have name in IE - if( name ) - ret += ' ' + name; - ret += '('; - - ret = [ ret, this.parse( fn, 'functionArgs' ), '){'].join(''); - return join( ret, this.parse(fn,'functionCode'), '}' ); - }, - array: array, - nodelist: array, - arguments: array, - object:function( map ){ - var ret = [ ]; - this.up(); - for( var key in map ) - ret.push( this.parse(key,'key') + ': ' + this.parse(map[key]) ); - this.down(); - return join( '{', ret, '}' ); - }, - node:function( node ){ - var open = this.HTML ? '<' : '<', - close = this.HTML ? '>' : '>'; - - var tag = node.nodeName.toLowerCase(), - ret = open + tag; - - for( var a in this.DOMAttrs ){ - var val = node[this.DOMAttrs[a]]; - if( val ) - ret += ' ' + a + '=' + this.parse( val, 'attribute' ); - } - return ret + close + open + '/' + tag + close; - }, - functionArgs:function( fn ){//function calls it internally, it's the arguments part of the function - var l = fn.length; - if( !l ) return ''; - - var args = Array(l); - while( l-- ) - args[l] = String.fromCharCode(97+l);//97 is 'a' - return ' ' + args.join(', ') + ' '; - }, - key:quote, //object calls it internally, the key part of an item in a map - functionCode:'[code]', //function calls it internally, it's the content of the function - attribute:quote, //node calls it internally, it's an html attribute value - string:quote, - date:quote, - regexp:literal, //regex - number:literal, - 'boolean':literal - }, - DOMAttrs:{//attributes to dump from nodes, name=>realName - id:'id', - name:'name', - 'class':'className' - }, - HTML:false,//if true, entities are escaped ( <, >, \t, space and \n ) - indentChar:' ',//indentation unit - multiline:true //if true, items in a collection, are separated by a \n, else just a space. - }; - -})(); diff --git a/test/qunit/testsuite.css b/test/qunit/testsuite.css deleted file mode 100644 index 520d8e6a..00000000 --- a/test/qunit/testsuite.css +++ /dev/null @@ -1,120 +0,0 @@ -body, div, h1 { font-family: 'trebuchet ms', verdana, arial; margin: 0; padding: 0 } -body {font-size: 10pt; } -h1 { padding: 15px; font-size: large; background-color: #06b; color: white; } -h1 a { color: white; } -h2 { padding: 10px; background-color: #eee; color: black; margin: 0; font-size: small; font-weight: normal } - -.pass { color: green; } -.fail { color: red; } -p.result { margin-left: 1em; } - -#banner { height: 2em; border-bottom: 1px solid white; } -h2.pass { background-color: green; } -h2.fail { background-color: red; } - -div.testrunner-toolbar { background: #eee; border-top: 1px solid black; padding: 10px; } - -ol#tests li strong { cursor:pointer; } - -div#fx-tests h4 { - background: red; -} - -div#fx-tests h4.pass { - background: green; -} - -div#fx-tests div.box { - background: red url(data/cow.jpg) no-repeat; - overflow: hidden; - border: 2px solid #000; -} - -div#fx-tests div.overflow { - overflow: visible; -} - -div.inline { - display: inline; -} - -div.autoheight { - height: auto; -} - -div.autowidth { - width: auto; -} - -div.autoopacity { - opacity: auto; -} - -div.largewidth { - width: 100px; -} - -div.largeheight { - height: 100px; -} - -div.largeopacity { - filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100); -} - -div.medwidth { - width: 50px; -} - -div.medheight { - height: 50px; -} - -div.medopacity { - opacity: 0.5; - filter: progid:DXImageTransform.Microsoft.Alpha(opacity=50); -} - -div.nowidth { - width: 0px; -} - -div.noheight { - height: 0px; -} - -div.noopacity { - opacity: 0; - filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0); -} - -div.hidden { - display: none; -} - -div#fx-tests div.widewidth { - background-repeat: repeat-x; -} - -div#fx-tests div.wideheight { - background-repeat: repeat-y; -} - -div#fx-tests div.widewidth.wideheight { - background-repeat: repeat; -} - -div#fx-tests div.noback { - background-image: none; -} - -div.chain, div.chain div { width: 100px; height: 20px; position: relative; float: left; } -div.chain div { position: absolute; top: 0px; left: 0px; } - -div.chain.test { background: red; } -div.chain.test div { background: green; } - -div.chain.out { background: green; } -div.chain.out div { background: red; display: none; } - -div#show-tests * { display: none; } diff --git a/test/unit/selector.js b/test/unit/selector.js index 22be51a8..3b18f16a 100644 --- a/test/unit/selector.js +++ b/test/unit/selector.js @@ -16,20 +16,20 @@ test("element", function() { t( "Parent Element", "div p", ["firstp","ap","sndp","en","sap","first"] ); equals( jQuery("param", "#object1").length, 2, "Object/param as context" ); - isSet( jQuery("p", document.getElementsByTagName("div")), q("firstp","ap","sndp","en","sap","first"), "Finding elements with a context." ); - isSet( jQuery("p", "div"), q("firstp","ap","sndp","en","sap","first"), "Finding elements with a context." ); - isSet( jQuery("p", jQuery("div")), q("firstp","ap","sndp","en","sap","first"), "Finding elements with a context." ); - isSet( jQuery("div").find("p"), q("firstp","ap","sndp","en","sap","first"), "Finding elements with a context." ); + same( jQuery("p", document.getElementsByTagName("div")).get(), q("firstp","ap","sndp","en","sap","first"), "Finding elements with a context." ); + same( jQuery("p", "div").get(), q("firstp","ap","sndp","en","sap","first"), "Finding elements with a context." ); + 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." ); ok( jQuery("#length").length, '<input name="length"> cannot be found under IE, see #945' ); ok( jQuery("#lengthtest input").length, '<input name="length"> cannot be found under IE, see #945' ); // Check for unique-ness and sort order - isSet( jQuery("*"), jQuery("*, *"), "Check for duplicates: *, *" ); - isSet( jQuery("p"), jQuery("p, div p"), "Check for duplicates: p, div p" ); + same( jQuery("*").get(), jQuery("*, *").get(), "Check for duplicates: *, *" ); + same( jQuery("p").get(), jQuery("p, div p").get(), "Check for duplicates: p, div p" ); - t( "Checking sort order", "h2, h1", ["header", "banner", "userAgent"] ); - t( "Checking sort order", "h2:first, h1:first", ["header", "banner"] ); + t( "Checking sort order", "h2, h1", ["qunit-header", "qunit-banner", "qunit-userAgent"] ); + t( "Checking sort order", "h2:first, h1:first", ["qunit-header", "qunit-banner"] ); t( "Checking sort order", "p, p a", ["firstp", "simon1", "ap", "google", "groups", "anchor1", "mark", "sndp", "en", "yahoo", "sap", "anchor2", "simon", "first"] ); }); @@ -103,7 +103,7 @@ test("id", function() { t( "ID selector with non-existant ancestor", "#asdfasdf #foobar", [] ); // bug #986 - isSet( jQuery("body").find("div#form"), [], "ID selector within the context of another element" ); + same( jQuery("body").find("div#form").get(), [], "ID selector within the context of another element" ); t( "Underscore ID", "#types_all", ["types_all"] ); t( "Dash ID", "#fx-queue", ["fx-queue"] ); @@ -119,10 +119,10 @@ test("class", function() { t( "Class Selector w/ Element", "a.blog", ["mark","simon"] ); t( "Parent Class Selector", "p .blog", ["mark","simon"] ); - isSet( jQuery(".blog", document.getElementsByTagName("p")), q("mark", "simon"), "Finding elements with a context." ); - isSet( jQuery(".blog", "p"), q("mark", "simon"), "Finding elements with a context." ); - isSet( jQuery(".blog", jQuery("p")), q("mark", "simon"), "Finding elements with a context." ); - isSet( jQuery("p").find(".blog"), q("mark", "simon"), "Finding elements with a context." ); + same( jQuery(".blog", document.getElementsByTagName("p")).get(), q("mark", "simon"), "Finding elements with a context." ); + same( jQuery(".blog", "p").get(), q("mark", "simon"), "Finding elements with a context." ); + same( jQuery(".blog", jQuery("p")).get(), q("mark", "simon"), "Finding elements with a context." ); + same( jQuery("p").find(".blog").get(), q("mark", "simon"), "Finding elements with a context." ); t( "Class selector using UTF8", ".台北Táiběi", ["utf8class1"] ); //t( "Class selector using UTF8", ".台北", ["utf8class1","utf8class2"] ); @@ -140,11 +140,11 @@ test("class", function() { var div = document.createElement("div"); div.innerHTML = "
          "; - isSet( jQuery(".e", div), [ div.firstChild ], "Finding a second class." ); + same( jQuery(".e", div).get(), [ div.firstChild ], "Finding a second class." ); div.lastChild.className = "e"; - isSet( jQuery(".e", div), [ div.firstChild, div.lastChild ], "Finding a modified class." ); + same( jQuery(".e", div).get(), [ div.firstChild, div.lastChild ], "Finding a modified class." ); }); test("name", function() { @@ -160,8 +160,8 @@ test("name", function() { t( "Name selector for grouped input", "input[name='types[]']", ["types_all", "types_anime", "types_movie"] ) - isSet( jQuery("#form").find("input[name=action]"), q("text1"), "Name selector within the context of another element" ); - isSet( jQuery("#form").find("input[name='foo[bar]']"), q("hidden2"), "Name selector for grouped form element within the context of another element" ); + same( jQuery("#form").find("input[name=action]").get(), q("text1"), "Name selector within the context of another element" ); + same( jQuery("#form").find("input[name='foo[bar]']").get(), q("hidden2"), "Name selector for grouped form element within the context of another element" ); var a = jQuery('tName1 AtName2 A
          tName1 Div
          ').appendTo('#main'); @@ -175,10 +175,10 @@ test("name", function() { test("multiple", function() { expect(4); - 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"]); + t( "Comma Support", "h2, p", ["qunit-banner","qunit-userAgent","firstp","ap","sndp","en","sap","first"]); + t( "Comma Support", "h2 , p", ["qunit-banner","qunit-userAgent","firstp","ap","sndp","en","sap","first"]); + t( "Comma Support", "h2 , p", ["qunit-banner","qunit-userAgent","firstp","ap","sndp","en","sap","first"]); + t( "Comma Support", "h2,p", ["qunit-banner","qunit-userAgent","firstp","ap","sndp","en","sap","first"]); }); test("child and adjacent", function() { @@ -205,9 +205,9 @@ test("child and adjacent", function() { t( "No element deep selector", "div.foo > span > a", [] ); t( "No element not selector", ".container div:not(.excluded) div", [] ); - isSet( jQuery("> :first", document.getElementById("nothiddendiv")), q("nothiddendivchild"), "Verify child context positional selctor" ); - isSet( jQuery("> :eq(0)", document.getElementById("nothiddendiv")), q("nothiddendivchild"), "Verify child context positional selctor" ); - isSet( jQuery("> *:first", document.getElementById("nothiddendiv")), q("nothiddendivchild"), "Verify child context positional selctor" ); + same( jQuery("> :first", document.getElementById("nothiddendiv")).get(), q("nothiddendivchild"), "Verify child context positional selctor" ); + same( jQuery("> :eq(0)", document.getElementById("nothiddendiv")).get(), q("nothiddendivchild"), "Verify child context positional selctor" ); + same( jQuery("> *:first", document.getElementById("nothiddendiv")).get(), q("nothiddendivchild"), "Verify child context positional selctor" ); t( "Non-existant ancestors", ".fototab > .thumbnails > a", [] ); @@ -361,7 +361,7 @@ test("pseudo (:) selectors", function() { t( "Position Less Than", "p:lt(3)", ["firstp","ap","sndp"] ); t( "Is A Parent", "p:parent", ["firstp","ap","sndp","en","sap","first"] ); t( "Is Visible", "#form input:visible", [] ); - t( "Is Visible", "div:visible:not(.testrunner-toolbar):lt(2)", ["nothiddendiv", "nothiddendivchild"] ); + t( "Is Visible", "div:visible:not(#qunit-testrunner-toolbar):lt(2)", ["nothiddendiv", "nothiddendivchild"] ); t( "Is Hidden", "#form input:hidden", ["text1","text2","radio1","radio2","check1","check2","hidden1","hidden2","name","search"] ); t( "Is Hidden", "#main:hidden", ["main"] ); t( "Is Hidden", "#dl:hidden", ["dl"] ); @@ -409,6 +409,6 @@ test("pseudo (:) selectors", function() { 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( "Headers", ":header", ["header", "banner", "userAgent"] ); + t( "Headers", ":header", ["qunit-header", "qunit-banner", "qunit-userAgent"] ); t( "Has Children - :has()", "p:has(a)", ["firstp","ap","en","sap"] ); });