-
-
Notifications
You must be signed in to change notification settings - Fork 92
Expand file tree
/
Copy pathreplacements.test.ts
More file actions
101 lines (88 loc) · 2.79 KB
/
replacements.test.ts
File metadata and controls
101 lines (88 loc) · 2.79 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
import type { MarkdownPostProcessorContext, MarkdownSectionInformation } from "obsidian";
import { describe, expect, it } from "vitest";
import { applyReplacements } from "@/query/replacements";
import type { TaskQuery } from "@/query/schema/tasks";
class FakeContext implements MarkdownPostProcessorContext {
docId = "";
sourcePath: string;
// biome-ignore lint/suspicious/noExplicitAny: This is part of the interface, so we should respect it.
frontmatter: any | null | undefined;
constructor(sourcePath: string) {
this.sourcePath = sourcePath;
}
addChild(): void {}
getSectionInfo(): MarkdownSectionInformation | null {
return null;
}
}
type TestCase = {
description: string;
filter: string;
filePath?: string;
expectedFilter: string;
};
describe("applyReplacements", () => {
describe("{{filename}}", () => {
const testcases: TestCase[] = [
{
description: "should not modify filter if '{{filename}}' not present",
filter: "#Project & /section",
expectedFilter: "#Project & /section",
},
{
description: "should replace {{filename}} with base file name",
filter: "#{{filename}}",
filePath: "Foobar.md",
expectedFilter: "#Foobar",
},
{
description: "should only use the file name",
filter: "#{{filename}}",
filePath: "some/path/to/foobar.md",
expectedFilter: "#foobar",
},
];
for (const tc of testcases) {
it(tc.description, () => {
const query: TaskQuery = {
filter: tc.filter,
};
applyReplacements(query, new FakeContext(tc.filePath ?? ""));
expect(query.filter).toBe(tc.expectedFilter);
});
}
});
describe("unicode whitespace normalization", () => {
const testcases: TestCase[] = [
{
description: "should replace non-breaking spaces with regular spaces",
filter: "#Project\u00A0&\u00A0/section",
expectedFilter: "#Project & /section",
},
{
description: "should replace em spaces with regular spaces",
filter: "#Project\u2003&\u2003/section",
expectedFilter: "#Project & /section",
},
{
description: "should trim leading and trailing whitespace",
filter: " #Project & /section ",
expectedFilter: "#Project & /section",
},
{
description: "should not modify filters with only regular spaces",
filter: "#Project & /section",
expectedFilter: "#Project & /section",
},
];
for (const tc of testcases) {
it(tc.description, () => {
const query: TaskQuery = {
filter: tc.filter,
};
applyReplacements(query, new FakeContext(tc.filePath ?? ""));
expect(query.filter).toBe(tc.expectedFilter);
});
}
});
});