Commit a77e7fe5 by Prem Sichanugrist

Update jasmine-jquery for newer features

parent 4d4a856c
var readFixtures = function() { var readFixtures = function() {
return jasmine.getFixtures().proxyCallTo_('read', arguments); return jasmine.getFixtures().proxyCallTo_('read', arguments)
}; }
var preloadFixtures = function() { var preloadFixtures = function() {
jasmine.getFixtures().proxyCallTo_('preload', arguments); jasmine.getFixtures().proxyCallTo_('preload', arguments)
}; }
var loadFixtures = function() { var loadFixtures = function() {
jasmine.getFixtures().proxyCallTo_('load', arguments); jasmine.getFixtures().proxyCallTo_('load', arguments)
}; }
var appendLoadFixtures = function() {
jasmine.getFixtures().proxyCallTo_('appendLoad', arguments)
}
var setFixtures = function(html) { var setFixtures = function(html) {
jasmine.getFixtures().set(html); jasmine.getFixtures().proxyCallTo_('set', arguments)
}; }
var appendSetFixtures = function() {
jasmine.getFixtures().proxyCallTo_('appendSet', arguments)
}
var sandbox = function(attributes) { var sandbox = function(attributes) {
return jasmine.getFixtures().sandbox(attributes); return jasmine.getFixtures().sandbox(attributes)
}; }
var spyOnEvent = function(selector, eventName) { var spyOnEvent = function(selector, eventName) {
jasmine.JQuery.events.spyOn(selector, eventName); jasmine.JQuery.events.spyOn(selector, eventName)
}; }
jasmine.getFixtures = function() { jasmine.getFixtures = function() {
return jasmine.currentFixtures_ = jasmine.currentFixtures_ || new jasmine.Fixtures(); return jasmine.currentFixtures_ = jasmine.currentFixtures_ || new jasmine.Fixtures()
}; }
jasmine.Fixtures = function() { jasmine.Fixtures = function() {
this.containerId = 'jasmine-fixtures'; this.containerId = 'jasmine-fixtures'
this.fixturesCache_ = {}; this.fixturesCache_ = {}
this.fixturesPath = 'spec/javascripts/fixtures'; this.fixturesPath = 'spec/javascripts/fixtures'
}; }
jasmine.Fixtures.prototype.set = function(html) { jasmine.Fixtures.prototype.set = function(html) {
this.cleanUp(); this.cleanUp()
this.createContainer_(html); this.createContainer_(html)
}; }
jasmine.Fixtures.prototype.appendSet= function(html) {
this.addToContainer_(html)
}
jasmine.Fixtures.prototype.preload = function() { jasmine.Fixtures.prototype.preload = function() {
this.read.apply(this, arguments); this.read.apply(this, arguments)
}; }
jasmine.Fixtures.prototype.load = function() { jasmine.Fixtures.prototype.load = function() {
this.cleanUp(); this.cleanUp()
this.createContainer_(this.read.apply(this, arguments)); this.createContainer_(this.read.apply(this, arguments))
}; }
jasmine.Fixtures.prototype.appendLoad = function() {
this.addToContainer_(this.read.apply(this, arguments))
}
jasmine.Fixtures.prototype.read = function() { jasmine.Fixtures.prototype.read = function() {
var htmlChunks = []; var htmlChunks = []
var fixtureUrls = arguments; var fixtureUrls = arguments
for(var urlCount = fixtureUrls.length, urlIndex = 0; urlIndex < urlCount; urlIndex++) { for(var urlCount = fixtureUrls.length, urlIndex = 0; urlIndex < urlCount; urlIndex++) {
htmlChunks.push(this.getFixtureHtml_(fixtureUrls[urlIndex])); htmlChunks.push(this.getFixtureHtml_(fixtureUrls[urlIndex]))
} }
return htmlChunks.join(''); return htmlChunks.join('')
}; }
jasmine.Fixtures.prototype.clearCache = function() { jasmine.Fixtures.prototype.clearCache = function() {
this.fixturesCache_ = {}; this.fixturesCache_ = {}
}; }
jasmine.Fixtures.prototype.cleanUp = function() { jasmine.Fixtures.prototype.cleanUp = function() {
jQuery('#' + this.containerId).remove(); jQuery('#' + this.containerId).remove()
}; }
jasmine.Fixtures.prototype.sandbox = function(attributes) { jasmine.Fixtures.prototype.sandbox = function(attributes) {
var attributesToSet = attributes || {}; var attributesToSet = attributes || {}
return jQuery('<div id="sandbox" />').attr(attributesToSet); return jQuery('<div id="sandbox" />').attr(attributesToSet)
}; }
jasmine.Fixtures.prototype.createContainer_ = function(html) { jasmine.Fixtures.prototype.createContainer_ = function(html) {
var container; var container
if(html instanceof jQuery) { if(html instanceof jQuery) {
container = jQuery('<div id="' + this.containerId + '" />'); container = jQuery('<div id="' + this.containerId + '" />')
container.html(html); container.html(html)
} else { } else {
container = '<div id="' + this.containerId + '">' + html + '</div>' container = '<div id="' + this.containerId + '">' + html + '</div>'
} }
jQuery('body').append(container); jQuery('body').append(container)
}; }
jasmine.Fixtures.prototype.addToContainer_ = function(html){
var container = jQuery('body').find('#'+this.containerId).append(html)
if(!container.length){
this.createContainer_(html)
}
}
jasmine.Fixtures.prototype.getFixtureHtml_ = function(url) { jasmine.Fixtures.prototype.getFixtureHtml_ = function(url) {
if (typeof this.fixturesCache_[url] == 'undefined') { if (typeof this.fixturesCache_[url] === 'undefined') {
this.loadFixtureIntoCache_(url); this.loadFixtureIntoCache_(url)
} }
return this.fixturesCache_[url]; return this.fixturesCache_[url]
}; }
jasmine.Fixtures.prototype.loadFixtureIntoCache_ = function(relativeUrl) { jasmine.Fixtures.prototype.loadFixtureIntoCache_ = function(relativeUrl) {
var url = this.makeFixtureUrl_(relativeUrl); var url = this.makeFixtureUrl_(relativeUrl)
var request = new XMLHttpRequest(); var request = new XMLHttpRequest()
request.open("GET", url + "?" + new Date().getTime(), false); request.open("GET", url + "?" + new Date().getTime(), false)
request.send(null); request.send(null)
this.fixturesCache_[relativeUrl] = request.responseText; this.fixturesCache_[relativeUrl] = request.responseText
}; }
jasmine.Fixtures.prototype.makeFixtureUrl_ = function(relativeUrl){ jasmine.Fixtures.prototype.makeFixtureUrl_ = function(relativeUrl){
return this.fixturesPath.match('/$') ? this.fixturesPath + relativeUrl : this.fixturesPath + '/' + relativeUrl; return this.fixturesPath.match('/$') ? this.fixturesPath + relativeUrl : this.fixturesPath + '/' + relativeUrl
}; }
jasmine.Fixtures.prototype.proxyCallTo_ = function(methodName, passedArguments) { jasmine.Fixtures.prototype.proxyCallTo_ = function(methodName, passedArguments) {
return this[methodName].apply(this, passedArguments); return this[methodName].apply(this, passedArguments)
}; }
jasmine.JQuery = function() {}; jasmine.JQuery = function() {}
jasmine.JQuery.browserTagCaseIndependentHtml = function(html) { jasmine.JQuery.browserTagCaseIndependentHtml = function(html) {
return jQuery('<div/>').append(html).html(); return jQuery('<div/>').append(html).html()
}; }
jasmine.JQuery.elementToString = function(element) { jasmine.JQuery.elementToString = function(element) {
var sample = $(element).get()[0] var domEl = $(element).get(0)
if (sample == undefined || sample.cloneNode) if (domEl == undefined || domEl.cloneNode)
return jQuery('<div />').append($(element).clone()).html(); return jQuery('<div />').append($(element).clone()).html()
else else
return element.toString(); return element.toString()
}; }
jasmine.JQuery.matchersClass = {}; jasmine.JQuery.matchersClass = {};
(function(namespace) { !function(namespace) {
var data = { var data = {
spiedEvents: {}, spiedEvents: {},
handlers: [] handlers: []
}; }
namespace.events = { namespace.events = {
spyOn: function(selector, eventName) { spyOn: function(selector, eventName) {
var handler = function(e) { var handler = function(e) {
data.spiedEvents[[selector, eventName]] = e; data.spiedEvents[[selector, eventName]] = e
}; }
jQuery(selector).bind(eventName, handler); jQuery(selector).bind(eventName, handler)
data.handlers.push(handler); data.handlers.push(handler)
}, },
wasTriggered: function(selector, eventName) { wasTriggered: function(selector, eventName) {
return !!(data.spiedEvents[[selector, eventName]]); return !!(data.spiedEvents[[selector, eventName]])
}, },
wasPrevented: function(selector, eventName) { wasPrevented: function(selector, eventName) {
return data.spiedEvents[[selector, eventName]].isDefaultPrevented(); return data.spiedEvents[[selector, eventName]].isDefaultPrevented()
}, },
cleanUp: function() { cleanUp: function() {
data.spiedEvents = {}; data.spiedEvents = {}
data.handlers = []; data.handlers = []
} }
} }
})(jasmine.JQuery); }(jasmine.JQuery)
(function(){ !function(){
var jQueryMatchers = { var jQueryMatchers = {
toHaveClass: function(className) { toHaveClass: function(className) {
return this.actual.hasClass(className); return this.actual.hasClass(className)
},
toHaveCss: function(css){
for (var prop in css){
if (this.actual.css(prop) !== css[prop]) return false
}
return true
}, },
toBeVisible: function() { toBeVisible: function() {
return this.actual.is(':visible'); return this.actual.is(':visible')
}, },
toBeHidden: function() { toBeHidden: function() {
return this.actual.is(':hidden'); return this.actual.is(':hidden')
}, },
toBeSelected: function() { toBeSelected: function() {
return this.actual.is(':selected'); return this.actual.is(':selected')
}, },
toBeChecked: function() { toBeChecked: function() {
return this.actual.is(':checked'); return this.actual.is(':checked')
}, },
toBeEmpty: function() { toBeEmpty: function() {
return this.actual.is(':empty'); return this.actual.is(':empty')
}, },
toExist: function() { toExist: function() {
return $(document).find(this.actual).length; return $(document).find(this.actual).length
}, },
toHaveAttr: function(attributeName, expectedAttributeValue) { toHaveAttr: function(attributeName, expectedAttributeValue) {
return hasProperty(this.actual.attr(attributeName), expectedAttributeValue); return hasProperty(this.actual.attr(attributeName), expectedAttributeValue)
}, },
toHaveProp: function(propertyName, expectedPropertyValue) { toHaveProp: function(propertyName, expectedPropertyValue) {
return hasProperty(this.actual.prop(propertyName), expectedPropertyValue); return hasProperty(this.actual.prop(propertyName), expectedPropertyValue)
}, },
toHaveId: function(id) { toHaveId: function(id) {
return this.actual.attr('id') == id; return this.actual.attr('id') == id
}, },
toHaveHtml: function(html) { toHaveHtml: function(html) {
return this.actual.html() == jasmine.JQuery.browserTagCaseIndependentHtml(html); return this.actual.html() == jasmine.JQuery.browserTagCaseIndependentHtml(html)
},
toContainHtml: function(html){
var actualHtml = this.actual.html()
var expectedHtml = jasmine.JQuery.browserTagCaseIndependentHtml(html)
return (actualHtml.indexOf(expectedHtml) >= 0)
}, },
toHaveText: function(text) { toHaveText: function(text) {
var trimmedText = $.trim(this.actual.text()); var trimmedText = $.trim(this.actual.text())
if (text && jQuery.isFunction(text.test)) { if (text && jQuery.isFunction(text.test)) {
return text.test(trimmedText); return text.test(trimmedText)
} else { } else {
return trimmedText == text; return trimmedText == text
} }
}, },
toHaveValue: function(value) { toHaveValue: function(value) {
return this.actual.val() == value; return this.actual.val() == value
}, },
toHaveData: function(key, expectedValue) { toHaveData: function(key, expectedValue) {
return hasProperty(this.actual.data(key), expectedValue); return hasProperty(this.actual.data(key), expectedValue)
}, },
toBe: function(selector) { toBe: function(selector) {
return this.actual.is(selector); return this.actual.is(selector)
}, },
toContain: function(selector) { toContain: function(selector) {
return this.actual.find(selector).length; return this.actual.find(selector).length
}, },
toBeDisabled: function(selector){ toBeDisabled: function(selector){
return this.actual.is(':disabled'); return this.actual.is(':disabled')
}, },
toBeFocused: function(selector) { toBeFocused: function(selector) {
return this.actual.is(':focus'); return this.actual.is(':focus')
}, },
// tests the existence of a specific event binding toHandle: function(event) {
toHandle: function(eventName) {
var events = this.actual.data("events"); var events = this.actual.data('events')
return events && events[eventName].length > 0;
if(!events || !event || typeof event !== "string") {
return false
}
var namespaces = event.split(".")
var eventType = namespaces.shift()
var sortedNamespaces = namespaces.slice(0).sort()
var 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(namespaceRegExp.test(namespace)) {
return true
}
}
} else {
return events[eventType] && events[eventType].length > 0
}
}, },
// tests the existence of a specific event binding + handler // tests the existence of a specific event binding + handler
toHandleWith: function(eventName, eventHandler) { toHandleWith: function(eventName, eventHandler) {
var stack = this.actual.data("events")[eventName]; var stack = this.actual.data("events")[eventName]
var i; for (var i = 0; i < stack.length; i++) {
for (i = 0; i < stack.length; i++) { if (stack[i].handler == eventHandler) return true
if (stack[i].handler == eventHandler) {
return true;
}
} }
return false; return false
} }
}; }
var hasProperty = function(actualValue, expectedValue) { var hasProperty = function(actualValue, expectedValue) {
if (expectedValue === undefined) { if (expectedValue === undefined) return actualValue !== undefined
return actualValue !== undefined; return actualValue == expectedValue
} }
return actualValue == expectedValue;
};
var bindMatcher = function(methodName) { var bindMatcher = function(methodName) {
var builtInMatcher = jasmine.Matchers.prototype[methodName]; var builtInMatcher = jasmine.Matchers.prototype[methodName]
jasmine.JQuery.matchersClass[methodName] = function() { jasmine.JQuery.matchersClass[methodName] = function() {
if (this.actual if (this.actual
&& (this.actual instanceof jQuery && (this.actual instanceof jQuery
|| jasmine.isDomNode(this.actual))) { || jasmine.isDomNode(this.actual))) {
this.actual = $(this.actual); this.actual = $(this.actual)
var result = jQueryMatchers[methodName].apply(this, arguments) var result = jQueryMatchers[methodName].apply(this, arguments)
if (this.actual.get && !$.isWindow(this.actual.get()[0])) var element;
this.actual = jasmine.JQuery.elementToString(this.actual) if (this.actual.get && (element = this.actual.get()[0]) && !$.isWindow(element) && element.tagName !== "HTML")
return result; this.actual = jasmine.JQuery.elementToString(this.actual)
} return result
}
if (builtInMatcher) {
return builtInMatcher.apply(this, arguments); if (builtInMatcher) {
} return builtInMatcher.apply(this, arguments)
}
return false;
}; return false
}; }
}
for(var methodName in jQueryMatchers) { for(var methodName in jQueryMatchers) {
bindMatcher(methodName); bindMatcher(methodName)
} }
})(); }()
beforeEach(function() { beforeEach(function() {
this.addMatchers(jasmine.JQuery.matchersClass); this.addMatchers(jasmine.JQuery.matchersClass)
this.addMatchers({ this.addMatchers({
toHaveBeenTriggeredOn: function(selector) { toHaveBeenTriggeredOn: function(selector) {
this.message = function() { this.message = function() {
return [ return [
"Expected event " + this.actual + " to have been triggered on " + selector, "Expected event " + this.actual + " to have been triggered on " + selector,
"Expected event " + this.actual + " not 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); return jasmine.JQuery.events.wasTriggered($(selector), this.actual)
} }
}); })
this.addMatchers({ this.addMatchers({
toHaveBeenPreventedOn: function(selector) { toHaveBeenPreventedOn: function(selector) {
this.message = function() { this.message = function() {
return [ return [
"Expected event " + this.actual + " to have been prevented on " + selector, "Expected event " + this.actual + " to have been prevented on " + selector,
"Expected event " + this.actual + " not to have been prevented on " + selector "Expected event " + this.actual + " not to have been prevented on " + selector
]; ]
}; }
return jasmine.JQuery.events.wasPrevented(selector, this.actual); return jasmine.JQuery.events.wasPrevented(selector, this.actual)
} }
}); })
}); })
afterEach(function() { afterEach(function() {
jasmine.getFixtures().cleanUp(); jasmine.getFixtures().cleanUp()
jasmine.JQuery.events.cleanUp(); jasmine.JQuery.events.cleanUp()
}); })
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment