| // Copyright 2019 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 main | |
| import "./embed0" | |
| type X1 struct{} | |
| func (X1) Foo() {} | |
| type X2 struct{} | |
| func (X2) foo() {} | |
| type X3 struct{} | |
| func (X3) foo(int) {} | |
| type X4 struct{ p.M1 } | |
| type X5 struct{ p.M1 } | |
| func (X5) foo(int) {} | |
| type X6 struct{ p.M2 } | |
| type X7 struct{ p.M2 } | |
| func (X7) foo() {} | |
| type X8 struct{ p.M2 } | |
| func (X8) foo(int) {} | |
| func main() { | |
| var i1 interface{} = X1{} | |
| check(func() { _ = i1.(p.I1) }, "interface conversion: main.X1 is not p.I1: missing method Foo") | |
| var i2 interface{} = X2{} | |
| check(func() { _ = i2.(p.I2) }, "interface conversion: main.X2 is not p.I2: missing method foo") | |
| var i3 interface{} = X3{} | |
| check(func() { _ = i3.(p.I2) }, "interface conversion: main.X3 is not p.I2: missing method foo") | |
| var i4 interface{} = X4{} | |
| check(func() { _ = i4.(p.I2) }, "interface conversion: main.X4 is not p.I2: missing method foo") | |
| var i5 interface{} = X5{} | |
| check(func() { _ = i5.(p.I2) }, "interface conversion: main.X5 is not p.I2: missing method foo") | |
| var i6 interface{} = X6{} | |
| check(func() { _ = i6.(p.I2) }, "") | |
| var i7 interface{} = X7{} | |
| check(func() { _ = i7.(p.I2) }, "") | |
| var i8 interface{} = X8{} | |
| check(func() { _ = i8.(p.I2) }, "") | |
| } | |
| func check(f func(), msg string) { | |
| defer func() { | |
| v := recover() | |
| if v == nil { | |
| if msg == "" { | |
| return | |
| } | |
| panic("did not panic") | |
| } | |
| got := v.(error).Error() | |
| if msg != got { | |
| panic("want '" + msg + "', got '" + got + "'") | |
| } | |
| }() | |
| f() | |
| } |