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