UNPKG

ts-check

Version:

Type checker for typescript

266 lines 8.42 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var TypeCheker = require("../index"); var assert = require("assert"); describe("Basic Check", function () { it("undefined", function () { assert(TypeCheker.checkType(undefined, "undefined")); }); it("null", function () { assert(TypeCheker.checkType(null, "null")); }); it("string", function () { assert(TypeCheker.checkType("asd", "string")); }); it("number", function () { assert(TypeCheker.checkType(1, "number")); }); it("weak number", function () { assert(TypeCheker.checkType("1", "number", {}, { weakNumber: true })); }); it("object", function () { assert(TypeCheker.checkType(1, {})); }); it("any", function () { assert(TypeCheker.checkType(function () { }, "any")); assert(TypeCheker.checkType([], "any")); assert(TypeCheker.checkType({}, "any")); assert(TypeCheker.checkType("a", "any")); assert(TypeCheker.checkType(1, "any")); assert(TypeCheker.checkType(null, "any")); assert(TypeCheker.checkType(undefined, "any")); }); it("array", function () { assert(TypeCheker.checkType([], "number[]")); assert(TypeCheker.checkType([], "string[]")); assert(TypeCheker.checkType([1, 2, 3], "number[]")); assert(TypeCheker.checkType([1, 2, 3], "number[3]")); assert(!TypeCheker.checkType([1, 2, 3], "number[2]")); assert(TypeCheker.checkType(["1", "2", "3"], "string[]")); assert(!TypeCheker.checkType([1, "2", 3], "number[]")); assert(!TypeCheker.checkType([1, "2", {}], "object[]")); assert(TypeCheker.checkType([{}, [], {}], "object[]")); assert(TypeCheker.checkType([{}, 1, {}, "1"], "any[]")); }); it("nest array", function () { assert(TypeCheker.checkType([[1], [2], [3]], "number[][]")); assert(TypeCheker.checkType([[1], [2], [3]], "number[1][]")); assert(TypeCheker.checkType([[1], [2], [3]], "number[1][3]")); assert(TypeCheker.checkType([[1], [2], [3]], "number[][3]")); }); it("check function", function () { assert(TypeCheker.checkType({ a: "1" }, function (value) { return typeof value["a"] == "string"; })); assert(!TypeCheker.checkType({ a: "1" }, function (value) { return typeof value["a"] == "number"; })); }); it("check type", function () { assert(TypeCheker.checkType({ a: "1" }, { a: "string" })); assert(!TypeCheker.checkType({ a: "1" }, { a: "number" })); }); it("check missing key", function () { assert(!TypeCheker.checkType({}, { a: "string" })); console.log(TypeCheker.lastError); }); it("nested type", function () { assert(TypeCheker.checkType({ a: "1" }, { a: "string" })); assert(TypeCheker.checkType({ a: "1", b: { c: 1 }, c: { d: { e: 1 } } }, { a: "string", b: function (value) { return typeof value.c == "number"; }, c: { d: { e: "number" } } })); }); }); describe("Multi typed", function () { it("multi type array", function () { assert(TypeCheker.checkType({ a: "1" }, ["string", "object"])); assert(TypeCheker.checkType({ a: "1" }, ["string", function (value) { return typeof value.a == "string"; }])); assert(!TypeCheker.checkType({ a: 1 }, ["string", "number"])); assert(TypeCheker.checkType({ a: 1 }, ["string", "number", { a: "number" }])); assert(!TypeCheker.checkType({ a: 1 }, ["string", "number", { a: "string" }])); }); }); describe("Customized types", function () { it(">0", function () { assert(TypeCheker.checkType({ biggerThan0: 2 }, { biggerThan0: ">0" }, { ">0": function (value) { if (typeof value == "number") { return value > 0; } else { return parseInt(value) > 0; } } })); assert(TypeCheker.checkType({ biggerThan0: "2" }, { biggerThan0: ">0" }, { ">0": function (value) { if (typeof value == "number") { return value > 0; } else { return parseInt(value) > 0; } } })); assert(!TypeCheker.checkType({ biggerThan0: -1 }, { biggerThan0: ">0" }, { ">0": function (value) { if (typeof value == "number") { return value > 0; } else { return parseInt(value) > 0; } } })); }); it("with args", function () { assert(TypeCheker.checkType({ biggerThan0: 3 }, { biggerThan0: "range(0,5)" }, { "range": function (value, args) { if (args.length == 0) { return false; } else if (args.length == 1) { return value > parseFloat(args[0]); } else { return value >= parseFloat(args[0]) && value <= parseFloat(args[1]); } } })); assert(!TypeCheker.checkType({ biggerThan0: 6 }, { biggerThan0: "range(0,5)" }, { "range": function (value, args) { if (args.length == 0) { return false; } else if (args.length == 1) { return value > parseFloat(args[0]); } else { return value >= parseFloat(args[0]) && value <= parseFloat(args[1]); } } })); }); }); describe("Customized types with array", function () { it(">0", function () { assert(TypeCheker.checkType({ biggerThan0: [1, 2, 3, 4] }, { biggerThan0: ">0[]" }, { ">0": function (value) { if (typeof value == "number") { return value > 0; } else { return parseInt(value) > 0; } } })); assert(!TypeCheker.checkType({ biggerThan0: [1, -1, 3, 4] }, { biggerThan0: ">0[]" }, { ">0": function (value) { if (typeof value == "number") { return value > 0; } else { return parseInt(value) > 0; } } })); }); }); describe("Type synax", function () { it("type should pass compile", function () { var CheckObject = { a: 1, b: 2, c: "10" }; var CustomizedType = { ">0": function (value) { if (typeof value == "number") { return value > 0; } else { return parseInt(value) > 0; } } }; var check = { a: "number", b: "number", c: ">0" }; assert(TypeCheker.checkType(CheckObject, check, CustomizedType)); }); }); describe("Default defined type", function () { it("type should pass compile", function () { TypeCheker.defaultDefinedChecker[">0"] = function (value) { if (typeof value == "number") { return value > 0; } else { return parseInt(value) > 0; } }; assert(TypeCheker.checkType({ a: 1 }, { a: ">0" })); assert(!TypeCheker.checkType({ a: -1 }, { a: ">0" })); }); }); //# sourceMappingURL=index.js.map