From 40e3020fdc4c2603bc6659194fdfd5a4b1c2ef61 Mon Sep 17 00:00:00 2001 From: Sheel Choksi Date: Tue, 29 Oct 2013 14:01:40 -0700 Subject: [PATCH] Build distribution for 2.0.0-rc5 and associated standalone distribution --- dist/jasmine-standalone-2.0.0-rc5.zip | Bin 0 -> 32004 bytes lib/jasmine-core/boot.js | 7 +- lib/jasmine-core/jasmine-html.js | 9 +- lib/jasmine-core/jasmine.js | 517 ++++++++++++-------------- lib/jasmine-core/version.rb | 2 +- package.json | 2 +- 6 files changed, 255 insertions(+), 282 deletions(-) create mode 100644 dist/jasmine-standalone-2.0.0-rc5.zip diff --git a/dist/jasmine-standalone-2.0.0-rc5.zip b/dist/jasmine-standalone-2.0.0-rc5.zip new file mode 100644 index 0000000000000000000000000000000000000000..7dae0038a7d3aa43b085e9bbefff7fe3ddc82052 GIT binary patch literal 32004 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 MzG9C8*FV4h4+LH}A^-pY literal 0 HcmV?d00001 diff --git a/lib/jasmine-core/boot.js b/lib/jasmine-core/boot.js index ec918a83..e2e0c86d 100644 --- a/lib/jasmine-core/boot.js +++ b/lib/jasmine-core/boot.js @@ -91,10 +91,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. return env.spyOn(obj, methodName); }, - addCustomEqualityTester: function(tester) { - env.addCustomEqualityTester(tester); - }, - jsApiReporter: new jasmine.JsApiReporter({ timer: new jasmine.Timer() }) @@ -149,7 +145,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ var htmlReporter = new jasmine.HtmlReporter({ env: env, - queryString: queryString, onRaiseExceptionsClick: function() { queryString.setParam("catch", !env.catchingExceptions()); }, getContainer: function() { return document.body; }, createElement: function() { return document.createElement.apply(document, arguments); }, @@ -197,4 +192,4 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. return destination; } -}()); \ No newline at end of file +}()); diff --git a/lib/jasmine-core/jasmine-html.js b/lib/jasmine-core/jasmine-html.js index 4a5849be..985d0d1a 100644 --- a/lib/jasmine-core/jasmine-html.js +++ b/lib/jasmine-core/jasmine-html.js @@ -26,11 +26,12 @@ jasmineRequire.html = function(j$) { j$.QueryString = jasmineRequire.QueryString(); j$.HtmlSpecFilter = jasmineRequire.HtmlSpecFilter(); }; + jasmineRequire.HtmlReporter = function(j$) { var noopTimer = { - start: function(){}, - elapsed: function(){ return 0; } + start: function() {}, + elapsed: function() { return 0; } }; function HtmlReporter(options) { @@ -101,7 +102,8 @@ jasmineRequire.HtmlReporter = function(j$) { symbols.appendChild(createDom("li", { className: result.status, id: "spec_" + result.id, - title: result.fullName} + title: result.fullName + } )); if (result.status == "failed") { @@ -307,6 +309,7 @@ jasmineRequire.ResultsNode = function() { return ResultsNode; }; + jasmineRequire.QueryString = function() { function QueryString(options) { diff --git a/lib/jasmine-core/jasmine.js b/lib/jasmine-core/jasmine.js index 9f47affd..65aebb59 100644 --- a/lib/jasmine-core/jasmine.js +++ b/lib/jasmine-core/jasmine.js @@ -142,18 +142,18 @@ getJasmineRequireObj().base = function(j$) { j$.createSpy = function(name, originalFn) { var spyStrategy = new j$.SpyStrategy({ - name: name, - fn: originalFn, - getSpy: function() { return spy; } - }), - callTracker = new j$.CallTracker(), - spy = function() { - callTracker.track({ - object: this, - args: Array.prototype.slice.apply(arguments) - }); - return spyStrategy.exec.apply(this, arguments); - }; + name: name, + fn: originalFn, + getSpy: function() { return spy; } + }), + callTracker = new j$.CallTracker(), + spy = function() { + callTracker.track({ + object: this, + args: Array.prototype.slice.apply(arguments) + }); + return spyStrategy.exec.apply(this, arguments); + }; for (var prop in originalFn) { if (prop === 'and' || prop === 'calls') { @@ -174,7 +174,7 @@ getJasmineRequireObj().base = function(j$) { return false; } return putativeSpy.and instanceof j$.SpyStrategy && - putativeSpy.calls instanceof j$.CallTracker; + putativeSpy.calls instanceof j$.CallTracker; }; j$.createSpyObj = function(baseName, methodNames) { @@ -194,14 +194,16 @@ getJasmineRequireObj().util = function() { var util = {}; util.inherit = function(childClass, parentClass) { - var subclass = function() { + var Subclass = function() { }; - subclass.prototype = parentClass.prototype; - childClass.prototype = new subclass(); + Subclass.prototype = parentClass.prototype; + childClass.prototype = new Subclass(); }; util.htmlEscape = function(str) { - if (!str) return str; + if (!str) { + return str; + } return str.replace(/&/g, '&') .replace(//g, '>'); @@ -209,7 +211,9 @@ getJasmineRequireObj().util = function() { util.argsToArray = function(args) { var arrayOfArgs = []; - for (var i = 0; i < args.length; i++) arrayOfArgs.push(args[i]); + for (var i = 0; i < args.length; i++) { + arrayOfArgs.push(args[i]); + } return arrayOfArgs; }; @@ -222,7 +226,6 @@ getJasmineRequireObj().util = function() { getJasmineRequireObj().Spec = function(j$) { function Spec(attrs) { - this.encounteredExpectations = false; this.expectationFactory = attrs.expectationFactory; this.resultCallback = attrs.resultCallback || function() {}; this.id = attrs.id; @@ -248,13 +251,11 @@ getJasmineRequireObj().Spec = function(j$) { id: this.id, description: this.description, fullName: this.getFullName(), - status: this.status(), failedExpectations: [] }; } Spec.prototype.addExpectationResult = function(passed, data) { - this.encounteredExpectations = true; if (passed) { return; } @@ -278,7 +279,7 @@ getJasmineRequireObj().Spec = function(j$) { function timeoutable(fn) { return function(done) { var timeout = Function.prototype.apply.apply(self.timer.setTimeout, [j$.getGlobal(), [function() { - onException(new Error('timeout')); + onException(new Error('Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.')); done(); }, j$.DEFAULT_TIMEOUT_INTERVAL]]); @@ -292,8 +293,8 @@ getJasmineRequireObj().Spec = function(j$) { } var befores = this.beforeFns() || [], - afters = this.afterFns() || [], - thisOne = (this.fn.length) ? timeoutable(this.fn) : this.fn; + afters = this.afterFns() || [], + thisOne = (this.fn.length) ? timeoutable(this.fn) : this.fn; var allFns = befores.concat(thisOne).concat(afters); this.queueRunner({ @@ -303,18 +304,18 @@ getJasmineRequireObj().Spec = function(j$) { }); function onException(e) { - if (Spec.isPendingSpecException(e)) { - self.pend(); - return; - } + if (Spec.isPendingSpecException(e)) { + self.pend(); + return; + } - self.addExpectationResult(false, { - matcherName: "", - passed: false, - expected: "", - actual: "", - error: e - }); + self.addExpectationResult(false, { + matcherName: "", + passed: false, + expected: "", + actual: "", + error: e + }); } function complete() { @@ -340,7 +341,7 @@ getJasmineRequireObj().Spec = function(j$) { return 'disabled'; } - if (this.markedPending || !this.encounteredExpectations) { + if (this.markedPending) { return 'pending'; } @@ -375,6 +376,8 @@ getJasmineRequireObj().Env = function(j$) { var self = this; var global = options.global || j$.getGlobal(); + var totalSpecsDefined = 0; + var catchExceptions = true; var realSetTimeout = j$.getGlobal().setTimeout; @@ -385,9 +388,10 @@ getJasmineRequireObj().Env = function(j$) { var spies = []; - this.currentSpec = null; + var currentSpec = null; + var currentSuite = null; - this.reporter = new j$.ReportDispatcher([ + var reporter = new j$.ReportDispatcher([ "jasmineStarted", "jasmineDone", "suiteStarted", @@ -396,14 +400,11 @@ getJasmineRequireObj().Env = function(j$) { "specDone" ]); - this.lastUpdate = 0; this.specFilter = function() { return true; }; - this.nextSpecId_ = 0; - this.nextSuiteId_ = 0; - this.equalityTesters_ = []; + var equalityTesters = []; var customEqualityTesters = []; this.addCustomEqualityTester = function(tester) { @@ -412,6 +413,16 @@ getJasmineRequireObj().Env = function(j$) { j$.Expectation.addCoreMatchers(j$.matchers); + var nextSpecId = 0; + var getNextSpecId = function() { + return 'spec' + nextSpecId++; + }; + + var nextSuiteId = 0; + var getNextSuiteId = function() { + return 'suite' + nextSuiteId++; + }; + var expectationFactory = function(actual, spec) { return j$.Expectation.Factory({ util: j$.matchersUtil, @@ -426,32 +437,34 @@ getJasmineRequireObj().Env = function(j$) { }; var specStarted = function(spec) { - self.currentSpec = spec; - self.reporter.specStarted(spec.result); + currentSpec = spec; + reporter.specStarted(spec.result); }; - var beforeFns = function(currentSuite) { + var beforeFns = function(suite) { return function() { var befores = []; - for (var suite = currentSuite; suite; suite = suite.parentSuite) { + while(suite) { befores = befores.concat(suite.beforeFns); + suite = suite.parentSuite; } return befores.reverse(); }; }; - var afterFns = function(currentSuite) { + var afterFns = function(suite) { return function() { var afters = []; - for (var suite = currentSuite; suite; suite = suite.parentSuite) { + while(suite) { afters = afters.concat(suite.afterFns); + suite = suite.parentSuite; } return afters; }; }; - var getSpecName = function(spec, currentSuite) { - return currentSuite.getFullName() + ' ' + spec.description; + var getSpecName = function(spec, suite) { + return suite.getFullName() + ' ' + spec.description; }; // TODO: we may just be able to pass in the fn instead of wrapping here @@ -474,10 +487,6 @@ getJasmineRequireObj().Env = function(j$) { return catchExceptions; }; - this.catchException = function(e) { - return j$.Spec.isPendingSpecException(e) || catchExceptions; - }; - var maximumSpecCallbackDepth = 20; var currentSpecCallbackDepth = 0; @@ -491,19 +500,136 @@ getJasmineRequireObj().Env = function(j$) { } } + var catchException = function(e) { + return j$.Spec.isPendingSpecException(e) || catchExceptions; + }; + var queueRunnerFactory = function(options) { - options.catchException = self.catchException; + options.catchException = catchException; options.clearStack = options.clearStack || clearStack; new j$.QueueRunner(options).execute(); }; - var totalSpecsDefined = 0; - this.specFactory = function(description, fn, suite) { + var topSuite = new j$.Suite({ + env: this, + id: getNextSuiteId(), + description: 'Jasmine__TopLevel__Suite', + queueRunner: queueRunnerFactory, + resultCallback: function() {} // TODO - hook this up + }); + runnableLookupTable[topSuite.id] = topSuite; + currentSuite = topSuite; + + this.topSuite = function() { + return topSuite; + }; + + this.execute = function(runnablesToRun) { + runnablesToRun = runnablesToRun || [topSuite.id]; + + var allFns = []; + for(var i = 0; i < runnablesToRun.length; i++) { + var runnable = runnableLookupTable[runnablesToRun[i]]; + allFns.push((function(runnable) { return function(done) { runnable.execute(done); }; })(runnable)); + } + + reporter.jasmineStarted({ + totalSpecsDefined: totalSpecsDefined + }); + + queueRunnerFactory({fns: allFns, onComplete: reporter.jasmineDone}); + }; + + this.addReporter = function(reporterToAdd) { + reporter.addReporter(reporterToAdd); + }; + + this.addMatchers = function(matchersToAdd) { + j$.Expectation.addMatchers(matchersToAdd); + }; + + this.spyOn = function(obj, methodName) { + if (j$.util.isUndefined(obj)) { + throw new Error("spyOn could not find an object to spy upon for " + methodName + "()"); + } + + if (j$.util.isUndefined(obj[methodName])) { + throw new Error(methodName + '() method does not exist'); + } + + if (obj[methodName] && j$.isSpy(obj[methodName])) { + //TODO?: should this return the current spy? Downside: may cause user confusion about spy state + throw new Error(methodName + ' has already been spied upon'); + } + + var spy = j$.createSpy(methodName, obj[methodName]); + + spies.push({ + spy: spy, + baseObj: obj, + methodName: methodName, + originalValue: obj[methodName] + }); + + obj[methodName] = spy; + + return spy; + }; + + var suiteFactory = function(description) { + var suite = new j$.Suite({ + env: self, + id: getNextSuiteId(), + description: description, + parentSuite: currentSuite, + queueRunner: queueRunnerFactory, + onStart: suiteStarted, + resultCallback: function(attrs) { + reporter.suiteDone(attrs); + } + }); + + runnableLookupTable[suite.id] = suite; + return suite; + }; + + this.describe = function(description, specDefinitions) { + var suite = suiteFactory(description); + + var parentSuite = currentSuite; + parentSuite.addChild(suite); + currentSuite = suite; + + var declarationError = null; + try { + specDefinitions.call(suite); + } catch (e) { + declarationError = e; + } + + if (declarationError) { + this.it("encountered a declaration exception", function() { + throw declarationError; + }); + } + + currentSuite = parentSuite; + + return suite; + }; + + this.xdescribe = function(description, specDefinitions) { + var suite = this.describe(description, specDefinitions); + suite.disable(); + return suite; + }; + + var specFactory = function(description, fn, suite) { totalSpecsDefined++; var spec = new j$.Spec({ - id: self.nextSpecId(), + id: getNextSpecId(), beforeFns: beforeFns(suite), afterFns: afterFns(suite), expectationFactory: expectationFactory, @@ -539,193 +665,45 @@ getJasmineRequireObj().Env = function(j$) { function specResultCallback(result) { removeAllSpies(); j$.Expectation.resetMatchers(); - customEqualityTesters.length = 0; - self.clock.uninstall(); - self.currentSpec = null; - self.reporter.specDone(result); + customEqualityTesters = []; + currentSpec = null; + reporter.specDone(result); } }; var suiteStarted = function(suite) { - self.reporter.suiteStarted(suite.result); + reporter.suiteStarted(suite.result); }; - var suiteConstructor = j$.Suite; - - this.topSuite = new j$.Suite({ - env: this, - id: this.nextSuiteId(), - description: 'Jasmine__TopLevel__Suite', - queueRunner: queueRunnerFactory, - completeCallback: function() {}, // TODO - hook this up - resultCallback: function() {} // TODO - hook this up - }); - runnableLookupTable[this.topSuite.id] = this.topSuite; - this.currentSuite = this.topSuite; - - this.suiteFactory = function(description) { - var suite = new suiteConstructor({ - env: self, - id: self.nextSuiteId(), - description: description, - parentSuite: self.currentSuite, - queueRunner: queueRunnerFactory, - onStart: suiteStarted, - resultCallback: function(attrs) { - self.reporter.suiteDone(attrs); - } - }); - - runnableLookupTable[suite.id] = suite; - return suite; + this.it = function(description, fn) { + var spec = specFactory(description, fn, currentSuite); + currentSuite.addChild(spec); + return spec; }; - this.execute = function(runnablesToRun) { - runnablesToRun = runnablesToRun || [this.topSuite.id]; - - var allFns = []; - for(var i = 0; i < runnablesToRun.length; i++) { - var runnable = runnableLookupTable[runnablesToRun[i]]; - allFns.push((function(runnable) { return function(done) { runnable.execute(done); }; })(runnable)); - } - - this.reporter.jasmineStarted({ - totalSpecsDefined: totalSpecsDefined - }); - - queueRunnerFactory({fns: allFns, onComplete: this.reporter.jasmineDone}); + this.xit = function(description, fn) { + var spec = this.it(description, fn); + spec.pend(); + return spec; }; - this.spyOn = function(obj, methodName) { - if (j$.util.isUndefined(obj)) { - throw new Error("spyOn could not find an object to spy upon for " + methodName + "()"); - } + this.expect = function(actual) { + return currentSpec.expect(actual); + }; - if (j$.util.isUndefined(obj[methodName])) { - throw new Error(methodName + '() method does not exist'); - } + this.beforeEach = function(beforeEachFunction) { + currentSuite.beforeEach(beforeEachFunction); + }; - if (obj[methodName] && j$.isSpy(obj[methodName])) { - //TODO?: should this return the current spy? Downside: may cause user confusion about spy state - throw new Error(methodName + ' has already been spied upon'); - } + this.afterEach = function(afterEachFunction) { + currentSuite.afterEach(afterEachFunction); + }; - var spy = j$.createSpy(methodName, obj[methodName]); - - spies.push({ - spy: spy, - baseObj: obj, - methodName: methodName, - originalValue: obj[methodName] - }); - - obj[methodName] = spy; - - return spy; + this.pending = function() { + throw j$.Spec.pendingSpecExceptionMessage; }; } - Env.prototype.addMatchers = function(matchersToAdd) { - j$.Expectation.addMatchers(matchersToAdd); - }; - - Env.prototype.version = function() { - return j$.version; - }; - - Env.prototype.expect = function(actual) { - return this.currentSpec.expect(actual); - }; - - - // TODO: move this to closure - Env.prototype.versionString = function() { - console.log("DEPRECATED == use j$.version"); - return j$.version; - }; - - // TODO: move this to closure - Env.prototype.nextSpecId = function() { - return 'spec' + this.nextSpecId_++; - }; - - // TODO: move this to closure - Env.prototype.nextSuiteId = function() { - return 'suite' + this.nextSuiteId_++; - }; - - // TODO: move this to closure - Env.prototype.addReporter = function(reporter) { - this.reporter.addReporter(reporter); - }; - - // TODO: move this to closure - Env.prototype.describe = function(description, specDefinitions) { - var suite = this.suiteFactory(description); - - var parentSuite = this.currentSuite; - parentSuite.addSuite(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; - }; - - // TODO: move this to closure - Env.prototype.xdescribe = function(description, specDefinitions) { - var suite = this.describe(description, specDefinitions); - suite.disable(); - return suite; - }; - - // TODO: move this to closure - Env.prototype.it = function(description, fn) { - var spec = this.specFactory(description, fn, this.currentSuite); - this.currentSuite.addSpec(spec); - return spec; - }; - - // TODO: move this to closure - Env.prototype.xit = function(description, fn) { - var spec = this.it(description, fn); - spec.pend(); - return spec; - }; - - // TODO: move this to closure - Env.prototype.beforeEach = function(beforeEachFunction) { - this.currentSuite.beforeEach(beforeEachFunction); - }; - - // TODO: move this to closure - Env.prototype.afterEach = function(afterEachFunction) { - this.currentSuite.afterEach(afterEachFunction); - }; - - // TODO: move this to closure - Env.prototype.pending = function() { - throw j$.Spec.pendingSpecExceptionMessage; - }; - - // TODO: Still needed? - Env.prototype.currentRunner = function() { - return this.topSuite; - }; - return Env; }; @@ -839,6 +817,7 @@ getJasmineRequireObj().Any = function() { return Any; }; + getJasmineRequireObj().CallTracker = function() { function CallTracker() { @@ -905,7 +884,8 @@ getJasmineRequireObj().Clock = function() { setInterval: setInterval, clearInterval: clearInterval }, - installed = false; + installed = false, + timer; self.install = function() { replace(global, fakeTimingFunctions); @@ -960,8 +940,6 @@ getJasmineRequireObj().Clock = function() { function legacyIE() { //if these methods are polyfilled, apply will be present - //TODO: it may be difficult to load the polyfill before jasmine loads - //(env should be new-ed inside of onload) return !(realTimingFunctions.setTimeout || realTimingFunctions.setInterval).apply; } @@ -1163,12 +1141,21 @@ getJasmineRequireObj().Expectation = function() { args.unshift(this.actual); - var result = matcherFactory(this.util, this.customEqualityTesters).compare.apply(null, args); + var matcher = matcherFactory(this.util, this.customEqualityTesters), + matcherCompare = matcher.compare; + + function defaultNegativeCompare() { + var result = matcher.compare.apply(null, args); + result.pass = !result.pass; + return result; + } if (this.isNot) { - result.pass = !result.pass; + matcherCompare = matcher.negativeCompare || defaultNegativeCompare; } + var result = matcherCompare.apply(null, args); + if (!result.pass) { if (!result.message) { args.unshift(this.isNot); @@ -1364,8 +1351,8 @@ getJasmineRequireObj().pp = function(j$) { PrettyPrinter.prototype.iterateObject = function(obj, fn) { for (var property in obj) { - if (!obj.hasOwnProperty(property)) continue; - if (property == '__Jasmine_been_here_before__') continue; + if (!obj.hasOwnProperty(property)) { continue; } + if (property == '__Jasmine_been_here_before__') { continue; } fn(property, obj.__lookupGetter__ ? (!j$.util.isUndefined(obj.__lookupGetter__(property)) && obj.__lookupGetter__(property) !== null) : false); } @@ -1522,11 +1509,11 @@ getJasmineRequireObj().ReportDispatcher = function() { for (var i = 0; i < dispatchedMethods.length; i++) { var method = dispatchedMethods[i]; - this[method] = function(m) { + this[method] = (function(m) { return function() { dispatch(m, arguments); }; - }(method); + }(method)); } var reporters = []; @@ -1610,7 +1597,6 @@ getJasmineRequireObj().Suite = function() { this.parentSuite = attrs.parentSuite; this.description = attrs.description; this.onStart = attrs.onStart || function() {}; - this.completeCallback = attrs.completeCallback || function() {}; // TODO: this is unused this.resultCallback = attrs.resultCallback || function() {}; this.clearStack = attrs.clearStack || function(fn) {fn();}; @@ -1619,9 +1605,7 @@ getJasmineRequireObj().Suite = function() { this.queueRunner = attrs.queueRunner || function() {}; this.disabled = false; - this.children_ = []; // TODO: rename - this.suites = []; // TODO: needed? - this.specs = []; // TODO: needed? + this.children = []; this.result = { id: this.id, @@ -1653,19 +1637,8 @@ getJasmineRequireObj().Suite = function() { this.afterFns.unshift(fn); }; - Suite.prototype.addSpec = function(spec) { - this.children_.push(spec); - this.specs.push(spec); // TODO: needed? - }; - - Suite.prototype.addSuite = function(suite) { - suite.parentSuite = this; - this.children_.push(suite); - this.suites.push(suite); // TODO: needed? - }; - - Suite.prototype.children = function() { - return this.children_; + Suite.prototype.addChild = function(child) { + this.children.push(child); }; Suite.prototype.execute = function(onComplete) { @@ -1675,11 +1648,10 @@ getJasmineRequireObj().Suite = function() { return; } - var allFns = [], - children = this.children_; + var allFns = []; - for (var i = 0; i < children.length; i++) { - allFns.push(wrapChildAsAsync(children[i])); + for (var i = 0; i < this.children.length; i++) { + allFns.push(wrapChildAsAsync(this.children[i])); } this.onStart(this); @@ -1701,7 +1673,7 @@ getJasmineRequireObj().Suite = function() { return function(done) { child.execute(done); }; } }; - + return Suite; }; @@ -1727,6 +1699,7 @@ getJasmineRequireObj().Timer = function() { return Timer; }; + getJasmineRequireObj().matchersUtil = function(j$) { // TODO: what to do about jasmine.pp not being inject? move to JSON.stringify? gut PrettyPrinter? @@ -1766,7 +1739,9 @@ getJasmineRequireObj().matchersUtil = function(j$) { if (expected.length > 0) { for (var i = 0; i < expected.length; i++) { - if (i > 0) message += ","; + if (i > 0) { + message += ","; + } message += " " + j$.pp(expected[i]); } } @@ -1814,11 +1789,11 @@ getJasmineRequireObj().matchersUtil = function(j$) { // Identical objects are equal. `0 === -0`, but they aren't identical. // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) return a !== 0 || 1 / a == 1 / b; + if (a === b) { return a !== 0 || 1 / a == 1 / b; } // A strict comparison is necessary because `null == undefined`. - if (a === null || b === null) return a === b; + if (a === null || b === null) { return a === b; } var className = Object.prototype.toString.call(a); - if (className != Object.prototype.toString.call(b)) return false; + if (className != Object.prototype.toString.call(b)) { return false; } switch (className) { // Strings, numbers, dates, and booleans are compared by value. case '[object String]': @@ -1842,14 +1817,14 @@ getJasmineRequireObj().matchersUtil = function(j$) { a.multiline == b.multiline && a.ignoreCase == b.ignoreCase; } - if (typeof a != 'object' || typeof b != 'object') return false; + if (typeof a != 'object' || typeof b != 'object') { return false; } // Assume equality for cyclic structures. The algorithm for detecting cyclic // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. var length = aStack.length; while (length--) { // Linear search. Performance is inversely proportional to the number of // unique nested structures. - if (aStack[length] == a) return bStack[length] == b; + if (aStack[length] == a) { return bStack[length] == b; } } // Add the first object to the stack of traversed objects. aStack.push(a); @@ -1863,7 +1838,7 @@ getJasmineRequireObj().matchersUtil = function(j$) { if (result) { // Deep compare the contents, ignoring non-numeric properties. while (size--) { - if (!(result = eq(a[size], b[size], aStack, bStack, customTesters))) break; + if (!(result = eq(a[size], b[size], aStack, bStack, customTesters))) { break; } } } } else { @@ -1880,13 +1855,13 @@ getJasmineRequireObj().matchersUtil = function(j$) { // Count the expected number of properties. size++; // Deep compare each member. - if (!(result = has(b, key) && eq(a[key], b[key], aStack, bStack, customTesters))) break; + if (!(result = has(b, key) && eq(a[key], b[key], aStack, bStack, customTesters))) { break; } } } // Ensure that both objects contain the same number of properties. if (result) { for (key in b) { - if (has(b, key) && !(size--)) break; + if (has(b, key) && !(size--)) { break; } } result = !size; } @@ -2388,5 +2363,5 @@ getJasmineRequireObj().toThrowError = function(j$) { }; getJasmineRequireObj().version = function() { - return "2.0.0-rc3"; -}; \ No newline at end of file + return "2.0.0-rc5"; +}; diff --git a/lib/jasmine-core/version.rb b/lib/jasmine-core/version.rb index b37b3289..da8eed5e 100644 --- a/lib/jasmine-core/version.rb +++ b/lib/jasmine-core/version.rb @@ -4,6 +4,6 @@ # module Jasmine module Core - VERSION = "2.0.0.rc3" + VERSION = "2.0.0.rc5" end end diff --git a/package.json b/package.json index 8918dc04..d1d62e20 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "jasmine-core", "license": "MIT", - "version": "2.0.0-rc3", + "version": "2.0.0-rc5", "devDependencies": { "grunt": "~0.4.1", "grunt-contrib-jshint": "~0.7.0",