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/models/CellQueryTest.ts
-rw-r--r--
3497
 1import { assert } from "chai";
 2import { it, describe } from "../testutils/TestUtils";
 3import { F7Exception } from "../../../main/js/errors/F7Exception";
 4import { CellQuery } from "../../../main/js/models/nodes/CellQuery";
 5
 6const A1 = CellQuery.builder().setSheet("Alpha").columnsBetween(0, 0).rowsBetween(0, 0).build();
 7const B1 = CellQuery.builder().setSheet("Alpha").columnsBetween(1, 1).rowsBetween(0, 0).build();
 8const B2 = CellQuery.builder().setSheet("Alpha").columnsBetween(1, 1).rowsBetween(1, 1).build();
 9const B99 = CellQuery.builder().setSheet("Alpha").columnsBetween(1, 1).rowsBetween(98, 98).build();
10const C14 = CellQuery.builder().setSheet("Alpha").columnsBetween(2, 2).rowsBetween(13, 13).build();
11const A1toB1 = CellQuery.builder().setSheet("Alpha").columnsBetween(0, 1).rowsBetween(0, 0).build();
12const AtoB = CellQuery.builder()
13  .setSheet("Alpha")
14  .columnsBetween(0, 1)
15  .openRowsStartingAtZero()
16  .build();
17
18describe("CellQuery.intersects", function () {
19  it("should be able to find intersections", function () {
20    assert.isFalse(A1.intersects(B1));
21    assert.isFalse(B1.intersects(A1));
22    assert.isTrue(B2.intersects(B2));
23    assert.isFalse(B99.intersects(B2));
24    assert.isTrue(A1toB1.intersects(A1));
25    assert.isTrue(A1toB1.intersects(B1));
26    assert.isTrue(AtoB.intersects(B1));
27    assert.isTrue(AtoB.intersects(A1));
28    assert.isTrue(AtoB.intersects(B2));
29    assert.isTrue(AtoB.intersects(B99));
30    assert.isFalse(AtoB.intersects(C14));
31  });
32});
33
34describe("CellQuery.toBounded", function () {
35  it("should bound column and row ranges", function () {
36    const unboundedRows = CellQuery.builder().columnsBetween(0, 1).openRowsStartingAtZero().build();
37    const expectedBoundedRows = CellQuery.builder().columnsBetween(0, 1).rowsBetween(0, 22).build();
38    assert.deepEqual(unboundedRows.toBounded(10, 22), expectedBoundedRows);
39    const unboundedColumns = CellQuery.builder()
40      .openColumnsStartingAtZero()
41      .rowsBetween(0, 20)
42      .build();
43    const expectedBoundedColumns = CellQuery.builder()
44      .columnsBetween(0, 44)
45      .rowsBetween(0, 20)
46      .build();
47    assert.deepEqual(unboundedColumns.toBounded(44, 30), expectedBoundedColumns);
48  });
49
50  it("should leave query unchanged when bounds too high", function () {
51    const alreadyBounded = CellQuery.builder().columnsBetween(0, 1).rowsBetween(0, 22).build();
52    assert.deepEqual(alreadyBounded.toBounded(100, 100), alreadyBounded);
53  });
54
55  it("should return bounded subset", function () {
56    const alreadyBounded = CellQuery.builder().columnsBetween(0, 44).rowsBetween(0, 22).build();
57    const subset = CellQuery.builder().columnsBetween(0, 10).rowsBetween(0, 12).build();
58    assert.deepEqual(alreadyBounded.toBounded(10, 12), subset);
59  });
60});
61
62describe("CellQueryBuilder.expand", function () {
63  it("should expand cell query", function () {
64    const expanded = CellQuery.builder(B2)
65      .expand(A1)
66      .expand(A1toB1)
67      .expand(B99)
68      .expand(C14)
69      .build();
70    const expected = CellQuery.builder()
71      .setSheet("Alpha")
72      .columnsBetween(0, 2)
73      .rowsBetween(0, 98)
74      .build();
75    assert.deepEqual(expanded, expected);
76  });
77
78  it("should error out on different grid names", function () {
79    let exception: F7Exception = null;
80    try {
81      CellQuery.builder(A1).expand(CellQuery.builder(A1).setSheet("DifferentGrid").build()).build();
82    } catch (e) {
83      exception = e;
84    }
85    assert.isNotNull(exception);
86  });
87});