mirror of
https://github.com/golang/go
synced 2024-11-22 01:34:41 -07:00
template: add ParseFile, MustParseFile, and associated tests
R=r CC=golang-dev https://golang.org/cl/391041
This commit is contained in:
parent
2edb02b41e
commit
a2772a593b
@ -66,6 +66,7 @@ import (
|
||||
"container/vector"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"reflect"
|
||||
"runtime"
|
||||
@ -965,6 +966,19 @@ func Parse(s string, fmap FormatterMap) (t *Template, err os.Error) {
|
||||
return
|
||||
}
|
||||
|
||||
// ParseFile is a wrapper function that creates a Template with default
|
||||
// parameters (such as {} for // metacharacters). The filename identfies
|
||||
// a file containing the template text, while the formatter map fmap, which
|
||||
// may be nil, defines auxiliary functions for formatting variables.
|
||||
// The template is returned. If any errors occur, err will be non-nil.
|
||||
func ParseFile(filename string, fmap FormatterMap) (t *Template, err os.Error) {
|
||||
b, err := ioutil.ReadFile(filename)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return Parse(string(b), fmap)
|
||||
}
|
||||
|
||||
// MustParse is like Parse but panics if the template cannot be parsed.
|
||||
func MustParse(s string, fmap FormatterMap) *Template {
|
||||
t, err := Parse(s, fmap)
|
||||
@ -973,3 +987,13 @@ func MustParse(s string, fmap FormatterMap) *Template {
|
||||
}
|
||||
return t
|
||||
}
|
||||
|
||||
// MustParseFile is like ParseFile but panics if the file cannot be read
|
||||
// or the template cannot be parsed.
|
||||
func MustParseFile(filename string, fmap FormatterMap) *Template {
|
||||
b, err := ioutil.ReadFile(filename)
|
||||
if err != nil {
|
||||
panic("template parse error: ", err.String())
|
||||
}
|
||||
return MustParse(string(b), fmap)
|
||||
}
|
||||
|
@ -9,7 +9,9 @@ import (
|
||||
"container/vector"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"json"
|
||||
"os"
|
||||
"testing"
|
||||
)
|
||||
|
||||
@ -386,6 +388,16 @@ var tests = []*Test{
|
||||
}
|
||||
|
||||
func TestAll(t *testing.T) {
|
||||
// Parse
|
||||
testAll(t, func(test *Test) (*Template, os.Error) { return Parse(test.in, formatters) })
|
||||
// ParseFile
|
||||
testAll(t, func(test *Test) (*Template, os.Error) {
|
||||
ioutil.WriteFile("_test/test.tmpl", []byte(test.in), 0600)
|
||||
return ParseFile("_test/test.tmpl", formatters)
|
||||
})
|
||||
}
|
||||
|
||||
func testAll(t *testing.T, parseFunc func(*Test) (*Template, os.Error)) {
|
||||
s := new(S)
|
||||
// initialized by hand for clarity.
|
||||
s.header = "Header"
|
||||
@ -415,7 +427,7 @@ func TestAll(t *testing.T) {
|
||||
var buf bytes.Buffer
|
||||
for _, test := range tests {
|
||||
buf.Reset()
|
||||
tmpl, err := Parse(test.in, formatters)
|
||||
tmpl, err := parseFunc(test)
|
||||
if err != nil {
|
||||
t.Error("unexpected parse error:", err)
|
||||
continue
|
||||
|
Loading…
Reference in New Issue
Block a user