name:
src/test/js/execution/CodeExecutorGeneralGreaterThanComparisonTest.ts
-rw-r--r--
7254
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 - GT Comparison Test", function () {
10 it("should work with numbers", function () {
11 assert.deepEqual(run("1 > 1"), false);
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"), false);
17 });
18
19 it("should work with strings", function () {
20 assert.deepEqual(run('"Yes" > "Yes"'), false);
21 assert.deepEqual(run('"Yes" > "No"'), true);
22 assert.deepEqual(run('"No"> "Yes"'), false);
23 assert.deepEqual(run('"" > ""'), false);
24 assert.deepEqual(run('" " > ""'), true);
25 });
26
27 it("should work with booleans", function () {
28 assert.deepEqual(run("TRUE > TRUE"), false);
29 assert.deepEqual(run("FALSE > FALSE"), false);
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}"), false);
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!}"), false);
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}"), false);
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 strings to booleans", function () {
69 assert.deepEqual(run('"TRUE" > TRUE'), false);
70 assert.deepEqual(run('"FALSE" > FALSE'), false);
71 assert.deepEqual(run('"TRUE" > TRUE'), false);
72 assert.deepEqual(run('"" > TRUE'), false);
73 assert.deepEqual(run('"" > FALSE'), false);
74 });
75
76 it("should compare numbers to blanks", function () {
77 const lookup = stub();
78 const collateralLookup = stub();
79 collateralLookup.withArgs(CommonModels.A1, CommonModels.M44_RANGE).returns(null);
80 collateralLookup.withArgs(CommonModels.A1, 0).returns(0);
81 collateralLookup.withArgs(CommonModels.A1, 1).returns(1);
82 collateralLookup.withArgs(CommonModels.A1, -1).returns(-1);
83 assert.deepEqual(runWithLookups("0 > M44", lookup, collateralLookup), false);
84 assert.deepEqual(runWithLookups("1 > M44", lookup, collateralLookup), true);
85 assert.deepEqual(runWithLookups("M44 > 0", lookup, collateralLookup), false);
86 assert.deepEqual(runWithLookups("M44 > 1", lookup, collateralLookup), false);
87 assert.deepEqual(runWithLookups("-1 > M44", lookup, collateralLookup), false);
88 assert.deepEqual(runWithLookups("M44 > -1", lookup, collateralLookup), true);
89 assert.isTrue(collateralLookup.calledWith(CommonModels.A1, CommonModels.M44_RANGE));
90 assert.isTrue(collateralLookup.calledWith(CommonModels.A1, 0));
91 assert.isTrue(collateralLookup.calledWith(CommonModels.A1, 1));
92 assert.isTrue(collateralLookup.calledWith(CommonModels.A1, -1));
93 assert.isTrue(lookup.notCalled);
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), false);
104 assert.deepEqual(runWithLookups('M44 > ""', lookup, collateralLookup), false);
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), false);
124 assert.deepEqual(runWithLookups("M44 > TRUE", lookup, collateralLookup), false);
125 assert.deepEqual(runWithLookups("M44 > FALSE", lookup, collateralLookup), false);
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"'), false);
134 assert.deepEqual(run('{"A", "B"} > "B"'), false);
135 assert.deepEqual(run('"A" > {"A", "B"}'), false);
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"), false);
141 assert.deepEqual(run("TRUE > {TRUE, FALSE}"), false);
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});