forked from artempyanykh/marksman
-
Notifications
You must be signed in to change notification settings - Fork 0
/
DiagTest.fs
104 lines (83 loc) · 2.7 KB
/
DiagTest.fs
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
module Marksman.DiagTest
open System.IO
open Marksman.Index
open Marksman.Misc
open Xunit
open Marksman.Workspace
open Marksman.Diag
open Marksman.Helpers
let entryToHuman (entry: Entry) =
let lsp = diagToLsp entry
lsp.Message
let diagToHuman (diag: seq<PathUri * list<Entry>>) : list<string * string> =
seq {
for path, entries in diag do
for e in entries do
yield Path.GetFileName path.LocalPath, entryToHuman e
}
|> List.ofSeq
[<Fact>]
let documentIndex_1 () =
let doc = FakeDoc.Mk "# T1\n# T2"
let titles =
Doc.index >> Index.titles <| doc
|> Array.map (fun x -> x.data.title.text)
Assert.Equal<string>([ "T1"; "T2" ], titles)
[<Fact>]
let nonBreakingWhitespace () =
let nbsp = "\u00a0"
let doc = FakeDoc.Mk $"# T1\n##{nbsp}T2"
match (checkNonBreakingWhitespace doc) with
| [ NonBreakableWhitespace range ] ->
Assert.Equal(1, range.Start.Line)
Assert.Equal(1, range.End.Line)
Assert.Equal(2, range.Start.Character)
Assert.Equal(3, range.End.Character)
| _ -> failwith "Expected NonBreakingWhitespace diagnostic"
[<Fact>]
let noDiagOnShortcutLinks () =
let doc = FakeDoc.Mk([| "# H1"; "## H2"; "[shortcut]"; "[[#h42]]" |])
let folder = FakeFolder.Mk([ doc ])
let diag = checkFolder folder |> diagToHuman
Assert.Equal<string * string>([ "fake.md", "Link to non-existent heading 'h42'" ], diag)
[<Fact>]
let noDiagOnRealUrls () =
let doc =
FakeDoc.Mk([| "# H1"; "## H2"; "[](www.bad.md)"; "[](https://www.good.md)" |])
let folder = FakeFolder.Mk([ doc ])
let diag = checkFolder folder |> diagToHuman
Assert.Equal<string * string>(
[ "fake.md", "Link to non-existent document at 'www.bad.md'" ],
diag
)
[<Fact>]
let noDiagOnNonMarkdownFiles () =
let doc =
FakeDoc.Mk(
[| "# H1"
"## H2"
"[](bad.md)"
"[](another%20bad.md)"
"[](good/folder)" |]
)
let folder = FakeFolder.Mk([ doc ])
let diag = checkFolder folder |> diagToHuman
Assert.Equal<string * string>(
[ "fake.md", "Link to non-existent document at 'bad.md'"
"fake.md", "Link to non-existent document at 'another%20bad.md'" ],
diag
)
[<Fact>]
let noCrossFileDiagOnSingleFileFolders () =
let doc =
FakeDoc.Mk(
[| "[](bad.md)" //
"[[another-bad]]"
"[bad-ref][bad-ref]" |]
)
let folder = Folder.singleFile doc
let diag = checkFolder folder |> diagToHuman
Assert.Equal<string * string>(
[ "fake.md", "Link to non-existent link definition with the label 'bad-ref'" ],
diag
)