88 describe '#register_handler' do
99 let ( :block ) { -> { 'handler body' } }
1010 let ( :event_name ) { 'signaled' }
11- let ( :dispatcher ) { subject . register_handler ( target , event_name , &block ) }
11+ let ( :dispatcher ) do
12+ subject . register_handler ( target , event_name , &block )
13+ subject
14+ end
1215 let ( :handlers ) { dispatcher . send ( :handlers ) }
1316
1417 context 'with default handler_name' do
1922 end
2023
2124 it 'stores the target and handler once' do
22- expect ( handlers [ target ] ) . to be_kind_of ( Array )
25+ expect ( handlers [ target ] ) . to be_kind_of ( Hash )
2326 expect ( handlers [ target ] . count ) . to eq 1
2427 end
2528
2629 it 'associates the event name with the target' do
27- event = handlers [ target ] . first
30+ event = handlers [ target ] [ 1 ]
2831 expect ( event . event_name ) . to eq ( event_name )
2932 end
3033
3134 it 'associates the handler with the target' do
32- event = handlers [ target ] . first
35+ event = handlers [ target ] [ 1 ]
3336 expect ( event . handler ) . to eq ( block )
3437 end
3538 end
4346 end
4447
4548 it 'stores the target and handler once' do
46- expect ( handlers [ target ] ) . to be_kind_of ( Array )
49+ expect ( handlers [ target ] ) . to be_kind_of ( Hash )
4750 expect ( handlers [ target ] . count ) . to eq 1
4851 end
4952
5053 it 'associates the event name and handler name with the target' do
51- event = handlers [ target ] . first
54+ event = handlers [ target ] [ 1 ]
5255 expect ( event . event_name ) . to eq ( event_name )
5356 end
5457
5558 it 'associates the handler with the target' do
56- event = handlers [ target ] . first
59+ event = handlers [ target ] [ 1 ]
5760 expect ( event . handler ) . to eq ( block )
5861 end
5962 end
63+
64+ it 'removes a given handler against the target' do
65+ block1 = -> { 'handler body' }
66+ block2 = -> { 'other handler body' }
67+ block3 = -> { 'yet another handler body' }
68+
69+ handle1 = subject . register_handler ( target , 'signaled' , &block1 )
70+ subject . register_handler ( target , 'signaled' , &block2 )
71+ subject . register_handler ( other_target , 'signaled' , &block3 )
72+
73+ expect ( subject . send ( :handlers ) [ target ] [ 1 ] . event_name ) . to eq ( 'signaled' )
74+ expect ( subject . send ( :handlers ) [ target ] [ 1 ] . handler ) . to be ( block1 )
75+
76+ expect ( subject . send ( :handlers ) [ target ] [ 2 ] . event_name ) . to eq ( 'signaled' )
77+ expect ( subject . send ( :handlers ) [ target ] [ 2 ] . handler ) . to be ( block2 )
78+
79+ expect ( subject . send ( :handlers ) [ other_target ] [ 3 ] . event_name ) . to eq ( 'signaled' )
80+ expect ( subject . send ( :handlers ) [ other_target ] [ 3 ] . handler ) . to be ( block3 )
81+
82+ handle1 . unregister
83+ expect ( subject . send ( :handlers ) [ target ] [ 1 ] ) . to be ( nil )
84+ end
6085 end
6186
6287 describe '#dispatch' do
114139
115140 context 'with TARGET_WILDCARD target handler' do
116141 let ( :handler_6 ) { -> { 'sixth block' } }
142+ let ( :handler_7 ) { -> { 'seventh block' } }
117143 before do
118144 allow ( handler_6 ) . to receive ( :call )
145+ allow ( handler_7 ) . to receive ( :call )
119146
120147 subject . register_handler ( described_class ::TARGET_WILDCARD , described_class ::WILDCARD , &handler_6 )
148+ subject . register_handler ( target , 'completed' , &handler_7 )
121149 end
122150
123151 it 'calls the handler' do
127155 expect ( handler_1 ) . to have_received ( :call ) . ordered
128156 expect ( handler_4 ) . to have_received ( :call ) . ordered
129157 expect ( handler_6 ) . to have_received ( :call ) . ordered
158+ expect ( handler_7 ) . to have_received ( :call ) . ordered
130159 end
131160
132161 it 'TARGET_WILDCARD can be compared to an EventTarget object' do
157186 end
158187 end
159188 end
160- end
189+ end
0 commit comments