@@ -189,4 +189,59 @@ describeWithMockConnection('WebAudioView', () => {
189189 const input = await view . nextInput ;
190190 assert . strictEqual ( input . selectedContextIndex , 1 ) ;
191191 } ) ;
192+
193+ it ( 'keeps context selected when another is destroyed' , async ( ) => {
194+ const view = createViewFunctionStub ( WebAudio . WebAudioView . WebAudioView ) ;
195+ renderElementIntoDOM ( new WebAudio . WebAudioView . WebAudioView ( undefined , view ) ) ;
196+ const target = createTarget ( ) ;
197+ const model = target . model ( WebAudio . WebAudioModel . WebAudioModel ) ;
198+ assert . exists ( model ) ;
199+
200+ model . dispatchEventToListeners ( WebAudio . WebAudioModel . Events . CONTEXT_CREATED , context1 ) ;
201+ await view . nextInput ;
202+ model . dispatchEventToListeners ( WebAudio . WebAudioModel . Events . CONTEXT_CREATED , context2 ) ;
203+ await view . nextInput ;
204+
205+ model . dispatchEventToListeners ( WebAudio . WebAudioModel . Events . CONTEXT_DESTROYED , context2 . contextId ) ;
206+ const input = await view . nextInput ;
207+
208+ assert . deepEqual ( input . contexts , [ context1 ] ) ;
209+ assert . strictEqual ( input . selectedContextIndex , 0 ) ;
210+ } ) ;
211+
212+ it ( 'selects another context when the selected one is destroyed' , async ( ) => {
213+ const view = createViewFunctionStub ( WebAudio . WebAudioView . WebAudioView ) ;
214+ renderElementIntoDOM ( new WebAudio . WebAudioView . WebAudioView ( undefined , view ) ) ;
215+ const target = createTarget ( ) ;
216+ const model = target . model ( WebAudio . WebAudioModel . WebAudioModel ) ;
217+ assert . exists ( model ) ;
218+
219+ model . dispatchEventToListeners ( WebAudio . WebAudioModel . Events . CONTEXT_CREATED , context1 ) ;
220+ await view . nextInput ;
221+ model . dispatchEventToListeners ( WebAudio . WebAudioModel . Events . CONTEXT_CREATED , context2 ) ;
222+ await view . nextInput ;
223+
224+ model . dispatchEventToListeners ( WebAudio . WebAudioModel . Events . CONTEXT_DESTROYED , context1 . contextId ) ;
225+ const input = await view . nextInput ;
226+
227+ assert . deepEqual ( input . contexts , [ context2 ] ) ;
228+ assert . strictEqual ( input . selectedContextIndex , 0 ) ;
229+ } ) ;
230+
231+ it ( 'selects nothing when the only context is destroyed' , async ( ) => {
232+ const view = createViewFunctionStub ( WebAudio . WebAudioView . WebAudioView ) ;
233+ renderElementIntoDOM ( new WebAudio . WebAudioView . WebAudioView ( undefined , view ) ) ;
234+ const target = createTarget ( ) ;
235+ const model = target . model ( WebAudio . WebAudioModel . WebAudioModel ) ;
236+ assert . exists ( model ) ;
237+
238+ model . dispatchEventToListeners ( WebAudio . WebAudioModel . Events . CONTEXT_CREATED , context1 ) ;
239+ await view . nextInput ;
240+
241+ model . dispatchEventToListeners ( WebAudio . WebAudioModel . Events . CONTEXT_DESTROYED , context1 . contextId ) ;
242+ const input = await view . nextInput ;
243+
244+ assert . isEmpty ( input . contexts ) ;
245+ assert . strictEqual ( input . selectedContextIndex , - 1 ) ;
246+ } ) ;
192247} ) ;
0 commit comments