-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathassert_functions.js
58 lines (51 loc) · 1.7 KB
/
assert_functions.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
"use strict";
var util = require('./util'),
duckType = require('assert-duck-type').duckType,
validator = require('./validator');
exports.schema = function(select, value) {
return {error_messages: validator.validate(select, value)};
};
exports.equal = function(select, value) {
return util.equalValues(select, value);
};
var equal_keys = function(select, value) {
var invalidKeys = [];
util.each(value, function(expectedValue, key) {
var actualValue = (util.isObject(select) ? util.nestedValue.get(select, key) : null);
if (!util.equalValues(actualValue, expectedValue)) invalidKeys.push(key);
});
if (invalidKeys.length > 0) {
return {error_messages: ["Invalid keys: " + invalidKeys.join(', ')]};
} else {
return {error_messages: []};
}
};
exports.equal_keys = equal_keys;
var contains = function(select, value) {
if (select == null) {
return false;
} else if (util.isArray(select)) {
return util.any(select, function(v) { return util.equalValues(v, value) });
} else {
return JSON.stringify(select).indexOf(value) >= 0;
}
};
exports.contains = contains;
exports.contains_keys = function(select, value) {
if (util.isArray(select)) {
return util.any(select, function(v) { return equal_keys(v, value).error_messages.length === 0 });
} else {
return contains(select, value);
}
};
exports.size = function(select, value) {
return select != null && select.length != null && select.length === value;
};
exports.type = function(select, value) {
var validType = duckType(value, select);
if (validType) {
return {error_messages: []};
} else {
return {error_messages: ["Select value " + JSON.stringify(select) + " does not match type " + value]};
}
};