1
0
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:
Andrew Gerrand 2010-03-10 20:19:20 +11:00
parent 2edb02b41e
commit a2772a593b
2 changed files with 37 additions and 1 deletions

View File

@ -66,6 +66,7 @@ import (
"container/vector" "container/vector"
"fmt" "fmt"
"io" "io"
"io/ioutil"
"os" "os"
"reflect" "reflect"
"runtime" "runtime"
@ -965,6 +966,19 @@ func Parse(s string, fmap FormatterMap) (t *Template, err os.Error) {
return 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. // MustParse is like Parse but panics if the template cannot be parsed.
func MustParse(s string, fmap FormatterMap) *Template { func MustParse(s string, fmap FormatterMap) *Template {
t, err := Parse(s, fmap) t, err := Parse(s, fmap)
@ -973,3 +987,13 @@ func MustParse(s string, fmap FormatterMap) *Template {
} }
return t 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)
}

View File

@ -9,7 +9,9 @@ import (
"container/vector" "container/vector"
"fmt" "fmt"
"io" "io"
"io/ioutil"
"json" "json"
"os"
"testing" "testing"
) )
@ -386,6 +388,16 @@ var tests = []*Test{
} }
func TestAll(t *testing.T) { 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) s := new(S)
// initialized by hand for clarity. // initialized by hand for clarity.
s.header = "Header" s.header = "Header"
@ -415,7 +427,7 @@ func TestAll(t *testing.T) {
var buf bytes.Buffer var buf bytes.Buffer
for _, test := range tests { for _, test := range tests {
buf.Reset() buf.Reset()
tmpl, err := Parse(test.in, formatters) tmpl, err := parseFunc(test)
if err != nil { if err != nil {
t.Error("unexpected parse error:", err) t.Error("unexpected parse error:", err)
continue continue