summaryrefslogtreecommitdiff
path: root/src/pkg/old/template/template_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/pkg/old/template/template_test.go')
-rw-r--r--src/pkg/old/template/template_test.go156
1 files changed, 81 insertions, 75 deletions
diff --git a/src/pkg/old/template/template_test.go b/src/pkg/old/template/template_test.go
index eae8011eb..f42a61a1b 100644
--- a/src/pkg/old/template/template_test.go
+++ b/src/pkg/old/template/template_test.go
@@ -6,11 +6,10 @@ package template
import (
"bytes"
- "container/vector"
+ "encoding/json"
"fmt"
"io"
"io/ioutil"
- "json"
"os"
"strings"
"testing"
@@ -42,7 +41,7 @@ type S struct {
Empty []*T
Emptystring string
Null []*T
- Vec *vector.Vector
+ Vec []interface{}
True bool
False bool
Mp map[string]string
@@ -107,108 +106,108 @@ var formatters = FormatterMap{
var tests = []*Test{
// Simple
- &Test{"", "", ""},
- &Test{"abc", "abc", ""},
- &Test{"abc\ndef\n", "abc\ndef\n", ""},
- &Test{" {.meta-left} \n", "{", ""},
- &Test{" {.meta-right} \n", "}", ""},
- &Test{" {.space} \n", " ", ""},
- &Test{" {.tab} \n", "\t", ""},
- &Test{" {#comment} \n", "", ""},
- &Test{"\tSome Text\t\n", "\tSome Text\t\n", ""},
- &Test{" {.meta-right} {.meta-right} {.meta-right} \n", " } } } \n", ""},
+ {"", "", ""},
+ {"abc", "abc", ""},
+ {"abc\ndef\n", "abc\ndef\n", ""},
+ {" {.meta-left} \n", "{", ""},
+ {" {.meta-right} \n", "}", ""},
+ {" {.space} \n", " ", ""},
+ {" {.tab} \n", "\t", ""},
+ {" {#comment} \n", "", ""},
+ {"\tSome Text\t\n", "\tSome Text\t\n", ""},
+ {" {.meta-right} {.meta-right} {.meta-right} \n", " } } } \n", ""},
// Variables at top level
- &Test{
+ {
in: "{Header}={Integer}\n",
out: "Header=77\n",
},
- &Test{
+ {
in: "Pointers: {*HeaderPtr}={*IntegerPtr}\n",
out: "Pointers: Header=77\n",
},
- &Test{
+ {
in: "Stars but not pointers: {*Header}={*Integer}\n",
out: "Stars but not pointers: Header=77\n",
},
- &Test{
+ {
in: "nil pointer: {*NilPtr}={*Integer}\n",
out: "nil pointer: <nil>=77\n",
},
- &Test{
+ {
in: `{"Strings" ":"} {""} {"|"} {"\t\u0123 \x23\\"} {"\"}{\\"}`,
out: "Strings: | \t\u0123 \x23\\ \"}{\\",
},
- &Test{
+ {
in: "{`Raw strings` `:`} {``} {`|`} {`\\t\\u0123 \\x23\\`} {`}{\\`}",
out: "Raw strings: | \\t\\u0123 \\x23\\ }{\\",
},
- &Test{
+ {
in: "Characters: {'a'} {'\\u0123'} {' '} {'{'} {'|'} {'}'}",
out: "Characters: 97 291 32 123 124 125",
},
- &Test{
+ {
in: "Integers: {1} {-2} {+42} {0777} {0x0a}",
out: "Integers: 1 -2 42 511 10",
},
- &Test{
+ {
in: "Floats: {.5} {-.5} {1.1} {-2.2} {+42.1} {1e10} {1.2e-3} {1.2e3} {-1.2e3}",
out: "Floats: 0.5 -0.5 1.1 -2.2 42.1 1e+10 0.0012 1200 -1200",
},
// Method at top level
- &Test{
+ {
in: "ptrmethod={PointerMethod}\n",
out: "ptrmethod=ptrmethod!\n",
},
- &Test{
+ {
in: "valmethod={ValueMethod}\n",
out: "valmethod=valmethod!\n",
},
// Section
- &Test{
+ {
in: "{.section Data }\n" +
"some text for the section\n" +
"{.end}\n",
out: "some text for the section\n",
},
- &Test{
+ {
in: "{.section Data }\n" +
"{Header}={Integer}\n" +
"{.end}\n",
out: "Header=77\n",
},
- &Test{
+ {
in: "{.section Pdata }\n" +
"{Header}={Integer}\n" +
"{.end}\n",
out: "Header=77\n",
},
- &Test{
+ {
in: "{.section Pdata }\n" +
"data present\n" +
"{.or}\n" +
@@ -217,7 +216,7 @@ var tests = []*Test{
out: "data present\n",
},
- &Test{
+ {
in: "{.section Empty }\n" +
"data present\n" +
"{.or}\n" +
@@ -226,7 +225,7 @@ var tests = []*Test{
out: "data not present\n",
},
- &Test{
+ {
in: "{.section Null }\n" +
"data present\n" +
"{.or}\n" +
@@ -235,7 +234,7 @@ var tests = []*Test{
out: "data not present\n",
},
- &Test{
+ {
in: "{.section Pdata }\n" +
"{Header}={Integer}\n" +
"{.section @ }\n" +
@@ -247,20 +246,20 @@ var tests = []*Test{
"Header=77\n",
},
- &Test{
+ {
in: "{.section Data}{.end} {Header}\n",
out: " Header\n",
},
- &Test{
+ {
in: "{.section Integer}{@}{.end}",
out: "77",
},
// Repeated
- &Test{
+ {
in: "{.section Pdata }\n" +
"{.repeated section @ }\n" +
"{Item}={Value}\n" +
@@ -270,7 +269,7 @@ var tests = []*Test{
out: "ItemNumber1=ValueNumber1\n" +
"ItemNumber2=ValueNumber2\n",
},
- &Test{
+ {
in: "{.section Pdata }\n" +
"{.repeated section @ }\n" +
"{Item}={Value}\n" +
@@ -282,7 +281,7 @@ var tests = []*Test{
out: "ItemNumber1=ValueNumber1\n" +
"ItemNumber2=ValueNumber2\n",
},
- &Test{
+ {
in: "{.section @ }\n" +
"{.repeated section Empty }\n" +
"{Item}={Value}\n" +
@@ -293,7 +292,7 @@ var tests = []*Test{
out: "this should appear: empty field\n",
},
- &Test{
+ {
in: "{.repeated section Pdata }\n" +
"{Item}\n" +
"{.alternates with}\n" +
@@ -304,7 +303,7 @@ var tests = []*Test{
"is\nover\nmultiple\nlines\n" +
"ItemNumber2\n",
},
- &Test{
+ {
in: "{.repeated section Pdata }\n" +
"{Item}\n" +
"{.alternates with}\n" +
@@ -315,7 +314,7 @@ var tests = []*Test{
"is\nover\nmultiple\nlines\n" +
"ItemNumber2\n",
},
- &Test{
+ {
in: "{.section Pdata }\n" +
"{.repeated section @ }\n" +
"{Item}={Value}\n" +
@@ -329,7 +328,7 @@ var tests = []*Test{
"DIVIDER\n" +
"ItemNumber2=ValueNumber2\n",
},
- &Test{
+ {
in: "{.repeated section Vec }\n" +
"{@}\n" +
"{.end}\n",
@@ -338,27 +337,27 @@ var tests = []*Test{
"elt2\n",
},
// Same but with a space before {.end}: was a bug.
- &Test{
+ {
in: "{.repeated section Vec }\n" +
"{@} {.end}\n",
out: "elt1 elt2 \n",
},
- &Test{
+ {
in: "{.repeated section Integer}{.end}",
err: "line 1: .repeated: cannot repeat Integer (type int)",
},
// Nested names
- &Test{
+ {
in: "{.section @ }\n" +
"{InnerT.Item}={InnerT.Value}\n" +
"{.end}",
out: "ItemNumber1=ValueNumber1\n",
},
- &Test{
+ {
in: "{.section @ }\n" +
"{InnerT.Item}={.section InnerT}{.section Value}{@}{.end}{.end}\n" +
"{.end}",
@@ -366,14 +365,14 @@ var tests = []*Test{
out: "ItemNumber1=ValueNumber1\n",
},
- &Test{
+ {
in: "{.section Emptystring}emptystring{.end}\n" +
"{.section Header}header{.end}\n",
out: "\nheader\n",
},
- &Test{
+ {
in: "{.section True}1{.or}2{.end}\n" +
"{.section False}3{.or}4{.end}\n",
@@ -382,32 +381,32 @@ var tests = []*Test{
// Maps
- &Test{
+ {
in: "{Mp.mapkey}\n",
out: "Ahoy!\n",
},
- &Test{
+ {
in: "{Innermap.Mp.innerkey}\n",
out: "55\n",
},
- &Test{
+ {
in: "{.section Innermap}{.section Mp}{innerkey}{.end}{.end}\n",
out: "55\n",
},
- &Test{
+ {
in: "{.section JSON}{.repeated section maps}{a}{b}{.end}{.end}\n",
out: "1234\n",
},
- &Test{
+ {
in: "{Stringmap.stringkey1}\n",
out: "stringresult\n",
},
- &Test{
+ {
in: "{.repeated section Stringmap}\n" +
"{@}\n" +
"{.end}",
@@ -415,7 +414,7 @@ var tests = []*Test{
out: "stringresult\n" +
"stringresult\n",
},
- &Test{
+ {
in: "{.repeated section Stringmap}\n" +
"\t{@}\n" +
"{.end}",
@@ -423,12 +422,12 @@ var tests = []*Test{
out: "\tstringresult\n" +
"\tstringresult\n",
},
- &Test{
+ {
in: "{*Ptrmap.stringkey1}\n",
out: "pointedToString\n",
},
- &Test{
+ {
in: "{.repeated section Ptrmap}\n" +
"{*@}\n" +
"{.end}",
@@ -439,22 +438,22 @@ var tests = []*Test{
// Interface values
- &Test{
+ {
in: "{Iface}",
out: "[1 2 3]",
},
- &Test{
+ {
in: "{.repeated section Iface}{@}{.alternates with} {.end}",
out: "1 2 3",
},
- &Test{
+ {
in: "{.section Iface}{@}{.end}",
out: "[1 2 3]",
},
- &Test{
+ {
in: "{.section Ifaceptr}{Item} {Value}{.end}",
out: "Item Value",
@@ -463,29 +462,38 @@ var tests = []*Test{
func TestAll(t *testing.T) {
// Parse
- testAll(t, func(test *Test) (*Template, os.Error) { return Parse(test.in, formatters) })
+ testAll(t, func(test *Test) (*Template, error) { return Parse(test.in, formatters) })
// ParseFile
- testAll(t, func(test *Test) (*Template, os.Error) {
- err := ioutil.WriteFile("_test/test.tmpl", []byte(test.in), 0600)
+ f, err := ioutil.TempFile("", "template-test")
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer func() {
+ name := f.Name()
+ f.Close()
+ os.Remove(name)
+ }()
+ testAll(t, func(test *Test) (*Template, error) {
+ err := ioutil.WriteFile(f.Name(), []byte(test.in), 0600)
if err != nil {
t.Error("unexpected write error:", err)
return nil, err
}
- return ParseFile("_test/test.tmpl", formatters)
+ return ParseFile(f.Name(), formatters)
})
// tmpl.ParseFile
- testAll(t, func(test *Test) (*Template, os.Error) {
- err := ioutil.WriteFile("_test/test.tmpl", []byte(test.in), 0600)
+ testAll(t, func(test *Test) (*Template, error) {
+ err := ioutil.WriteFile(f.Name(), []byte(test.in), 0600)
if err != nil {
t.Error("unexpected write error:", err)
return nil, err
}
tmpl := New(formatters)
- return tmpl, tmpl.ParseFile("_test/test.tmpl")
+ return tmpl, tmpl.ParseFile(f.Name())
})
}
-func testAll(t *testing.T, parseFunc func(*Test) (*Template, os.Error)) {
+func testAll(t *testing.T, parseFunc func(*Test) (*Template, error)) {
s := new(S)
// initialized by hand for clarity.
s.Header = "Header"
@@ -497,9 +505,7 @@ func testAll(t *testing.T, parseFunc func(*Test) (*Template, os.Error)) {
s.Pdata = []*T{&t1, &t2}
s.Empty = []*T{}
s.Null = nil
- s.Vec = new(vector.Vector)
- s.Vec.Push("elt1")
- s.Vec.Push("elt2")
+ s.Vec = []interface{}{"elt1", "elt2"}
s.True = true
s.False = false
s.Mp = make(map[string]string)
@@ -533,8 +539,8 @@ func testAll(t *testing.T, parseFunc func(*Test) (*Template, os.Error)) {
} else {
if err == nil {
t.Errorf("expected execute error %q, got nil", test.err)
- } else if err.String() != test.err {
- t.Errorf("expected execute error %q, got %q", test.err, err.String())
+ } else if err.Error() != test.err {
+ t.Errorf("expected execute error %q, got %q", test.err, err.Error())
}
}
if buf.String() != test.out {
@@ -706,7 +712,7 @@ func TestReferenceToUnexported(t *testing.T) {
if err == nil {
t.Fatal("expected execute error, got none")
}
- if strings.Index(err.String(), "not exported") < 0 {
+ if strings.Index(err.Error(), "not exported") < 0 {
t.Fatal("expected unexported error; got", err)
}
}
@@ -780,8 +786,8 @@ func TestFormatters(t *testing.T) {
t.Error("unexpected parse error:", err)
continue
}
- if strings.Index(err.String(), c.err) < 0 {
- t.Errorf("unexpected error: expected %q, got %q", c.err, err.String())
+ if strings.Index(err.Error(), c.err) < 0 {
+ t.Errorf("unexpected error: expected %q, got %q", c.err, err.Error())
continue
}
} else {