importPackage(org.apache.commons.io); importPackage(java.io); var loadFixtures = function() { jasmine.getFixtures().load.apply(jasmine.getFixtures(), arguments); }; var appendToBody = function(el) { $('body').append(el); }; jasmine.getFixtures = function() { return jasmine.currentFixtures_ = jasmine.currentFixtures_ || new jasmine.Fixtures(); }; jasmine.Fixtures = function() { this.fixturesPath = 'src/test/javascript/specs/fixtures'; }; jasmine.Fixtures.prototype.load = function() { appendToBody(this.read.apply(this, arguments)); }; jasmine.Fixtures.prototype.read = function() { var read = ""; for(var i = 0; i < arguments.length; i++) { read += FileUtils.readFileToString(new File(this.fixturesPath, arguments[i])); } return read; } jasmine.Fixtures.prototype.cleanUp = function() { $('body').children().remove(); }; jasmine.JQuery = function() {}; jasmine.JQuery.browserTagCaseIndependentHtml = function(html) { return $('
').append(html).html(); }; jasmine.JQuery.elementToString = function(element) { return $('
').append(element.clone()).html(); }; jasmine.JQuery.matchersClass = {}; (function(namespace) { var data = { spiedEvents: {}, handlers: [] }; namespace.events = { spyOn: function(selector, eventName) { var handler = function(e) { data.spiedEvents[[selector, eventName]] = e; }; $(selector).bind(eventName, handler); data.handlers.push(handler); }, wasTriggered: function(selector, eventName) { return !!(data.spiedEvents[[selector, eventName]]); }, cleanUp: function() { data.spiedEvents = {}; data.handlers = []; } } })(jasmine.JQuery); (function(){ var jQueryMatchers = { toHaveClass: function(className) { return this.actual.hasClass(className); }, toBeVisible: function() { return this.actual.is(':visible'); }, toBeHidden: function() { return this.actual.is(':hidden'); }, toBeSelected: function() { return this.actual.is(':selected'); }, toBeChecked: function() { return this.actual.is(':checked'); }, toBeEmpty: function() { return this.actual.is(':empty'); }, toExist: function() { return this.actual.size() > 0; }, toHaveAttr: function(attributeName, expectedAttributeValue) { return hasProperty(this.actual.attr(attributeName), expectedAttributeValue); }, toHaveId: function(id) { return this.actual.attr('id') == id; }, toHaveHtml: function(html) { return this.actual.html() == jasmine.JQuery.browserTagCaseIndependentHtml(html); }, toHaveText: function(text) { if (text && jQuery.isFunction(text.test)) { return text.test(this.actual.text()); } else { return this.actual.text() == text; } }, toHaveValue: function(value) { return this.actual.val() == value; }, toHaveData: function(key, expectedValue) { return hasProperty(this.actual.data(key), expectedValue); }, toBe: function(selector) { return this.actual.is(selector); }, toContain: function(selector) { return this.actual.find(selector).size() > 0; }, toBeDisabled: function(selector) { return this.actual.is(':disabled'); } }; var hasProperty = function(actualValue, expectedValue) { if (expectedValue === undefined) { return actualValue !== undefined; } return actualValue == expectedValue; }; var bindMatcher = function(methodName) { var builtInMatcher = jasmine.Matchers.prototype[methodName]; jasmine.JQuery.matchersClass[methodName] = function() { if (this.actual instanceof jQuery) { var result = jQueryMatchers[methodName].apply(this, arguments); this.actual = jasmine.JQuery.elementToString(this.actual); return result; } if (builtInMatcher) { return builtInMatcher.apply(this, arguments); } return false; }; }; for(var methodName in jQueryMatchers) { bindMatcher(methodName); } })(); 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); } }) }); afterEach(function() { jasmine.getFixtures().cleanUp(); jasmine.JQuery.events.cleanUp(); });