rttc
Version:
Runtime type-checking for JavaScript.
85 lines (71 loc) • 3.11 kB
JavaScript
var util = require('util');
var assert = require('assert');
var _ = require('@sailshq/lodash');
var rttc = require('../');
describe('.sample()', function() {
it('should generate a type that matches', function() {
// Top-level
assertAllSampledValuesMatchType('string');
assertAllSampledValuesMatchType('number');
assertAllSampledValuesMatchType('boolean');
assertAllSampledValuesMatchType({});
assertAllSampledValuesMatchType([]);
assertAllSampledValuesMatchType('lamda');
assertAllSampledValuesMatchType('json');
assertAllSampledValuesMatchType('ref');
// Facted dictionary
assertAllSampledValuesMatchType({x:'string'});
assertAllSampledValuesMatchType({x:'number'});
assertAllSampledValuesMatchType({x:'boolean'});
assertAllSampledValuesMatchType({x:{}});
assertAllSampledValuesMatchType({x:[]});
assertAllSampledValuesMatchType({x:'lamda'});
assertAllSampledValuesMatchType({x:'json'});
assertAllSampledValuesMatchType({x:'ref'});
// Patterned array
assertAllSampledValuesMatchType(['string']);
assertAllSampledValuesMatchType(['number']);
assertAllSampledValuesMatchType(['boolean']);
assertAllSampledValuesMatchType([{}]);
assertAllSampledValuesMatchType([[]]);
assertAllSampledValuesMatchType(['lamda']);
assertAllSampledValuesMatchType(['json']);
assertAllSampledValuesMatchType(['ref']);
// Patterned array in faceted dictionary
assertAllSampledValuesMatchType({x:['string']});
assertAllSampledValuesMatchType({x:['number']});
assertAllSampledValuesMatchType({x:['boolean']});
assertAllSampledValuesMatchType({x:[{}]});
assertAllSampledValuesMatchType({x:[[]]});
assertAllSampledValuesMatchType({x:['lamda']});
assertAllSampledValuesMatchType({x:['json']});
assertAllSampledValuesMatchType({x:['ref']});
// Faceted dictionary in patterned array
assertAllSampledValuesMatchType([{x:['string']}]);
assertAllSampledValuesMatchType([{x:['number']}]);
assertAllSampledValuesMatchType([{x:['boolean']}]);
assertAllSampledValuesMatchType([{x:[{}]}]);
assertAllSampledValuesMatchType([{x:[[]]}]);
assertAllSampledValuesMatchType([{x:['lamda']}]);
assertAllSampledValuesMatchType([{x:['json']}]);
assertAllSampledValuesMatchType([{x:['ref']}]);
});
});
/**
* Helper method to check that values samples for a specific type indeed match that type.
* @param {[type]} expectedTypeSchema [description]
* @return {[type]} [description]
*/
function assertAllSampledValuesMatchType(expectedTypeSchema){
var n = 25;
var samples = rttc.sample(expectedTypeSchema, n);
_.each(samples, function (sample) {
assert.doesNotThrow(function (){
rttc.validateStrict(expectedTypeSchema, sample);
});
});
// Ensure NO MORE THAN `n` (not guaranteed to have exactly `n` samples)
assert(samples.length <= n);
// Ensure uniqueness of generated samples
assert.equal(_.uniq(samples).length, samples.length, 'Expected samples to be unique ('+_.uniq(samples)+') but they weren\'t: '+samples);
}