diff --git a/Rakefile b/Rakefile index 941554d..4ce8838 100644 --- a/Rakefile +++ b/Rakefile @@ -34,8 +34,29 @@ namespace :jasmine do desc 'Prepares for distribution' task :dist => ['jasmine:build', 'jasmine:doc'] + desc 'Check jasmine sources for coding problems' + task :lint do + passed = true + jasmine_sources.each do |src| + lines = File.read(src).split(/\n/) + lines.each_index do |i| + line = lines[i] + undefineds = line.scan(/.?undefined/) + if undefineds.include?(" undefined") || undefineds.include?("\tundefined") + puts "Dangerous undefined at #{src}:#{i}:\n > #{line}" + passed = false + end + end + end + + unless passed + puts "Lint failed!" + exit 1 + end + end + desc 'Builds lib/jasmine from source' - task :build do + task :build => :lint do puts 'Building Jasmine from source' require 'json' diff --git a/lib/jasmine-0.10.0.js b/lib/jasmine-0.10.0.js index 6e7866e..f7f621b 100644 --- a/lib/jasmine-0.10.0.js +++ b/lib/jasmine-0.10.0.js @@ -12,6 +12,14 @@ jasmine.unimplementedMethod_ = function() { throw new Error("unimplemented method"); }; +/** + * Use jasmine.undefined instead of undefined, since undefined= oldMillis && scheduledFunc.runAtMillis <= nowMillis) { funcsToRun.push(scheduledFunc); - this.scheduledFunctions[timeoutKey] = undefined; + this.scheduledFunctions[timeoutKey] = jasmine.undefined; } } @@ -2233,5 +2241,5 @@ jasmine.version_= { "major": 0, "minor": 10, "build": 0, - "revision": 1259250030 + "revision": 1259251766 }; diff --git a/spec/runner.html b/spec/runner.html index 6b15384..30b4f3f 100644 --- a/spec/runner.html +++ b/spec/runner.html @@ -4,6 +4,10 @@ Jasmine Test Runner + + diff --git a/spec/suites/JsApiReporterSpec.js b/spec/suites/JsApiReporterSpec.js index 6615fe5..1645fb8 100644 --- a/spec/suites/JsApiReporterSpec.js +++ b/spec/suites/JsApiReporterSpec.js @@ -60,8 +60,8 @@ describe('jasmine.jsApiReporter', function() { expect(summarizedResult.messages[0].message).toEqual(result.messages[0].message); expect(summarizedResult.messages[0].passed).toBeTruthy(); expect(summarizedResult.messages[0].type).toEqual('ExpectationResult'); - expect(summarizedResult.messages[0].text).toEqual(undefined); - expect(summarizedResult.messages[0].trace.stack).toEqual(undefined); + expect(summarizedResult.messages[0].text).toEqual(jasmine.undefined); + expect(summarizedResult.messages[0].trace.stack).toEqual(jasmine.undefined); }); it("should have a stack trace for failing specs", function() { diff --git a/spec/suites/MatchersSpec.js b/spec/suites/MatchersSpec.js index 4944727..1013783 100644 --- a/spec/suites/MatchersSpec.js +++ b/spec/suites/MatchersSpec.js @@ -43,8 +43,8 @@ describe("jasmine.Matchers", function() { expect(match(true).toNotEqual(false)).toEqual(true); expect((match(true).toNotEqual(true))).toEqual(false); - expect((match(['a', 'b']).toEqual(['a', undefined]))).toEqual(false); - expect((match(['a', 'b']).toEqual(['a', 'b', undefined]))).toEqual(false); + expect((match(['a', 'b']).toEqual(['a', jasmine.undefined]))).toEqual(false); + expect((match(['a', 'b']).toEqual(['a', 'b', jasmine.undefined]))).toEqual(false); }); it("toEqual to build an Expectation Result", function() { @@ -197,11 +197,11 @@ describe("jasmine.Matchers", function() { it("toBeDefined", function() { expect(match('foo').toBeDefined()).toEqual(true); - expect(match(undefined).toBeDefined()).toEqual(false); + expect(match(jasmine.undefined).toBeDefined()).toEqual(false); }); it("toBeDefined to build an ExpectationResult", function() { - var matcher = match(undefined); + var matcher = match(jasmine.undefined); matcher.toBeDefined(); var result = mockSpec.addMatcherResult.mostRecentCall.args[0]; @@ -209,17 +209,17 @@ describe("jasmine.Matchers", function() { expect(result.matcherName).toEqual("toBeDefined"); expect(result.passed()).toEqual(false); expect(result.message).toEqual('Expected undefined to be defined.'); - expect(result.actual).toEqual(undefined); + expect(result.actual).toEqual(jasmine.undefined); }); it("toBeUndefined", function() { expect(match('foo').toBeUndefined()).toEqual(false); - expect(match(undefined).toBeUndefined()).toEqual(true); + expect(match(jasmine.undefined).toBeUndefined()).toEqual(true); }); it("toBeNull", function() { expect(match(null).toBeNull()).toEqual(true); - expect(match(undefined).toBeNull()).toEqual(false); + expect(match(jasmine.undefined).toBeNull()).toEqual(false); expect(match("foo").toBeNull()).toEqual(false); }); @@ -254,7 +254,7 @@ describe("jasmine.Matchers", function() { it("toBeFalsy", function() { expect(match(false).toBeFalsy()).toEqual(true); expect(match(true).toBeFalsy()).toEqual(false); - expect(match(undefined).toBeFalsy()).toEqual(true); + expect(match(jasmine.undefined).toBeFalsy()).toEqual(true); expect(match(0).toBeFalsy()).toEqual(true); expect(match("").toBeFalsy()).toEqual(true); }); @@ -276,7 +276,7 @@ describe("jasmine.Matchers", function() { it("toBeTruthy", function() { expect(match(false).toBeTruthy()).toEqual(false); expect(match(true).toBeTruthy()).toEqual(true); - expect(match(undefined).toBeTruthy()).toEqual(false); + expect(match(jasmine.undefined).toBeTruthy()).toEqual(false); expect(match(0).toBeTruthy()).toEqual(false); expect(match("").toBeTruthy()).toEqual(false); expect(match("hi").toBeTruthy()).toEqual(true); @@ -297,11 +297,11 @@ describe("jasmine.Matchers", function() { }); it("toEqual", function() { - expect(match(undefined).toEqual(undefined)).toEqual(true); + expect(match(jasmine.undefined).toEqual(jasmine.undefined)).toEqual(true); expect(match({foo:'bar'}).toEqual({foo:'bar'})).toEqual(true); - expect(match("foo").toEqual({bar: undefined})).toEqual(false); - expect(match({foo: undefined}).toEqual("goo")).toEqual(false); - expect(match({foo: {bar :undefined}}).toEqual("goo")).toEqual(false); + expect(match("foo").toEqual({bar: jasmine.undefined})).toEqual(false); + expect(match({foo: jasmine.undefined}).toEqual("goo")).toEqual(false); + expect(match({foo: {bar :jasmine.undefined}}).toEqual("goo")).toEqual(false); }); it("toEqual with jasmine.any()", function() { @@ -321,7 +321,7 @@ describe("jasmine.Matchers", function() { }); it("toEqual handles circular objects ok", function() { - expect(match({foo: "bar", baz: undefined}).toEqual({foo: "bar", baz: undefined})).toEqual(true); + expect(match({foo: "bar", baz: jasmine.undefined}).toEqual({foo: "bar", baz: jasmine.undefined})).toEqual(true); expect(match({foo:['bar','baz','quux']}).toEqual({foo:['bar','baz','quux']})).toEqual(true); expect(match({foo: {bar:'baz'}, quux:'corge'}).toEqual({foo:{bar:'baz'}, quux:'corge'})).toEqual(true); @@ -488,7 +488,7 @@ describe("jasmine.Matchers", function() { }).toThrow('Expected a spy, but got Function.'); expect(function() { - match(undefined)[methodName](); + match(jasmine.undefined)[methodName](); }).toThrow('Expected a spy, but got undefined.'); expect(function() { diff --git a/spec/suites/PrettyPrintSpec.js b/spec/suites/PrettyPrintSpec.js index cf5f95a..1f046f2 100644 --- a/spec/suites/PrettyPrintSpec.js +++ b/spec/suites/PrettyPrintSpec.js @@ -8,14 +8,14 @@ describe("jasmine.pp", function () { expect(jasmine.pp(true)).toEqual("true"); expect(jasmine.pp(false)).toEqual("false"); expect(jasmine.pp(null)).toEqual("null"); - expect(jasmine.pp(undefined)).toEqual("undefined"); + expect(jasmine.pp(jasmine.undefined)).toEqual("undefined"); expect(jasmine.pp(3)).toEqual("3"); expect(jasmine.pp(-3.14)).toEqual("-3.14"); }); it("should stringify arrays properly", function() { expect(jasmine.pp([1, 2])).toEqual("[ 1, 2 ]"); - expect(jasmine.pp([1, 'foo', {}, undefined, null])).toEqual("[ 1, 'foo', { }, undefined, null ]"); + expect(jasmine.pp([1, 'foo', {}, jasmine.undefined, null])).toEqual("[ 1, 'foo', { }, undefined, null ]"); }); it("should indicate circular array references", function() { @@ -27,7 +27,7 @@ describe("jasmine.pp", function () { it("should stringify objects properly", function() { expect(jasmine.pp({foo: 'bar'})).toEqual("{ foo : 'bar' }"); - expect(jasmine.pp({foo:'bar', baz:3, nullValue: null, undefinedValue: undefined})).toEqual("{ foo : 'bar', baz : 3, nullValue : null, undefinedValue : undefined }"); + expect(jasmine.pp({foo:'bar', baz:3, nullValue: null, undefinedValue: jasmine.undefined})).toEqual("{ foo : 'bar', baz : 3, nullValue : null, undefinedValue : undefined }"); expect(jasmine.pp({foo: function () { }, bar: [1, 2, 3]})).toEqual("{ foo : Function, bar : [ 1, 2, 3 ] }"); }); diff --git a/spec/suites/SpecRunningSpec.js b/spec/suites/SpecRunningSpec.js index 7282a13..ec49a77 100644 --- a/spec/suites/SpecRunningSpec.js +++ b/spec/suites/SpecRunningSpec.js @@ -1111,7 +1111,7 @@ describe("jasmine spec running", function () { expect(spec1Matcher.matcherForSpec("expected")).toEqual("matcherForSpec: actual: xxx; expected: expected"); expect(spec2Matcher.matcherForSuite("expected")).toEqual("matcherForSuite: actual: yyy; expected: expected"); - expect(spec2Matcher.matcherForSpec).toBe(undefined); + expect(spec2Matcher.matcherForSpec).toBe(jasmine.undefined); }); }); diff --git a/src/Env.js b/src/Env.js index dac30f1..142ddfb 100644 --- a/src/Env.js +++ b/src/Env.js @@ -151,7 +151,7 @@ jasmine.Env.prototype.compareObjects_ = function(a, b, mismatchKeys, mismatchVal b.__Jasmine_been_here_before__ = a; var hasKey = function(obj, keyName) { - return obj != null && obj[keyName] !== undefined; + return obj != null && obj[keyName] !== jasmine.undefined; }; for (var property in b) { @@ -186,8 +186,8 @@ jasmine.Env.prototype.equals_ = function(a, b, mismatchKeys, mismatchValues) { if (a === b) return true; - if (a === undefined || a === null || b === undefined || b === null) { - return (a == undefined && b == undefined); + 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)) { @@ -213,7 +213,7 @@ jasmine.Env.prototype.equals_ = function(a, b, mismatchKeys, 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 !== undefined) return result; + if (result !== jasmine.undefined) return result; } //Straight check diff --git a/src/JsApiReporter.js b/src/JsApiReporter.js index dae9cc8..83f6bf7 100644 --- a/src/JsApiReporter.js +++ b/src/JsApiReporter.js @@ -88,7 +88,7 @@ jasmine.JsApiReporter.prototype.summarizeResult_ = function(result){ type: resultMessage.type, message: resultMessage.message, trace: { - stack: resultMessage.passed && !resultMessage.passed() ? resultMessage.trace.stack : undefined + stack: resultMessage.passed && !resultMessage.passed() ? resultMessage.trace.stack : jasmine.undefined } }); }; diff --git a/src/Matchers.js b/src/Matchers.js index 74a63ec..79f5d53 100644 --- a/src/Matchers.js +++ b/src/Matchers.js @@ -113,17 +113,17 @@ jasmine.Matchers.prototype.toNotMatch = function(expected) { }; /** - * Matcher that compares the actual to undefined. + * Matcher that compares the actual to jasmine.undefined. */ jasmine.Matchers.prototype.toBeDefined = function() { - return (this.actual !== undefined); + return (this.actual !== jasmine.undefined); }; /** - * Matcher that compares the actual to undefined. + * Matcher that compares the actual to jasmine.undefined. */ jasmine.Matchers.prototype.toBeUndefined = function() { - return (this.actual === undefined); + return (this.actual === jasmine.undefined); }; /** @@ -252,12 +252,12 @@ jasmine.Matchers.prototype.toThrow = function(expected) { var result = false; var exception = getException_(this.actual, expected); if (exception) { - result = (expected === undefined || this.env.equals_(exception.message || exception, expected.message || expected)); + result = (expected === jasmine.undefined || this.env.equals_(exception.message || exception, expected.message || expected)); } this.message = function(expected) { var exception = getException_(this.actual, expected); - if (exception && (expected === undefined || !this.env.equals_(exception.message || exception, expected.message || expected))) { + if (exception && (expected === jasmine.undefined || !this.env.equals_(exception.message || exception, expected.message || expected))) { return ["Expected function to throw", expected.message || expected, ", but it threw", exception.message || exception ].join(' '); } else { return "Expected function to throw an exception."; diff --git a/src/PrettyPrinter.js b/src/PrettyPrinter.js index 16021b6..f9fb78d 100644 --- a/src/PrettyPrinter.js +++ b/src/PrettyPrinter.js @@ -17,7 +17,7 @@ jasmine.PrettyPrinter.prototype.format = function(value) { this.ppNestLevel_++; try { - if (value === undefined) { + if (value === jasmine.undefined) { this.emitScalar('undefined'); } else if (value === null) { this.emitScalar('null'); diff --git a/src/Spec.js b/src/Spec.js index 4931432..fa6ddd4 100644 --- a/src/Spec.js +++ b/src/Spec.js @@ -171,11 +171,11 @@ jasmine.Spec.prototype.explodes = function() { }; jasmine.Spec.prototype.spyOn = function(obj, methodName, ignoreMethodDoesntExist) { - if (obj == undefined) { + if (obj == jasmine.undefined) { throw "spyOn could not find an object to spy upon for " + methodName + "()"; } - if (!ignoreMethodDoesntExist && obj[methodName] === undefined) { + if (!ignoreMethodDoesntExist && obj[methodName] === jasmine.undefined) { throw methodName + '() method does not exist'; } diff --git a/src/base.js b/src/base.js index 58b2394..8850f28 100755 --- a/src/base.js +++ b/src/base.js @@ -12,6 +12,14 @@ jasmine.unimplementedMethod_ = function() { throw new Error("unimplemented method"); }; +/** + * Use jasmine.undefined instead of undefined, since undefined= oldMillis && scheduledFunc.runAtMillis <= nowMillis) { funcsToRun.push(scheduledFunc); - this.scheduledFunctions[timeoutKey] = undefined; + this.scheduledFunctions[timeoutKey] = jasmine.undefined; } }