| // 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) |
| } |
| } |
| } |