Skip to content

Commit

Permalink
Merge pull request #35 from sinonjs/error-properties
Browse files Browse the repository at this point in the history
Set code, actual and expected properties on errors
  • Loading branch information
mantoni committed Aug 9, 2018
2 parents d3d71a4 + ce794ee commit d990731
Show file tree
Hide file tree
Showing 26 changed files with 1,273 additions and 149 deletions.
20 changes: 20 additions & 0 deletions demo/diff.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/*
* Demo error messages and diff rendering with Mocha.
*/
"use strict";

var assert = require("..").assert;

describe("diff", function() {
it("multiline string", function() {
assert.equals("foo\nbar\ndoo\n", "bar\ndoo\nxyz\n");
});

it("objects", function() {
assert.equals({ foo: 42 }, { foo: 66 });
});

it("matchJson", function() {
assert.matchJson('{"foo":42,"bar":true}', { foo: 42, bar: false });
});
});
10 changes: 6 additions & 4 deletions lib/assertions/equals.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,16 @@ module.exports = function(referee) {
},

assertMessage:
"${customMessage}${actual} expected to be equal to ${expected}",
"${customMessage}${escapedActual} expected to be equal to ${escapedExpected}",
refuteMessage:
"${customMessage}${actual} expected not to be equal to ${expected}",
"${customMessage}${escapedActual} expected not to be equal to ${escapedExpected}",
expectation: "toEqual",
values: function(actual, expected, message) {
return {
actual: escapeNewlines(actual),
expected: escapeNewlines(expected),
escapedActual: escapeNewlines(actual),
escapedExpected: escapeNewlines(expected),
actual: actual,
expected: expected,
customMessage: message
};
}
Expand Down
4 changes: 2 additions & 2 deletions lib/assertions/is-array-buffer.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"use strict";

var actualAndTypeOfMessageValues = require("../actual-and-type-of-message-values");
var actualMessageValues = require("../actual-message-values");
var toString = Object.prototype.toString;

module.exports = function(referee) {
Expand All @@ -13,6 +13,6 @@ module.exports = function(referee) {
refuteMessage:
"${customMessage}Expected ${actual} not to be an ArrayBuffer",
expectation: "toBeArrayBuffer",
values: actualAndTypeOfMessageValues
values: actualMessageValues
});
};
4 changes: 2 additions & 2 deletions lib/assertions/is-array-like.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"use strict";

var isArguments = require("lodash.isarguments");
var actualAndTypeOfMessageValues = require("../actual-and-type-of-message-values");
var actualMessageValues = require("../actual-message-values");

module.exports = function(referee) {
function isArrayLike(object) {
Expand All @@ -24,6 +24,6 @@ module.exports = function(referee) {
refuteMessage:
"${customMessage}Expected ${actual} not to be array like",
expectation: "toBeArrayLike",
values: actualAndTypeOfMessageValues
values: actualMessageValues
});
};
4 changes: 2 additions & 2 deletions lib/assertions/is-array.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"use strict";

var actualAndTypeOfMessageValues = require("../actual-and-type-of-message-values");
var actualMessageValues = require("../actual-message-values");

module.exports = function(referee) {
referee.add("isArray", {
Expand All @@ -10,6 +10,6 @@ module.exports = function(referee) {
assertMessage: "${customMessage}Expected ${actual} to be array",
refuteMessage: "${customMessage}Expected ${actual} not to be array",
expectation: "toBeArray",
values: actualAndTypeOfMessageValues
values: actualMessageValues
});
};
15 changes: 10 additions & 5 deletions lib/assertions/is-boolean.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,21 @@
"use strict";

var actualAndTypeOfMessageValues = require("../actual-and-type-of-message-values");

module.exports = function(referee) {
referee.add("isBoolean", {
assert: function(actual) {
return typeof actual === "boolean";
},
assertMessage:
"${customMessage}Expected ${actual} (${actualType}) to be boolean",
refuteMessage: "${customMessage}Expected ${actual} not to be boolean",
"${customMessage}Expected ${value} (${actual}) to be boolean",
refuteMessage: "${customMessage}Expected ${value} not to be boolean",
expectation: "toBeBoolean",
values: actualAndTypeOfMessageValues
values: function(actual, message) {
return {
value: actual,
actual: typeof actual,
expected: "boolean",
customMessage: message
};
}
});
};
4 changes: 2 additions & 2 deletions lib/assertions/is-data-view.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"use strict";

var actualAndTypeOfMessageValues = require("../actual-and-type-of-message-values");
var actualMessageValues = require("../actual-message-values");
var toString = Object.prototype.toString;

module.exports = function(referee) {
Expand All @@ -12,6 +12,6 @@ module.exports = function(referee) {
refuteMessage:
"${customMessage}Expected ${actual} not to be a DataView",
expectation: "toBeDataView",
values: actualAndTypeOfMessageValues
values: actualMessageValues
});
};
4 changes: 2 additions & 2 deletions lib/assertions/is-error.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"use strict";

