v / vlib / eventbus
Raw file | 152 loc (130 sloc) | 2.87 KB | Latest commit hash 205fb88d9
1import eventbus
2
3struct EventData {
4 data string
5}
6
7struct FakeReceiver {
8 ok bool
9}
10
11fn test_eventbus_string() {
12 ev_data := &EventData{'hello'}
13 mut eb := eventbus.new[string]()
14 eb.subscriber.subscribe_once('on_test', on_test)
15 assert eb.has_subscriber('on_test')
16 assert !eb.has_subscriber('not_exist')
17 assert eb.subscriber.is_subscribed('on_test')
18 eb.publish('on_test', eb, ev_data)
19 assert !eb.has_subscriber('on_test')
20 assert !eb.subscriber.is_subscribed('on_test')
21 eb.subscriber.subscribe('on_test', on_test)
22 assert eb.has_subscriber('on_test')
23 assert eb.subscriber.is_subscribed('on_test')
24 eb.clear_all()
25 assert !eb.has_subscriber('on_test')
26 assert !eb.subscriber.is_subscribed('on_test')
27}
28
29enum Events {
30 event_1
31 event_2
32 event_3
33}
34
35fn test_eventbus_enum() {
36 ev_data := &EventData{'hello'}
37 mut eb := eventbus.EventBus.new[Events]()
38 eb.subscriber.subscribe_once(Events.event_1, on_test)
39 assert eb.has_subscriber(Events.event_1)
40 assert !eb.has_subscriber(Events.event_2)
41 assert eb.subscriber.is_subscribed(Events.event_1)
42 eb.publish(Events.event_1, eb, ev_data)
43 assert !eb.has_subscriber(Events.event_1)
44 assert !eb.subscriber.is_subscribed(Events.event_1)
45 eb.subscriber.subscribe(Events.event_1, on_test)
46 assert eb.has_subscriber(Events.event_1)
47 assert eb.subscriber.is_subscribed(Events.event_1)
48 eb.clear_all()
49 assert !eb.has_subscriber(Events.event_1)
50 assert !eb.subscriber.is_subscribed(Events.event_1)
51}
52
53fn test_eventbus_int() {
54 ev_data := &EventData{'hello'}
55 mut eb := eventbus.EventBus.new[int]()
56 eb.subscriber.subscribe_once(9999, on_test)
57 assert eb.has_subscriber(9999)
58 assert !eb.has_subscriber(1111)
59 assert eb.subscriber.is_subscribed(9999)
60 eb.publish(9999, eb, ev_data)
61 assert !eb.has_subscriber(9999)
62 assert !eb.subscriber.is_subscribed(9999)
63 eb.subscriber.subscribe(9999, on_test)
64 assert eb.has_subscriber(9999)
65 assert eb.subscriber.is_subscribed(9999)
66 eb.clear_all()
67 assert !eb.has_subscriber(9999)
68 assert !eb.subscriber.is_subscribed(9999)
69}
70
71fn test_subscribe_method() {
72 // Does not really test subscribe_method idinvidually though
73 // given
74 mut eb := eventbus.new[string]()
75 r := FakeReceiver{}
76
77 assert !eb.subscriber.is_subscribed_method('on_test_with_receiver', r)
78 // when
79 eb.subscriber.subscribe_method('on_test_with_receiver', on_test_with_receiver, r)
80
81 // then
82 assert eb.subscriber.is_subscribed_method('on_test_with_receiver', r)
83}
84
85fn test_unsubscribe_method() {
86 // given
87 mut eb := eventbus.new[string]()
88 r := FakeReceiver{}
89 r2 := FakeReceiver{}
90
91 // when
92 eb.subscriber.subscribe_method('on_test_with_receiver', on_test_with_receiver, r)
93 eb.subscriber.subscribe_method('on_test_with_receiver', on_test_with_receiver, r2)
94 eb.subscriber.unsubscribe_method('on_test_with_receiver', r)
95
96 // then
97 assert !eb.subscriber.is_subscribed_method('on_test_with_receiver', r)
98 assert eb.subscriber.is_subscribed_method('on_test_with_receiver', r2)
99}
100
101fn test_publish() {
102 // given
103 ev_data := &EventData{'hello'}
104 mut eb := eventbus.new[string]()
105
106 // when
107 eb.subscriber.subscribe_once('on_test', on_test)
108 eb.subscriber.subscribe_once('on_test', on_test)
109 eb.publish('on_test', eb, ev_data)
110
111 // then
112 assert !eb.subscriber.is_subscribed('on_test')
113}
114
115fn test_publish_with_receiver() {
116 // given
117 mut eb := eventbus.new[string]()
118 ev_data := &EventData{'hello'}
119 r := FakeReceiver{}
120
121 // when
122 eb.subscriber.subscribe_method('on_test_with_receiver', on_test_with_receiver, r)
123 eb.publish('on_test_with_receiver', eb, ev_data)
124
125 // then asserts are in on_test_with_receiver, don't know how to be sure
126 // that it has been properly called...
127}
128
129fn test_unsubscribe_reveiver() {
130 // given
131 mut eb := eventbus.new[string]()
132 r := &FakeReceiver{}
133
134 // when
135 eb.subscriber.subscribe_method('on_test_with_receiver', on_test_with_receiver, r)
136 eb.subscriber.subscribe_method('on_test', on_test, r)
137 eb.subscriber.unsubscribe_receiver(r)
138 assert !eb.subscriber.is_subscribed_method('on_test_with_receiver', r)
139 assert !eb.subscriber.is_subscribed_method('on_test', r)
140}
141
142fn on_test(receiver voidptr, ev &EventData, sender voidptr) {
143 assert receiver == 0
144 assert sender != 0
145 assert ev.data == 'hello'
146}
147
148fn on_test_with_receiver(receiver &FakeReceiver, ev &EventData, sender voidptr) {
149 assert receiver.ok == false
150 assert sender != 0
151 assert ev.data == 'hello'
152}