Source file
src/go/ast/print_test.go
Documentation: go/ast
1
2
3
4
5 package ast
6
7 import (
8 "strings"
9 "testing"
10 )
11
12 var tests = []struct {
13 x any
14 s string
15 }{
16
17 {nil, "0 nil"},
18 {true, "0 true"},
19 {42, "0 42"},
20 {3.14, "0 3.14"},
21 {1 + 2.718i, "0 (1+2.718i)"},
22 {"foobar", "0 \"foobar\""},
23
24
25 {map[Expr]string{}, `0 map[ast.Expr]string (len = 0) {}`},
26 {map[string]int{"a": 1},
27 `0 map[string]int (len = 1) {
28 1 . "a": 1
29 2 }`},
30
31
32 {new(int), "0 *0"},
33
34
35 {[0]int{}, `0 [0]int {}`},
36 {[3]int{1, 2, 3},
37 `0 [3]int {
38 1 . 0: 1
39 2 . 1: 2
40 3 . 2: 3
41 4 }`},
42 {[...]int{42},
43 `0 [1]int {
44 1 . 0: 42
45 2 }`},
46
47
48 {[]int{}, `0 []int (len = 0) {}`},
49 {[]int{1, 2, 3},
50 `0 []int (len = 3) {
51 1 . 0: 1
52 2 . 1: 2
53 3 . 2: 3
54 4 }`},
55
56
57 {struct{}{}, `0 struct {} {}`},
58 {struct{ x int }{007}, `0 struct { x int } {}`},
59 {struct{ X, y int }{42, 991},
60 `0 struct { X int; y int } {
61 1 . X: 42
62 2 }`},
63 {struct{ X, Y int }{42, 991},
64 `0 struct { X int; Y int } {
65 1 . X: 42
66 2 . Y: 991
67 3 }`},
68 }
69
70
71
72 func trim(s string) string {
73 lines := strings.Split(s, "\n")
74 i := 0
75 for _, line := range lines {
76 line = strings.TrimSpace(line)
77 if line != "" {
78 lines[i] = line
79 i++
80 }
81 }
82 return strings.Join(lines[0:i], "\n")
83 }
84
85 func TestPrint(t *testing.T) {
86 var buf strings.Builder
87 for _, test := range tests {
88 buf.Reset()
89 if err := Fprint(&buf, nil, test.x, nil); err != nil {
90 t.Errorf("Fprint failed: %s", err)
91 }
92 if s, ts := trim(buf.String()), trim(test.s); s != ts {
93 t.Errorf("got:\n%s\nexpected:\n%s\n", s, ts)
94 }
95 }
96 }
97
View as plain text