var actualAndTypeOfMessageValues = require("../actual-and-type-of-message-values");
var actualMessageValues = require("../actual-message-values");

module.exports = function(referee) {
referee.add("isError", {
Expand All @@ -10,6 +10,6 @@ module.exports = function(referee) {
assertMessage: "${customMessage}Expected ${actual} to be an Error",
refuteMessage: "${customMessage}Expected ${actual} not to be an Error",
expectation: "toBeError",
values: actualAndTypeOfMessageValues
values: actualMessageValues
});
};
4 changes: 2 additions & 2 deletions lib/assertions/is-eval-error.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"use strict";

var actualAndTypeOfMessageValues = require("../actual-and-type-of-message-values");
var actualMessageValues = require("../actual-message-values");

module.exports = function(referee) {
referee.add("isEvalError", {
Expand All @@ -11,6 +11,6 @@ module.exports = function(referee) {
refuteMessage:
"${customMessage}Expected ${actual} not to be an EvalError",
expectation: "toBeEvalError",
values: actualAndTypeOfMessageValues
values: actualMessageValues
});
};
4 changes: 2 additions & 2 deletions lib/assertions/is-float-32-array.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"use strict";

var actualAndTypeOfMessageValues = require("../actual-and-type-of-message-values");
var actualMessageValues = require("../actual-message-values");

module.exports = function(referee) {
referee.add("isFloat32Array", {
Expand All @@ -12,6 +12,6 @@ module.exports = function(referee) {
refuteMessage:
"${customMessage}Expected ${actual} not to be a Float32Array",
expectation: "toBeFloat32Array",
values: actualAndTypeOfMessageValues
values: actualMessageValues
});
};
4 changes: 2 additions & 2 deletions lib/assertions/is-float-64-array.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"use strict";

var actualAndTypeOfMessageValues = require("../actual-and-type-of-message-values");
var actualMessageValues = require("../actual-message-values");

module.exports = function(referee) {
referee.add("isFloat64Array", {
Expand All @@ -12,6 +12,6 @@ module.exports = function(referee) {
refuteMessage:
"${customMessage}Expected ${actual} not to be a Float64Array",
expectation: "toBeFloat64Array",
values: actualAndTypeOfMessageValues
values: actualMessageValues
});
};
9 changes: 5 additions & 4 deletions lib/assertions/is-function.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,16 @@ module.exports = function(referee) {
return typeof actual === "function";
},
assertMessage:
"${customMessage}${actual} (${actualType}) expected to be function",
refuteMessage: "${customMessage}${actual} expected not to be function",
"${customMessage}${value} (${actual}) expected to be function",
refuteMessage: "${customMessage}${value} expected not to be function",
expectation: "toBeFunction",
values: function(actual, message) {
return {
actual: String(actual)
value: String(actual)
.replace("function(", "function (")
.replace("\n", ""),
actualType: typeof actual,
actual: typeof actual,
expected: "function",
customMessage: message
};
}
Expand Down
10 changes: 7 additions & 3 deletions lib/assertions/is-infinity.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
"use strict";

var actualMessageValues = require("../actual-message-values");

module.exports = function(referee) {
referee.add("isInfinity", {
assert: function(actual) {
Expand All @@ -10,6 +8,12 @@ module.exports = function(referee) {
assertMessage: "${customMessage}Expected ${actual} to be Infinity",
refuteMessage: "${customMessage}Expected ${actual} not to be Infinity",
expectation: "toBeInfinity",
values: actualMessageValues
values: function(actual, message) {
return {
actual: actual,
expected: Infinity,
customMessage: message
};
}
});
};
10 changes: 7 additions & 3 deletions lib/assertions/is-nan.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
"use strict";

var actualAndTypeOfMessageValues = require("../actual-and-type-of-message-values");

module.exports = function(referee) {
referee.add("isNaN", {
assert: function(actual) {
Expand All @@ -10,6 +8,12 @@ module.exports = function(referee) {
assertMessage: "${customMessage}Expected ${actual} to be NaN",
refuteMessage: "${customMessage}Expected not to be NaN",
expectation: "toBeNaN",
values: actualAndTypeOfMessageValues
values: function(actual, message) {
return {
actual: actual,
expected: "NaN",
customMessage: message
};
}
});
};
10 changes: 7 additions & 3 deletions lib/assertions/is-null.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
"use strict";

var actualMessageValues = require("../actual-message-values");

module.exports = function(referee) {
referee.add("isNull", {
assert: function(actual) {
Expand All @@ -10,6 +8,12 @@ module.exports = function(referee) {
assertMessage: "${customMessage}Expected ${actual} to be null",
refuteMessage: "${customMessage}Expected not to be null",
expectation: "toBeNull",
values: actualMessageValues
values: function(actual, message) {
return {
actual: actual,
expected: null,
customMessage: message
};
}
});
};
15 changes: 10 additions & 5 deletions lib/assertions/is-number.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,22 @@
"use strict";

var actualAndTypeOfMessageValues = require("../actual-and-type-of-message-values");

module.exports = function(referee) {
referee.add("isNumber", {
assert: function(actual) {
return typeof actual === "number" && !isNaN(actual);
},
assertMessage:
"${customMessage}Expected ${actual} (${actualType}) to be a non-NaN number",
"${customMessage}Expected ${value} (${actual}) to be a non-NaN number",
refuteMessage:
"${customMessage}Expected ${actual} to be NaN or a non-number value",
"${customMessage}Expected ${value} to be NaN or a non-number value",
expectation: "toBeNumber",
values: actualAndTypeOfMessageValues
values: function(actual, message) {
return {
value: actual,
actual: typeof actual,
expected: "number",
customMessage: message
};
}
});
};
15 changes: 10 additions & 5 deletions lib/assertions/is-object.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,22 @@
"use strict";

var actualAndTypeOfMessageValues = require("../actual-and-type-of-message-values");

module.exports = function(referee) {
referee.add("isObject", {
assert: function(actual) {
return typeof actual === "object" && !!actual;
},
assertMessage:
"${customMessage}${actual} (${actualType}) expected to be object and not null",
"${customMessage}${value} (${actual}) expected to be object and not null",
refuteMessage:
"${customMessage}${actual} expected to be null or not an object",
"${customMessage}${value} expected to be null or not an object",
expectation: "toBeObject",
values: actualAndTypeOfMessageValues
values: function(actual, message) {
return {
value: actual,
actual: typeof actual,
expected: "object",
customMessage: message
};
}
});
};
15 changes: 10 additions & 5 deletions lib/assertions/is-string.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,21 @@
"use strict";

var actualAndTypeOfMessageValues = require("../actual-and-type-of-message-values");

module.exports = function(referee) {
referee.add("isString", {
assert: function(actual) {
return typeof actual === "string";
},
assertMessage:
"${customMessage}Expected ${actual} (${actualType}) to be string",
refuteMessage: "${customMessage}Expected ${actual} not to be string",
"${customMessage}Expected ${value} (${actual}) to be string",
refuteMessage: "${customMessage}Expected ${value} not to be string",
expectation: "toBeString",
values: actualAndTypeOfMessageValues
values: function(actual, message) {
return {
value: actual,
actual: typeof actual,
expected: "string",
customMessage: message
};
}
});
};
10 changes: 7 additions & 3 deletions lib/assertions/is-symbol.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
"use strict";

var actualMessageValues = require("../actual-message-values");

module.exports = function(referee) {
referee.add("isSymbol", {
assert: function(actual) {
Expand All @@ -10,6 +8,12 @@ module.exports = function(referee) {
assertMessage: "${customMessage}Expected ${actual} to be a Symbol",
refuteMessage: "${customMessage}Expected ${actual} not to be a Symbol",
expectation: "toBeSymbol",
values: actualMessageValues
values: function(actual, message) {
return {
actual: actual,
expected: "symbol",
customMessage: message
};
}
});
};
Loading

0 comments on commit d990731

Please sign in to comment.