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
|
// Copyright 2010 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package try
import (
"bytes"
"regexp" // Used as the package to try.
"testing"
)
// The global functions in package regexp at time of writing.
// Doesn't need to be updated unless the entries in this list become invalid.
var functions = map[string]interface{}{
"Compile": regexp.Compile,
"Match": regexp.Match,
"MatchString": regexp.MatchString,
"MustCompile": regexp.MustCompile,
"QuoteMeta": regexp.QuoteMeta,
}
// A wraps arguments to make the test cases nicer to read.
func A(args ...interface{}) []interface{} {
return args
}
type Test struct {
firstArg string // only needed if there is exactly one argument
result string // minus final newline; might be just the godoc string
args []interface{}
}
var testRE = regexp.MustCompile("a(.)(.)d")
var tests = []Test{
// A simple expression. The final value is a slice in case the expression is multivalue.
{"3+4", "3+4 = 7", A([]interface{}{7})},
// A search for a function.
{"", "regexp QuoteMeta", A("([])", `\(\[\]\)`)},
// A search for a function with multiple return values.
{"", "regexp MatchString", A("abc", "xabcd", true, nil)},
// Searches for methods.
{"", "regexp MatchString", A(testRE, "xabcde", true)},
{"", "regexp NumSubexp", A(testRE, 2)},
}
func TestAll(t *testing.T) {
re := regexp.MustCompile(".*// godoc ")
for _, test := range tests {
b := new(bytes.Buffer)
output = b
Main("regexp", test.firstArg, functions, test.args)
expect := test.result + "\n"
got := re.ReplaceAllString(b.String(), "")
if got != expect {
t.Errorf("expected %q; got %q", expect, got)
}
}
}
|