Skip to content

Commit 11d2e8f

Browse files
author
cloudhead
committed
added isEmpty and typeOf assertion macros
1 parent abadd5d commit 11d2e8f

File tree

2 files changed

+55
-1
lines changed

2 files changed

+55
-1
lines changed

lib/vows/macros.js

+45-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@ assert.ok = (function (callback) {
2424
})(assert.ok);
2525

2626
assert.match = function (actual, expected, message) {
27-
if (! actual.match(expected)) assert.fail(actual, expected, message || "expected {actual} to match {expected}", "match", assert.match);
27+
if (! expected.test(actual)) {
28+
assert.fail(actual, expected, message || "expected {actual} to match {expected}", "match", assert.match);
29+
}
2830
};
2931
assert.matches = assert.match;
3032

@@ -42,9 +44,37 @@ assert.include = function (actual, expected, message) {
4244
};
4345
assert.includes = assert.include;
4446

47+
assert.isEmpty = function (actual, message) {
48+
if ((isObject(actual) && Object.keys(actual).length > 0) || actual.length > 0) {
49+
assert.fail(actual, 0, message || "expected {actual} to be empty", "length", assert.isEmpty);
50+
}
51+
};
52+
53+
assert.isArray = function (actual, message) {
54+
assertTypeOf(actual, 'array', message || "expected {actual} to be an Array", assert.isArray);
55+
};
56+
assert.isObject = function (actual, message) {
57+
assertTypeOf(actual, 'object', message || "expected {actual} to be an Object", assert.isObject);
58+
};
59+
assert.isNumber = function (actual, message) {
60+
assertTypeOf(actual, 'number', message || "expected {actual} to be a Number", assert.isNumber);
61+
};
62+
assert.isString = function (actual, message) {
63+
assertTypeOf(actual, 'string', message || "expected {actual} to be a String", assert.isString);
64+
};
65+
assert.typeOf = function (actual, expected, message) {
66+
assertTypeOf(actual, expected, message, assert.typeOf);
67+
};
68+
4569
//
4670
// Utility functions
4771
//
72+
function assertTypeOf(actual, expected, message, caller) {
73+
if (typeOf(actual) !== expected) {
74+
assert.fail(actual, expected, message || "expected {actual} to be of type {expected}", "typeOf", caller);
75+
}
76+
};
77+
4878
function isArray (obj) {
4979
return Array.isArray(obj);
5080
}
@@ -57,3 +87,17 @@ function isObject (obj) {
5787
return typeof(obj) === 'object' && obj instanceof Object && !isArray(obj);
5888
}
5989

90+
// A better `typeof`
91+
function typeOf(value) {
92+
var s = typeof(value),
93+
types = [Object, Array, String, RegExp, Number, Function, Boolean, Date];
94+
95+
if (s === 'object' || s === 'function') {
96+
if (value) {
97+
types.forEach(function (t) {
98+
if (value instanceof t) { s = t.name.toLowerCase() }
99+
});
100+
} else { s = 'null' }
101+
}
102+
return s;
103+
}

test/vows-test.js

+10
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,16 @@ vows.tell("Vows", {
3434
"testing inclusion": function (it) {
3535
assert.include(it, "world");
3636
},
37+
"testing type": function (it) {
38+
assert.typeOf(it, 'string');
39+
assert.isArray([]);
40+
assert.isObject({});
41+
},
42+
"testing emptiness": function (it) {
43+
assert.isEmpty({});
44+
assert.isEmpty([]);
45+
assert.isEmpty("");
46+
},
3747
"with a nested context": {
3848
setup: function (parent) {
3949
this.state = 42;

0 commit comments

Comments
 (0)