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
25
26 {"func(){}", "(func() literal)"},
27 {"func(x int) complex128 {}", "(func(x int) complex128 literal)"},
28 {"[]int{1, 2, 3}", "([]int literal)"},
29
30
31 dup("(x)"),
32 dup("x.f"),
33 dup("a[i]"),
34
35 dup("s[:]"),
36 dup("s[i:]"),
37 dup("s[:j]"),
38 dup("s[i:j]"),
39 dup("s[:j:k]"),
40 dup("s[i:j:k]"),
41
42 dup("x.(T)"),
43
44 dup("x.([10]int)"),
45 dup("x.([...]int)"),
46
47 dup("x.(struct{})"),
48 dup("x.(struct{x int; y, z float32; E})"),
49
50 dup("x.(func())"),
51 dup("x.(func(x int))"),
52 dup("x.(func() int)"),
53 dup("x.(func(x, y int, z float32) (r int))"),
54 dup("x.(func(a, b, c int))"),
55 dup("x.(func(x ...T))"),
56
57 dup("x.(interface{})"),
58 dup("x.(interface{m(); n(x int); E})"),
59 dup("x.(interface{m(); n(x int) T; E; F})"),
60
61 dup("x.(map[K]V)"),
62
63 dup("x.(chan E)"),
64 dup("x.(<-chan E)"),
65 dup("x.(chan<- chan int)"),
66 dup("x.(chan<- <-chan int)"),
67 dup("x.(<-chan chan int)"),
68 dup("x.(chan (<-chan int))"),
69
70 dup("f()"),
71 dup("f(x)"),
72 dup("int(x)"),
73 dup("f(x, x + y)"),
74 dup("f(s...)"),
75 dup("f(a, s...)"),
76
77 dup("*x"),
78 dup("&x"),
79 dup("x + y"),
80 dup("x + y << (2 * s)"),
81 }
82
83 func TestExprString(t *testing.T) {
84 for _, test := range testExprs {
85 x, err := parser.ParseExpr(test.src)
86 if err != nil {
87 t.Errorf("%s: %s", test.src, err)
88 continue
89 }
90 if got := ExprString(x); got != test.str {
91 t.Errorf("%s: got %s, want %s", test.src, got, test.str)
92 }
93 }
94 }
95
View as plain text