Commit 0c5d545c authored by Dmitry Vyukov's avatar Dmitry Vyukov

test: add tests for runtime.itab.init

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: default avatarBrad Fitzpatrick <bradfitz@golang.org>
parent 0ea74401
// 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 p
type I1 interface {
Foo(int)
}
type I2 interface {
foo(int)
}
type M1 int
func (M1) foo() {}
type M2 int
func (M2) foo(int) {}
// 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()
}
// rundir
// 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 ignored
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment