@distributed-systems/types
Version:
Reliable & easy Js & ES Type detection
191 lines (150 loc) • 5.14 kB
JavaScript
import section, {SpecReporter} from 'section-tests';
import assert from 'assert';
import type from '../types.js';
section.use(new SpecReporter());
section('Type Checking [<ES6]', (section) =>{
section.test('Strings', () => {
assert(type.string('s'));
assert(type.string(new String('s')));
});
section.test('Numbers', () => {
assert(type.number(-1));
assert(type.number(new Number(0)));
assert(type.number(Infinity));
});
section.test('Booleans', () => {
assert(type.boolean(false));
assert(type.boolean(new Boolean(true)));
});
section.test('Arrays', () => {
assert(type.array([]));
assert(type.array(new Array()));
assert(!type.array(new Float32Array()));
assert(!type.array(new Float64Array()));
assert(!type.array(new Int8Array()));
assert(!type.array(new Int16Array()));
assert(!type.array(new Int32Array()));
assert(!type.array(new Uint8Array()));
assert(!type.array(new Uint16Array()));
assert(!type.array(new Uint32Array()));
assert(!type.array(new Uint8ClampedArray()));
});
section.test('Objects', () => {
assert(type.object({}));
assert(!type.object(new String('s')));
assert(!type.object(null));
assert(!type.object([]));
assert(!type.object(new Map()));
assert(!type.object(new Set()));
assert(!type.object(new Promise(() => {})));
assert(!type.object((function* (){yield 1;})()));
});
section.test('Null', () => {
assert(type.null(null));
});
section.test('Undefined', () => {
assert(type.undefined(undefined));
assert(type.undefined());
});
section.test('Function', () => {
assert(type.function(function(){}));
assert(type.function(() => {}));
assert(type.function(function* a() {}));
assert(!type.function((function* (){yield 1;})()));
});
section.test('Dates', () => {
assert(type.date(new Date()));
});
section.test('RegExps', () => {
assert(type.regexp(/s/gi));
});
section.test('Errors', () => {
assert(type.error(new Error()));
assert(type.error(new EvalError()));
assert(type.error(new RangeError()));
assert(type.error(new ReferenceError()));
assert(type.error(new SyntaxError()));
assert(type.error(new TypeError()));
assert(type.error(new URIError()));
});
section.test('Buffers', () => {
assert(type.buffer(new Buffer(12)));
});
});
section('Type Checking [>=ES6]', (section) => {
section.test('Symbols', () => {
assert(type.symbol(Symbol()));
});
section.test('ArrayBuffers', () => {
assert(type.arrayBuffer(new ArrayBuffer()));
});
section.test('Maps', () => {
assert(type.map(new Map()));
});
section.test('Sets', () => {
assert(type.set(new Set()));
});
section.test('WeakMaps', () => {
assert(type.weakMap(new WeakMap()));
});
section.test('WeakSets', () => {
assert(type.weakSet(new WeakSet()));
});
section.test('DataViews', () => {
assert(type.dataView(new DataView(new ArrayBuffer())));
});
section.test('Promises', () => {
assert(type.promise(new Promise(() => {})));
assert(type.promise(Promise.all([])));
assert(type.promise(Promise.resolve()));
});
section.test('Float32Arrays', () => {
assert(type.float32Array(new Float32Array()));
});
section.test('Float64Arrays', () => {
assert(type.float64Array(new Float64Array()));
});
section.test('Int8Arrays', () => {
assert(type.int8Array(new Int8Array()));
});
section.test('Int16Arrays', () => {
assert(type.int16Array(new Int16Array()));
});
section.test('Int32Arrays', () => {
assert(type.int32Array(new Int32Array()));
});
section.test('UInt8Arrays', () => {
assert(type.uInt8Array(new Uint8Array()));
});
section.test('UInt16Arrays', () => {
assert(type.uInt16Array(new Uint16Array()));
});
section.test('UInt32Arrays', () => {
assert(type.uInt32Array(new Uint32Array()));
});
section.test('IntArrays', () => {
assert(type.intArray(new Uint32Array()));
});
section.test('FloatArrays', () => {
assert(type.floatArray(new Float32Array()));
});
section.test('Uint8ClampedArrays', () => {
assert(type.uInt8ClampedArray(new Uint8ClampedArray()));
});
section.test('Generators', () => {
assert(type.generator((function* (){yield 1;})()));
});
section.test('Promises', () => {
assert(type.promise(Promise.resolve()));
});
section.test('someObject', () => {
const X = class {
get [Symbol.toStringTag]() {
return 'AQL query';;
}
};
assert(!type.object(new X));
assert(type.someObject(new X));
assert.equal(type(new X), 'object');
});
});