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});