1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00
v/vlib/v/tests/interface_nested_field_test.v
2021-07-30 03:18:20 +03:00

76 lines
1.0 KiB
V

struct Base {
}
interface Foo {
parent Foo2
thing(mut b Base, value i64) string
}
interface Foo2 {
thing(mut b Base, value i64) string
}
struct Bar {
parent Foo2
}
struct Bar2 {}
fn (f Bar) thing(mut b Base, value i64) string {
return 'bar'
}
fn (f Bar2) thing(mut b Base, value i64) string {
return 'bar2'
}
struct SubBar {
parent Foo2 = Bar2{}
}
fn (f SubBar) thing(mut b Base, value i64) string {
return 'subbar'
}
fn test_interface_nested_field() {
mut foo_group := []Foo2{}
foo_group << Bar2{}
foo_group << SubBar{}
mut b := Base{}
mut ret := []string{}
for foo in foo_group {
println(foo.thing(mut b, 22))
ret << foo.thing(mut b, 22)
}
assert ret.len == 2
assert ret[0] == 'bar2'
assert ret[1] == 'subbar'
}
interface Root {
v View
}
struct MyRoot {
v View
}
interface View {
render() int
}
struct MyView {}
fn (m MyView) render() int {
return 24
}
fn receive_root(r Root) int {
return r.v.render()
}
fn test_nested_interface_fields() {
assert receive_root(MyRoot{MyView{}}) == 24
}