f7
f7 is a spreadsheet formula execution library
git clone https://git.vogt.world/f7.git
Log | Files | README.md | LICENSE.md
← All files
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});