UNPKG

@apistudio/apim-cli

Version:

CLI for API Management Products

75 lines (60 loc) 2.98 kB
const { compileExpression } = require("../dist/cjs/filtrex"); const { describe, it } = require("mocha"); const { expect } = require("chai"); const eval = (str, obj) => compileExpression(str)(obj); describe("Strict", () => { it("does typechecking for booleans", () => { expect(eval("1 == 1 and 1")).is.instanceOf(TypeError); expect(eval("1 or 1 != 1")).is.instanceOf(TypeError); expect(eval('not "hello"')).is.instanceOf(TypeError); expect(eval("not foo", { foo: new Boolean(false) })).equals(true); }); it("does typechecking on addition", () => { const data = { num: 42, str: "hello", bool: true, date: new Date(Date.UTC(1997, 6, 18)), boxedNum: new Number(42), boxedStr: new String("hello"), }; expect(eval("num + num", data)).equals(2 * 42); expect(eval("str + str", data)).equals("hellohello"); expect(eval("num + str", data)).equals("42hello"); expect(eval("str + num", data)).equals("hello42"); expect(eval('num + "0"', data)).equals("420"); expect(eval("num + boxedNum", data)).equals(2 * 42); expect(eval("boxedNum + num", data)).equals(2 * 42); expect(eval("boxedNum + boxedNum", data)).equals(2 * 42); expect(eval("str + boxedStr", data)).equals("hellohello"); expect(eval("boxedStr + str", data)).equals("hellohello"); expect(eval("boxedStr + boxedStr", data)).equals("hellohello"); expect(eval("boxedNum + boxedStr", data)).equals("42hello"); expect(eval("str + boxedNum", data)).equals("hello42"); expect(eval("num + bool", data)).is.instanceOf(TypeError); expect(eval("bool + num", data)).is.instanceOf(TypeError); expect(eval("str + bool", data)).is.instanceOf(TypeError); expect(eval("bool + str", data)).is.instanceOf(TypeError); expect(eval("num + date", data)).is.instanceOf(TypeError); expect(eval("date + num", data)).is.instanceOf(TypeError); expect(eval("str + date", data)).is.instanceOf(TypeError); expect(eval("date + str", data)).is.instanceOf(TypeError); expect(eval("bool + date", data)).is.instanceOf(TypeError); expect(eval("date + bool", data)).is.instanceOf(TypeError); expect(eval("bool + bool", data)).is.instanceOf(TypeError); expect(eval("date + date", data)).is.instanceOf(TypeError); }); it("does typechecking on arithmetic operators", () => {}); it("does strict equality", () => { expect(eval("(1 == 1) == 1")).equals(false); expect(eval("(1 == 1) != 1")).equals(true); expect(eval("(1 != 1) == 0")).equals(false); expect(eval("(1 != 1) != 0")).equals(true); expect(eval("(1 == 1) == T", { T: true, F: false })).equals(true); expect(eval("(1 == 1) != T", { T: true, F: false })).equals(false); expect(eval("(1 != 1) == F", { T: true, F: false })).equals(true); expect(eval("(1 != 1) != F", { T: true, F: false })).equals(false); expect(eval('1 == "1"')).equals(false); expect(eval('"1" == 1')).equals(false); }); });