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