mirror of
https://github.com/golang/go
synced 2024-11-26 17:26:56 -07:00
0c5d545ccd
We seem to lack any tests for some corner cases of itab.init (multiple methods with the same name, breaking itab.init doesn't seem to fail any tests). We also lack tests that fix text of panics. Add more tests for itab.init. Change-Id: Id6b536179ba6b0d45c3cb9dc1c66b9311d0ab85e Reviewed-on: https://go-review.googlesource.com/c/go/+/202451 Run-TryBot: Dmitry Vyukov <dvyukov@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
79 lines
1.6 KiB
Go
79 lines
1.6 KiB
Go
// 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()
|
|
}
|