From 928808f85486eee7cd47562a98f1c98fc39cd479 Mon Sep 17 00:00:00 2001 From: jlukic Date: Mon, 21 Apr 2014 23:17:36 -0400 Subject: [PATCH] Revert to jasmine 1.x, should solve build issues --- package.json | 40 +- test/helpers/jasmine-jquery.js | 713 ++++++++++++++------------------- test/helpers/jasmine-sinon.js | 327 ++------------- 3 files changed, 362 insertions(+), 718 deletions(-) diff --git a/package.json b/package.json index bea6cc983..d7bd2112e 100755 --- a/package.json +++ b/package.json @@ -18,36 +18,32 @@ }, "devDependencies": { "docpad": "x.x.x", - "docpad-plugin-eco": "x.x.x", - "docpad-plugin-ghpages": "x.x.x", - "docpad-plugin-partials": "x.x.x", + "docpad-plugin-eco": "~2.0.3", + "docpad-plugin-ghpages": "~2.4.3", + "docpad-plugin-partials": "~2.9.0", "grunt": "x.x.x", - "grunt-contrib-watch": "x.x.x", + "grunt-autoprefixer": "x.x.x", + "grunt-bower-task": "x.x.x", + "grunt-clear": "x.x.x", "grunt-contrib-clean": "x.x.x", - "grunt-contrib-uglify": "x.x.x", + "grunt-contrib-compress": "x.x.x", + "grunt-contrib-concat": "x.x.x", + "grunt-contrib-copy": "x.x.x", "grunt-contrib-cssmin": "x.x.x", "grunt-contrib-less": "x.x.x", - "grunt-contrib-copy": "x.x.x", - "grunt-docco": "x.x.x", - "grunt-bower-task": "x.x.x", + "grunt-contrib-uglify": "x.x.x", + "grunt-contrib-watch": "x.x.x", "grunt-css": "x.x.x", - "grunt-contrib-compress": "x.x.x", - "grunt-contrib-concat": "x.x.x", - "grunt-replace": "x.x.x", - "grunt-docco-multi": "x.x.x", "grunt-cssjanus": "x.x.x", - "karma": "x.x.x", + "grunt-docco": "x.x.x", + "grunt-docco-multi": "x.x.x", "grunt-karma": "x.x.x", - "karma-spec-reporter": "x.x.x", - "karma-phantomjs-launcher": "x.x.x", - "karma-jasmine": "x.x.x", - "grunt-clear": "x.x.x", - "grunt-autoprefixer": "x.x.x", "grunt-karma-coveralls": "x.x.x", + "grunt-replace": "x.x.x", + "karma": "x.x.x", "karma-coverage": "~0.x.x", - "docpad-plugin-partials": "x.x.x", - "docpad-plugin-ghpages": "x.x.x", - "docpad-plugin-eco": "x.x.x", - "docpad": "x.x.x" + "karma-jasmine": "~0.1.0", + "karma-phantomjs-launcher": "x.x.x", + "karma-spec-reporter": "x.x.x" } } diff --git a/test/helpers/jasmine-jquery.js b/test/helpers/jasmine-jquery.js index c85a8e8b1..14539ea4d 100755 --- a/test/helpers/jasmine-jquery.js +++ b/test/helpers/jasmine-jquery.js @@ -1,11 +1,11 @@ /*! Jasmine-jQuery: a set of jQuery helpers for Jasmine tests. -Version 2.1.0 +Version 1.5.91 https://github.com/velesin/jasmine-jquery -Copyright (c) 2010-2014 Wojciech Zawistowski, Travis Jeffery +Copyright (c) 2010-2013 Wojciech Zawistowski, Travis Jeffery Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the @@ -27,7 +27,7 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+function (window, jasmine, $) { "use strict"; ++function (jasmine, $) { "use strict"; jasmine.spiedEventsKey = function (selector, eventName) { return [$(selector).selector, eventName].toString() @@ -104,8 +104,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. jasmine.Fixtures.prototype.addToContainer_ = function (html){ var container = $(document.body).find('#'+this.containerId).append(html) - - if (!container.length) { + if(!container.length){ this.createContainer_(html) } } @@ -120,36 +119,17 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. jasmine.Fixtures.prototype.loadFixtureIntoCache_ = function (relativeUrl) { var self = this , url = this.makeFixtureUrl_(relativeUrl) - , htmlText = '' , request = $.ajax({ async: false, // must be synchronous to guarantee that no tests are run before fixture is loaded cache: false, url: url, success: function (data, status, $xhr) { - htmlText = $xhr.responseText + self.fixturesCache_[relativeUrl] = $xhr.responseText + }, + error: function (jqXHR, status, errorThrown) { + throw new Error('Fixture could not be loaded: ' + url + ' (status: ' + status + ', message: ' + errorThrown.message + ')') } - }).fail(function ($xhr, status, err) { - throw new Error('Fixture could not be loaded: ' + url + ' (status: ' + status + ', message: ' + err.message + ')') - }) - - var scripts = $($.parseHTML(htmlText, true)).find('script[src]') || []; - - scripts.each(function(){ - $.ajax({ - async: false, // must be synchronous to guarantee that no tests are run before fixture is loaded - cache: false, - dataType: 'script', - url: $(this).attr('src'), - success: function (data, status, $xhr) { - htmlText += '' - }, - error: function ($xhr, status, err) { - throw new Error('Script could not be loaded: ' + scriptSrc + ' (status: ' + status + ', message: ' + err.message + ')') - } - }); }) - - self.fixturesCache_[relativeUrl] = htmlText; } jasmine.Fixtures.prototype.makeFixtureUrl_ = function (relativeUrl){ @@ -255,8 +235,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. success: function (data) { self.fixturesCache_[relativeUrl] = data }, - error: function ($xhr, status, err) { - throw new Error('JSONFixture could not be loaded: ' + url + ' (status: ' + status + ', message: ' + err.message + ')') + error: function (jqXHR, status, errorThrown) { + throw new Error('JSONFixture could not be loaded: ' + url + ' (status: ' + status + ', message: ' + errorThrown.message + ')') } }) } @@ -265,548 +245,461 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. return this[methodName].apply(this, passedArguments) } - jasmine.jQuery = function () {} + jasmine.JQuery = function () {} - jasmine.jQuery.browserTagCaseIndependentHtml = function (html) { + jasmine.JQuery.browserTagCaseIndependentHtml = function (html) { return $('
').append(html).html() } - jasmine.jQuery.elementToString = function (element) { - return $(element).map(function () { return this.outerHTML; }).toArray().join(', ') - } + jasmine.JQuery.elementToString = function (element) { + var domEl = $(element).get(0) - var data = { - spiedEvents: {} - , handlers: [] + if (domEl === undefined || domEl.cloneNode) + return $('
').append($(element).clone()).html() + else + return element.toString() } - jasmine.jQuery.events = { - spyOn: function (selector, eventName) { - var handler = function (e) { - data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)] = jasmine.util.argsToArray(arguments) - } + jasmine.JQuery.matchersClass = {} - $(selector).on(eventName, handler) - data.handlers.push(handler) + !function (namespace) { + var data = { + spiedEvents: {} + , handlers: [] + } - return { - selector: selector, - eventName: eventName, - handler: handler, - reset: function (){ - delete data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)] + namespace.events = { + spyOn: function (selector, eventName) { + var handler = function (e) { + data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)] = jasmine.util.argsToArray(arguments) } - } - }, - args: function (selector, eventName) { - var actualArgs = data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)] + $(selector).on(eventName, handler) + data.handlers.push(handler) - if (!actualArgs) { - throw "There is no spy for " + eventName + " on " + selector.toString() + ". Make sure to create a spy using spyOnEvent." - } + return { + selector: selector, + eventName: eventName, + handler: handler, + reset: function (){ + delete data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)] + } + } + }, - return actualArgs - }, + args: function (selector, eventName) { + var actualArgs = data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)] - wasTriggered: function (selector, eventName) { - return !!(data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)]) - }, + if (!actualArgs) { + throw "There is no spy for " + eventName + " on " + selector.toString() + ". Make sure to create a spy using spyOnEvent." + } - wasTriggeredWith: function (selector, eventName, expectedArgs, util, customEqualityTesters) { - var actualArgs = jasmine.jQuery.events.args(selector, eventName).slice(1) + return actualArgs + }, - if (Object.prototype.toString.call(expectedArgs) !== '[object Array]') - actualArgs = actualArgs[0] + wasTriggered: function (selector, eventName) { + return !!(data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)]) + }, - return util.equals(expectedArgs, actualArgs, customEqualityTesters) - }, + wasTriggeredWith: function (selector, eventName, expectedArgs, env) { + var actualArgs = jasmine.JQuery.events.args(selector, eventName).slice(1) + if (Object.prototype.toString.call(expectedArgs) !== '[object Array]') { + actualArgs = actualArgs[0] + } + return env.equals_(expectedArgs, actualArgs) + }, - wasPrevented: function (selector, eventName) { - var args = data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)] - , e = args ? args[0] : undefined + wasPrevented: function (selector, eventName) { + var args = data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)] + , e = args ? args[0] : undefined - return e && e.isDefaultPrevented() - }, + return e && e.isDefaultPrevented() + }, - wasStopped: function (selector, eventName) { - var args = data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)] - , e = args ? args[0] : undefined - return e && e.isPropagationStopped() - }, + wasStopped: function (selector, eventName) { + var args = data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)] + , e = args ? args[0] : undefined + return e && e.isPropagationStopped() + }, - cleanUp: function () { - data.spiedEvents = {} - data.handlers = [] + cleanUp: function () { + data.spiedEvents = {} + data.handlers = [] + } } - } - - var hasProperty = function (actualValue, expectedValue) { - if (expectedValue === undefined) - return actualValue !== undefined - - return actualValue === expectedValue - } + }(jasmine.JQuery) - beforeEach(function () { - jasmine.addMatchers({ - toHaveClass: function () { - return { - compare: function (actual, className) { - return { pass: $(actual).hasClass(className) } - } - } + !function (){ + var jQueryMatchers = { + toHaveClass: function (className) { + return this.actual.hasClass(className) }, - toHaveCss: function () { - return { - compare: function (actual, css) { - for (var prop in css){ - var value = css[prop] - // see issue #147 on gh - ;if (value === 'auto' && $(actual).get(0).style[prop] === 'auto') continue - if ($(actual).css(prop) !== value) return { pass: false } - } - return { pass: true } - } + toHaveCss: function (css){ + for (var prop in css){ + var value = css[prop] + // see issue #147 on gh + ;if (value === 'auto' && this.actual.get(0).style[prop] === 'auto') continue + if (this.actual.css(prop) !== value) return false } + return true }, toBeVisible: function () { - return { - compare: function (actual) { - return { pass: $(actual).is(':visible') } - } - } + return this.actual.is(':visible') }, toBeHidden: function () { - return { - compare: function (actual) { - return { pass: $(actual).is(':hidden') } - } - } + return this.actual.is(':hidden') }, toBeSelected: function () { - return { - compare: function (actual) { - return { pass: $(actual).is(':selected') } - } - } + return this.actual.is(':selected') }, toBeChecked: function () { - return { - compare: function (actual) { - return { pass: $(actual).is(':checked') } - } - } + return this.actual.is(':checked') }, toBeEmpty: function () { - return { - compare: function (actual) { - return { pass: $(actual).is(':empty') } - } - } - }, - - toBeInDOM: function () { - return { - compare: function (actual) { - return { pass: $.contains(document.documentElement, $(actual)[0]) } - } - } + return this.actual.is(':empty') }, toExist: function () { - return { - compare: function (actual) { - return { pass: $(actual).length } - } - } + return this.actual.length }, - toHaveLength: function () { - return { - compare: function (actual, length) { - return { pass: $(actual).length === length } - } - } + toHaveLength: function (length) { + return this.actual.length === length }, - toHaveAttr: function () { - return { - compare: function (actual, attributeName, expectedAttributeValue) { - return { pass: hasProperty($(actual).attr(attributeName), expectedAttributeValue) } - } - } + toHaveAttr: function (attributeName, expectedAttributeValue) { + return hasProperty(this.actual.attr(attributeName), expectedAttributeValue) }, - toHaveProp: function () { - return { - compare: function (actual, propertyName, expectedPropertyValue) { - return { pass: hasProperty($(actual).prop(propertyName), expectedPropertyValue) } - } - } + toHaveProp: function (propertyName, expectedPropertyValue) { + return hasProperty(this.actual.prop(propertyName), expectedPropertyValue) }, - toHaveId: function () { - return { - compare: function (actual, id) { - return { pass: $(actual).attr('id') == id } - } - } + toHaveId: function (id) { + return this.actual.attr('id') == id }, - toHaveHtml: function () { - return { - compare: function (actual, html) { - return { pass: $(actual).html() == jasmine.jQuery.browserTagCaseIndependentHtml(html) } - } - } + toHaveHtml: function (html) { + return this.actual.html() == jasmine.JQuery.browserTagCaseIndependentHtml(html) }, - toContainHtml: function () { - return { - compare: function (actual, html) { - var actualHtml = $(actual).html() - , expectedHtml = jasmine.jQuery.browserTagCaseIndependentHtml(html) + toContainHtml: function (html){ + var actualHtml = this.actual.html() + , expectedHtml = jasmine.JQuery.browserTagCaseIndependentHtml(html) - return { pass: (actualHtml.indexOf(expectedHtml) >= 0) } - } - } + return (actualHtml.indexOf(expectedHtml) >= 0) }, - toHaveText: function () { - return { - compare: function (actual, text) { - var trimmedText = $.trim($(actual).text()) + toHaveText: function (text) { + var trimmedText = $.trim(this.actual.text()) - if (text && $.isFunction(text.test)) { - return { pass: text.test(trimmedText) } - } else { - return { pass: trimmedText == text } - } - } + if (text && $.isFunction(text.test)) { + return text.test(trimmedText) + } else { + return trimmedText == text } }, - toContainText: function () { - return { - compare: function (actual, text) { - var trimmedText = $.trim($(actual).text()) + toContainText: function (text) { + var trimmedText = $.trim(this.actual.text()) - if (text && $.isFunction(text.test)) { - return { pass: text.test(trimmedText) } - } else { - return { pass: trimmedText.indexOf(text) != -1 } - } - } + if (text && $.isFunction(text.test)) { + return text.test(trimmedText) + } else { + return trimmedText.indexOf(text) != -1 } }, - toHaveValue: function () { - return { - compare: function (actual, value) { - return { pass: $(actual).val() === value } - } - } + toHaveValue: function (value) { + return this.actual.val() === value }, - toHaveData: function () { - return { - compare: function (actual, key, expectedValue) { - return { pass: hasProperty($(actual).data(key), expectedValue) } - } - } + toHaveData: function (key, expectedValue) { + return hasProperty(this.actual.data(key), expectedValue) }, - toContainElement: function () { - return { - compare: function (actual, selector) { - if (window.debug) debugger - return { pass: $(actual).find(selector).length } - } - } + toBe: function (selector) { + return this.actual.is(selector) }, - toBeMatchedBy: function () { - return { - compare: function (actual, selector) { - return { pass: $(actual).filter(selector).length } - } - } + toContain: function (selector) { + return this.actual.find(selector).length }, - toBeDisabled: function () { - return { - compare: function (actual, selector) { - return { pass: $(actual).is(':disabled') } - } - } + toBeMatchedBy: function (selector) { + return this.actual.filter(selector).length + }, + + toBeDisabled: function (selector){ + return this.actual.is(':disabled') }, toBeFocused: function (selector) { - return { - compare: function (actual, selector) { - return { pass: $(actual)[0] === $(actual)[0].ownerDocument.activeElement } - } - } + return this.actual[0] === this.actual[0].ownerDocument.activeElement }, - toHandle: function () { - return { - compare: function (actual, event) { - var events = $._data($(actual).get(0), "events") + toHandle: function (event) { + var events = $._data(this.actual.get(0), "events") - if (!events || !event || typeof event !== "string") { - return { pass: false } - } + if(!events || !event || typeof event !== "string") { + return false + } - var namespaces = event.split(".") - , eventType = namespaces.shift() - , sortedNamespaces = namespaces.slice(0).sort() - , namespaceRegExp = new RegExp("(^|\\.)" + sortedNamespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") + var namespaces = event.split(".") + , eventType = namespaces.shift() + , sortedNamespaces = namespaces.slice(0).sort() + , namespaceRegExp = new RegExp("(^|\\.)" + sortedNamespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") - if (events[eventType] && namespaces.length) { - for (var i = 0; i < events[eventType].length; i++) { - var namespace = events[eventType][i].namespace + if(events[eventType] && namespaces.length) { + for(var i = 0; i < events[eventType].length; i++) { + var namespace = events[eventType][i].namespace - if (namespaceRegExp.test(namespace)) - return { pass: true } - } - } else { - return { pass: (events[eventType] && events[eventType].length > 0) } + if(namespaceRegExp.test(namespace)) { + return true } - - return { pass: false } } + } else { + return events[eventType] && events[eventType].length > 0 } }, - toHandleWith: function () { - return { - compare: function (actual, eventName, eventHandler) { - var normalizedEventName = eventName.split('.')[0] - , stack = $._data($(actual).get(0), "events")[normalizedEventName] + toHandleWith: function (eventName, eventHandler) { + var normalizedEventName = eventName.split('.')[0] + , stack = $._data(this.actual.get(0), "events")[normalizedEventName] - for (var i = 0; i < stack.length; i++) { - if (stack[i].handler == eventHandler) return { pass: true } - } - - return { pass: false } - } + for (var i = 0; i < stack.length; i++) { + if (stack[i].handler == eventHandler) return true } - }, - - toHaveBeenTriggeredOn: function () { - return { - compare: function (actual, selector) { - var result = { pass: jasmine.jQuery.events.wasTriggered(selector, actual) } - result.message = result.pass ? - "Expected event " + $(actual) + " not to have been triggered on " + selector : - "Expected event " + $(actual) + " to have been triggered on " + selector + return false + } + } - return result; - } - } - }, + var hasProperty = function (actualValue, expectedValue) { + if (expectedValue === undefined) return actualValue !== undefined - toHaveBeenTriggered: function (){ - return { - compare: function (actual) { - var eventName = actual.eventName - , selector = actual.selector - , result = { pass: jasmine.jQuery.events.wasTriggered(selector, eventName) } + return actualValue == expectedValue + } - result.message = result.pass ? - "Expected event " + eventName + " not to have been triggered on " + selector : - "Expected event " + eventName + " to have been triggered on " + selector + var bindMatcher = function (methodName) { + var builtInMatcher = jasmine.Matchers.prototype[methodName] - return result - } - } - }, + jasmine.JQuery.matchersClass[methodName] = function () { + if (this.actual + && (this.actual instanceof $ + || jasmine.isDomNode(this.actual))) { + this.actual = $(this.actual) + var result = jQueryMatchers[methodName].apply(this, arguments) + , element - toHaveBeenTriggeredOnAndWith: function (j$, customEqualityTesters) { - return { - compare: function (actual, selector, expectedArgs) { - var wasTriggered = jasmine.jQuery.events.wasTriggered(selector, actual) - , result = { pass: wasTriggered && jasmine.jQuery.events.wasTriggeredWith(selector, actual, expectedArgs, j$, customEqualityTesters) } - - if (wasTriggered) { - var actualArgs = jasmine.jQuery.events.args(selector, actual, expectedArgs)[1] - result.message = result.pass ? - "Expected event " + actual + " not to have been triggered with " + jasmine.pp(expectedArgs) + " but it was triggered with " + jasmine.pp(actualArgs) : - "Expected event " + actual + " to have been triggered with " + jasmine.pp(expectedArgs) + " but it was triggered with " + jasmine.pp(actualArgs) - - } else { - // todo check on this - result.message = result.pass ? - "Expected event " + actual + " not to have been triggered on " + selector : - "Expected event " + actual + " to have been triggered on " + selector - } + if (this.actual.get && (element = this.actual.get()[0]) && !$.isWindow(element) && element.tagName !== "HTML") + this.actual = jasmine.JQuery.elementToString(this.actual) return result - } - } - }, - - toHaveBeenPreventedOn: function () { - return { - compare: function (actual, selector) { - var result = { pass: jasmine.jQuery.events.wasPrevented(selector, actual) } + } - result.message = result.pass ? - "Expected event " + actual + " not to have been prevented on " + selector : - "Expected event " + actual + " to have been prevented on " + selector + if (builtInMatcher) { + return builtInMatcher.apply(this, arguments) + } - return result - } - } - }, + return false + } + } - toHaveBeenPrevented: function () { - return { - compare: function (actual) { - var eventName = actual.eventName - , selector = actual.selector - , result = { pass: jasmine.jQuery.events.wasPrevented(selector, eventName) } + for(var methodName in jQueryMatchers) { + bindMatcher(methodName) + } + }() - result.message = result.pass ? - "Expected event " + eventName + " not to have been prevented on " + selector : - "Expected event " + eventName + " to have been prevented on " + selector + beforeEach(function () { + this.addMatchers(jasmine.JQuery.matchersClass) + this.addMatchers({ + toHaveBeenTriggeredOn: function (selector) { + this.message = function () { + return [ + "Expected event " + this.actual + " to have been triggered on " + selector, + "Expected event " + this.actual + " not to have been triggered on " + selector + ] + } + return jasmine.JQuery.events.wasTriggered(selector, this.actual) + } + }) + this.addMatchers({ + toHaveBeenTriggered: function (){ + var eventName = this.actual.eventName + , selector = this.actual.selector - return result - } + this.message = function () { + return [ + "Expected event " + eventName + " to have been triggered on " + selector, + "Expected event " + eventName + " not to have been triggered on " + selector + ] } - }, - - toHaveBeenStoppedOn: function () { - return { - compare: function (actual, selector) { - var result = { pass: jasmine.jQuery.events.wasStopped(selector, actual) } - result.message = result.pass ? - "Expected event " + actual + " not to have been stopped on " + selector : - "Expected event " + actual + " to have been stopped on " + selector - - return result; - } + return jasmine.JQuery.events.wasTriggered(selector, eventName) + } + }) + this.addMatchers({ + toHaveBeenTriggeredOnAndWith: function () { + var selector = arguments[0] + , expectedArgs = arguments[1] + , wasTriggered = jasmine.JQuery.events.wasTriggered(selector, this.actual) + + this.message = function () { + if (wasTriggered) { + var actualArgs = jasmine.JQuery.events.args(selector, this.actual, expectedArgs)[1] + return [ + "Expected event " + this.actual + " to have been triggered with " + jasmine.pp(expectedArgs) + " but it was triggered with " + jasmine.pp(actualArgs), + "Expected event " + this.actual + " not to have been triggered with " + jasmine.pp(expectedArgs) + " but it was triggered with " + jasmine.pp(actualArgs) + ] + } else { + return [ + "Expected event " + this.actual + " to have been triggered on " + selector, + "Expected event " + this.actual + " not to have been triggered on " + selector + ] + } + } + + return wasTriggered && jasmine.JQuery.events.wasTriggeredWith(selector, this.actual, expectedArgs, this.env) + } + }) + this.addMatchers({ + toHaveBeenPreventedOn: function (selector) { + this.message = function () { + return [ + "Expected event " + this.actual + " to have been prevented on " + selector, + "Expected event " + this.actual + " not to have been prevented on " + selector + ] } - }, - - toHaveBeenStopped: function () { - return { - compare: function (actual) { - var eventName = actual.eventName - , selector = actual.selector - , result = { pass: jasmine.jQuery.events.wasStopped(selector, eventName) } - - result.message = result.pass ? - "Expected event " + eventName + " not to have been stopped on " + selector : - "Expected event " + eventName + " to have been stopped on " + selector - return result - } - } + return jasmine.JQuery.events.wasPrevented(selector, this.actual) } }) + this.addMatchers({ + toHaveBeenPrevented: function () { + var eventName = this.actual.eventName + , selector = this.actual.selector + this.message = function () { + return [ + "Expected event " + eventName + " to have been prevented on " + selector, + "Expected event " + eventName + " not to have been prevented on " + selector + ] + } - jasmine.getEnv().addCustomEqualityTester(function(a, b) { - if (a && b) { - if (a instanceof $ || jasmine.isDomNode(a)) { - var $a = $(a) - - if (b instanceof $) - return $a.length == b.length && a.is(b) - - return $a.is(b); - } - - if (b instanceof $ || jasmine.isDomNode(b)) { - var $b = $(b) - - if (a instanceof jQuery) - return a.length == $b.length && $b.is(a) + return jasmine.JQuery.events.wasPrevented(selector, eventName) + } + }) + this.addMatchers({ + toHaveBeenStoppedOn: function (selector) { + this.message = function () { + return [ + "Expected event " + this.actual + " to have been stopped on " + selector, + "Expected event " + this.actual + " not to have been stopped on " + selector + ] + } - return $(b).is(a); - } - } + return jasmine.JQuery.events.wasStopped(selector, this.actual) + } }) + this.addMatchers({ + toHaveBeenStopped: function () { + var eventName = this.actual.eventName + , selector = this.actual.selector + this.message = function () { + return [ + "Expected event " + eventName + " to have been stopped on " + selector, + "Expected event " + eventName + " not to have been stopped on " + selector + ] + } + return jasmine.JQuery.events.wasStopped(selector, eventName) + } + }) + jasmine.getEnv().addEqualityTester(function (a, b) { + if(a instanceof jQuery && b instanceof jQuery) { + if(a.size() != b.size()) { + return jasmine.undefined + } + else if(a.is(b)) { + return true + } + } - jasmine.getEnv().addCustomEqualityTester(function (a, b) { - if (a instanceof jQuery && b instanceof jQuery && a.size() == b.size()) - return a.is(b) + return jasmine.undefined }) }) afterEach(function () { jasmine.getFixtures().cleanUp() jasmine.getStyleFixtures().cleanUp() - jasmine.jQuery.events.cleanUp() + jasmine.JQuery.events.cleanUp() }) +}(window.jasmine, window.jQuery) + ++function (jasmine, global) { "use strict"; - window.readFixtures = function () { + global.readFixtures = function () { return jasmine.getFixtures().proxyCallTo_('read', arguments) } - window.preloadFixtures = function () { + global.preloadFixtures = function () { jasmine.getFixtures().proxyCallTo_('preload', arguments) } - window.loadFixtures = function () { + global.loadFixtures = function () { jasmine.getFixtures().proxyCallTo_('load', arguments) } - window.appendLoadFixtures = function () { + global.appendLoadFixtures = function () { jasmine.getFixtures().proxyCallTo_('appendLoad', arguments) } - window.setFixtures = function (html) { + global.setFixtures = function (html) { return jasmine.getFixtures().proxyCallTo_('set', arguments) } - window.appendSetFixtures = function () { + global.appendSetFixtures = function () { jasmine.getFixtures().proxyCallTo_('appendSet', arguments) } - window.sandbox = function (attributes) { + global.sandbox = function (attributes) { return jasmine.getFixtures().sandbox(attributes) } - window.spyOnEvent = function (selector, eventName) { - return jasmine.jQuery.events.spyOn(selector, eventName) + global.spyOnEvent = function (selector, eventName) { + return jasmine.JQuery.events.spyOn(selector, eventName) } - window.preloadStyleFixtures = function () { + global.preloadStyleFixtures = function () { jasmine.getStyleFixtures().proxyCallTo_('preload', arguments) } - window.loadStyleFixtures = function () { + global.loadStyleFixtures = function () { jasmine.getStyleFixtures().proxyCallTo_('load', arguments) } - window.appendLoadStyleFixtures = function () { + global.appendLoadStyleFixtures = function () { jasmine.getStyleFixtures().proxyCallTo_('appendLoad', arguments) } - window.setStyleFixtures = function (html) { + global.setStyleFixtures = function (html) { jasmine.getStyleFixtures().proxyCallTo_('set', arguments) } - window.appendSetStyleFixtures = function (html) { + global.appendSetStyleFixtures = function (html) { jasmine.getStyleFixtures().proxyCallTo_('appendSet', arguments) } - window.loadJSONFixtures = function () { + global.loadJSONFixtures = function () { return jasmine.getJSONFixtures().proxyCallTo_('load', arguments) } - window.getJSONFixture = function (url) { + global.getJSONFixture = function (url) { return jasmine.getJSONFixtures().proxyCallTo_('read', arguments)[url] } -}(window, window.jasmine, window.jQuery); +}(jasmine, window); \ No newline at end of file diff --git a/test/helpers/jasmine-sinon.js b/test/helpers/jasmine-sinon.js index 6ce59f849..c93565329 100755 --- a/test/helpers/jasmine-sinon.js +++ b/test/helpers/jasmine-sinon.js @@ -1,303 +1,58 @@ -(function() { - var createCustomMatcher, createMatcher, jasmineMessageGenerator, jasmineName, sinonMatchers, sinonName, sinonToJasmineMap, spies, - __slice = [].slice; +/* global jasmine */ - sinonMatchers = {}; +'use strict'; - sinonToJasmineMap = { - 'called': 'toHaveBeenCalled', - 'calledOnce': 'toHaveBeenCalledOnce', - 'calledTwice': 'toHaveBeenCalledTwice', - 'calledThrice': 'toHaveBeenCalledThrice', - 'calledBefore': 'toHaveBeenCalledBefore', - 'calledAfter': 'toHaveBeenCalledAfter', - 'calledOn': 'toHaveBeenCalledOn', - 'alwaysCalledOn': 'toHaveBeenAlwaysCalledOn', - 'calledWith': 'toHaveBeenCalledWith', - 'alwaysCalledWith': 'toHaveBeenAlwaysCalledWith', - 'calledWithExactly': 'toHaveBeenCalledWithExactly', - 'alwaysCalledWithExactly': 'toHaveBeenAlwaysCalledWithExactly', - 'calledWithMatch': 'toHaveBeenCalledWithMatch', - 'alwaysCalledWithMatch': 'toHaveBeenAlwaysCalledWithMatch', - 'returned': 'toHaveReturned', - 'alwaysReturned': 'toHaveAlwaysReturned', - 'threw': 'toHaveThrown', - 'alwaysThrew': 'toHaveAlwaysThrown' - }; +(function(jasmine, beforeEach) { - jasmineMessageGenerator = { - 'toHaveBeenCalled': function(passed, spy, other_args) { - var message; - message = "Expected spy '" + spy + "' "; - if (passed) { - message += "not "; - } - message += "toHaveBeenCalled"; - return message.trim(); + var sinon = (typeof require === 'function' && typeof module === 'object') ? require('sinon') : window.sinon, + spyMatchers = 'called calledOnce calledTwice calledThrice calledBefore calledAfter calledOn alwaysCalledOn calledWith alwaysCalledWith calledWithExactly alwaysCalledWithExactly calledWithMatch alwaysCalledWithMatch'.split(' '), + i = spyMatchers.length, + spyMatcherHash = {}, + unusualMatchers = { + "returned": "toHaveReturned", + "alwaysReturned": "toHaveAlwaysReturned", + "threw": "toHaveThrown", + "alwaysThrew": "toHaveAlwaysThrown" }, - 'toHaveBeenCalledOnce': function(passed, spy, other_args) { - var message; - message = "Expected spy '" + spy + "' "; - if (passed) { - message += "not "; - } - message += "toHaveBeenCalledOnce"; - return message.trim(); - }, - 'toHaveBeenCalledTwice': function(passed, spy, other_args) { - var message; - message = "Expected spy '" + spy + "' "; - if (passed) { - message += "not "; - } - message += "toHaveBeenCalledTwice"; - return message.trim(); - }, - 'toHaveBeenCalledThrice': function(passed, spy, other_args) { - var message; - message = "Expected spy '" + spy + "' "; - if (passed) { - message += "not "; - } - message += "toHaveBeenCalledThrice"; - return message.trim(); - }, - 'toHaveBeenCalledBefore': function(passed, spy, other_args) { - var message; - message = "Expected spy '" + spy + "' "; - if (passed) { - message += "not "; - } - message += "toHaveBeenCalledBefore "; - if ((other_args != null ? other_args.length : void 0) > 0) { - message += jasmine.pp(other_args) + (" but was CalledBefore " + (jasmine.pp(spy.lastCall.args))); - } - return message.trim(); - }, - 'toHaveBeenCalledAfter': function(passed, spy, other_args) { - var message; - message = "Expected spy '" + spy + "' "; - if (passed) { - message += "not "; - } - message += "toHaveBeenCalledAfter "; - if ((other_args != null ? other_args.length : void 0) > 0) { - message += jasmine.pp(other_args) + (" but was CalledAfter " + (jasmine.pp(spy.lastCall.args))); - } - return message.trim(); - }, - 'toHaveBeenCalledOn': function(passed, spy, other_args) { - var message; - message = "Expected spy '" + spy + "' "; - if (passed) { - message += "not "; - } - message += "toHaveBeenCalledOn "; - if ((other_args != null ? other_args.length : void 0) > 0) { - message += jasmine.pp(other_args) + (" but was CalledOn " + (jasmine.pp(spy.lastCall.args))); - } - return message.trim(); - }, - 'toHaveBeenAlwaysCalledOn': function(passed, spy, other_args) { - var message; - message = "Expected spy '" + spy + "' "; - if (passed) { - message += "not "; - } - message += "toHaveBeenAlwaysCalledOn "; - if ((other_args != null ? other_args.length : void 0) > 0) { - message += jasmine.pp(other_args) + (" but was AlwaysCalledOn " + (jasmine.pp(spy.lastCall.args))); - } - return message.trim(); - }, - 'toHaveBeenCalledWith': function(passed, spy, other_args) { - var message; - message = "Expected spy '" + spy + "' "; - if (passed) { - message += "not "; - } - message += "toHaveBeenCalledWith "; - if ((other_args != null ? other_args.length : void 0) > 0) { - message += jasmine.pp(other_args) + (" but was CalledWith " + (jasmine.pp(spy.lastCall.args))); - } - return message.trim(); - }, - 'toHaveBeenAlwaysCalledWith': function(passed, spy, other_args) { - var message; - message = "Expected spy '" + spy + "' "; - if (passed) { - message += "not "; - } - message += "toHaveBeenAlwaysCalledWith "; - if ((other_args != null ? other_args.length : void 0) > 0) { - message += jasmine.pp(other_args) + (" but was AlwaysCalledWith " + (jasmine.pp(spy.lastCall.args))); - } - return message.trim(); - }, - 'toHaveBeenCalledWithExactly': function(passed, spy, other_args) { - var message; - message = "Expected spy '" + spy + "' "; - if (passed) { - message += "not "; - } - message += "toHaveBeenCalledWithExactly "; - if ((other_args != null ? other_args.length : void 0) > 0) { - message += jasmine.pp(other_args) + (" but was CalledWithExactly " + (jasmine.pp(spy.lastCall.args))); - } - return message.trim(); - }, - 'toHaveBeenAlwaysCalledWithExactly': function(passed, spy, other_args) { - var message; - message = "Expected spy '" + spy + "' "; - if (passed) { - message += "not "; - } - message += "toHaveBeenAlwaysCalledWithExactly "; - if ((other_args != null ? other_args.length : void 0) > 0) { - message += jasmine.pp(other_args) + (" but was AlwaysCalledWithExactly " + (jasmine.pp(spy.lastCall.args))); - } - return message.trim(); - }, - 'toHaveBeenCalledWithMatch': function(passed, spy, other_args) { - var message; - message = "Expected spy '" + spy + "' "; - if (passed) { - message += "not "; - } - message += "toHaveBeenCalledWithMatch "; - if ((other_args != null ? other_args.length : void 0) > 0) { - message += jasmine.pp(other_args) + (" but was CalledWithMatch " + (jasmine.pp(spy.lastCall.args))); - } - return message.trim(); - }, - 'toHaveBeenAlwaysCalledWithMatch': function(passed, spy, other_args) { - var message; - message = "Expected spy '" + spy + "' "; - if (passed) { - message += "not "; - } - message += "toHaveBeenAlwaysCalledWithMatch "; - if ((other_args != null ? other_args.length : void 0) > 0) { - message += jasmine.pp(other_args) + (" but was AlwaysCalledWithMatch " + (jasmine.pp(spy.lastCall.args))); - } - return message.trim(); - }, - 'toHaveReturned': function(passed, spy, other_args) { - var message; - message = "Expected spy '" + spy + "' "; - if (passed) { - message += "not "; - } - message += "toHaveReturned "; - if ((other_args != null ? other_args.length : void 0) > 0) { - message += jasmine.pp(other_args) + (" but returned " + (jasmine.pp(spy.lastCall.args))); - } - return message.trim(); - }, - 'toHaveAlwaysReturned': function(passed, spy, other_args) { - var message; - message = "Expected spy '" + spy + "' "; - if (passed) { - message += "not "; - } - message += "toHaveAlwaysReturned "; - if ((other_args != null ? other_args.length : void 0) > 0) { - message += jasmine.pp(other_args) + (" but returned " + (jasmine.pp(spy.lastCall.args))); - } - return message.trim(); - }, - 'toHaveThrown': function(passed, spy, other_args) { - var message; - message = "Expected spy '" + spy + "' "; - if (passed) { - message += "not "; - } - message += "toHaveThrown "; - if ((other_args != null ? other_args.length : void 0) > 0) { - message += jasmine.pp(other_args) + (" but threw " + (jasmine.pp(spy.lastCall.args))); - } - return message.trim(); + + createCustomMatcher = function(arg) { + return sinon.match(function (val) { + return jasmine.getEnv().equals_(val, arg); + }); }, - 'toHaveAlwaysThrown': function(passed, spy, other_args) { - var message; - message = "Expected spy '" + spy + "' "; - if (passed) { - message += "not "; - } - message += "toHaveAlwaysThrown "; - if ((other_args != null ? other_args.length : void 0) > 0) { - message += jasmine.pp(other_args) + (" but threw " + (jasmine.pp(spy.lastCall.args))); - } - return message.trim(); - } - }; - createCustomMatcher = function(arg, util, customEqualityTesters) { - return sinon.match(function(val) { - return util.equals(val, arg, customEqualityTesters); - }); - }; + getMatcherFunction = function(sinonName, matcherName) { + var original = jasmine.Matchers.prototype[matcherName]; + return function () { + if (jasmine.isSpy(this.actual) && original) { + return original.apply(this, arguments); + } + var sinonProperty = this.actual[sinonName]; + var args = Array.prototype.slice.call(arguments); - createMatcher = function(sinonName, jasmineName) { - var original; - if(typeof jasmineRequire !== 'object') { - return; - } - original = jasmineRequire[jasmineName]; - return function(util, customEqualityTesters) { - return { - compare: function() { - var arg, args, compare, i, message, pass, sinonProperty, spy, _i, _len; - args = 1 <= arguments.length ? __slice.call(arguments, 0) : []; - spy = args[0]; - if (original && jasmine.isSpy(spy)) { - compare = original(jasmine)(util, customEqualityTesters).compare; - return compare.apply(null, args); - } - sinonProperty = spy[sinonName]; - for (i = _i = 0, _len = args.length; _i < _len; i = ++_i) { - arg = args[i]; - if (arg != null) { - if ((typeof arg.jasmineMatches === 'function') || (arg instanceof jasmine.ObjectContaining)) { - args[i] = createCustomMatcher(arg, util, customEqualityTesters); - } - } + for (var i = 0; i < args.length; i++) { + if (args[i] && (typeof args[i].jasmineMatches === 'function' || args[i] instanceof jasmine.Matchers.ObjectContaining)) { + args[i] = createCustomMatcher(args[i]); } - if (typeof sinonProperty === 'function') { - pass = sinonProperty.apply(spy, args.slice(1)); - } else { - pass = sinonProperty; - } - message = jasmineMessageGenerator[jasmineName](pass, spy, args.slice(1)); - return { - pass: pass, - message: message - }; } + + return (typeof sinonProperty === 'function') ? sinonProperty.apply(this.actual, args) : sinonProperty; }; }; - }; - - for (sinonName in sinonToJasmineMap) { - jasmineName = sinonToJasmineMap[sinonName]; - sinonMatchers[jasmineName] = createMatcher(sinonName, jasmineName); - } - jasmine.Expectation.addCoreMatchers(sinonMatchers); + while(i--) { + var sinonName = spyMatchers[i], + matcherName = "toHaveBeen" + sinonName.charAt(0).toUpperCase() + sinonName.slice(1); - spies = []; + spyMatcherHash[matcherName] = getMatcherFunction(sinonName, matcherName); + } - this.sinonSpyOn = function(obj, method) { - return spies.push(sinon.spy(obj, method)); - }; + for (var j in unusualMatchers) { + spyMatcherHash[unusualMatchers[j]] = getMatcherFunction(j, unusualMatchers[j]); + } - afterEach(function() { - var spy, _i, _len; - for (_i = 0, _len = spies.length; _i < _len; _i++) { - spy = spies[_i]; - spy.restore(); - } - return spies = []; + beforeEach(function() { + this.addMatchers(spyMatcherHash); }); -}).call(this); \ No newline at end of file +})(jasmine, beforeEach); \ No newline at end of file