fn test_interface_embedding_complex() {
	mut win := &Window{}
	ll := &LinearLayout{}
	win.initables << ll
	win.init()
}

//----------------------------------

@[heap]
pub struct Window {
mut:
	initables []Initable
}

interface Initable {
	get_ptr()
mut:
	init(&Window)
}

fn (mut w Window) init() {
	for mut i in w.initables {
		i.init(w)
	}
}

//----------------------------------

pub struct ViewBase {}

pub fn (mut vb ViewBase) init(window &Window) {
	dump(@METHOD)
	assert false
}

pub fn (vb ViewBase) get_ptr() {}

//-------------------------------------

@[heap]
pub struct ContainerBase {
	ViewBase
}

// want to execute this method
pub fn (mut cb ContainerBase) init(window &Window) {
	dump(@METHOD)
	assert true
}

//--------------------------------------

@[heap]
pub struct LinearLayout {
	ContainerBase
}
