Running… see browser console for results
').appendTo('body') t.assert(window.someGlobalVariable) window.someGlobalVariable = false $('<' + 'script>this.someGlobalVariable = true').appendTo('body') t.assert(window.someGlobalVariable) } finally { delete window.someGlobalVariable } }, testHtmlEval: function (t) { try { window.someGlobalVariable = false $('').appendTo('body') .html('<' + 'script>window.someGlobalVariable = true') t.assert(window.someGlobalVariable) } finally { delete window.someGlobalVariable } }, testAppendTemplateNonEval: function (t) { try { window.someGlobalVariable = true $('<' + 'script type="text/template">window.someGlobalVariable = false').appendTo('body') t.assert(window.someGlobalVariable) window.someGlobalVariable = true $('<' + 'script type="text/template">this.someGlobalVariable = false').appendTo('body') t.assert(window.someGlobalVariable) } finally { delete window.someGlobalVariable } }, testHtmlTemplateNonEval: function (t) { try { window.someGlobalVariable = true $('').appendTo('body') .html('<' + 'script type="text/template">window.someGlobalVariable = false') t.assert(window.someGlobalVariable) } finally { delete window.someGlobalVariable } }, testRemove: function (t) { var newElement1 = $('') newElement1 .appendTo('body') .remove() t.assertEqual( $('#some_new_element_1').length, 0 ) // var newElement2 = $(''), errorRaised = false newElement2.appendTo('body') $('#some_new_element_2').remove() try { newElement2.remove() } catch (e) { errorRaised = true } t.assert(!errorRaised) }, testAddRemoveClass: function(t){ var el = $('#some_element').get(0) $('#some_element').addClass('green') t.assertEqual('green', el.className) $('#some_element').addClass('green') t.assertEqual('green', el.className) $('#some_element').addClass('red') t.assertEqual('green red', el.className) $('#some_element').addClass('blue red') t.assertEqual('green red blue', el.className) $('#some_element').removeClass('green blue') t.assertEqual('red', el.className) $('#some_element').attr('class', ' red green blue ') t.assertEqual(' red green blue ', el.className) // sanity check that WebKit doesn't change original input $('#some_element').removeClass('green') t.assertEqual('red blue', el.className) //addClass with function argument $('#some_element').addClass(function(idx,classes){ //test the value of "this" t.assertEqualCollection($('#some_element'), $(this)) //test original classes are being passed t.assertEqual('red blue', this.className) return "green" }) t.assertEqual('red blue green', el.className) //removeClass with function argument $('#some_element').removeClass(function(idx,classes){ //test the value of "this" t.assertEqualCollection($('#some_element'), $(this)) //test original classes are being passed t.assertEqual('red blue green', this.className) return "blue" }) t.assertEqual('red green', el.className) $('#some_element').removeClass() t.assertEqual('', el.className) }, testHasClass: function(t){ var el = $('#some_element').get(0) $('#some_element').addClass('green') t.assert($('#some_element').hasClass('green')) t.assert(!$('#some_element').hasClass('orange')) $('#some_element').addClass('orange') t.assert($('#some_element').hasClass('green')) t.assert($('#some_element').hasClass('orange')) }, testHasClassEmpty: function(t){ var z = $('#doesnotexist') t.assertEqual(0, z.size()) t.assertFalse(z.hasClass('a')) }, testToggleClass: function(t){ var el = $('#toggle_element').get(0) $('#toggle_element').toggleClass('green') t.assert($('#toggle_element').hasClass('green')) t.assert(!$('#toggle_element').hasClass('orange')) $('#toggle_element').toggleClass('orange') t.assert($('#toggle_element').hasClass('green')) t.assert($('#toggle_element').hasClass('orange')) $('#toggle_element').toggleClass('green') t.assert(!$('#toggle_element').hasClass('green')) t.assert($('#toggle_element').hasClass('orange')) $('#toggle_element').toggleClass('orange') t.assert(!$('#toggle_element').hasClass('green')) t.assert(!$('#toggle_element').hasClass('orange')) $('#toggle_element').toggleClass('orange', false) t.assert(!$('#toggle_element').hasClass('orange')) $('#toggle_element').toggleClass('orange', false) t.assert(!$('#toggle_element').hasClass('orange')) $('#toggle_element').toggleClass('orange', true) t.assert($('#toggle_element').hasClass('orange')) $('#toggle_element').toggleClass('orange', true) t.assert($('#toggle_element').hasClass('orange')) //function argument $('#toggle_element').toggleClass(function(idx,classes){ //test the value of "this" t.assertEqualCollection($('#toggle_element'), $(this)) //test original classes are being passed t.assertEqual('orange', this.className) return "brown" }) t.assert($('#toggle_element').hasClass('brown')) $('#toggle_element').toggleClass(function(idx,classes){ return "yellow" },false) t.assert(!$('#toggle_element').hasClass('yellow')) $('#toggle_element').toggleClass(function(idx,classes){ return "yellow" },true) t.assert($('#toggle_element').hasClass('yellow')) }, testIndex: function(t){ t.assertEqual($("p > span").index("#nay"), 2) t.assertEqual($("p > span").index(".yay"), 0) t.assertEqual($("span").index("span"), 0) t.assertEqual($("span").index("boo"), -1) t.assertEqual($('#index_test > *').eq(-1).index(), 1) }, testBoolAttr: function (t) { t.assertEqual($('#BooleanInput').attr('required'), true) t.assertEqual($('#BooleanInput').attr('non_existant_attr'), undefined) }, testDocumentReady: function (t) { // Check that if document is already loaded, ready() immediately executes callback var arg1, arg2, fired = false $(function (Z1) { arg1 = Z1 $(document).ready(function (Z2) { arg2 = Z2 fired = true }) }) t.assertTrue(fired) t.assertIdentical(Zepto, arg1) t.assertIdentical(Zepto, arg2) }, testSlice: function (t) { var $els = $("#slice_test div") t.assertEqual($els.slice().length, 3) t.assertEqual(typeof $els.slice().ready, 'function') t.assertEqual($els.slice(-1)[0].className, 'slice3') } }) Evidence('EventTest', { tearDown: function(){ $('*').unbind() }, testBind: function(t){ var counter = 0 $(document.body).bind('click', function(){ counter++ }) click($('#some_element').get(0)) t.assertEqual(1, counter) counter = 0 $('#some_element').bind('click mousedown', function(){ counter++ }) click($('#some_element').get(0)) mousedown($('#some_element').get(0)) t.assertEqual(3, counter) // 1 = body click, 2 = element click, 3 = element mousedown }, testBindWithObject: function(t){ var counter = 0, keyCounter = 0, el = $('#some_element'), eventData = { click: function(){ counter++ }, keypress: function(){ keyCounter++ } } $(document.body).bind(eventData) el.trigger('click') el.trigger('click') t.assertEqual(2, counter) el.trigger('keypress') t.assertEqual(1, keyCounter) $(document.body).unbind({ keypress: eventData.keypress }) el.trigger('click') t.assertEqual(3, counter) el.trigger('keypress') t.assertEqual(1, keyCounter) }, testBindContext: function(t){ var context, handler = function(){ context = $(this) } $('#empty_test').bind("click",handler) $('#empty_test').bind("mousedown",handler) click($('#empty_test').get(0)) t.assertEqualCollection($('#empty_test'), context) context = null mousedown($('#empty_test').get(0)) t.assertEqualCollection($('#empty_test'), context) }, testBindWithCustomData: function(t) { var counter = 0 var handler = function(ev,customData) { counter = customData.counter } $('#some_element').bind('custom', handler) $('#some_element').trigger('custom', { counter: 10 }) t.assertEqual(10, counter) }, testBindPreventDefault: function (t) { var link = $(''), prevented = false link .appendTo('body') .bind('click', function () { return false }) .bind('click', function (e) { prevented = e.defaultPrevented }) .trigger('click') t.assert(prevented) }, testCreateEventObject: function(t){ var e = $.Event('custom') t.assertEqual('custom', e.type) var e2 = new $.Event('custom') t.assertEqual('custom', e2.type) var e3 = $.Event('custom', {customKey: 'customValue'}) t.assertEqual('custom', e3.type) t.assertEqual('customValue', e3.customKey) var e4 = $.Event('custom', {bubbles: false}) t.assertFalse(e4.bubbles) }, testTriggerEventObject: function(t){ var counter = 0, customEventKey = 0 var handler = function(ev,customData) { counter = customData.counter customEventKey = ev.customKey } var customEventObject = $.Event('custom', { customKey: 20 }) $('#some_element').bind('custom', handler) $('#some_element').trigger(customEventObject, { counter: 10 }) t.assertEqual(10, counter) t.assertEqual(20, customEventKey) }, testTriggerEventCancelled: function(t){ $('#some_element').bind('custom', function(e){ e.preventDefault() }) var event = $.Event('custom') t.assert(!event.defaultPrevented) $('#some_element').trigger(event) t.assert(event.defaultPrevented) }, testTriggerHandler: function(t){ t.assertUndefined($('doesnotexist').triggerHandler('submit')) var form = $('#trigger_handler form').get(0) $('#trigger_handler').bind('submit', function(e) { t.fail("triggerHandler shouldn't bubble") }) var executed = [] $(form).bind('submit', function(e) { executed.push("1") t.assertEqual(form, e.target) return 1 }) $(form).bind('submit', function(e) { executed.push("2") t.assertEqual(form, e.target) e.stopImmediatePropagation() return 2 }) $(form).bind('submit', function(e) { t.fail("triggerHandler shouldn't continue after stopImmediatePropagation") }) t.assertIdentical(2, $(form).triggerHandler('submit')) t.assertEqual('1 2', executed.join(' ')) }, testUnbind: function(t){ var counter = 0, el = $('#another_element').get(0) var handler = function(){ counter++ } $('#another_element').bind('click mousedown', handler) click(el) mousedown(el) t.assertEqual(2, counter) $('#another_element').unbind('click', handler) click(el) t.assertEqual(2, counter) mousedown(el) t.assertEqual(3, counter) $('#another_element').unbind('mousedown') mousedown(el) t.assertEqual(3, counter) $('#another_element').bind('click mousedown', handler) click(el) mousedown(el) t.assertEqual(5, counter) $('#another_element').unbind() click(el) mousedown(el) t.assertEqual(5, counter) }, testUnbindWithNamespace: function(t){ var count = 0 $("#namespace_test").bind("click.bar", function() { count++ }) $("#namespace_test").bind("click.foo", function() { count++ }) $("#namespace_test").bind("mousedown.foo.bar", function() { count++ }) $("#namespace_test").trigger("click") t.assertEqual(2, count) $("#namespace_test").unbind("click.baz") $("#namespace_test").trigger("click") t.assertEqual(4, count) $("#namespace_test").unbind("click.foo") $("#namespace_test").trigger("click") t.assertEqual(5, count) $("#namespace_test").trigger("mousedown") t.assertEqual(6, count) $("#namespace_test").unbind(".bar") $("#namespace_test").trigger("click").trigger("mousedown") t.assertEqual(6, count) }, testDelegate: function(t){ var counter = 0, pcounter = 0 $(document.body).delegate('#some_element', 'click', function(){ counter++ }) $('p').delegate('span.yay', 'click', function(){ counter++ }) $(document.body).delegate('p', 'click', function(){ pcounter++ }) click($('#some_element').get(0)) t.assertEqual(1, counter) click($('span.yay').get(0)) t.assertEqual(2, counter) click($('span.nay').get(0)) t.assertEqual(2, counter) click($('p').get(0)) t.assertEqual(3, pcounter) }, testDelegateBlurFocus: function(t) { var counter = 0 $('#delegate_blur_test').delegate('input', 'blur', function(){ counter++ }) $('#delegate_blur_test').find('input').focus() $('#delegate_blur_test').find('input').blur() t.assertEqual(1, counter) $('#delegate_blur_test').find('input').focus() $('#delegate_blur_test').find('input').blur() t.assertEqual(2, counter) $('#delegate_focus_test').delegate('input', 'focus', function(){ counter++ }) $('#delegate_focus_test').find('input').focus() $('#delegate_focus_test').find('input').blur() t.assertEqual(3, counter) $('#delegate_focus_test').find('input').focus() $('#delegate_focus_test').find('input').blur() t.assertEqual(4, counter) }, testDelegateReturnFalse: function(t){ $(document.body).delegate('#some_element', 'click', function(){ return false }) var event = $.Event('click') $('#some_element').trigger(event) t.assertTrue(event.defaultPrevented) }, testDelegateWithObject: function(t){ var counter = 0, received, el = $('p').first(), eventData = { click: function(){ counter++ }, custom: function(e, data){ received = data } } $(document.body).delegate('p', eventData) el.trigger('click') t.assertEqual(1, counter) el.trigger('click') t.assertEqual(2, counter) el.trigger('custom', 'boo') t.assertEqual('boo', received) $(document.body).undelegate('p', {custom: eventData.custom}) el.trigger('click') t.assertEqual(3, counter) el.trigger('custom', 'bam') t.assertEqual('boo', received) }, testDelegateWithCustomData: function(t) { var received $(document).delegate('#some_element', 'custom', function(e, data, more){ received = data + more }) $('p').delegate('span.yay', 'custom', function(e, data){ received = data }) $(document).delegate('p', 'custom', function(e, data){ received = data }) $('#some_element').trigger('custom', 'one') t.assertEqual('oneundefined', received) $('#some_element').trigger('custom', ['one', 'two']) t.assertEqual('onetwo', received) $('span.yay').trigger('custom', 'boom') t.assertEqual('boom', received) $('span.yay').trigger('custom', ['bam', 'boom']) t.assertEqual('bam', received) $('span.nay').trigger('custom', 'noes') t.assertEqual('noes', received) $('p').first().trigger('custom', 'para') t.assertEqual('para', received) }, testDelegateEventProxy: function(t){ var content $('div#delegate_test').delegate('span.second-level', 'click', function(e){ t.assertEqual($('span.second-level').get(0), this) t.assertEqual($('span.second-level').get(0), e.currentTarget) t.refuteEqual($('span.second-level').get(0), e.originalEvent.currentTarget) t.assertEqual($('div#delegate_test').get(0), e.liveFired) content = $(this).html() }) click($('span.second-level').get(0)) t.assertEqual('hi', content) var fired = false if (window.location.hash.length) window.location.hash = '' $('div#delegate_test').html('') $('div#delegate_test').delegate('a', 'click', function(e){ e.preventDefault() fired = true }) click($('div#delegate_test a').get(0)) t.assert(fired) t.refuteEqual('#foo', window.location.hash) fired = false if (window.location.hash.length) window.location.hash = '' $('div#delegate_test').html('') $('div#delegate_test a').trigger('click') t.assert(fired) t.refuteEqual('#bar', window.location.hash) }, testUndelegate: function(t){ var count = 0, handler = function() { count++ } $("#undelegate_test").bind("click mousedown", handler) $("#undelegate_test").delegate("span.first-level", "click mousedown", handler) $("#undelegate_test").delegate("span.second-level", "click mousedown", handler) $("#undelegate_test span.second-level").trigger("click") t.assertEqual(3, count) $("#undelegate_test").undelegate("span.second-level", "click", handler) $("#undelegate_test span.second-level").trigger("click") t.assertEqual(5, count) $("#undelegate_test").undelegate("span.first-level") $("#undelegate_test span.second-level").trigger("click") t.assertEqual(6, count) $("#undelegate_test").unbind("click") $("#undelegate_test span.second-level").trigger("click") t.assertEqual(6, count) $("#undelegate_test span.second-level").trigger("mousedown") t.assertEqual(8, count) $("#undelegate_test").undelegate() $("#undelegate_test span.second-level").trigger("mousedown") t.assertEqual(8, count) }, testLive: function(t){ var counter = 0 $('p.live').live('click', function(){ counter++ }) $(document.body).append('') $(document.body).append('') click($('#live_1').get(0)) click($('#live_2').get(0)) $('p.live').remove() $(document.body).append('') $('p.live').live('click', function(){ t.assertEqual(document.getElementById('live_this_test'), this) }) click($('#live_this_test').get(0)) t.assertEqual(3, counter) }, testDie: function(t){ var count = 0, handler = function() { count++ } $("#another_element").live("click mousedown", handler) $("#another_element").trigger("click") t.assertEqual(1, count) $("#another_element").die("click", handler) $("#another_element").trigger("click") t.assertEqual(1, count) $("#another_element").trigger("mousedown") t.assertEqual(2, count) $("#another_element").die() $("#another_element").trigger("mousedown") t.assertEqual(2, count) }, testOn: function(t){ var el = $('#some_element'), node = el.get(0), ret, bindTriggered = 0, delegateTriggered = 0 ret = el.on('click', function(e){ bindTriggered++ t.assertIdentical(node, this) }) .on({ click: function(){bindTriggered++} }) t.assertIdentical(el, ret) ret = $(document.body).on('click', 'div', function(e){ delegateTriggered++ t.assertIdentical(node, this) }) .on({ click: function(){delegateTriggered++} }, '*[id^=some]') t.assertIdentical(document.body, ret.get(0)) click(node) t.assertEqual(2, bindTriggered, "bind handlers") t.assertEqual(2, delegateTriggered, "delegate handlers") }, testOff: function(t){ var el = $('#some_element'), bindTriggered = 0, delegateTriggered = 0, handler = function(){ bindTriggered++ } el.bind('click', handler).bind('click', function(){ bindTriggered++ }) el.live('click', function(){ delegateTriggered++ }) click(el.get(0)) t.assertEqual(2, bindTriggered, "bind handlers before unbind") t.assertEqual(1, delegateTriggered, "delegate handlers before unbind") el.off('click', handler) $(document.body).off('click', '#some_element') click(el.get(0)) t.assertEqual(3, bindTriggered, "bind handlers") t.assertEqual(1, delegateTriggered, "delegate handlers") }, testOne: function(t){ var counter = 0, context, received, el = $('#some_element') $(document.body).one('click', function(e, data, more){ context = this counter++ received = data + more t.assertIn('preventDefault', e) return false }) var evt = $.Event('click') el.trigger(evt, ['one', 'two']) t.assertEqual(1, counter) t.assertEqual('onetwo', received) t.assertIdentical(document.body, context) t.assertTrue(evt.defaultPrevented) el.trigger('click') t.assertEqual(1, counter, "the event handler didn't unbind itself") }, testOneWithObject: function(t){ var counter = 0, el = $('#some_element') $(document.body).one({ click: function() { counter++ }, custom: function() { counter-- } }) el.trigger('click') t.assertEqual(1, counter) el.trigger('click') t.assertEqual(1, counter) el.trigger('custom') t.assertEqual(0, counter) el.trigger('custom') t.assertEqual(0, counter) }, testDOMEventWrappers: function(t){ var events = ('blur focus focusin focusout load resize scroll unload click dblclick '+ 'mousedown mouseup mousemove mouseover mouseout '+ 'change select keydown keypress keyup error').split(' ') var el = $('#another_element'), count = 0 events.forEach(function(event){ t.assertTrue($.isFunction(el[event]), 'event type: ' + event) }) el.click(function(){ count++ }) click(el.get(0)) t.assertEqual(1, count) }, testCustomEvents: function (t) { var el = $(document.body) el.bind('custom', function(evt, a, b) { t.assertEqual(a, 1) t.assertEqual(b, 2) el.unbind() }) el.trigger('custom', [1, 2]) el.bind('custom', function(evt, a) { t.assertEqual(a, 1) el.unbind() }) el.trigger('custom', 1) var eventData = {z: 1} el.bind('custom', function(evt, a) { t.assertEqual(a, eventData) el.unbind() }) el.trigger('custom', eventData) }, testSpecialEvent: function (t) { var clickEvent = $.Event('click'), mouseDownEvent = $.Event('mousedown'), mouseUpEvent = $.Event('mouseup'), mouseMoveEvent = $.Event('mousemove'), submitEvent = $.Event('submit') t.assertEqual(MouseEvent, clickEvent.constructor) t.assertEqual(MouseEvent, mouseDownEvent.constructor) t.assertEqual(MouseEvent, mouseUpEvent.constructor) t.assertEqual(MouseEvent, mouseMoveEvent.constructor) t.assertEqual(Event, submitEvent.constructor) } }) })()