fn test_struct_embedding_with_interface() {
	mut ll := LinearLayout{}
	mut lv := ListView{}
	ll.add(lv)
	ret := ll.layout()

	println(ret)
	assert ret.count('ListView') == 2
}

interface Container {
mut:
	layout() string
}

interface Layoutable {
	get_pos() (int, int)
mut:
	set_pos(int, int)
}

pub struct LayouterBase {
mut:
	layoutables []Layoutable
}

pub fn (mut lb LayouterBase) add(layoutable Layoutable) {
	lb.layoutables << layoutable
}

pub fn (lb LayouterBase) get_pos() (int, int) {
	return 0, 0
}

pub fn (mut lb LayouterBase) set_pos(x int, y int) {}

pub struct LinearLayout {
	LayouterBase
}

pub fn (mut ll LinearLayout) layout() string {
	mut output := ''
	for mut l in ll.layoutables {
		dump(l.type_name())
		output += '${l.type_name()}\n'
		if mut l is Container {
			dump(l.type_name())
			output += '${l.type_name()}\n'
		}
	}
	return output
}

pub struct ListView {
	LayouterBase
}

pub fn (mut lv ListView) layout() string {
	return ''
}
