(t *testing.T)
| 938 | } |
| 939 | |
| 940 | func TestPredicatesInfo(t *testing.T) { |
| 941 | testenv.MustHaveGoBuild(t) |
| 942 | |
| 943 | var tests = []struct { |
| 944 | src string |
| 945 | expr string |
| 946 | pred string |
| 947 | }{ |
| 948 | // void |
| 949 | {`package n0; func f() { f() }`, `f()`, `void`}, |
| 950 | |
| 951 | // types |
| 952 | {`package t0; type _ int`, `int`, `type`}, |
| 953 | {`package t1; type _ []int`, `[]int`, `type`}, |
| 954 | {`package t2; type _ func()`, `func()`, `type`}, |
| 955 | {`package t3; type _ func(int)`, `int`, `type`}, |
| 956 | {`package t3; type _ func(...int)`, `...int`, `type`}, |
| 957 | |
| 958 | // built-ins |
| 959 | {`package b0; var _ = len("")`, `len`, `builtin`}, |
| 960 | {`package b1; var _ = (len)("")`, `(len)`, `builtin`}, |
| 961 | |
| 962 | // constants |
| 963 | {`package c0; var _ = 42`, `42`, `const`}, |
| 964 | {`package c1; var _ = "foo" + "bar"`, `"foo" + "bar"`, `const`}, |
| 965 | {`package c2; const (i = 1i; _ = i)`, `i`, `const`}, |
| 966 | |
| 967 | // values |
| 968 | {`package v0; var (a, b int; _ = a + b)`, `a + b`, `value`}, |
| 969 | {`package v1; var _ = &[]int{1}`, `[]int{…}`, `value`}, |
| 970 | {`package v2; var _ = func(){}`, `func() {}`, `value`}, |
| 971 | {`package v4; func f() { _ = f }`, `f`, `value`}, |
| 972 | {`package v3; var _ *int = nil`, `nil`, `value, nil`}, |
| 973 | {`package v3; var _ *int = (nil)`, `(nil)`, `value, nil`}, |
| 974 | |
| 975 | // addressable (and thus assignable) operands |
| 976 | {`package a0; var (x int; _ = x)`, `x`, `value, addressable, assignable`}, |
| 977 | {`package a1; var (p *int; _ = *p)`, `*p`, `value, addressable, assignable`}, |
| 978 | {`package a2; var (s []int; _ = s[0])`, `s[0]`, `value, addressable, assignable`}, |
| 979 | {`package a3; var (s struct{f int}; _ = s.f)`, `s.f`, `value, addressable, assignable`}, |
| 980 | {`package a4; var (a [10]int; _ = a[0])`, `a[0]`, `value, addressable, assignable`}, |
| 981 | {`package a5; func _(x int) { _ = x }`, `x`, `value, addressable, assignable`}, |
| 982 | {`package a6; func _()(x int) { _ = x; return }`, `x`, `value, addressable, assignable`}, |
| 983 | {`package a7; type T int; func (x T) _() { _ = x }`, `x`, `value, addressable, assignable`}, |
| 984 | // composite literals are not addressable |
| 985 | |
| 986 | // assignable but not addressable values |
| 987 | {`package s0; var (m map[int]int; _ = m[0])`, `m[0]`, `value, assignable, hasOk`}, |
| 988 | {`package s1; var (m map[int]int; _, _ = m[0])`, `m[0]`, `value, assignable, hasOk`}, |
| 989 | |
| 990 | // hasOk expressions |
| 991 | {`package k0; var (ch chan int; _ = <-ch)`, `<-ch`, `value, hasOk`}, |
| 992 | {`package k1; var (ch chan int; _, _ = <-ch)`, `<-ch`, `value, hasOk`}, |
| 993 | |
| 994 | // missing entries |
| 995 | // - package names are collected in the Uses map |
| 996 | // - identifiers being declared are collected in the Defs map |
| 997 | {`package m0; import "os"; func _() { _ = os.Stdout }`, `os`, `<missing>`}, |
nothing calls this directly
no test coverage detected