mirror of
https://github.com/golang/go
synced 2024-11-22 07:14:40 -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"
|
"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)
|
||||||
|
}
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user