LWG 3035. std::allocator's constructors should be constexpr
[official-gcc.git] / libgo / go / go / doc / comment_test.go
blob0523ab899ee345e00d5cab7f5fef8cca7277f612
1 // Copyright 2011 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.
5 package doc
7 import (
8 "bytes"
9 "reflect"
10 "testing"
13 var headingTests = []struct {
14 line string
15 ok bool
17 {"Section", true},
18 {"A typical usage", true},
19 {"ΔΛΞ is Greek", true},
20 {"Foo 42", true},
21 {"", false},
22 {"section", false},
23 {"A typical usage:", false},
24 {"This code:", false},
25 {"δ is Greek", false},
26 {"Foo §", false},
27 {"Fermat's Last Sentence", true},
28 {"Fermat's", true},
29 {"'sX", false},
30 {"Ted 'Too' Bar", false},
31 {"Use n+m", false},
32 {"Scanning:", false},
33 {"N:M", false},
36 func TestIsHeading(t *testing.T) {
37 for _, tt := range headingTests {
38 if h := heading(tt.line); (len(h) > 0) != tt.ok {
39 t.Errorf("isHeading(%q) = %v, want %v", tt.line, h, tt.ok)
44 var blocksTests = []struct {
45 in string
46 out []block
47 text string
50 in: `Para 1.
51 Para 1 line 2.
53 Para 2.
55 Section
57 Para 3.
59 pre
60 pre1
62 Para 4.
64 pre
65 pre1
67 pre2
69 Para 5.
72 pre
75 pre1
76 pre2
78 Para 6.
79 pre
80 pre2
82 out: []block{
83 {opPara, []string{"Para 1.\n", "Para 1 line 2.\n"}},
84 {opPara, []string{"Para 2.\n"}},
85 {opHead, []string{"Section"}},
86 {opPara, []string{"Para 3.\n"}},
87 {opPre, []string{"pre\n", "pre1\n"}},
88 {opPara, []string{"Para 4.\n"}},
89 {opPre, []string{"pre\n", "pre1\n", "\n", "pre2\n"}},
90 {opPara, []string{"Para 5.\n"}},
91 {opPre, []string{"pre\n", "\n", "\n", "pre1\n", "pre2\n"}},
92 {opPara, []string{"Para 6.\n"}},
93 {opPre, []string{"pre\n", "pre2\n"}},
95 text: `. Para 1. Para 1 line 2.
97 . Para 2.
100 . Section
102 . Para 3.
104 $ pre
105 $ pre1
107 . Para 4.
109 $ pre
110 $ pre1
112 $ pre2
114 . Para 5.
116 $ pre
119 $ pre1
120 $ pre2
122 . Para 6.
124 $ pre
125 $ pre2
130 func TestBlocks(t *testing.T) {
131 for i, tt := range blocksTests {
132 b := blocks(tt.in)
133 if !reflect.DeepEqual(b, tt.out) {
134 t.Errorf("#%d: mismatch\nhave: %v\nwant: %v", i, b, tt.out)
139 func TestToText(t *testing.T) {
140 var buf bytes.Buffer
141 for i, tt := range blocksTests {
142 ToText(&buf, tt.in, ". ", "$\t", 40)
143 if have := buf.String(); have != tt.text {
144 t.Errorf("#%d: mismatch\nhave: %s\nwant: %s\nhave vs want:\n%q\n%q", i, have, tt.text, have, tt.text)
146 buf.Reset()
150 var emphasizeTests = []struct {
151 in, out string
153 {"http://[::1]:8080/foo.txt", `<a href="http://[::1]:8080/foo.txt">http://[::1]:8080/foo.txt</a>`},
154 {"before (https://www.google.com) after", `before (<a href="https://www.google.com">https://www.google.com</a>) after`},
155 {"before https://www.google.com:30/x/y/z:b::c. After", `before <a href="https://www.google.com:30/x/y/z:b::c">https://www.google.com:30/x/y/z:b::c</a>. After`},
156 {"http://www.google.com/path/:;!-/?query=%34b#093124", `<a href="http://www.google.com/path/:;!-/?query=%34b#093124">http://www.google.com/path/:;!-/?query=%34b#093124</a>`},
157 {"http://www.google.com/path/:;!-/?query=%34bar#093124", `<a href="http://www.google.com/path/:;!-/?query=%34bar#093124">http://www.google.com/path/:;!-/?query=%34bar#093124</a>`},
158 {"http://www.google.com/index.html! After", `<a href="http://www.google.com/index.html">http://www.google.com/index.html</a>! After`},
159 {"http://www.google.com/", `<a href="http://www.google.com/">http://www.google.com/</a>`},
160 {"https://www.google.com/", `<a href="https://www.google.com/">https://www.google.com/</a>`},
161 {"http://www.google.com/path.", `<a href="http://www.google.com/path">http://www.google.com/path</a>.`},
162 {"http://en.wikipedia.org/wiki/Camellia_(cipher)", `<a href="http://en.wikipedia.org/wiki/Camellia_(cipher)">http://en.wikipedia.org/wiki/Camellia_(cipher)</a>`},
163 {"(http://www.google.com/)", `(<a href="http://www.google.com/">http://www.google.com/</a>)`},
164 {"http://gmail.com)", `<a href="http://gmail.com">http://gmail.com</a>)`},
165 {"((http://gmail.com))", `((<a href="http://gmail.com">http://gmail.com</a>))`},
166 {"http://gmail.com ((http://gmail.com)) ()", `<a href="http://gmail.com">http://gmail.com</a> ((<a href="http://gmail.com">http://gmail.com</a>)) ()`},
167 {"Foo bar http://example.com/ quux!", `Foo bar <a href="http://example.com/">http://example.com/</a> quux!`},
168 {"Hello http://example.com/%2f/ /world.", `Hello <a href="http://example.com/%2f/">http://example.com/%2f/</a> /world.`},
169 {"Lorem http: ipsum //host/path", "Lorem http: ipsum //host/path"},
170 {"javascript://is/not/linked", "javascript://is/not/linked"},
171 {"http://git.qemu.org/?p=qemu.git;a=blob;f=qapi-schema.json;hb=HEAD", `<a href="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</a>`},
174 func TestEmphasize(t *testing.T) {
175 for i, tt := range emphasizeTests {
176 var buf bytes.Buffer
177 emphasize(&buf, tt.in, nil, true)
178 out := buf.String()
179 if out != tt.out {
180 t.Errorf("#%d: mismatch\nhave: %v\nwant: %v", i, out, tt.out)
185 var pairedParensPrefixLenTests = []struct {
186 in, out string
188 {"", ""},
189 {"foo", "foo"},
190 {"()", "()"},
191 {"foo()", "foo()"},
192 {"foo()()()", "foo()()()"},
193 {"foo()((()()))", "foo()((()()))"},
194 {"foo()((()()))bar", "foo()((()()))bar"},
195 {"foo)", "foo"},
196 {"foo))", "foo"},
197 {"foo)))))", "foo"},
198 {"(foo", ""},
199 {"((foo", ""},
200 {"(((((foo", ""},
201 {"(foo)", "(foo)"},
202 {"((((foo))))", "((((foo))))"},
203 {"foo()())", "foo()()"},
204 {"foo((()())", "foo"},
205 {"foo((()())) (() foo ", "foo((()())) "},
208 func TestPairedParensPrefixLen(t *testing.T) {
209 for i, tt := range pairedParensPrefixLenTests {
210 if out := tt.in[:pairedParensPrefixLen(tt.in)]; out != tt.out {
211 t.Errorf("#%d: mismatch\nhave: %q\nwant: %q", i, out, tt.out)