name:
src/test/js/execution/CodeExecutorGeneralLessThanOrEqualComparisonTest.ts
-rw-r--r--
7401
1import { assert } from "chai";
2import { it, describe } from "../testutils/TestUtils";
3import { stub } from "sinon";
4import { F7Exception } from "../../../main/js/errors/F7Exception";
5import { F7ExceptionName } from "../../../main/js/errors/F7ExceptionName";
6import { CommonModels } from "../testutils/CommonModels";
7import { run, runWithLookups } from "../testutils/TestUtils";
8
9describe("CodeExecutor - LTE Comparison Test", function () {
10 it("should work with numbers", function () {
11 assert.deepEqual(run("1 <= 1"), true);
12 assert.deepEqual(run("1 <= 2"), true);
13 assert.deepEqual(run("-10 <= 0"), true);
14 assert.deepEqual(run("2 <= 1"), false);
15 assert.deepEqual(run("0 <= -10"), false);
16 assert.deepEqual(run("1.1928731 <= 1.1928731"), true);
17 });
18
19 it("should work with strings", function () {
20 assert.deepEqual(run('"Yes" <= "Yes"'), true);
21 assert.deepEqual(run('"Yes" <= "No"'), false);
22 assert.deepEqual(run('"No"<= "Yes"'), true);
23 assert.deepEqual(run('"" <= ""'), true);
24 assert.deepEqual(run('" " <= ""'), false);
25 assert.deepEqual(run('"" <= " "'), true);
26 });
27
28 it("should work with booleans", function () {
29 assert.deepEqual(run("TRUE <= TRUE"), true);
30 assert.deepEqual(run("FALSE <= FALSE"), true);
31 assert.deepEqual(run("TRUE <= FALSE"), false);
32 assert.deepEqual(run("FALSE <= TRUE"), true);
33 });
34
35 it("should work with arrays", function () {
36 assert.deepEqual(run("{1, 2, 3} <= {1, 2, 3}"), true);
37 assert.deepEqual(run("{1, 2, 3} <= {44}"), true);
38 assert.deepEqual(run("{44, 2, 3} <= {1}"), false);
39 assert.deepEqual(run("{44, #REF!} <= {44, #REF!}"), true);
40 });
41
42 it("should compare numbers to booleans", function () {
43 assert.deepEqual(run("0 <= TRUE"), true);
44 assert.deepEqual(run("1 <= TRUE"), true); // Important.
45 assert.deepEqual(run("1 <= FALSE"), true);
46 assert.deepEqual(run("0 <= FALSE"), true);
47 assert.deepEqual(run("-1 <= TRUE"), true);
48 assert.deepEqual(run("-1 <= FALSE"), true);
49 });
50
51 it("should compare numbers to strings", function () {
52 assert.deepEqual(run('0 <= ""'), true);
53 assert.deepEqual(run('0 <= "0"'), true);
54 assert.deepEqual(run('1 <= "0"'), true);
55 assert.deepEqual(run('1 <= "1"'), true);
56 assert.deepEqual(run('-1 <= "1"'), true);
57 assert.deepEqual(run('1000 <= "-100"'), true);
58 assert.deepEqual(run('1000 <= "Anything in the world."'), true);
59 });
60
61 it("should compare numbers to array literals", function () {
62 assert.deepEqual(run("-1 <= {0, 1, 2}"), true);
63 assert.deepEqual(run("0 <= {0, 1, 2}"), true);
64 assert.deepEqual(run("1 <= {0, 1, 2}"), false);
65 assert.deepEqual(run("0 <= {1, 1, 2}"), true);
66 assert.deepEqual(run('0 <= {1, "Ignore me."}'), true);
67 });
68
69 it("should compare numbers to blanks", function () {
70 const lookup = stub();
71 const collateralLookup = stub();
72 collateralLookup.withArgs(CommonModels.A1, CommonModels.M44_RANGE).returns(null);
73 collateralLookup.withArgs(CommonModels.A1, 0).returns(0);
74 collateralLookup.withArgs(CommonModels.A1, 1).returns(1);
75 collateralLookup.withArgs(CommonModels.A1, -1).returns(-1);
76 assert.deepEqual(runWithLookups("0 <= M44", lookup, collateralLookup), true);
77 assert.deepEqual(runWithLookups("1 <= M44", lookup, collateralLookup), false);
78 assert.deepEqual(runWithLookups("M44 <= 0", lookup, collateralLookup), true);
79 assert.deepEqual(runWithLookups("M44 <= 1", lookup, collateralLookup), true);
80 assert.deepEqual(runWithLookups("-1 <= M44", lookup, collateralLookup), true);
81 assert.deepEqual(runWithLookups("M44 <= -1", lookup, collateralLookup), false);
82 assert.isTrue(collateralLookup.calledWith(CommonModels.A1, CommonModels.M44_RANGE));
83 assert.isTrue(collateralLookup.calledWith(CommonModels.A1, 0));
84 assert.isTrue(collateralLookup.calledWith(CommonModels.A1, 1));
85 assert.isTrue(collateralLookup.calledWith(CommonModels.A1, -1));
86 assert.isTrue(lookup.notCalled);
87 });
88
89 it("should compare strings to booleans", function () {
90 assert.deepEqual(run('"TRUE" <= TRUE'), true);
91 assert.deepEqual(run('"FALSE" <= FALSE'), true);
92 assert.deepEqual(run('"TRUE" <= TRUE'), true);
93 assert.deepEqual(run('"" <= TRUE'), true);
94 assert.deepEqual(run('"" <= FALSE'), true);
95 assert.deepEqual(run('"Anything" <= FALSE'), true);
96 });
97
98 it("should compare strings to blanks", function () {
99 const lookup = stub();
100 const collateralLookup = stub();
101 collateralLookup.withArgs(CommonModels.A1, CommonModels.M44_RANGE).returns(null);
102 collateralLookup.withArgs(CommonModels.A1, "").returns("");
103 collateralLookup.withArgs(CommonModels.A1, "One").returns("One");
104 collateralLookup.withArgs(CommonModels.A1, " ").returns(" ");
105 assert.deepEqual(runWithLookups('"" <= M44', lookup, collateralLookup), true);
106 assert.deepEqual(runWithLookups('M44 <= ""', lookup, collateralLookup), true);
107 assert.deepEqual(runWithLookups('" " <= M44', lookup, collateralLookup), false);
108 assert.deepEqual(runWithLookups('M44 <= " "', lookup, collateralLookup), true);
109 assert.deepEqual(runWithLookups('"One" <= M44', lookup, collateralLookup), false);
110 assert.deepEqual(runWithLookups('M44 <= "One"', lookup, collateralLookup), true);
111 assert.isTrue(collateralLookup.calledWith(CommonModels.A1, CommonModels.M44_RANGE));
112 assert.isTrue(collateralLookup.calledWith(CommonModels.A1, ""));
113 assert.isTrue(collateralLookup.calledWith(CommonModels.A1, "One"));
114 assert.isTrue(collateralLookup.calledWith(CommonModels.A1, " "));
115 assert.isTrue(lookup.notCalled);
116 });
117
118 it("should compare booleans to blanks", function () {
119 const lookup = stub();
120 const collateralLookup = stub();
121 collateralLookup.withArgs(CommonModels.A1, CommonModels.M44_RANGE).returns(null);
122 collateralLookup.withArgs(CommonModels.A1, true).returns(true);
123 collateralLookup.withArgs(CommonModels.A1, false).returns(false);
124 assert.deepEqual(runWithLookups("TRUE <= M44", lookup, collateralLookup), false);
125 assert.deepEqual(runWithLookups("FALSE <= M44", lookup, collateralLookup), true);
126 assert.deepEqual(runWithLookups("M44 <= TRUE", lookup, collateralLookup), true);
127 assert.deepEqual(runWithLookups("M44 <= FALSE", lookup, collateralLookup), true);
128 assert.isTrue(collateralLookup.calledWith(CommonModels.A1, CommonModels.M44_RANGE));
129 assert.isTrue(collateralLookup.calledWith(CommonModels.A1, true));
130 assert.isTrue(collateralLookup.calledWith(CommonModels.A1, false));
131 assert.isTrue(lookup.notCalled);
132 });
133
134 it("should compare array literals to strings", function () {
135 assert.deepEqual(run('{"A", "B"} <= "A"'), true);
136 assert.deepEqual(run('{"A", "B"} <= "B"'), true);
137 assert.deepEqual(run('"A" <= {"A", "B"}'), true);
138 assert.deepEqual(run('"B" <= {"A", "B"}'), false);
139 });
140
141 it("should compare array literals to booleans", function () {
142 assert.deepEqual(run("{TRUE, FALSE} <= TRUE"), true);
143 assert.deepEqual(run("TRUE <= {TRUE, FALSE}"), true);
144 assert.deepEqual(run("{FALSE, FALSE} <= TRUE"), true);
145 assert.deepEqual(run("TRUE <= {FALSE, FALSE}"), false);
146 });
147
148 it("should not compare errors", function () {
149 assert.deepEqual((run("TRUE <= #REF!") as F7Exception).name, F7ExceptionName.REF);
150 assert.deepEqual((run("#REF! <= TRUE") as F7Exception).name, F7ExceptionName.REF);
151 });
152});