| // Copyright 2011 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package ast |
| |
| import ( |
| "bytes" |
| "strings" |
| "testing" |
| ) |
| |
| var tests = []struct { |
| x interface{} // x is printed as s |
| s string |
| }{ |
| // basic types |
| {nil, "0 nil"}, |
| {true, "0 true"}, |
| {42, "0 42"}, |
| {3.14, "0 3.14"}, |
| {1 + 2.718i, "0 (1+2.718i)"}, |
| {"foobar", "0 \"foobar\""}, |
| |
| // maps |
| {map[Expr]string{}, `0 map[ast.Expr]string (len = 0) {}`}, |
| {map[string]int{"a": 1}, |
| `0 map[string]int (len = 1) { |
| 1 . "a": 1 |
| 2 }`}, |
| |
| // pointers |
| {new(int), "0 *0"}, |
| |
| // arrays |
| {[0]int{}, `0 [0]int {}`}, |
| {[3]int{1, 2, 3}, |
| `0 [3]int { |
| 1 . 0: 1 |
| 2 . 1: 2 |
| 3 . 2: 3 |
| 4 }`}, |
| {[...]int{42}, |
| `0 [1]int { |
| 1 . 0: 42 |
| 2 }`}, |
| |
| // slices |
| {[]int{}, `0 []int (len = 0) {}`}, |
| {[]int{1, 2, 3}, |
| `0 []int (len = 3) { |
| 1 . 0: 1 |
| 2 . 1: 2 |
| 3 . 2: 3 |
| 4 }`}, |
| |
| // structs |
| {struct{}{}, `0 struct {} {}`}, |
| {struct{ x int }{007}, `0 struct { x int } {}`}, |
| {struct{ X, y int }{42, 991}, |
| `0 struct { X int; y int } { |
| 1 . X: 42 |
| 2 }`}, |
| {struct{ X, Y int }{42, 991}, |
| `0 struct { X int; Y int } { |
| 1 . X: 42 |
| 2 . Y: 991 |
| 3 }`}, |
| } |
| |
| // Split s into lines, trim whitespace from all lines, and return |
| // the concatenated non-empty lines. |
| func trim(s string) string { |
| lines := strings.Split(s, "\n") |
| i := 0 |
| for _, line := range lines { |
| line = strings.TrimSpace(line) |
| if line != "" { |
| lines[i] = line |
| i++ |
| } |
| } |
| return strings.Join(lines[0:i], "\n") |
| } |
| |
| func TestPrint(t *testing.T) { |
| var buf bytes.Buffer |
| for _, test := range tests { |
| buf.Reset() |
| if err := Fprint(&buf, nil, test.x, nil); err != nil { |
| t.Errorf("Fprint failed: %s", err) |
| } |
| if s, ts := trim(buf.String()), trim(test.s); s != ts { |
| t.Errorf("got:\n%s\nexpected:\n%s\n", s, ts) |
| } |
| } |
| } |