v2 / vlib / v / tests / builtin_maps / map_clear_test.v
49 lines · 41 sloc · 887 bytes · 6488041a749df9762348d019c4223908c476f2e2
Raw
1pub type EventListener[T] = fn (T) !
2
3pub struct EventController[T] {
4mut:
5 id int
6 listeners map[int]EventListener[T]
7}
8
9fn (mut ec EventController[T]) generate_id() int {
10 return ec.id++
11}
12
13pub fn (mut ec EventController[T]) override(listener EventListener[T]) EventController[T] {
14 ec.listeners.clear()
15 return ec.listen(listener)
16}
17
18pub fn (mut ec EventController[T]) listen(listener EventListener[T]) EventController[T] {
19 ec.listeners[ec.generate_id()] = listener
20 return ec
21}
22
23struct Foo {}
24
25struct Bar {}
26
27fn make[T](i int) EventController[T] {
28 return EventController[T]{
29 id: i
30 }
31}
32
33fn test_main() {
34 mut a := EventController[Foo]{
35 id: 1
36 listeners: {
37 1: fn (a Foo) ! {
38 dump(1)
39 }
40 }
41 }
42 assert dump(a).id == 1
43 assert dump(a).listeners.len == 1
44 a.override(fn (a Foo) ! {
45 dump(2)
46 })
47 assert dump(a).id == 2
48 assert dump(a).listeners.len == 1
49}
50