.gitignore added
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.1.1-0.20210319172145-bda8f5cee399 / internal / lsp / source / comment_test.go
1 // Copyright 2019 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 package source
6
7 import (
8         "bytes"
9         "reflect"
10         "strings"
11         "testing"
12 )
13
14 // This file is a copy of go/doc/comment_test.go with the exception for
15 // the test cases for TestEmphasize and TestCommentEscape
16
17 var headingTests = []struct {
18         line string
19         ok   bool
20 }{
21         {"Section", true},
22         {"A typical usage", true},
23         {"ΔΛΞ is Greek", true},
24         {"Foo 42", true},
25         {"", false},
26         {"section", false},
27         {"A typical usage:", false},
28         {"This code:", false},
29         {"δ is Greek", false},
30         {"Foo §", false},
31         {"Fermat's Last Sentence", true},
32         {"Fermat's", true},
33         {"'sX", false},
34         {"Ted 'Too' Bar", false},
35         {"Use n+m", false},
36         {"Scanning:", false},
37         {"N:M", false},
38 }
39
40 func TestIsHeading(t *testing.T) {
41         for _, tt := range headingTests {
42                 if h := heading(tt.line); (len(h) > 0) != tt.ok {
43                         t.Errorf("isHeading(%q) = %v, want %v", tt.line, h, tt.ok)
44                 }
45         }
46 }
47
48 var blocksTests = []struct {
49         in   string
50         out  []block
51         text string
52 }{
53         {
54                 in: `Para 1.
55 Para 1 line 2.
56
57 Para 2.
58
59 Section
60
61 Para 3.
62
63         pre
64         pre1
65
66 Para 4.
67
68         pre
69         pre1
70
71         pre2
72
73 Para 5.
74
75
76         pre
77
78
79         pre1
80         pre2
81
82 Para 6.
83         pre
84         pre2
85 `,
86                 out: []block{
87                         {opPara, []string{"Para 1.\n", "Para 1 line 2.\n"}},
88                         {opPara, []string{"Para 2.\n"}},
89                         {opHead, []string{"Section"}},
90                         {opPara, []string{"Para 3.\n"}},
91                         {opPre, []string{"pre\n", "pre1\n"}},
92                         {opPara, []string{"Para 4.\n"}},
93                         {opPre, []string{"pre\n", "pre1\n", "\n", "pre2\n"}},
94                         {opPara, []string{"Para 5.\n"}},
95                         {opPre, []string{"pre\n", "\n", "\n", "pre1\n", "pre2\n"}},
96                         {opPara, []string{"Para 6.\n"}},
97                         {opPre, []string{"pre\n", "pre2\n"}},
98                 },
99                 text: `.   Para 1. Para 1 line 2.
100
101 .   Para 2.
102
103
104 .   Section
105
106 .   Para 3.
107
108 $       pre
109 $       pre1
110
111 .   Para 4.
112
113 $       pre
114 $       pre1
115
116 $       pre2
117
118 .   Para 5.
119
120 $       pre
121
122
123 $       pre1
124 $       pre2
125
126 .   Para 6.
127
128 $       pre
129 $       pre2
130 `,
131         },
132         {
133                 in: "Para.\n\tshould not be ``escaped''",
134                 out: []block{
135                         {opPara, []string{"Para.\n"}},
136                         {opPre, []string{"should not be ``escaped''"}},
137                 },
138                 text: ".   Para.\n\n$   should not be ``escaped''",
139         },
140         {
141                 in: "// A very long line of 46 char for line wrapping.",
142                 out: []block{
143                         {opPara, []string{"// A very long line of 46 char for line wrapping."}},
144                 },
145                 text: `.   // A very long line of 46 char for line
146 .   // wrapping.
147 `,
148         },
149         {
150                 in: `/* A very long line of 46 char for line wrapping.
151 A very long line of 46 char for line wrapping. */`,
152                 out: []block{
153                         {opPara, []string{"/* A very long line of 46 char for line wrapping.\n", "A very long line of 46 char for line wrapping. */"}},
154                 },
155                 text: `.   /* A very long line of 46 char for line
156 .   wrapping. A very long line of 46 char
157 .   for line wrapping. */
158 `,
159         },
160 }
161
162 func TestBlocks(t *testing.T) {
163         for i, tt := range blocksTests {
164                 b := blocks(tt.in)
165                 if !reflect.DeepEqual(b, tt.out) {
166                         t.Errorf("#%d: mismatch\nhave: %v\nwant: %v", i, b, tt.out)
167                 }
168         }
169 }
170
171 // This has been modified from go/doc to use markdown links instead of html ones
172 // and use markdown escaping instead oh html
173 var emphasizeTests = []struct {
174         in, out string
175 }{
176         {"", ""},
177         {"http://[::1]:8080/foo.txt", `[http\:\/\/\[\:\:1\]\:8080\/foo\.txt](http://[::1]:8080/foo.txt)`},
178         {"before (https://www.google.com) after", `before \([https\:\/\/www\.google\.com](https://www.google.com)\) after`},
179         {"before https://www.google.com:30/x/y/z:b::c. After", `before [https\:\/\/www\.google\.com\:30\/x\/y\/z\:b\:\:c](https://www.google.com:30/x/y/z:b::c)\. After`},
180         {"http://www.google.com/path/:;!-/?query=%34b#093124", `[http\:\/\/www\.google\.com\/path\/\:\;\!\-\/\?query\=\%34b\#093124](http://www.google.com/path/:;!-/?query=%34b#093124)`},
181         {"http://www.google.com/path/:;!-/?query=%34bar#093124", `[http\:\/\/www\.google\.com\/path\/\:\;\!\-\/\?query\=\%34bar\#093124](http://www.google.com/path/:;!-/?query=%34bar#093124)`},
182         {"http://www.google.com/index.html! After", `[http\:\/\/www\.google\.com\/index\.html](http://www.google.com/index.html)\! After`},
183         {"http://www.google.com/", `[http\:\/\/www\.google\.com\/](http://www.google.com/)`},
184         {"https://www.google.com/", `[https\:\/\/www\.google\.com\/](https://www.google.com/)`},
185         {"http://www.google.com/path.", `[http\:\/\/www\.google\.com\/path](http://www.google.com/path)\.`},
186         {"http://en.wikipedia.org/wiki/Camellia_(cipher)", `[http\:\/\/en\.wikipedia\.org\/wiki\/Camellia\_\(cipher\)](http://en.wikipedia.org/wiki/Camellia_\(cipher\))`},
187         {"(http://www.google.com/)", `\([http\:\/\/www\.google\.com\/](http://www.google.com/)\)`},
188         {"http://gmail.com)", `[http\:\/\/gmail\.com](http://gmail.com)\)`},
189         {"((http://gmail.com))", `\(\([http\:\/\/gmail\.com](http://gmail.com)\)\)`},
190         {"http://gmail.com ((http://gmail.com)) ()", `[http\:\/\/gmail\.com](http://gmail.com) \(\([http\:\/\/gmail\.com](http://gmail.com)\)\) \(\)`},
191         {"Foo bar http://example.com/ quux!", `Foo bar [http\:\/\/example\.com\/](http://example.com/) quux\!`},
192         {"Hello http://example.com/%2f/ /world.", `Hello [http\:\/\/example\.com\/\%2f\/](http://example.com/%2f/) \/world\.`},
193         {"Lorem http: ipsum //host/path", `Lorem http\: ipsum \/\/host\/path`},
194         {"javascript://is/not/linked", `javascript\:\/\/is\/not\/linked`},
195         {"http://foo", `[http\:\/\/foo](http://foo)`},
196         {"art by [[https://www.example.com/person/][Person Name]]", `art by \[\[[https\:\/\/www\.example\.com\/person\/](https://www.example.com/person/)\]\[Person Name\]\]`},
197         {"please visit (http://golang.org/)", `please visit \([http\:\/\/golang\.org\/](http://golang.org/)\)`},
198         {"please visit http://golang.org/hello())", `please visit [http\:\/\/golang\.org\/hello\(\)](http://golang.org/hello\(\))\)`},
199         {"http://git.qemu.org/?p=qemu.git;a=blob;f=qapi-schema.json;hb=HEAD", `[http\:\/\/git\.qemu\.org\/\?p\=qemu\.git\;a\=blob\;f\=qapi\-schema\.json\;hb\=HEAD](http://git.qemu.org/?p=qemu.git;a=blob;f=qapi-schema.json;hb=HEAD)`},
200         {"https://foo.bar/bal/x(])", `[https\:\/\/foo\.bar\/bal\/x\(](https://foo.bar/bal/x\()\]\)`},
201         {"foo [ http://bar(])", `foo \[ [http\:\/\/bar\(](http://bar\()\]\)`},
202 }
203
204 func TestEmphasize(t *testing.T) {
205         for i, tt := range emphasizeTests {
206                 var buf bytes.Buffer
207                 emphasize(&buf, tt.in, true)
208                 out := buf.String()
209                 if out != tt.out {
210                         t.Errorf("#%d: mismatch\nhave: %v\nwant: %v", i, out, tt.out)
211                 }
212         }
213 }
214
215 func TestCommentEscape(t *testing.T) {
216         //ldquo -> ulquo and rdquo -> urquo
217         commentTests := []struct {
218                 in, out string
219         }{
220                 {"typically invoked as ``go tool asm'',", "typically invoked as " + ulquo + "go tool asm" + urquo + ","},
221                 {"For more detail, run ``go help test'' and ``go help testflag''", "For more detail, run " + ulquo + "go help test" + urquo + " and " + ulquo + "go help testflag" + urquo}}
222         for i, tt := range commentTests {
223                 var buf strings.Builder
224                 commentEscape(&buf, tt.in, true)
225                 out := buf.String()
226                 if out != tt.out {
227                         t.Errorf("#%d: mismatch\nhave: %q\nwant: %q", i, out, tt.out)
228                 }
229         }
230 }