-
-
Notifications
You must be signed in to change notification settings - Fork 93
Expand file tree
/
Copy pathflattenHighlights.test.ts
More file actions
123 lines (119 loc) · 2.7 KB
/
flattenHighlights.test.ts
File metadata and controls
123 lines (119 loc) · 2.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
import { BorderStyle, Range } from "@cursorless/lib-common";
import * as assert from "node:assert/strict";
import { flattenHighlights } from "./flattenHighlights";
import type { Highlight, Scope } from "./types";
interface Test {
name: string;
scopes: Scope[];
expected: string[];
}
const tests: Test[] = [
{
name: "Distant targets",
scopes: [
{
targets: [{ content: "0:3-0:5" }, { content: "0:7-0:9" }],
},
],
expected: ["0:3-0:5", "0:7-0:9"],
},
{
name: "Adjacent targets",
scopes: [
{
targets: [{ content: "0:3-0:5" }, { content: "0:5-0:9" }],
},
],
expected: ["0:3-0:5", "0:5-0:9"],
},
{
name: "Overlapping targets",
scopes: [
{
targets: [{ content: "0:3-0:5" }, { content: "0:4-0:9" }],
},
],
expected: ["0:3-0:4", "0:4-0:5", "0:5-0:9"],
},
{
name: "Domain == target",
scopes: [
{
domain: "0:3-0:5",
targets: [{ content: "0:3-0:5" }],
},
],
expected: ["0:3-0:5"],
},
{
name: "Domain contains target",
scopes: [
{
domain: "0:3-0:6",
targets: [{ content: "0:3-0:5" }],
},
],
expected: ["0:3-0:5", "0:5-0:6"],
},
{
name: "Target contains domain",
scopes: [
{
domain: "0:3-0:5",
targets: [{ content: "0:3-0:6" }],
},
],
expected: ["0:3-0:5", "0:5-0:6"],
},
{
name: "Domain overlaps target",
scopes: [
{
domain: "0:3-0:5",
targets: [{ content: "0:4-0:6" }],
},
],
expected: ["0:3-0:4", "0:4-0:5", "0:5-0:6"],
},
];
suite("flatten highlights", () => {
tests.forEach((t) => {
test(t.name, () => {
const highlights = t.scopes.flatMap((s) => {
const result: Highlight[] = [];
if (s.domain) {
result.push(createHighlight(s.domain));
}
result.push(...s.targets.map((t) => createHighlight(t.content)));
return result;
});
const actual = flattenHighlights(highlights);
assert.equal(actual.length, t.expected.length);
for (let i = 0; i < actual.length; i++) {
assert.equal(actual[i].range.concise(), t.expected[i]);
}
});
});
});
function createHighlight(range: string): Highlight {
return {
range: Range.fromConcise(range),
style: {
backgroundColor: "black",
borderColorSolid: "red",
borderColorPorous: "pink",
borderRadius: {
topLeft: false,
topRight: false,
bottomLeft: false,
bottomRight: false,
},
borderStyle: {
top: BorderStyle.none,
bottom: BorderStyle.none,
left: BorderStyle.none,
right: BorderStyle.none,
},
},
};
}