Skip to content

Commit

Permalink
Implement it.
Browse files Browse the repository at this point in the history
  • Loading branch information
Dan Bornstein committed Jul 20, 2012
1 parent fc589b5 commit 93f3a8f
Showing 1 changed file with 42 additions and 39 deletions.
81 changes: 42 additions & 39 deletions lib/typ.js
Original file line number Diff line number Diff line change
Expand Up @@ -148,33 +148,36 @@ function extendedTypeOf(value) {
}

/**
* Somewhat more helpful failure message.
* Somewhat more helpful failure message, or just whatever the client
* specified.
*/
function failType(value, expectedTypeName) {
function failType(value, expectedTypeName, message) {
var gotType = extendedTypeOf(value);
var message = "Expected " + expectedTypeName + "; got " + gotType;

switch (gotType) {
case BOOLEAN:
case DATE:
case INT:
case NUMBER:
case REGEXP:
case UINT: {
message += " (" + value + ")";
break;
}
case ERROR: {
if (value.message) {
message += " (" + value.message + ")";
if (isUndefined(message)) {
message = "Expected " + expectedTypeName + "; got " + gotType;
switch (gotType) {
case BOOLEAN:
case DATE:
case INT:
case NUMBER:
case REGEXP:
case UINT: {
message += " (" + value + ")";
break;
}
break;
}
case FUNCTION: {
if (value.name) {
message += " (" + value.name + ")";
case ERROR: {
if (value.message) {
message += " (" + value.message + ")";
}
break;
}
case FUNCTION: {
if (value.name) {
message += " (" + value.name + ")";
}
break;
}
break;
}
}

Expand Down Expand Up @@ -318,104 +321,104 @@ function isFunction(x) {
return (typeof x) === FUNCTION;
}

function assertArray(x) {
function assertArray(x, message) {
if (!isArray(x)) {
failType(x, ARRAY);
}
}

function assertBoolean(x) {
function assertBoolean(x, message) {
if (!isBoolean(x)) {
failType(x, BOOLEAN);
}
}

function assertBuffer(x) {
function assertBuffer(x, message) {
if (!isBuffer(x)) {
failType(x, BUFFER);
}
}

function assertDate(x) {
function assertDate(x, message) {
if (!isDate(x)) {
failType(x, DATE);
}
}

function assertDefined(x) {
function assertDefined(x, message) {
if (!isDefined(x)) {
assert.fail("undefined", "(anything else)",
"Expected defined value", "!==");
}
}

function assertUndefined(x) {
function assertUndefined(x, message) {
if (!isUndefined(x)) {
failType(x, UNDEFINED);
}
}

function assertError(x) {
function assertError(x, message) {
if (!isError(x)) {
failType(x, ERROR);
}
}

function assertInt(x) {
function assertInt(x, message) {
if (!isInt(x)) {
failType(x, INT);
}
}

function assertNull(x) {
function assertNull(x, message) {
if (!isNull(x)) {
failType(x, NULL);
}
}

function assertNullish(x) {
function assertNullish(x, message) {
if (!isNullish(x)) {
failType(x, NULLISH);
}
}

function assertNumber(x) {
function assertNumber(x, message) {
if (!isNumber(x)) {
failType(x, NUMBER);
}
}

function assertMap(x) {
function assertMap(x, message) {
if (!isMap(x)) {
failType(x, MAP);
}
}

function assertObject(x) {
function assertObject(x, message) {
if (!isObject(x)) {
failType(x, OBJECT);
}
}

function assertRegExp(x) {
function assertRegExp(x, message) {
if (!isRegExp(x)) {
failType(x, REGEXP);
}
}

function assertString(x) {
function assertString(x, message) {
if (!isString(x)) {
failType(x, STRING);
}
}

function assertUInt(x) {
function assertUInt(x, message) {
if (!isUInt(x)) {
failType(x, UINT);
}
}

function assertFunction(x) {
function assertFunction(x, message) {
if (!isFunction(x)) {
failType(x, FUNCTION);
}
Expand Down

0 comments on commit 93f3a8f

Please sign in to comment.