diff --git a/lib/jasmine-core/jasmine.js b/lib/jasmine-core/jasmine.js index 10b760c2..4f790454 100644 --- a/lib/jasmine-core/jasmine.js +++ b/lib/jasmine-core/jasmine.js @@ -97,18 +97,20 @@ getJasmineRequireObj().requireMatchers = function(jRequire, j$) { 'toBeFalsy', 'toBeGreaterThan', 'toBeGreaterThanOrEqual', - 'toBeLessThanOrEqual', 'toBeLessThan', + 'toBeLessThanOrEqual', 'toBeNaN', + 'toBeNegativeInfinity', 'toBeNull', + 'toBePositiveInfinity', 'toBeTruthy', 'toBeUndefined', 'toContain', 'toEqual', 'toHaveBeenCalled', 'toHaveBeenCalledBefore', - 'toHaveBeenCalledWith', 'toHaveBeenCalledTimes', + 'toHaveBeenCalledWith', 'toMatch', 'toThrow', 'toThrowError' @@ -2894,6 +2896,35 @@ getJasmineRequireObj().toBeNaN = function(j$) { return toBeNaN; }; +getJasmineRequireObj().toBeNegativeInfinity = function(j$) { + /** + * {@link expect} the actual value to be `-Infinity` (-infinity). + * @function + * @name matchers#toBeNegativeInfinity + * @example + * expect(thing).toBeNegativeInfinity(); + */ + function toBeNegativeInfinity() { + return { + compare: function(actual) { + var result = { + pass: (actual === Number.NEGATIVE_INFINITY) + }; + + if (result.pass) { + result.message = 'Expected actual to be -Infinity.'; + } else { + result.message = function() { return 'Expected ' + j$.pp(actual) + ' not to be -Infinity.'; }; + } + + return result; + } + }; + } + + return toBeNegativeInfinity; +}; + getJasmineRequireObj().toBeNull = function() { /** * {@link expect} the actual value to be `null`. @@ -2915,6 +2946,35 @@ getJasmineRequireObj().toBeNull = function() { return toBeNull; }; +getJasmineRequireObj().toBePositiveInfinity = function(j$) { + /** + * {@link expect} the actual value to be `Infinity` (infinity). + * @function + * @name matchers#toBePositiveInfinity + * @example + * expect(thing).toBePositiveInfinity(); + */ + function toBePositiveInfinity() { + return { + compare: function(actual) { + var result = { + pass: (actual === Number.POSITIVE_INFINITY) + }; + + if (result.pass) { + result.message = 'Expected actual to be Infinity.'; + } else { + result.message = function() { return 'Expected ' + j$.pp(actual) + ' not to be Infinity.'; }; + } + + return result; + } + }; + } + + return toBePositiveInfinity; +}; + getJasmineRequireObj().toBeTruthy = function() { /** * {@link expect} the actual value to be truthy. diff --git a/spec/core/matchers/toBeNegativeInfinitySpec.js b/spec/core/matchers/toBeNegativeInfinitySpec.js new file mode 100644 index 00000000..8b544412 --- /dev/null +++ b/spec/core/matchers/toBeNegativeInfinitySpec.js @@ -0,0 +1,31 @@ +describe("toBeNegativeInfinity", function() { + it("fails for anything that isn't -Infinity", function() { + var matcher = jasmineUnderTest.matchers.toBeNegativeInfinity(), + result; + + result = matcher.compare(1); + expect(result.pass).toBe(false); + + result = matcher.compare(Number.NaN); + expect(result.pass).toBe(false); + + result = matcher.compare(null); + expect(result.pass).toBe(false); + }); + + it("has a custom message on failure", function() { + var matcher = jasmineUnderTest.matchers.toBeNegativeInfinity(), + result = matcher.compare(0); + + expect(result.message()).toEqual("Expected 0 not to be -Infinity.") + }); + + it("succeeds for -Infinity", function() { + var matcher = jasmineUnderTest.matchers.toBeNegativeInfinity(), + result = matcher.compare(Number.NEGATIVE_INFINITY); + + expect(result.pass).toBe(true); + expect(result.message).toEqual("Expected actual to be -Infinity.") + }); + +}); diff --git a/spec/core/matchers/toBePositiveInfinitySpec.js b/spec/core/matchers/toBePositiveInfinitySpec.js new file mode 100644 index 00000000..73d6285b --- /dev/null +++ b/spec/core/matchers/toBePositiveInfinitySpec.js @@ -0,0 +1,31 @@ +describe("toBePositiveInfinity", function() { + it("fails for anything that isn't Infinity", function() { + var matcher = jasmineUnderTest.matchers.toBePositiveInfinity(), + result; + + result = matcher.compare(1); + expect(result.pass).toBe(false); + + result = matcher.compare(Number.NaN); + expect(result.pass).toBe(false); + + result = matcher.compare(null); + expect(result.pass).toBe(false); + }); + + it("has a custom message on failure", function() { + var matcher = jasmineUnderTest.matchers.toBePositiveInfinity(), + result = matcher.compare(0); + + expect(result.message()).toEqual("Expected 0 not to be Infinity.") + }); + + it("succeeds for Infinity", function() { + var matcher = jasmineUnderTest.matchers.toBePositiveInfinity(), + result = matcher.compare(Number.POSITIVE_INFINITY); + + expect(result.pass).toBe(true); + expect(result.message).toEqual("Expected actual to be Infinity.") + }); + +}); diff --git a/src/core/matchers/requireMatchers.js b/src/core/matchers/requireMatchers.js index 0054706f..437a2b0f 100644 --- a/src/core/matchers/requireMatchers.js +++ b/src/core/matchers/requireMatchers.js @@ -6,18 +6,20 @@ getJasmineRequireObj().requireMatchers = function(jRequire, j$) { 'toBeFalsy', 'toBeGreaterThan', 'toBeGreaterThanOrEqual', - 'toBeLessThanOrEqual', 'toBeLessThan', + 'toBeLessThanOrEqual', 'toBeNaN', + 'toBeNegativeInfinity', 'toBeNull', + 'toBePositiveInfinity', 'toBeTruthy', 'toBeUndefined', 'toContain', 'toEqual', 'toHaveBeenCalled', 'toHaveBeenCalledBefore', - 'toHaveBeenCalledWith', 'toHaveBeenCalledTimes', + 'toHaveBeenCalledWith', 'toMatch', 'toThrow', 'toThrowError' diff --git a/src/core/matchers/toBeNegativeInfinity.js b/src/core/matchers/toBeNegativeInfinity.js new file mode 100644 index 00000000..849c4c69 --- /dev/null +++ b/src/core/matchers/toBeNegativeInfinity.js @@ -0,0 +1,28 @@ +getJasmineRequireObj().toBeNegativeInfinity = function(j$) { + /** + * {@link expect} the actual value to be `-Infinity` (-infinity). + * @function + * @name matchers#toBeNegativeInfinity + * @example + * expect(thing).toBeNegativeInfinity(); + */ + function toBeNegativeInfinity() { + return { + compare: function(actual) { + var result = { + pass: (actual === Number.NEGATIVE_INFINITY) + }; + + if (result.pass) { + result.message = 'Expected actual to be -Infinity.'; + } else { + result.message = function() { return 'Expected ' + j$.pp(actual) + ' not to be -Infinity.'; }; + } + + return result; + } + }; + } + + return toBeNegativeInfinity; +}; diff --git a/src/core/matchers/toBePositiveInfinity.js b/src/core/matchers/toBePositiveInfinity.js new file mode 100644 index 00000000..ec70971c --- /dev/null +++ b/src/core/matchers/toBePositiveInfinity.js @@ -0,0 +1,28 @@ +getJasmineRequireObj().toBePositiveInfinity = function(j$) { + /** + * {@link expect} the actual value to be `Infinity` (infinity). + * @function + * @name matchers#toBePositiveInfinity + * @example + * expect(thing).toBePositiveInfinity(); + */ + function toBePositiveInfinity() { + return { + compare: function(actual) { + var result = { + pass: (actual === Number.POSITIVE_INFINITY) + }; + + if (result.pass) { + result.message = 'Expected actual to be Infinity.'; + } else { + result.message = function() { return 'Expected ' + j$.pp(actual) + ' not to be Infinity.'; }; + } + + return result; + } + }; + } + + return toBePositiveInfinity; +};