1 | import eventbus |
2 | |
3 | struct EventData { |
4 | data string |
5 | } |
6 | |
7 | struct FakeReceiver { |
8 | ok bool |
9 | } |
10 | |
11 | fn 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 | |
29 | enum Events { |
30 | event_1 |
31 | event_2 |
32 | event_3 |
33 | } |
34 | |
35 | fn 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 | |
53 | fn 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 | |
71 | fn 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 | |
85 | fn 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 | |
101 | fn 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 | |
115 | fn 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 | |
129 | fn 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 | |
142 | fn on_test(receiver voidptr, ev &EventData, sender voidptr) { |
143 | assert receiver == 0 |
144 | assert sender != 0 |
145 | assert ev.data == 'hello' |
146 | } |
147 | |
148 | fn 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 | } |