v2 / vlib / v / tests / structs / struct_embedding_with_interface_test.v
60 lines · 49 sloc · 963 bytes · 6488041a749df9762348d019c4223908c476f2e2
Raw
1fn test_struct_embedding_with_interface() {
2 mut ll := LinearLayout{}
3 mut lv := ListView{}
4 ll.add(lv)
5 ret := ll.layout()
6
7 println(ret)
8 assert ret.count('ListView') == 2
9}
10
11interface Container {
12mut:
13 layout() string
14}
15
16interface Layoutable {
17 get_pos() (int, int)
18mut:
19 set_pos(int, int)
20}
21
22pub struct LayouterBase {
23mut:
24 layoutables []Layoutable
25}
26
27pub fn (mut lb LayouterBase) add(layoutable Layoutable) {
28 lb.layoutables << layoutable
29}
30
31pub fn (lb LayouterBase) get_pos() (int, int) {
32 return 0, 0
33}
34
35pub fn (mut lb LayouterBase) set_pos(x int, y int) {}
36
37pub struct LinearLayout {
38 LayouterBase
39}
40
41pub fn (mut ll LinearLayout) layout() string {
42 mut output := ''
43 for mut l in ll.layoutables {
44 dump(l.type_name())
45 output += '${l.type_name()}\n'
46 if mut l is Container {
47 dump(l.type_name())
48 output += '${l.type_name()}\n'
49 }
50 }
51 return output
52}
53
54pub struct ListView {
55 LayouterBase
56}
57
58pub fn (mut lv ListView) layout() string {
59 return ''
60}
61