@@ -161,6 +161,14 @@ public function testClosingInputWillCloseSequencer()
161161 $ this ->assertFalse ($ this ->sequencer ->isReadable ());
162162 }
163163
164+ public function testClosingInputWillRemoveAllDataListeners ()
165+ {
166+ $ this ->input ->close ();
167+
168+ $ this ->assertEquals (array (), $ this ->input ->listeners ('data ' ));
169+ $ this ->assertEquals (array (), $ this ->sequencer ->listeners ('data ' ));
170+ }
171+
164172 public function testClosingSequencerWillCloseInput ()
165173 {
166174 $ this ->input ->on ('close ' , $ this ->expectCallableOnce ());
@@ -173,6 +181,25 @@ public function testClosingSequencerWillCloseInput()
173181 $ this ->assertFalse ($ this ->sequencer ->isReadable ());
174182 }
175183
184+ public function testClosingSequencerWillRemoveAllDataListeners ()
185+ {
186+ $ this ->sequencer ->close ();
187+
188+ $ this ->assertEquals (array (), $ this ->input ->listeners ('data ' ));
189+ $ this ->assertEquals (array (), $ this ->sequencer ->listeners ('data ' ));
190+ }
191+
192+ public function testClosingSequencerDuringFinalDataEventFromEndWillNotEmitEnd ()
193+ {
194+ $ this ->sequencer ->on ('data ' , $ this ->expectCallableOnceWith ('? ' ));
195+ $ this ->sequencer ->on ('data ' , array ($ this ->sequencer , 'close ' ));
196+
197+ $ this ->sequencer ->on ('end ' , $ this ->expectCallableNever ());
198+
199+ $ this ->input ->emit ('data ' , array ("\xc3" ));
200+ $ this ->input ->emit ('end ' );
201+ }
202+
176203 public function testCustomReplacementEmitDataWithInvalidStartUtf8SequencesWillForwardOnceReplaced ()
177204 {
178205 $ this ->sequencer = new Sequencer ($ this ->input , 'X ' );
@@ -205,6 +232,15 @@ public function testUnreadableInputWillResultInUnreadableSequencer()
205232 $ this ->assertFalse ($ this ->sequencer ->isReadable ());
206233 }
207234
235+ public function testUnreadableInputWillNotAddAnyEventListeners ()
236+ {
237+ $ this ->input ->close ();
238+ $ this ->sequencer = new Sequencer ($ this ->input );
239+
240+ $ this ->assertEquals (array (), $ this ->input ->listeners ('data ' ));
241+ $ this ->assertEquals (array (), $ this ->sequencer ->listeners ('data ' ));
242+ }
243+
208244 public function testEmitErrorEventWillForwardAndClose ()
209245 {
210246 $ this ->sequencer ->on ('error ' , $ this ->expectCallableOnce ());
0 commit comments