| // 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() |
| } |