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