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