diff options
Diffstat (limited to 'src/pkg/old/template/template_test.go')
-rw-r--r-- | src/pkg/old/template/template_test.go | 156 |
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 { |