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