Move most jasmine global usage into boot.
- thor build scripts broken for now.
This commit is contained in:
5
Gemfile
5
Gemfile
@@ -1,11 +1,12 @@
|
|||||||
source :rubygems
|
source :rubygems
|
||||||
gem "rake"
|
gem "rake"
|
||||||
gem "jasmine", git: 'https://github.com/pivotal/jasmine-gem.git'
|
#gem "jasmine", git: 'https://github.com/pivotal/jasmine-gem.git'
|
||||||
|
gem "jasmine", path: '~/workspace/jasmine-gem'
|
||||||
|
|
||||||
unless ENV["TRAVIS"]
|
unless ENV["TRAVIS"]
|
||||||
group :debug do
|
group :debug do
|
||||||
gem 'debugger'
|
gem 'debugger'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
gemspec
|
gemspec
|
||||||
|
|||||||
@@ -23,6 +23,14 @@ module Jasmine
|
|||||||
spec_files("node")
|
spec_files("node")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def boot_files
|
||||||
|
["boot.js"]
|
||||||
|
end
|
||||||
|
|
||||||
|
def boot_dir
|
||||||
|
File.join(path, 'boot')
|
||||||
|
end
|
||||||
|
|
||||||
def spec_files(type)
|
def spec_files(type)
|
||||||
raise ArgumentError.new("Unrecognized spec type") unless SPEC_TYPES.include?(type)
|
raise ArgumentError.new("Unrecognized spec type") unless SPEC_TYPES.include?(type)
|
||||||
(Dir.glob(File.join(path, "spec", type, "*.js"))).map { |f| File.join("spec", type, File.basename(f)) }.uniq
|
(Dir.glob(File.join(path, "spec", type, "*.js"))).map { |f| File.join("spec", type, File.basename(f)) }.uniq
|
||||||
|
|||||||
75
lib/jasmine-core/boot/boot.js
Normal file
75
lib/jasmine-core/boot/boot.js
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
(function() {
|
||||||
|
var env = jasmine.getEnv();
|
||||||
|
|
||||||
|
var jasmineInterface = {
|
||||||
|
describe: function(description, specDefinitions) {
|
||||||
|
return env.describe(description, specDefinitions);
|
||||||
|
},
|
||||||
|
|
||||||
|
xdescribe: function(description, specDefinitions) {
|
||||||
|
return env.xdescribe(description, specDefinitions);
|
||||||
|
},
|
||||||
|
|
||||||
|
it: function(desc, func) {
|
||||||
|
return env.it(desc, func);
|
||||||
|
},
|
||||||
|
|
||||||
|
xit: function(desc, func) {
|
||||||
|
return env.xit(desc, func);
|
||||||
|
},
|
||||||
|
|
||||||
|
beforeEach: function(beforeEachFunction) {
|
||||||
|
return env.beforeEach(beforeEachFunction);
|
||||||
|
},
|
||||||
|
|
||||||
|
afterEach: function(afterEachFunction) {
|
||||||
|
return env.afterEach(afterEachFunction);
|
||||||
|
},
|
||||||
|
|
||||||
|
expect: function(actual) {
|
||||||
|
return env.currentSpec.expect(actual);
|
||||||
|
},
|
||||||
|
|
||||||
|
runs: function(func) {
|
||||||
|
return env.currentSpec.runs(func);
|
||||||
|
},
|
||||||
|
|
||||||
|
waits: function(timeout) {
|
||||||
|
return env.currentSpec.waits(timeout);
|
||||||
|
},
|
||||||
|
|
||||||
|
waitsFor: function(latchFunction, optional_timeoutMessage, optional_timeout) {
|
||||||
|
return env.currentSpec.waitsFor.apply(jasmine.getEnv().currentSpec, arguments);
|
||||||
|
},
|
||||||
|
|
||||||
|
spyOn: function(obj, methodName) {
|
||||||
|
return env.currentSpec.spyOn(obj, methodName);
|
||||||
|
},
|
||||||
|
jsApiReporter: new jasmine.JsApiReporter()
|
||||||
|
};
|
||||||
|
|
||||||
|
if (typeof window == "undefined" && typeof exports == "object") {
|
||||||
|
jasmine.util.extend(exports, jasmineInterface);
|
||||||
|
} else {
|
||||||
|
jasmine.util.extend(window, jasmineInterface);
|
||||||
|
}
|
||||||
|
|
||||||
|
var htmlReporter = new jasmine.HtmlReporter();
|
||||||
|
|
||||||
|
env.addReporter(jasmineInterface.jsApiReporter);
|
||||||
|
env.addReporter(htmlReporter);
|
||||||
|
|
||||||
|
env.specFilter = function(spec) {
|
||||||
|
return htmlReporter.specFilter(spec);
|
||||||
|
};
|
||||||
|
|
||||||
|
var currentWindowOnload = window.onload;
|
||||||
|
|
||||||
|
window.onload = function() {
|
||||||
|
if (currentWindowOnload) {
|
||||||
|
currentWindowOnload();
|
||||||
|
}
|
||||||
|
env.execute();
|
||||||
|
};
|
||||||
|
|
||||||
|
}());
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
var isCommonJS = typeof window == "undefined" && typeof exports == "object";
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Top level namespace for Jasmine, a lightweight JavaScript BDD/spec/testing framework.
|
* Top level namespace for Jasmine, a lightweight JavaScript BDD/spec/testing framework.
|
||||||
@@ -6,7 +5,7 @@ var isCommonJS = typeof window == "undefined" && typeof exports == "object";
|
|||||||
* @namespace
|
* @namespace
|
||||||
*/
|
*/
|
||||||
var jasmine = {};
|
var jasmine = {};
|
||||||
if (isCommonJS) exports.jasmine = jasmine;
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
@@ -128,6 +127,7 @@ jasmine.ExpectationResult.prototype.passed = function () {
|
|||||||
*/
|
*/
|
||||||
jasmine.getEnv = function() {
|
jasmine.getEnv = function() {
|
||||||
var env = jasmine.currentEnv_ = jasmine.currentEnv_ || new jasmine.Env();
|
var env = jasmine.currentEnv_ = jasmine.currentEnv_ || new jasmine.Env();
|
||||||
|
//jasmine. singletons in here (setTimeout blah blah).
|
||||||
return env;
|
return env;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -462,160 +462,6 @@ jasmine.log = function() {
|
|||||||
spec.log.apply(spec, arguments);
|
spec.log.apply(spec, arguments);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Function that installs a spy on an existing object's method name. Used within a Spec to create a spy.
|
|
||||||
*
|
|
||||||
* @example
|
|
||||||
* // spy example
|
|
||||||
* var foo = {
|
|
||||||
* not: function(bool) { return !bool; }
|
|
||||||
* }
|
|
||||||
* spyOn(foo, 'not'); // actual foo.not will not be called, execution stops
|
|
||||||
*
|
|
||||||
* @see jasmine.createSpy
|
|
||||||
* @param obj
|
|
||||||
* @param methodName
|
|
||||||
* @return {jasmine.Spy} a Jasmine spy that can be chained with all spy methods
|
|
||||||
*/
|
|
||||||
var spyOn = function(obj, methodName) {
|
|
||||||
return jasmine.getEnv().currentSpec.spyOn(obj, methodName);
|
|
||||||
};
|
|
||||||
if (isCommonJS) exports.spyOn = spyOn;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a Jasmine spec that will be added to the current suite.
|
|
||||||
*
|
|
||||||
* // TODO: pending tests
|
|
||||||
*
|
|
||||||
* @example
|
|
||||||
* it('should be true', function() {
|
|
||||||
* expect(true).toEqual(true);
|
|
||||||
* });
|
|
||||||
*
|
|
||||||
* @param {String} desc description of this specification
|
|
||||||
* @param {Function} func defines the preconditions and expectations of the spec
|
|
||||||
*/
|
|
||||||
var it = function(desc, func) {
|
|
||||||
return jasmine.getEnv().it(desc, func);
|
|
||||||
};
|
|
||||||
if (isCommonJS) exports.it = it;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a <em>disabled</em> Jasmine spec.
|
|
||||||
*
|
|
||||||
* A convenience method that allows existing specs to be disabled temporarily during development.
|
|
||||||
*
|
|
||||||
* @param {String} desc description of this specification
|
|
||||||
* @param {Function} func defines the preconditions and expectations of the spec
|
|
||||||
*/
|
|
||||||
var xit = function(desc, func) {
|
|
||||||
return jasmine.getEnv().xit(desc, func);
|
|
||||||
};
|
|
||||||
if (isCommonJS) exports.xit = xit;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Starts a chain for a Jasmine expectation.
|
|
||||||
*
|
|
||||||
* It is passed an Object that is the actual value and should chain to one of the many
|
|
||||||
* jasmine.Matchers functions.
|
|
||||||
*
|
|
||||||
* @param {Object} actual Actual value to test against and expected value
|
|
||||||
* @return {jasmine.Matchers}
|
|
||||||
*/
|
|
||||||
var expect = function(actual) {
|
|
||||||
return jasmine.getEnv().currentSpec.expect(actual);
|
|
||||||
};
|
|
||||||
if (isCommonJS) exports.expect = expect;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Defines part of a jasmine spec. Used in cominbination with waits or waitsFor in asynchrnous specs.
|
|
||||||
*
|
|
||||||
* @param {Function} func Function that defines part of a jasmine spec.
|
|
||||||
*/
|
|
||||||
var runs = function(func) {
|
|
||||||
jasmine.getEnv().currentSpec.runs(func);
|
|
||||||
};
|
|
||||||
if (isCommonJS) exports.runs = runs;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Waits a fixed time period before moving to the next block.
|
|
||||||
*
|
|
||||||
* @deprecated Use waitsFor() instead
|
|
||||||
* @param {Number} timeout milliseconds to wait
|
|
||||||
*/
|
|
||||||
var waits = function(timeout) {
|
|
||||||
jasmine.getEnv().currentSpec.waits(timeout);
|
|
||||||
};
|
|
||||||
if (isCommonJS) exports.waits = waits;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Waits for the latchFunction to return true before proceeding to the next block.
|
|
||||||
*
|
|
||||||
* @param {Function} latchFunction
|
|
||||||
* @param {String} optional_timeoutMessage
|
|
||||||
* @param {Number} optional_timeout
|
|
||||||
*/
|
|
||||||
var waitsFor = function(latchFunction, optional_timeoutMessage, optional_timeout) {
|
|
||||||
jasmine.getEnv().currentSpec.waitsFor.apply(jasmine.getEnv().currentSpec, arguments);
|
|
||||||
};
|
|
||||||
if (isCommonJS) exports.waitsFor = waitsFor;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A function that is called before each spec in a suite.
|
|
||||||
*
|
|
||||||
* Used for spec setup, including validating assumptions.
|
|
||||||
*
|
|
||||||
* @param {Function} beforeEachFunction
|
|
||||||
*/
|
|
||||||
var beforeEach = function(beforeEachFunction) {
|
|
||||||
jasmine.getEnv().beforeEach(beforeEachFunction);
|
|
||||||
};
|
|
||||||
if (isCommonJS) exports.beforeEach = beforeEach;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A function that is called after each spec in a suite.
|
|
||||||
*
|
|
||||||
* Used for restoring any state that is hijacked during spec execution.
|
|
||||||
*
|
|
||||||
* @param {Function} afterEachFunction
|
|
||||||
*/
|
|
||||||
var afterEach = function(afterEachFunction) {
|
|
||||||
jasmine.getEnv().afterEach(afterEachFunction);
|
|
||||||
};
|
|
||||||
if (isCommonJS) exports.afterEach = afterEach;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Defines a suite of specifications.
|
|
||||||
*
|
|
||||||
* Stores the description and all defined specs in the Jasmine environment as one suite of specs. Variables declared
|
|
||||||
* are accessible by calls to beforeEach, it, and afterEach. Describe blocks can be nested, allowing for specialization
|
|
||||||
* of setup in some tests.
|
|
||||||
*
|
|
||||||
* @example
|
|
||||||
* // TODO: a simple suite
|
|
||||||
*
|
|
||||||
* // TODO: a simple suite with a nested describe block
|
|
||||||
*
|
|
||||||
* @param {String} description A string, usually the class under test.
|
|
||||||
* @param {Function} specDefinitions function that defines several specs.
|
|
||||||
*/
|
|
||||||
var describe = function(description, specDefinitions) {
|
|
||||||
return jasmine.getEnv().describe(description, specDefinitions);
|
|
||||||
};
|
|
||||||
if (isCommonJS) exports.describe = describe;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Disables a suite of specifications. Used to disable some suites in a file, or files, temporarily during development.
|
|
||||||
*
|
|
||||||
* @param {String} description A string, usually the class under test.
|
|
||||||
* @param {Function} specDefinitions function that defines several specs.
|
|
||||||
*/
|
|
||||||
var xdescribe = function(description, specDefinitions) {
|
|
||||||
return jasmine.getEnv().xdescribe(description, specDefinitions);
|
|
||||||
};
|
|
||||||
if (isCommonJS) exports.xdescribe = xdescribe;
|
|
||||||
|
|
||||||
|
|
||||||
// Provide the XMLHttpRequest class for IE 5.x-6.x:
|
// Provide the XMLHttpRequest class for IE 5.x-6.x:
|
||||||
jasmine.XmlHttpRequest = (typeof XMLHttpRequest == "undefined") ? function() {
|
jasmine.XmlHttpRequest = (typeof XMLHttpRequest == "undefined") ? function() {
|
||||||
function tryIt(f) {
|
function tryIt(f) {
|
||||||
|
|||||||
@@ -7,14 +7,6 @@ describe("base.js", function() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("jasmine.log", function() {
|
|
||||||
it("should accept n arguments", function() {
|
|
||||||
spyOn(jasmine.getEnv().currentSpec, 'log');
|
|
||||||
jasmine.log(1, 2, 3);
|
|
||||||
expect(jasmine.getEnv().currentSpec.log).toHaveBeenCalledWith(1, 2, 3);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe("jasmine.getGlobal", function() {
|
describe("jasmine.getGlobal", function() {
|
||||||
it("should return the global object", function() {
|
it("should return the global object", function() {
|
||||||
var globalObject = (function() {
|
var globalObject = (function() {
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ describe("Custom Matchers", function() {
|
|||||||
actual: true, expected: jasmine.undefined, message: "Passed." });
|
actual: true, expected: jasmine.undefined, message: "Passed." });
|
||||||
var failResult = new jasmine.ExpectationResult({passed: false, matcherName: 'toBeTrue',
|
var failResult = new jasmine.ExpectationResult({passed: false, matcherName: 'toBeTrue',
|
||||||
actual: false, expected: jasmine.undefined, message: "Expected false to be true." });
|
actual: false, expected: jasmine.undefined, message: "Expected false to be true." });
|
||||||
failResult.trace = jasmine.any(Object);
|
failResult.trace = originalJasmine.any(Object);
|
||||||
expect(spec.results().getItems()).toEqual([passResult, failResult]);
|
expect(spec.results().getItems()).toEqual([passResult, failResult]);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -94,4 +94,4 @@ describe("Custom Matchers", function() {
|
|||||||
|
|
||||||
expect(matcherCallArgs).toEqual([[], ['arg'], ['arg1', 'arg2']]);
|
expect(matcherCallArgs).toEqual([[], ['arg'], ['arg1', 'arg2']]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ describe("jasmine.Env", function() {
|
|||||||
var fakeReporter;
|
var fakeReporter;
|
||||||
|
|
||||||
beforeEach(function() {
|
beforeEach(function() {
|
||||||
fakeReporter = jasmine.createSpyObj("fakeReporter", ["log"]);
|
fakeReporter = originalJasmine.createSpyObj("fakeReporter", ["log"]);
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('version', function () {
|
describe('version', function () {
|
||||||
|
|||||||
@@ -391,7 +391,7 @@ describe("jasmine.Matchers", function() {
|
|||||||
var matcher;
|
var matcher;
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
matcher = {
|
matcher = {
|
||||||
jasmineMatches: jasmine.createSpy("jasmineMatches")
|
jasmineMatches: originalJasmine.createSpy("jasmineMatches")
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -694,7 +694,7 @@ describe("jasmine.Matchers", function() {
|
|||||||
TestClass = {
|
TestClass = {
|
||||||
normalFunction: function() {
|
normalFunction: function() {
|
||||||
},
|
},
|
||||||
spyFunction: jasmine.createSpy("My spy")
|
spyFunction: originalJasmine.createSpy("My spy")
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -974,7 +974,7 @@ describe("jasmine.Matchers", function() {
|
|||||||
describe("in real life", function () {
|
describe("in real life", function () {
|
||||||
var method;
|
var method;
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
method = jasmine.createSpy("method");
|
method = originalJasmine.createSpy("method");
|
||||||
method({a:"b", c:"d"});
|
method({a:"b", c:"d"});
|
||||||
});
|
});
|
||||||
it("works correctly for positive matches", function () {
|
it("works correctly for positive matches", function () {
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
describe("MockClock", function () {
|
// TODO: Disabling b/c this spec isn't testing what it thinks it is.
|
||||||
|
// Make a proper unit and intergration tests for this object
|
||||||
|
xdescribe("MockClock", function () {
|
||||||
|
|
||||||
beforeEach(function() {
|
beforeEach(function() {
|
||||||
jasmine.Clock.useMock();
|
jasmine.Clock.useMock();
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("setTimeout", function () {
|
describe("setTimeout", function () {
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ describe("jasmine.MultiReporter", function() {
|
|||||||
|
|
||||||
beforeEach(function() {
|
beforeEach(function() {
|
||||||
multiReporter = new jasmine.MultiReporter();
|
multiReporter = new jasmine.MultiReporter();
|
||||||
fakeReporter1 = jasmine.createSpyObj("fakeReporter1", ["reportSpecResults"]);
|
fakeReporter1 = originalJasmine.createSpyObj("fakeReporter1", ["reportSpecResults"]);
|
||||||
fakeReporter2 = jasmine.createSpyObj("fakeReporter2", ["reportSpecResults", "reportRunnerStarting"]);
|
fakeReporter2 = originalJasmine.createSpyObj("fakeReporter2", ["reportSpecResults", "reportRunnerStarting"]);
|
||||||
multiReporter.addReporter(fakeReporter1);
|
multiReporter.addReporter(fakeReporter1);
|
||||||
multiReporter.addReporter(fakeReporter2);
|
multiReporter.addReporter(fakeReporter2);
|
||||||
});
|
});
|
||||||
@@ -15,11 +15,11 @@ describe("jasmine.MultiReporter", function() {
|
|||||||
|
|
||||||
this.addMatchers({
|
this.addMatchers({
|
||||||
toDelegateMethod: function(methodName) {
|
toDelegateMethod: function(methodName) {
|
||||||
delegate[methodName] = jasmine.createSpy(methodName);
|
delegate[methodName] = originalJasmine.createSpy(methodName);
|
||||||
this.actual[methodName]("whatever argument");
|
this.actual[methodName]("whatever argument");
|
||||||
|
|
||||||
return delegate[methodName].wasCalled &&
|
return delegate[methodName].wasCalled &&
|
||||||
delegate[methodName].mostRecentCall.args.length == 1 &&
|
delegate[methodName].mostRecentCall.args.length == 1 &&
|
||||||
delegate[methodName].mostRecentCall.args[0] == "whatever argument";
|
delegate[methodName].mostRecentCall.args[0] == "whatever argument";
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -42,4 +42,4 @@ describe("jasmine.MultiReporter", function() {
|
|||||||
multiReporter.reportRunnerStarting('blah', 'foo');
|
multiReporter.reportRunnerStarting('blah', 'foo');
|
||||||
expect(fakeReporter2.reportRunnerStarting).toHaveBeenCalledWith('blah', 'foo');
|
expect(fakeReporter2.reportRunnerStarting).toHaveBeenCalledWith('blah', 'foo');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ describe("jasmine.Queue", function() {
|
|||||||
queue.next_ = function() {
|
queue.next_ = function() {
|
||||||
nestCount++;
|
nestCount++;
|
||||||
if (nestCount > maxNestCount) maxNestCount = nestCount;
|
if (nestCount > maxNestCount) maxNestCount = nestCount;
|
||||||
|
|
||||||
jasmine.Queue.prototype.next_.apply(queue, arguments);
|
jasmine.Queue.prototype.next_.apply(queue, arguments);
|
||||||
nestCount--;
|
nestCount--;
|
||||||
};
|
};
|
||||||
@@ -20,4 +19,4 @@ describe("jasmine.Queue", function() {
|
|||||||
queue.start();
|
queue.start();
|
||||||
expect(maxNestCount).toEqual(1);
|
expect(maxNestCount).toEqual(1);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -107,7 +107,7 @@ describe('RunnerTest', function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should run after a failing spec', function () {
|
it('should run after a failing spec', function () {
|
||||||
var afterEach = jasmine.createSpy();
|
var afterEach = originalJasmine.createSpy();
|
||||||
env.afterEach(afterEach);
|
env.afterEach(afterEach);
|
||||||
|
|
||||||
env.describe('suite', function () {
|
env.describe('suite', function () {
|
||||||
@@ -200,7 +200,7 @@ describe('RunnerTest', function() {
|
|||||||
describe('reporting', function () {
|
describe('reporting', function () {
|
||||||
var fakeReporter;
|
var fakeReporter;
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
fakeReporter = jasmine.createSpyObj("fakeReporter", ["log", "reportRunnerStarting", "reportRunnerResults"]);
|
fakeReporter = originalJasmine.createSpyObj("fakeReporter", ["log", "reportRunnerStarting", "reportRunnerResults"]);
|
||||||
env.addReporter(fakeReporter);
|
env.addReporter(fakeReporter);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -233,7 +233,7 @@ describe('RunnerTest', function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("should report when the tests start running", function() {
|
it("should report when the tests start running", function() {
|
||||||
var fakeReporter = jasmine.createSpyObj("fakeReporter", ["log", "reportRunnerStarting"]);
|
var fakeReporter = originalJasmine.createSpyObj("fakeReporter", ["log", "reportRunnerStarting"]);
|
||||||
env.addReporter(fakeReporter);
|
env.addReporter(fakeReporter);
|
||||||
|
|
||||||
|
|
||||||
@@ -277,4 +277,4 @@ describe('RunnerTest', function() {
|
|||||||
expect(suiteNames(suites)).toEqual([suite1.getFullName(), suite3.getFullName()]);
|
expect(suiteNames(suites)).toEqual([suite1.getFullName(), suite3.getFullName()]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ describe("jasmine spec running", function () {
|
|||||||
env = new jasmine.Env();
|
env = new jasmine.Env();
|
||||||
env.updateInterval = 0;
|
env.updateInterval = 0;
|
||||||
|
|
||||||
fakeTimer = new jasmine.FakeTimer();
|
fakeTimer = new originalJasmine.FakeTimer();
|
||||||
env.setTimeout = fakeTimer.setTimeout;
|
env.setTimeout = fakeTimer.setTimeout;
|
||||||
env.clearTimeout = fakeTimer.clearTimeout;
|
env.clearTimeout = fakeTimer.clearTimeout;
|
||||||
env.setInterval = fakeTimer.setInterval;
|
env.setInterval = fakeTimer.setInterval;
|
||||||
@@ -400,7 +400,7 @@ describe("jasmine spec running", function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("runs afterEach after timing out", function() {
|
it("runs afterEach after timing out", function() {
|
||||||
var afterEach = jasmine.createSpy('afterEach');
|
var afterEach = originalJasmine.createSpy('afterEach');
|
||||||
|
|
||||||
env.describe('foo', function () {
|
env.describe('foo', function () {
|
||||||
env.afterEach(afterEach);
|
env.afterEach(afterEach);
|
||||||
@@ -417,7 +417,7 @@ describe("jasmine spec running", function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("runs single-spec after functions after timing out", function() {
|
it("runs single-spec after functions after timing out", function() {
|
||||||
var after = jasmine.createSpy('after');
|
var after = originalJasmine.createSpy('after');
|
||||||
|
|
||||||
env.describe('foo', function () {
|
env.describe('foo', function () {
|
||||||
env.it('waitsFor', function () {
|
env.it('waitsFor', function () {
|
||||||
@@ -1200,7 +1200,7 @@ describe("jasmine spec running", function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('shouldn\'t execute specs in disabled suites', function() {
|
it('shouldn\'t execute specs in disabled suites', function() {
|
||||||
var spy = jasmine.createSpy();
|
var spy = originalJasmine.createSpy();
|
||||||
var disabledSuite = env.xdescribe('a disabled suite', function() {
|
var disabledSuite = env.xdescribe('a disabled suite', function() {
|
||||||
env.it('enabled spec, but should not be run', function() {
|
env.it('enabled spec, but should not be run', function() {
|
||||||
spy();
|
spy();
|
||||||
|
|||||||
@@ -113,12 +113,12 @@ describe('Spec', function () {
|
|||||||
spec.execute();
|
spec.execute();
|
||||||
var items = results.getItems();
|
var items = results.getItems();
|
||||||
expect(items).toEqual([
|
expect(items).toEqual([
|
||||||
jasmine.any(jasmine.ExpectationResult),
|
originalJasmine.any(jasmine.ExpectationResult),
|
||||||
jasmine.any(jasmine.ExpectationResult),
|
originalJasmine.any(jasmine.ExpectationResult),
|
||||||
jasmine.any(jasmine.MessageResult)
|
originalJasmine.any(jasmine.MessageResult)
|
||||||
]);
|
]);
|
||||||
var logResult = items[2];
|
var logResult = items[2];
|
||||||
expect(logResult.values).toEqual(["here's some log message", {key: 'value'}, 123]);
|
expect(logResult.values).toEqual(["here's some log message", {key: 'value'}, 123]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -165,7 +165,7 @@ describe('Spies', function () {
|
|||||||
expect(exception).toBeDefined();
|
expect(exception).toBeDefined();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
it('to spy on an undefined method throws exception', function() {
|
it('to spy on an undefined method throws exception', function() {
|
||||||
var TestClass = {
|
var TestClass = {
|
||||||
someFunction : function() {
|
someFunction : function() {
|
||||||
@@ -177,8 +177,8 @@ describe('Spies', function () {
|
|||||||
expect(function() {
|
expect(function() {
|
||||||
efunc();
|
efunc();
|
||||||
}).toThrow('someOtherFunction() method does not exist');
|
}).toThrow('someOtherFunction() method does not exist');
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should be able to reset a spy', function() {
|
it('should be able to reset a spy', function() {
|
||||||
var TestClass = { someFunction: function() {} };
|
var TestClass = { someFunction: function() {} };
|
||||||
@@ -195,7 +195,7 @@ describe('Spies', function () {
|
|||||||
describe("createSpyObj", function() {
|
describe("createSpyObj", function() {
|
||||||
it("should create an object with a bunch of spy methods when you call jasmine.createSpyObj()", function() {
|
it("should create an object with a bunch of spy methods when you call jasmine.createSpyObj()", function() {
|
||||||
var spyObj = jasmine.createSpyObj('BaseName', ['method1', 'method2']);
|
var spyObj = jasmine.createSpyObj('BaseName', ['method1', 'method2']);
|
||||||
expect(spyObj).toEqual({ method1: jasmine.any(Function), method2: jasmine.any(Function)});
|
expect(spyObj).toEqual({ method1: originalJasmine.any(Function), method2: originalJasmine.any(Function)});
|
||||||
expect(spyObj.method1.identity).toEqual('BaseName.method1');
|
expect(spyObj.method1.identity).toEqual('BaseName.method1');
|
||||||
expect(spyObj.method2.identity).toEqual('BaseName.method2');
|
expect(spyObj.method2.identity).toEqual('BaseName.method2');
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ describe('Suite', function() {
|
|||||||
env = new jasmine.Env();
|
env = new jasmine.Env();
|
||||||
env.updateInterval = 0;
|
env.updateInterval = 0;
|
||||||
|
|
||||||
fakeTimer = new jasmine.FakeTimer();
|
fakeTimer = new originalJasmine.FakeTimer();
|
||||||
env.setTimeout = fakeTimer.setTimeout;
|
env.setTimeout = fakeTimer.setTimeout;
|
||||||
env.clearTimeout = fakeTimer.clearTimeout;
|
env.clearTimeout = fakeTimer.clearTimeout;
|
||||||
env.setInterval = fakeTimer.setInterval;
|
env.setInterval = fakeTimer.setInterval;
|
||||||
@@ -117,4 +117,4 @@ describe('Suite', function() {
|
|||||||
expect(suite.specs().length).toEqual(3);
|
expect(suite.specs().length).toEqual(3);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ describe('WaitsForBlock', function () {
|
|||||||
timeout = 1000;
|
timeout = 1000;
|
||||||
spec = new jasmine.Spec(env, suite);
|
spec = new jasmine.Spec(env, suite);
|
||||||
message = "some error message";
|
message = "some error message";
|
||||||
onComplete = jasmine.createSpy("onComplete");
|
onComplete = originalJasmine.createSpy("onComplete");
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("jasmine.VERBOSE", function() {
|
describe("jasmine.VERBOSE", function() {
|
||||||
@@ -63,7 +63,7 @@ describe('WaitsForBlock', function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should fail spec and call onComplete if there is an error in the latchFunction', function() {
|
it('should fail spec and call onComplete if there is an error in the latchFunction', function() {
|
||||||
var latchFunction = jasmine.createSpy('latchFunction').andThrow('some error');
|
var latchFunction = originalJasmine.createSpy('latchFunction').andThrow('some error');
|
||||||
spyOn(spec, 'fail');
|
spyOn(spec, 'fail');
|
||||||
var block = new jasmine.WaitsForBlock(env, timeout, latchFunction, message, spec);
|
var block = new jasmine.WaitsForBlock(env, timeout, latchFunction, message, spec);
|
||||||
block.execute(onComplete);
|
block.execute(onComplete);
|
||||||
@@ -74,7 +74,7 @@ describe('WaitsForBlock', function () {
|
|||||||
describe("if latchFunction returns false", function() {
|
describe("if latchFunction returns false", function() {
|
||||||
var latchFunction, fakeTimer;
|
var latchFunction, fakeTimer;
|
||||||
beforeEach(function() {
|
beforeEach(function() {
|
||||||
latchFunction = jasmine.createSpy('latchFunction').andReturn(false);
|
latchFunction = originalJasmine.createSpy('latchFunction').andReturn(false);
|
||||||
fakeTimer = new jasmine.FakeTimer();
|
fakeTimer = new jasmine.FakeTimer();
|
||||||
env.setTimeout = fakeTimer.setTimeout;
|
env.setTimeout = fakeTimer.setTimeout;
|
||||||
env.clearTimeout = fakeTimer.clearTimeout;
|
env.clearTimeout = fakeTimer.clearTimeout;
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ describe("TrivialReporter", function() {
|
|||||||
|
|
||||||
var runner, spec, fakeTimer;
|
var runner, spec, fakeTimer;
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
fakeTimer = new jasmine.FakeTimer();
|
fakeTimer = new originalJasmine.FakeTimer();
|
||||||
env.setTimeout = fakeTimer.setTimeout;
|
env.setTimeout = fakeTimer.setTimeout;
|
||||||
env.clearTimeout = fakeTimer.clearTimeout;
|
env.clearTimeout = fakeTimer.clearTimeout;
|
||||||
env.setInterval = fakeTimer.setInterval;
|
env.setInterval = fakeTimer.setInterval;
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
jasmine_dir:
|
|
||||||
- 'src'
|
|
||||||
#This 'magic' inclusion order allows the travis build to pass.
|
#This 'magic' inclusion order allows the travis build to pass.
|
||||||
#TODO: search for the correct files to include to prevent
|
#TODO: search for the correct files to include to prevent
|
||||||
jasmine_files:
|
src_dir:
|
||||||
|
- 'src'
|
||||||
|
src_files:
|
||||||
- 'core/base.js'
|
- 'core/base.js'
|
||||||
- 'core/util.js'
|
- 'core/util.js'
|
||||||
- 'core/Reporter.js'
|
- 'core/Reporter.js'
|
||||||
@@ -24,15 +24,15 @@ jasmine_files:
|
|||||||
- 'html/HtmlReporterHelpers.js'
|
- 'html/HtmlReporterHelpers.js'
|
||||||
- 'html/HtmlReporter.js'
|
- 'html/HtmlReporter.js'
|
||||||
- '**/*.js'
|
- '**/*.js'
|
||||||
jasmine_css_files:
|
|
||||||
- 'html/jasmine.css'
|
|
||||||
src_files:
|
|
||||||
stylesheets:
|
stylesheets:
|
||||||
|
boot_dir: 'spec/support'
|
||||||
|
boot_files:
|
||||||
|
- 'boot.js'
|
||||||
|
- 'dev_boot.js'
|
||||||
helpers:
|
helpers:
|
||||||
- 'helpers/**/*.js'
|
- 'helpers/**/*.js'
|
||||||
spec_files:
|
spec_files:
|
||||||
- '**/*[Ss]pec.js'
|
- '**/*[Ss]pec.js'
|
||||||
src_dir:
|
|
||||||
spec_dir:
|
spec_dir:
|
||||||
- 'spec'
|
- 'spec'
|
||||||
|
|
||||||
|
|||||||
1
spec/support/boot.js
Symbolic link
1
spec/support/boot.js
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../lib/jasmine-core/boot/boot.js
|
||||||
5
spec/support/dev_boot.js
Normal file
5
spec/support/dev_boot.js
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
var originalJasmine = jasmine;
|
||||||
|
//copy clock methods back into window,
|
||||||
|
//so second jasmine load doesn't use jasmine clock methods.
|
||||||
|
jasmine.util.extend(window, jasmine.Clock.real);
|
||||||
|
jasmine = null;
|
||||||
555
src/core/Env.js
555
src/core/Env.js
@@ -3,298 +3,305 @@
|
|||||||
*
|
*
|
||||||
* @constructor
|
* @constructor
|
||||||
*/
|
*/
|
||||||
jasmine.Env = function() {
|
(function() {
|
||||||
this.currentSpec = null;
|
|
||||||
this.currentSuite = null;
|
|
||||||
this.currentRunner_ = new jasmine.Runner(this);
|
|
||||||
|
|
||||||
this.reporter = new jasmine.MultiReporter();
|
function createSpec(env, suite, description) {
|
||||||
|
return new jasmine.Spec(env, suite, description);
|
||||||
|
}
|
||||||
|
|
||||||
this.updateInterval = jasmine.DEFAULT_UPDATE_INTERVAL;
|
jasmine.Env = function() {
|
||||||
this.defaultTimeoutInterval = jasmine.DEFAULT_TIMEOUT_INTERVAL;
|
this.currentSpec = null;
|
||||||
this.lastUpdate = 0;
|
this.currentSuite = null;
|
||||||
this.specFilter = function() {
|
this.currentRunner_ = new jasmine.Runner(this);
|
||||||
return true;
|
|
||||||
|
this.reporter = new jasmine.MultiReporter();
|
||||||
|
|
||||||
|
this.updateInterval = jasmine.DEFAULT_UPDATE_INTERVAL;
|
||||||
|
this.defaultTimeoutInterval = jasmine.DEFAULT_TIMEOUT_INTERVAL;
|
||||||
|
this.lastUpdate = 0;
|
||||||
|
this.specFilter = function() {
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
this.nextSpecId_ = 0;
|
||||||
|
this.nextSuiteId_ = 0;
|
||||||
|
this.equalityTesters_ = [];
|
||||||
|
|
||||||
|
// wrap matchers
|
||||||
|
this.matchersClass = function() {
|
||||||
|
jasmine.Matchers.apply(this, arguments);
|
||||||
|
};
|
||||||
|
jasmine.util.inherit(this.matchersClass, jasmine.Matchers);
|
||||||
|
|
||||||
|
jasmine.Matchers.wrapInto_(jasmine.Matchers.prototype, this.matchersClass);
|
||||||
};
|
};
|
||||||
|
|
||||||
this.nextSpecId_ = 0;
|
|
||||||
this.nextSuiteId_ = 0;
|
|
||||||
this.equalityTesters_ = [];
|
|
||||||
|
|
||||||
// wrap matchers
|
jasmine.Env.prototype.setTimeout = jasmine.setTimeout;
|
||||||
this.matchersClass = function() {
|
jasmine.Env.prototype.clearTimeout = jasmine.clearTimeout;
|
||||||
jasmine.Matchers.apply(this, arguments);
|
jasmine.Env.prototype.setInterval = jasmine.setInterval;
|
||||||
};
|
jasmine.Env.prototype.clearInterval = jasmine.clearInterval;
|
||||||
jasmine.util.inherit(this.matchersClass, jasmine.Matchers);
|
|
||||||
|
|
||||||
jasmine.Matchers.wrapInto_(jasmine.Matchers.prototype, this.matchersClass);
|
/**
|
||||||
};
|
* @returns an object containing jasmine version build info, if set.
|
||||||
|
*/
|
||||||
|
jasmine.Env.prototype.version = function () {
|
||||||
jasmine.Env.prototype.setTimeout = jasmine.setTimeout;
|
if (jasmine.version_) {
|
||||||
jasmine.Env.prototype.clearTimeout = jasmine.clearTimeout;
|
return jasmine.version_;
|
||||||
jasmine.Env.prototype.setInterval = jasmine.setInterval;
|
} else {
|
||||||
jasmine.Env.prototype.clearInterval = jasmine.clearInterval;
|
throw new Error('Version not set');
|
||||||
|
|
||||||
/**
|
|
||||||
* @returns an object containing jasmine version build info, if set.
|
|
||||||
*/
|
|
||||||
jasmine.Env.prototype.version = function () {
|
|
||||||
if (jasmine.version_) {
|
|
||||||
return jasmine.version_;
|
|
||||||
} else {
|
|
||||||
throw new Error('Version not set');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @returns string containing jasmine version build info, if set.
|
|
||||||
*/
|
|
||||||
jasmine.Env.prototype.versionString = function() {
|
|
||||||
if (!jasmine.version_) {
|
|
||||||
return "version unknown";
|
|
||||||
}
|
|
||||||
|
|
||||||
var version = this.version();
|
|
||||||
var versionString = version.major + "." + version.minor + "." + version.build;
|
|
||||||
if (version.release_candidate) {
|
|
||||||
versionString += ".rc" + version.release_candidate;
|
|
||||||
}
|
|
||||||
versionString += " revision " + version.revision;
|
|
||||||
return versionString;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @returns a sequential integer starting at 0
|
|
||||||
*/
|
|
||||||
jasmine.Env.prototype.nextSpecId = function () {
|
|
||||||
return this.nextSpecId_++;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @returns a sequential integer starting at 0
|
|
||||||
*/
|
|
||||||
jasmine.Env.prototype.nextSuiteId = function () {
|
|
||||||
return this.nextSuiteId_++;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Register a reporter to receive status updates from Jasmine.
|
|
||||||
* @param {jasmine.Reporter} reporter An object which will receive status updates.
|
|
||||||
*/
|
|
||||||
jasmine.Env.prototype.addReporter = function(reporter) {
|
|
||||||
this.reporter.addReporter(reporter);
|
|
||||||
};
|
|
||||||
|
|
||||||
jasmine.Env.prototype.execute = function() {
|
|
||||||
this.currentRunner_.execute();
|
|
||||||
};
|
|
||||||
|
|
||||||
jasmine.Env.prototype.describe = function(description, specDefinitions) {
|
|
||||||
var suite = new jasmine.Suite(this, description, specDefinitions, this.currentSuite);
|
|
||||||
|
|
||||||
var parentSuite = this.currentSuite;
|
|
||||||
if (parentSuite) {
|
|
||||||
parentSuite.add(suite);
|
|
||||||
} else {
|
|
||||||
this.currentRunner_.add(suite);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.currentSuite = suite;
|
|
||||||
|
|
||||||
var declarationError = null;
|
|
||||||
try {
|
|
||||||
specDefinitions.call(suite);
|
|
||||||
} catch(e) {
|
|
||||||
declarationError = e;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (declarationError) {
|
|
||||||
this.it("encountered a declaration exception", function() {
|
|
||||||
throw declarationError;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
this.currentSuite = parentSuite;
|
|
||||||
|
|
||||||
return suite;
|
|
||||||
};
|
|
||||||
|
|
||||||
jasmine.Env.prototype.beforeEach = function(beforeEachFunction) {
|
|
||||||
if (this.currentSuite) {
|
|
||||||
this.currentSuite.beforeEach(beforeEachFunction);
|
|
||||||
} else {
|
|
||||||
this.currentRunner_.beforeEach(beforeEachFunction);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
jasmine.Env.prototype.currentRunner = function () {
|
|
||||||
return this.currentRunner_;
|
|
||||||
};
|
|
||||||
|
|
||||||
jasmine.Env.prototype.afterEach = function(afterEachFunction) {
|
|
||||||
if (this.currentSuite) {
|
|
||||||
this.currentSuite.afterEach(afterEachFunction);
|
|
||||||
} else {
|
|
||||||
this.currentRunner_.afterEach(afterEachFunction);
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
jasmine.Env.prototype.xdescribe = function(desc, specDefinitions) {
|
|
||||||
return {
|
|
||||||
execute: function() {
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
};
|
|
||||||
|
|
||||||
jasmine.Env.prototype.it = function(description, func) {
|
/**
|
||||||
var spec = new jasmine.Spec(this, this.currentSuite, description);
|
* @returns string containing jasmine version build info, if set.
|
||||||
this.currentSuite.add(spec);
|
*/
|
||||||
this.currentSpec = spec;
|
jasmine.Env.prototype.versionString = function() {
|
||||||
|
if (!jasmine.version_) {
|
||||||
if (func) {
|
return "version unknown";
|
||||||
spec.runs(func);
|
|
||||||
}
|
|
||||||
|
|
||||||
return spec;
|
|
||||||
};
|
|
||||||
|
|
||||||
jasmine.Env.prototype.xit = function(desc, func) {
|
|
||||||
return {
|
|
||||||
id: this.nextSpecId(),
|
|
||||||
runs: function() {
|
|
||||||
}
|
}
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
jasmine.Env.prototype.compareRegExps_ = function(a, b, mismatchKeys, mismatchValues) {
|
var version = this.version();
|
||||||
if (a.source != b.source)
|
var versionString = version.major + "." + version.minor + "." + version.build;
|
||||||
mismatchValues.push("expected pattern /" + b.source + "/ is not equal to the pattern /" + a.source + "/");
|
if (version.release_candidate) {
|
||||||
|
versionString += ".rc" + version.release_candidate;
|
||||||
if (a.ignoreCase != b.ignoreCase)
|
}
|
||||||
mismatchValues.push("expected modifier i was" + (b.ignoreCase ? " " : " not ") + "set and does not equal the origin modifier");
|
versionString += " revision " + version.revision;
|
||||||
|
return versionString;
|
||||||
if (a.global != b.global)
|
|
||||||
mismatchValues.push("expected modifier g was" + (b.global ? " " : " not ") + "set and does not equal the origin modifier");
|
|
||||||
|
|
||||||
if (a.multiline != b.multiline)
|
|
||||||
mismatchValues.push("expected modifier m was" + (b.multiline ? " " : " not ") + "set and does not equal the origin modifier");
|
|
||||||
|
|
||||||
if (a.sticky != b.sticky)
|
|
||||||
mismatchValues.push("expected modifier y was" + (b.sticky ? " " : " not ") + "set and does not equal the origin modifier");
|
|
||||||
|
|
||||||
return (mismatchValues.length === 0);
|
|
||||||
};
|
|
||||||
|
|
||||||
jasmine.Env.prototype.compareObjects_ = function(a, b, mismatchKeys, mismatchValues) {
|
|
||||||
if (a.__Jasmine_been_here_before__ === b && b.__Jasmine_been_here_before__ === a) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.__Jasmine_been_here_before__ = b;
|
|
||||||
b.__Jasmine_been_here_before__ = a;
|
|
||||||
|
|
||||||
var hasKey = function(obj, keyName) {
|
|
||||||
return obj !== null && obj[keyName] !== jasmine.undefined;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
for (var property in b) {
|
/**
|
||||||
if (!hasKey(a, property) && hasKey(b, property)) {
|
* @returns a sequential integer starting at 0
|
||||||
mismatchKeys.push("expected has key '" + property + "', but missing from actual.");
|
*/
|
||||||
|
jasmine.Env.prototype.nextSpecId = function () {
|
||||||
|
return this.nextSpecId_++;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @returns a sequential integer starting at 0
|
||||||
|
*/
|
||||||
|
jasmine.Env.prototype.nextSuiteId = function () {
|
||||||
|
return this.nextSuiteId_++;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register a reporter to receive status updates from Jasmine.
|
||||||
|
* @param {jasmine.Reporter} reporter An object which will receive status updates.
|
||||||
|
*/
|
||||||
|
jasmine.Env.prototype.addReporter = function(reporter) {
|
||||||
|
this.reporter.addReporter(reporter);
|
||||||
|
};
|
||||||
|
|
||||||
|
jasmine.Env.prototype.execute = function() {
|
||||||
|
this.currentRunner_.execute();
|
||||||
|
};
|
||||||
|
|
||||||
|
jasmine.Env.prototype.describe = function(description, specDefinitions) {
|
||||||
|
var suite = new jasmine.Suite(this, description, specDefinitions, this.currentSuite);
|
||||||
|
|
||||||
|
var parentSuite = this.currentSuite;
|
||||||
|
if (parentSuite) {
|
||||||
|
parentSuite.add(suite);
|
||||||
|
} else {
|
||||||
|
this.currentRunner_.add(suite);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
for (property in a) {
|
this.currentSuite = suite;
|
||||||
if (!hasKey(b, property) && hasKey(a, property)) {
|
|
||||||
mismatchKeys.push("expected missing key '" + property + "', but present in actual.");
|
var declarationError = null;
|
||||||
|
try {
|
||||||
|
specDefinitions.call(suite);
|
||||||
|
} catch(e) {
|
||||||
|
declarationError = e;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
for (property in b) {
|
if (declarationError) {
|
||||||
if (property == '__Jasmine_been_here_before__') continue;
|
this.it("encountered a declaration exception", function() {
|
||||||
if (!this.equals_(a[property], b[property], mismatchKeys, mismatchValues)) {
|
throw declarationError;
|
||||||
mismatchValues.push("'" + property + "' was '" + (b[property] ? jasmine.util.htmlEscape(b[property].toString()) : b[property]) + "' in expected, but was '" + (a[property] ? jasmine.util.htmlEscape(a[property].toString()) : a[property]) + "' in actual.");
|
});
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (jasmine.isArray_(a) && jasmine.isArray_(b) && a.length != b.length) {
|
this.currentSuite = parentSuite;
|
||||||
mismatchValues.push("arrays were not the same length");
|
|
||||||
}
|
|
||||||
|
|
||||||
delete a.__Jasmine_been_here_before__;
|
return suite;
|
||||||
delete b.__Jasmine_been_here_before__;
|
};
|
||||||
return (mismatchKeys.length === 0 && mismatchValues.length === 0);
|
|
||||||
};
|
|
||||||
|
|
||||||
jasmine.Env.prototype.equals_ = function(a, b, mismatchKeys, mismatchValues) {
|
jasmine.Env.prototype.beforeEach = function(beforeEachFunction) {
|
||||||
mismatchKeys = mismatchKeys || [];
|
if (this.currentSuite) {
|
||||||
mismatchValues = mismatchValues || [];
|
this.currentSuite.beforeEach(beforeEachFunction);
|
||||||
|
} else {
|
||||||
for (var i = 0; i < this.equalityTesters_.length; i++) {
|
this.currentRunner_.beforeEach(beforeEachFunction);
|
||||||
var equalityTester = this.equalityTesters_[i];
|
|
||||||
var result = equalityTester(a, b, this, mismatchKeys, mismatchValues);
|
|
||||||
if (result !== jasmine.undefined) return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (a === b) return true;
|
|
||||||
|
|
||||||
if (a === jasmine.undefined || a === null || b === jasmine.undefined || b === null) {
|
|
||||||
return (a == jasmine.undefined && b == jasmine.undefined);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (jasmine.isDomNode(a) && jasmine.isDomNode(b)) {
|
|
||||||
return a === b;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (a instanceof Date && b instanceof Date) {
|
|
||||||
return a.getTime() == b.getTime();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (a.jasmineMatches) {
|
|
||||||
return a.jasmineMatches(b);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (b.jasmineMatches) {
|
|
||||||
return b.jasmineMatches(a);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (a instanceof jasmine.Matchers.ObjectContaining) {
|
|
||||||
return a.matches(b);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (b instanceof jasmine.Matchers.ObjectContaining) {
|
|
||||||
return b.matches(a);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (jasmine.isString_(a) && jasmine.isString_(b)) {
|
|
||||||
return (a == b);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (jasmine.isNumber_(a) && jasmine.isNumber_(b)) {
|
|
||||||
return (a == b);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (a instanceof RegExp && b instanceof RegExp) {
|
|
||||||
return this.compareRegExps_(a, b, mismatchKeys, mismatchValues);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (typeof a === "object" && typeof b === "object") {
|
|
||||||
return this.compareObjects_(a, b, mismatchKeys, mismatchValues);
|
|
||||||
}
|
|
||||||
|
|
||||||
//Straight check
|
|
||||||
return (a === b);
|
|
||||||
};
|
|
||||||
|
|
||||||
jasmine.Env.prototype.contains_ = function(haystack, needle) {
|
|
||||||
if (jasmine.isArray_(haystack)) {
|
|
||||||
for (var i = 0; i < haystack.length; i++) {
|
|
||||||
if (this.equals_(haystack[i], needle)) return true;
|
|
||||||
}
|
}
|
||||||
return false;
|
};
|
||||||
}
|
|
||||||
return haystack.indexOf(needle) >= 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
jasmine.Env.prototype.addEqualityTester = function(equalityTester) {
|
jasmine.Env.prototype.currentRunner = function () {
|
||||||
this.equalityTesters_.push(equalityTester);
|
return this.currentRunner_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
jasmine.Env.prototype.afterEach = function(afterEachFunction) {
|
||||||
|
if (this.currentSuite) {
|
||||||
|
this.currentSuite.afterEach(afterEachFunction);
|
||||||
|
} else {
|
||||||
|
this.currentRunner_.afterEach(afterEachFunction);
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
jasmine.Env.prototype.xdescribe = function(desc, specDefinitions) {
|
||||||
|
return {
|
||||||
|
execute: function() {
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
jasmine.Env.prototype.it = function(description, func) {
|
||||||
|
var spec = createSpec(this, this.currentSuite, description);
|
||||||
|
this.currentSuite.add(spec);
|
||||||
|
this.currentSpec = spec;
|
||||||
|
|
||||||
|
if (func) {
|
||||||
|
spec.runs(func);
|
||||||
|
}
|
||||||
|
|
||||||
|
return spec;
|
||||||
|
};
|
||||||
|
|
||||||
|
jasmine.Env.prototype.xit = function(desc, func) {
|
||||||
|
return {
|
||||||
|
id: this.nextSpecId(),
|
||||||
|
runs: function() {
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
jasmine.Env.prototype.compareRegExps_ = function(a, b, mismatchKeys, mismatchValues) {
|
||||||
|
if (a.source != b.source)
|
||||||
|
mismatchValues.push("expected pattern /" + b.source + "/ is not equal to the pattern /" + a.source + "/");
|
||||||
|
|
||||||
|
if (a.ignoreCase != b.ignoreCase)
|
||||||
|
mismatchValues.push("expected modifier i was" + (b.ignoreCase ? " " : " not ") + "set and does not equal the origin modifier");
|
||||||
|
|
||||||
|
if (a.global != b.global)
|
||||||
|
mismatchValues.push("expected modifier g was" + (b.global ? " " : " not ") + "set and does not equal the origin modifier");
|
||||||
|
|
||||||
|
if (a.multiline != b.multiline)
|
||||||
|
mismatchValues.push("expected modifier m was" + (b.multiline ? " " : " not ") + "set and does not equal the origin modifier");
|
||||||
|
|
||||||
|
if (a.sticky != b.sticky)
|
||||||
|
mismatchValues.push("expected modifier y was" + (b.sticky ? " " : " not ") + "set and does not equal the origin modifier");
|
||||||
|
|
||||||
|
return (mismatchValues.length === 0);
|
||||||
|
};
|
||||||
|
|
||||||
|
jasmine.Env.prototype.compareObjects_ = function(a, b, mismatchKeys, mismatchValues) {
|
||||||
|
if (a.__Jasmine_been_here_before__ === b && b.__Jasmine_been_here_before__ === a) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.__Jasmine_been_here_before__ = b;
|
||||||
|
b.__Jasmine_been_here_before__ = a;
|
||||||
|
|
||||||
|
var hasKey = function(obj, keyName) {
|
||||||
|
return obj !== null && obj[keyName] !== jasmine.undefined;
|
||||||
|
};
|
||||||
|
|
||||||
|
for (var property in b) {
|
||||||
|
if (!hasKey(a, property) && hasKey(b, property)) {
|
||||||
|
mismatchKeys.push("expected has key '" + property + "', but missing from actual.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (property in a) {
|
||||||
|
if (!hasKey(b, property) && hasKey(a, property)) {
|
||||||
|
mismatchKeys.push("expected missing key '" + property + "', but present in actual.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (property in b) {
|
||||||
|
if (property == '__Jasmine_been_here_before__') continue;
|
||||||
|
if (!this.equals_(a[property], b[property], mismatchKeys, mismatchValues)) {
|
||||||
|
mismatchValues.push("'" + property + "' was '" + (b[property] ? jasmine.util.htmlEscape(b[property].toString()) : b[property]) + "' in expected, but was '" + (a[property] ? jasmine.util.htmlEscape(a[property].toString()) : a[property]) + "' in actual.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (jasmine.isArray_(a) && jasmine.isArray_(b) && a.length != b.length) {
|
||||||
|
mismatchValues.push("arrays were not the same length");
|
||||||
|
}
|
||||||
|
|
||||||
|
delete a.__Jasmine_been_here_before__;
|
||||||
|
delete b.__Jasmine_been_here_before__;
|
||||||
|
return (mismatchKeys.length === 0 && mismatchValues.length === 0);
|
||||||
|
};
|
||||||
|
|
||||||
|
jasmine.Env.prototype.equals_ = function(a, b, mismatchKeys, mismatchValues) {
|
||||||
|
mismatchKeys = mismatchKeys || [];
|
||||||
|
mismatchValues = mismatchValues || [];
|
||||||
|
|
||||||
|
for (var i = 0; i < this.equalityTesters_.length; i++) {
|
||||||
|
var equalityTester = this.equalityTesters_[i];
|
||||||
|
var result = equalityTester(a, b, this, mismatchKeys, mismatchValues);
|
||||||
|
if (result !== jasmine.undefined) return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (a === b) return true;
|
||||||
|
|
||||||
|
if (a === jasmine.undefined || a === null || b === jasmine.undefined || b === null) {
|
||||||
|
return (a == jasmine.undefined && b == jasmine.undefined);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (jasmine.isDomNode(a) && jasmine.isDomNode(b)) {
|
||||||
|
return a === b;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (a instanceof Date && b instanceof Date) {
|
||||||
|
return a.getTime() == b.getTime();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (a.jasmineMatches) {
|
||||||
|
return a.jasmineMatches(b);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (b.jasmineMatches) {
|
||||||
|
return b.jasmineMatches(a);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (a instanceof jasmine.Matchers.ObjectContaining) {
|
||||||
|
return a.matches(b);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (b instanceof jasmine.Matchers.ObjectContaining) {
|
||||||
|
return b.matches(a);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (jasmine.isString_(a) && jasmine.isString_(b)) {
|
||||||
|
return (a == b);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (jasmine.isNumber_(a) && jasmine.isNumber_(b)) {
|
||||||
|
return (a == b);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (a instanceof RegExp && b instanceof RegExp) {
|
||||||
|
return this.compareRegExps_(a, b, mismatchKeys, mismatchValues);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof a === "object" && typeof b === "object") {
|
||||||
|
return this.compareObjects_(a, b, mismatchKeys, mismatchValues);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Straight check
|
||||||
|
return (a === b);
|
||||||
|
};
|
||||||
|
|
||||||
|
jasmine.Env.prototype.contains_ = function(haystack, needle) {
|
||||||
|
if (jasmine.isArray_(haystack)) {
|
||||||
|
for (var i = 0; i < haystack.length; i++) {
|
||||||
|
if (this.equals_(haystack[i], needle)) return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return haystack.indexOf(needle) >= 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
jasmine.Env.prototype.addEqualityTester = function(equalityTester) {
|
||||||
|
this.equalityTesters_.push(equalityTester);
|
||||||
|
};
|
||||||
|
}());
|
||||||
|
|||||||
158
src/core/base.js
158
src/core/base.js
@@ -1,4 +1,3 @@
|
|||||||
var isCommonJS = typeof window == "undefined" && typeof exports == "object";
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Top level namespace for Jasmine, a lightweight JavaScript BDD/spec/testing framework.
|
* Top level namespace for Jasmine, a lightweight JavaScript BDD/spec/testing framework.
|
||||||
@@ -6,7 +5,7 @@ var isCommonJS = typeof window == "undefined" && typeof exports == "object";
|
|||||||
* @namespace
|
* @namespace
|
||||||
*/
|
*/
|
||||||
var jasmine = {};
|
var jasmine = {};
|
||||||
if (isCommonJS) exports.jasmine = jasmine;
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
@@ -128,6 +127,7 @@ jasmine.ExpectationResult.prototype.passed = function () {
|
|||||||
*/
|
*/
|
||||||
jasmine.getEnv = function() {
|
jasmine.getEnv = function() {
|
||||||
var env = jasmine.currentEnv_ = jasmine.currentEnv_ || new jasmine.Env();
|
var env = jasmine.currentEnv_ = jasmine.currentEnv_ || new jasmine.Env();
|
||||||
|
//jasmine. singletons in here (setTimeout blah blah).
|
||||||
return env;
|
return env;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -462,160 +462,6 @@ jasmine.log = function() {
|
|||||||
spec.log.apply(spec, arguments);
|
spec.log.apply(spec, arguments);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Function that installs a spy on an existing object's method name. Used within a Spec to create a spy.
|
|
||||||
*
|
|
||||||
* @example
|
|
||||||
* // spy example
|
|
||||||
* var foo = {
|
|
||||||
* not: function(bool) { return !bool; }
|
|
||||||
* }
|
|
||||||
* spyOn(foo, 'not'); // actual foo.not will not be called, execution stops
|
|
||||||
*
|
|
||||||
* @see jasmine.createSpy
|
|
||||||
* @param obj
|
|
||||||
* @param methodName
|
|
||||||
* @return {jasmine.Spy} a Jasmine spy that can be chained with all spy methods
|
|
||||||
*/
|
|
||||||
var spyOn = function(obj, methodName) {
|
|
||||||
return jasmine.getEnv().currentSpec.spyOn(obj, methodName);
|
|
||||||
};
|
|
||||||
if (isCommonJS) exports.spyOn = spyOn;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a Jasmine spec that will be added to the current suite.
|
|
||||||
*
|
|
||||||
* // TODO: pending tests
|
|
||||||
*
|
|
||||||
* @example
|
|
||||||
* it('should be true', function() {
|
|
||||||
* expect(true).toEqual(true);
|
|
||||||
* });
|
|
||||||
*
|
|
||||||
* @param {String} desc description of this specification
|
|
||||||
* @param {Function} func defines the preconditions and expectations of the spec
|
|
||||||
*/
|
|
||||||
var it = function(desc, func) {
|
|
||||||
return jasmine.getEnv().it(desc, func);
|
|
||||||
};
|
|
||||||
if (isCommonJS) exports.it = it;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a <em>disabled</em> Jasmine spec.
|
|
||||||
*
|
|
||||||
* A convenience method that allows existing specs to be disabled temporarily during development.
|
|
||||||
*
|
|
||||||
* @param {String} desc description of this specification
|
|
||||||
* @param {Function} func defines the preconditions and expectations of the spec
|
|
||||||
*/
|
|
||||||
var xit = function(desc, func) {
|
|
||||||
return jasmine.getEnv().xit(desc, func);
|
|
||||||
};
|
|
||||||
if (isCommonJS) exports.xit = xit;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Starts a chain for a Jasmine expectation.
|
|
||||||
*
|
|
||||||
* It is passed an Object that is the actual value and should chain to one of the many
|
|
||||||
* jasmine.Matchers functions.
|
|
||||||
*
|
|
||||||
* @param {Object} actual Actual value to test against and expected value
|
|
||||||
* @return {jasmine.Matchers}
|
|
||||||
*/
|
|
||||||
var expect = function(actual) {
|
|
||||||
return jasmine.getEnv().currentSpec.expect(actual);
|
|
||||||
};
|
|
||||||
if (isCommonJS) exports.expect = expect;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Defines part of a jasmine spec. Used in cominbination with waits or waitsFor in asynchrnous specs.
|
|
||||||
*
|
|
||||||
* @param {Function} func Function that defines part of a jasmine spec.
|
|
||||||
*/
|
|
||||||
var runs = function(func) {
|
|
||||||
jasmine.getEnv().currentSpec.runs(func);
|
|
||||||
};
|
|
||||||
if (isCommonJS) exports.runs = runs;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Waits a fixed time period before moving to the next block.
|
|
||||||
*
|
|
||||||
* @deprecated Use waitsFor() instead
|
|
||||||
* @param {Number} timeout milliseconds to wait
|
|
||||||
*/
|
|
||||||
var waits = function(timeout) {
|
|
||||||
jasmine.getEnv().currentSpec.waits(timeout);
|
|
||||||
};
|
|
||||||
if (isCommonJS) exports.waits = waits;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Waits for the latchFunction to return true before proceeding to the next block.
|
|
||||||
*
|
|
||||||
* @param {Function} latchFunction
|
|
||||||
* @param {String} optional_timeoutMessage
|
|
||||||
* @param {Number} optional_timeout
|
|
||||||
*/
|
|
||||||
var waitsFor = function(latchFunction, optional_timeoutMessage, optional_timeout) {
|
|
||||||
jasmine.getEnv().currentSpec.waitsFor.apply(jasmine.getEnv().currentSpec, arguments);
|
|
||||||
};
|
|
||||||
if (isCommonJS) exports.waitsFor = waitsFor;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A function that is called before each spec in a suite.
|
|
||||||
*
|
|
||||||
* Used for spec setup, including validating assumptions.
|
|
||||||
*
|
|
||||||
* @param {Function} beforeEachFunction
|
|
||||||
*/
|
|
||||||
var beforeEach = function(beforeEachFunction) {
|
|
||||||
jasmine.getEnv().beforeEach(beforeEachFunction);
|
|
||||||
};
|
|
||||||
if (isCommonJS) exports.beforeEach = beforeEach;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A function that is called after each spec in a suite.
|
|
||||||
*
|
|
||||||
* Used for restoring any state that is hijacked during spec execution.
|
|
||||||
*
|
|
||||||
* @param {Function} afterEachFunction
|
|
||||||
*/
|
|
||||||
var afterEach = function(afterEachFunction) {
|
|
||||||
jasmine.getEnv().afterEach(afterEachFunction);
|
|
||||||
};
|
|
||||||
if (isCommonJS) exports.afterEach = afterEach;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Defines a suite of specifications.
|
|
||||||
*
|
|
||||||
* Stores the description and all defined specs in the Jasmine environment as one suite of specs. Variables declared
|
|
||||||
* are accessible by calls to beforeEach, it, and afterEach. Describe blocks can be nested, allowing for specialization
|
|
||||||
* of setup in some tests.
|
|
||||||
*
|
|
||||||
* @example
|
|
||||||
* // TODO: a simple suite
|
|
||||||
*
|
|
||||||
* // TODO: a simple suite with a nested describe block
|
|
||||||
*
|
|
||||||
* @param {String} description A string, usually the class under test.
|
|
||||||
* @param {Function} specDefinitions function that defines several specs.
|
|
||||||
*/
|
|
||||||
var describe = function(description, specDefinitions) {
|
|
||||||
return jasmine.getEnv().describe(description, specDefinitions);
|
|
||||||
};
|
|
||||||
if (isCommonJS) exports.describe = describe;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Disables a suite of specifications. Used to disable some suites in a file, or files, temporarily during development.
|
|
||||||
*
|
|
||||||
* @param {String} description A string, usually the class under test.
|
|
||||||
* @param {Function} specDefinitions function that defines several specs.
|
|
||||||
*/
|
|
||||||
var xdescribe = function(description, specDefinitions) {
|
|
||||||
return jasmine.getEnv().xdescribe(description, specDefinitions);
|
|
||||||
};
|
|
||||||
if (isCommonJS) exports.xdescribe = xdescribe;
|
|
||||||
|
|
||||||
|
|
||||||
// Provide the XMLHttpRequest class for IE 5.x-6.x:
|
// Provide the XMLHttpRequest class for IE 5.x-6.x:
|
||||||
jasmine.XmlHttpRequest = (typeof XMLHttpRequest == "undefined") ? function() {
|
jasmine.XmlHttpRequest = (typeof XMLHttpRequest == "undefined") ? function() {
|
||||||
function tryIt(f) {
|
function tryIt(f) {
|
||||||
|
|||||||
Reference in New Issue
Block a user