Source file
src/go/types/exprstring_test.go
1
2
3
4
5 package types_test
6
7 import (
8 "go/parser"
9 "testing"
10
11 . "go/types"
12 )
13
14 var testExprs = []testEntry{
15
16 dup("x"),
17 dup("true"),
18 dup("42"),
19 dup("3.1415"),
20 dup("2.71828i"),
21 dup(`'a'`),
22 dup(`"foo"`),
23 dup("`bar`"),
24 dup("any"),
25
26
27 {"func(){}", "(func() literal)"},
28 {"func(x int) complex128 {}", "(func(x int) complex128 literal)"},
29 {"[]int{1, 2, 3}", "[]int{…}"},
30
31
32 dup("[1 << 10]byte"),
33 dup("[]int"),
34 dup("*int"),
35 dup("struct{x int}"),
36 dup("func()"),
37 dup("func(int, float32) string"),
38 dup("interface{m()}"),
39 dup("interface{m() string; n(x int)}"),
40 dup("interface{~int}"),
41
42 dup("map[string]int"),
43 dup("chan E"),
44 dup("<-chan E"),
45 dup("chan<- E"),
46
47
48 dup("interface{int}"),
49 dup("interface{~int}"),
50
51
52 dup("interface{~a | ~b | ~c; ~int | ~string; float64; m()}"),
53 dup("interface{int | string}"),
54 dup("interface{~int | ~string; float64; m()}"),
55 dup("interface{~T[int, string] | string}"),
56
57
58 dup("x[T]"),
59 dup("x[N | A | S]"),
60 dup("x[N, A]"),
61
62
63 dup("(x)"),
64 dup("x.f"),
65 dup("a[i]"),
66
67 dup("s[:]"),
68 dup("s[i:]"),
69 dup("s[:j]"),
70 dup("s[i:j]"),
71 dup("s[:j:k]"),
72 dup("s[i:j:k]"),
73
74 dup("x.(T)"),
75
76 dup("x.([10]int)"),
77 dup("x.([...]int)"),
78
79 dup("x.(struct{})"),
80 dup("x.(struct{x int; y, z float32; E})"),
81
82 dup("x.(func())"),
83 dup("x.(func(x int))"),
84 dup("x.(func() int)"),
85 dup("x.(func(x, y int, z float32) (r int))"),
86 dup("x.(func(a, b, c int))"),
87 dup("x.(func(x ...T))"),
88
89 dup("x.(interface{})"),
90 dup("x.(interface{m(); n(x int); E})"),
91 dup("x.(interface{m(); n(x int) T; E; F})"),
92
93 dup("x.(map[K]V)"),
94
95 dup("x.(chan E)"),
96 dup("x.(<-chan E)"),
97 dup("x.(chan<- chan int)"),
98 dup("x.(chan<- <-chan int)"),
99 dup("x.(<-chan chan int)"),
100 dup("x.(chan (<-chan int))"),
101
102 dup("f()"),
103 dup("f(x)"),
104 dup("int(x)"),
105 dup("f(x, x + y)"),
106 dup("f(s...)"),
107 dup("f(a, s...)"),
108
109
110 dup("f[T]()"),
111 dup("f[T](T)"),
112 dup("f[T, T1]()"),
113 dup("f[T, T1](T, T1)"),
114
115 dup("*x"),
116 dup("&x"),
117 dup("x + y"),
118 dup("x + y << (2 * s)"),
119 }
120
121 func TestExprString(t *testing.T) {
122 for _, test := range testExprs {
123 x, err := parser.ParseExpr(test.src)
124 if err != nil {
125 t.Errorf("%s: %s", test.src, err)
126 continue
127 }
128 if got := ExprString(x); got != test.str {
129 t.Errorf("%s: got %s, want %s", test.src, got, test.str)
130 }
131 }
132 }
133
View as plain text