v/vlib/v/tests/interface_embedding_method_...

60 lines
808 B
V

fn test_interface_embedding_method_call() {
mut window := &Window{}
btn := &Button{}
window.initables << btn
window.run()
}
[heap]
pub struct Window {
mut:
initables []Initable
popview PopView = DummyPopup{}
}
interface Initable {
mut:
init(&Window)
}
interface Drawable {
draw()
}
pub fn (mut window Window) run() {
for mut i in window.initables {
i.init(window)
}
for wd in window.initables {
if wd is Drawable {
d := wd as Drawable
d.draw()
}
}
window.popview.draw()
}
struct DummyPopup {}
fn (d DummyPopup) draw() {}
interface PopView {
Drawable
}
[heap]
pub struct Button {
mut:
window &Window = voidptr(0)
}
pub fn (mut b Button) init(window &Window) {
b.window = window
}
pub fn (b Button) draw() {
g := b.window.initables
println(g.len)
assert g.len == 1
}