// ParseFile reads the template definition from a file and parses it to
// construct an internal representation of the template for execution.
+// The returned template will be nil if an error occurs.
func (t *Template) ParseFile(filename string) (*Template, os.Error) {
b, err := ioutil.ReadFile(filename)
if err != nil {
- return t, err
+ return nil, err
}
return t.Parse(string(b))
}
// parseFileInSet is the same as ParseFile except that function bindings
// are checked against those in the set and the template is added
// to the set.
+// The returned template will be nil if an error occurs.
func (t *Template) parseFileInSet(filename string, set *Set) (*Template, os.Error) {
b, err := ioutil.ReadFile(filename)
if err != nil {
- return t, err
+ return nil, err
}
return t.ParseInSet(string(b), set)
}
}
// ParseFile parses the named files into a set of named templates.
-// Each file must be parseable by itself. Parsing stops if an error is
-// encountered.
+// Each file must be parseable by itself.
+// If an error occurs, parsing stops and the returned set is nil.
func (s *Set) ParseFile(filenames ...string) (*Set, os.Error) {
for _, filename := range filenames {
b, err := ioutil.ReadFile(filename)
if err != nil {
- return s, err
+ return nil, err
}
_, err = s.Parse(string(b))
if err != nil {
- return s, err
+ return nil, err
}
}
return s, nil
// named files. Each file must be individually parseable.
func ParseSetFile(filenames ...string) (*Set, os.Error) {
s := new(Set)
- s.init()
for _, filename := range filenames {
b, err := ioutil.ReadFile(filename)
if err != nil {
- return s, err
+ return nil, err
}
_, err = s.Parse(string(b))
if err != nil {
- return s, err
+ return nil, err
}
}
return s, nil
// ParseFiles parses the set definition from the files identified by the
// pattern. The pattern is processed by filepath.Glob and must match at
// least one file.
+// If an error occurs, parsing stops and the returned set is nil.
func (s *Set) ParseFiles(pattern string) (*Set, os.Error) {
filenames, err := filepath.Glob(pattern)
if err != nil {
- return s, err
+ return nil, err
}
if len(filenames) == 0 {
- return s, fmt.Errorf("pattern matches no files: %#q", pattern)
+ return nil, fmt.Errorf("pattern matches no files: %#q", pattern)
}
return s.ParseFile(filenames...)
}
func ParseSetFiles(pattern string) (*Set, os.Error) {
set, err := new(Set).ParseFiles(pattern)
if err != nil {
- return set, err
+ return nil, err
}
return set, nil
}
// file does not contain {{define}} clauses. ParseTemplateFile is
// therefore equivalent to calling the ParseFile function to create
// individual templates, which are then added to the set.
-// Each file must be parseable by itself. Parsing stops if an error is
-// encountered.
+// Each file must be parseable by itself.
+// If an error occurs, parsing stops and the returned set is nil.
func (s *Set) ParseTemplateFile(filenames ...string) (*Set, os.Error) {
for _, filename := range filenames {
_, err := parseFileInSet(filename, s)
if err != nil {
- return s, err
+ return nil, err
}
}
return s, nil
// file does not contain {{define}} clauses. ParseTemplateFiles is
// therefore equivalent to calling the ParseFile function to create
// individual templates, which are then added to the set.
-// Each file must be parseable by itself. Parsing stops if an error is
-// encountered.
+// Each file must be parseable by itself.
+// If an error occurs, parsing stops and the returned set is nil.
func (s *Set) ParseTemplateFiles(pattern string) (*Set, os.Error) {
filenames, err := filepath.Glob(pattern)
if err != nil {
- return s, err
+ return nil, err
}
for _, filename := range filenames {
_, err := parseFileInSet(filename, s)
if err != nil {
- return s, err
+ return nil, err
}
}
return s, nil
for _, filename := range filenames {
t, err := ParseFile(filename)
if err != nil {
- return set, err
+ return nil, err
}
if err := set.add(t); err != nil {
- return set, err
+ return nil, err
}
}
return set, nil
// encountered.
func ParseTemplateFiles(pattern string) (*Set, os.Error) {
set := new(Set)
- set.init()
filenames, err := filepath.Glob(pattern)
if err != nil {
- return set, err
+ return nil, err
}
for _, filename := range filenames {
t, err := ParseFile(filename)
if err != nil {
- return set, err
+ return nil, err
}
if err := set.add(t); err != nil {
- return set, err
+ return nil, err
}
}
return set, nil
func TestSetExecute(t *testing.T) {
// Declare a set with a couple of templates first.
- set, err := new(Set).Parse(setText1)
+ set := new(Set)
+ _, err := set.Parse(setText1)
if err != nil {
t.Fatalf("error parsing set: %s", err)
}
}
func TestSetParseFile(t *testing.T) {
- set, err := new(Set).ParseFile("DOES NOT EXIST")
+ set := new(Set)
+ _, err := set.ParseFile("DOES NOT EXIST")
if err == nil {
t.Error("expected error for non-existent file; got none")
}
}
func TestParseSetFile(t *testing.T) {
- set, err := ParseSetFile("DOES NOT EXIST")
+ set := new(Set)
+ _, err := ParseSetFile("DOES NOT EXIST")
if err == nil {
t.Error("expected error for non-existent file; got none")
}
}
func TestSetParseFiles(t *testing.T) {
- set, err := new(Set).ParseFiles("DOES NOT EXIST")
+ _, err := new(Set).ParseFiles("DOES NOT EXIST")
if err == nil {
t.Error("expected error for non-existent file; got none")
}
- _, err = set.ParseFiles("[x")
+ _, err = new(Set).ParseFiles("[x")
if err == nil {
t.Error("expected error for bad pattern; got none")
}
- _, err = set.ParseFiles("testdata/file*.tmpl")
+ set, err := new(Set).ParseFiles("testdata/file*.tmpl")
if err != nil {
t.Fatalf("error parsing files: %v", err)
}
}
func TestParseSetFiles(t *testing.T) {
- set, err := ParseSetFiles("DOES NOT EXIST")
+ _, err := ParseSetFiles("DOES NOT EXIST")
if err == nil {
t.Error("expected error for non-existent file; got none")
}
- set, err = ParseSetFiles("[x")
+ _, err = ParseSetFiles("[x")
if err == nil {
t.Error("expected error for bad pattern; got none")
}
- set, err = ParseSetFiles("testdata/file*.tmpl")
+ set, err := ParseSetFiles("testdata/file*.tmpl")
if err != nil {
t.Fatalf("error parsing files: %v", err)
}
}
func TestSetParseTemplateFile(t *testing.T) {
- set, err := ParseTemplateFile("DOES NOT EXIST")
+ _, err := ParseTemplateFile("DOES NOT EXIST")
if err == nil {
t.Error("expected error for non-existent file; got none")
}
- _, err = set.ParseTemplateFile("testdata/tmpl1.tmpl", "testdata/tmpl2.tmpl")
+ set, err := new(Set).ParseTemplateFile("testdata/tmpl1.tmpl", "testdata/tmpl2.tmpl")
if err != nil {
t.Fatalf("error parsing files: %v", err)
}
}
func TestParseTemplateFile(t *testing.T) {
- set, err := ParseTemplateFile("DOES NOT EXIST")
+ _, err := ParseTemplateFile("DOES NOT EXIST")
if err == nil {
t.Error("expected error for non-existent file; got none")
}
- set, err = ParseTemplateFile("testdata/tmpl1.tmpl", "testdata/tmpl2.tmpl")
+ set, err := new(Set).ParseTemplateFile("testdata/tmpl1.tmpl", "testdata/tmpl2.tmpl")
if err != nil {
t.Fatalf("error parsing files: %v", err)
}
}
func TestSetParseTemplateFiles(t *testing.T) {
- set, err := ParseTemplateFiles("DOES NOT EXIST")
+ _, err := ParseTemplateFiles("DOES NOT EXIST")
if err == nil {
t.Error("expected error for non-existent file; got none")
}
- _, err = set.ParseTemplateFiles("[x")
+ _, err = new(Set).ParseTemplateFiles("[x")
if err == nil {
t.Error("expected error for bad pattern; got none")
}
- _, err = set.ParseTemplateFiles("testdata/tmpl*.tmpl")
+ set, err := new(Set).ParseTemplateFiles("testdata/tmpl*.tmpl")
if err != nil {
t.Fatalf("error parsing files: %v", err)
}
}
func TestParseTemplateFiles(t *testing.T) {
- set, err := ParseTemplateFiles("DOES NOT EXIST")
+ _, err := ParseTemplateFiles("DOES NOT EXIST")
if err == nil {
t.Error("expected error for non-existent file; got none")
}
- set, err = ParseTemplateFiles("[x")
+ _, err = ParseTemplateFiles("[x")
if err == nil {
t.Error("expected error for bad pattern; got none")
}
- set, err = ParseTemplateFiles("testdata/tmpl*.tmpl")
+ set, err := ParseTemplateFiles("testdata/tmpl*.tmpl")
if err != nil {
t.Fatalf("error parsing files: %v", err)
}