@@ -745,6 +745,36 @@ describe('ReactNativeBleTransport', () => {
745745 await transport . disconnect ( ) ;
746746 } ) ;
747747
748+ it ( 'does not drain waiting probes while preparing a claimed target' , async ( ) => {
749+ let callback ! : ( error : Error | null , value : Device | null ) => void ;
750+ let releaseMtu ! : ( ) => void ;
751+ const releases : ( ( ) => void ) [ ] = [ ] ;
752+ const target = device ( { id : 'target' , requestMTU : jest . fn ( ( ) => new Promise < Device > ( ( resolve ) => {
753+ releaseMtu = ( ) => resolve ( target ) ;
754+ } ) ) } ) ;
755+ const others = Array . from ( { length : 3 } , ( _ , index ) => device ( {
756+ id : `other-${ index } ` , discoverAllServicesAndCharacteristics : jest . fn ( ( ) => new Promise < Device > ( ( resolve ) => {
757+ releases . push ( ( ) => resolve ( device ( ) ) ) ;
758+ } ) ) ,
759+ } ) ) ;
760+ const queued = device ( { id : 'queued' } ) ;
761+ const transport = new ReactNativeBleTransport ( manager ( { startDeviceScan : jest . fn ( ( _u , _o , cb ) => { callback = cb ; } ) } ) , 'android' ) ;
762+ const result = transport . resolveAndConnect ( 'pc-1' ) ;
763+ await waitFor ( ( ) => ! ! callback ) ;
764+ others . forEach ( ( peer ) => callback ( null , peer ) ) ;
765+ callback ( null , target ) ;
766+ callback ( null , queued ) ;
767+ await waitFor ( ( ) => ! ! releaseMtu && releases . length === 3 ) ;
768+ releases . forEach ( ( release ) => release ( ) ) ;
769+ await waitFor ( ( ) => others . every ( ( peer ) => ( peer . readCharacteristicForService as jest . Mock ) . mock . calls . length === 1 ) ) ;
770+ callback ( null , queued ) ;
771+ expect ( queued . isConnected ) . not . toHaveBeenCalled ( ) ;
772+ releaseMtu ( ) ;
773+ await result ;
774+ expect ( queued . isConnected ) . not . toHaveBeenCalled ( ) ;
775+ await transport . disconnect ( ) ;
776+ } ) ;
777+
748778 it ( 'waits for cancelled discovery probe cleanup before a real connection' , async ( ) => {
749779 let scanCallback ! : ( error : Error | null , value : Device | null ) => void ;
750780 let releaseDiscovery ! : ( value : Device ) => void ;
0 commit comments