quixote
Version:
CSS unit and integration testing
41 lines (33 loc) • 1.24 kB
JavaScript
// Copyright (c) 2015 Titanium I.T. LLC. All rights reserved. For license, see "README" or "LICENSE" file.
;
var ensure = require("./util/ensure.js");
var oop = require("./util/oop.js");
var shim = require("./util/shim.js");
var Me = module.exports = function Assertable() {
ensure.unreachable("Assertable is abstract and should not be constructed directly.");
};
Me.extend = oop.extendFn(Me);
oop.makeAbstract(Me, []);
Me.prototype.assert = function assert(expected, message) {
ensure.signature(arguments, [ Object, [undefined, String] ]);
if (message === undefined) message = "Differences found";
var diff = this.diff(expected);
if (diff !== "") throw new Error(message + ":\n" + diff + "\n");
};
Me.prototype.diff = function diff(expected) {
ensure.signature(arguments, [ Object ]);
var result = [];
var keys = shim.Object.keys(expected);
var key, oneDiff, descriptor;
for (var i = 0; i < keys.length; i++) {
key = keys[i];
descriptor = this[key];
ensure.that(
descriptor !== undefined,
this + " doesn't have a property named '" + key + "'. Did you misspell it?"
);
oneDiff = descriptor.diff(expected[key]);
if (oneDiff !== "") result.push(oneDiff);
}
return result.join("\n");
};