@@ -57,7 +57,10 @@ global.doStopVideoCam = jest.fn();
5757global . CAMERAVALUE = "camera:" ;
5858global . VIDEOVALUE = "video:" ;
5959global . doUseCamera = jest . fn ( ) ;
60- global . delayExecution = jest . fn ( ( ms , callback ) => callback ( ) ) ;
60+ global . delayExecution = jest . fn ( ( ms , callback ) => {
61+ if ( callback ) return callback ( ) ;
62+ return Promise . resolve ( ) ;
63+ } ) ;
6164global . getStatsFromNotation = jest . fn ( ) ;
6265global . Tone = {
6366 UserMedia : jest . fn ( ) . mockImplementation ( ( ) => ( {
@@ -230,7 +233,8 @@ describe("Logo Class", () => {
230233 } ,
231234 stage : {
232235 removeEventListener : jest . fn ( ) ,
233- addEventListener : jest . fn ( )
236+ addEventListener : jest . fn ( ) ,
237+ update : jest . fn ( )
234238 } ,
235239 onStopTurtle : jest . fn ( ) ,
236240 onRunTurtle : jest . fn ( ) ,
@@ -708,7 +712,8 @@ describe("Logo comprehensive method coverage", () => {
708712 stage : {
709713 addEventListener : jest . fn ( ) ,
710714 removeEventListener : jest . fn ( ) ,
711- dispatchEvent : jest . fn ( )
715+ dispatchEvent : jest . fn ( ) ,
716+ update : jest . fn ( )
712717 } ,
713718 errorMsg : jest . fn ( ) ,
714719 textMsg : jest . fn ( ) ,
@@ -749,6 +754,9 @@ describe("Logo comprehensive method coverage", () => {
749754
750755 logo = new Logo ( mockActivity ) ;
751756 mockActivity . logo = logo ;
757+ if ( logo . deps && logo . deps . utils ) {
758+ logo . deps . utils . delayExecution = ( ...args ) => global . delayExecution ( ...args ) ;
759+ }
752760 } ) ;
753761
754762 afterEach ( ( ) => {
@@ -916,6 +924,7 @@ describe("Logo comprehensive method coverage", () => {
916924 const originalTone = global . Tone ;
917925 const open = jest . fn ( ) ;
918926 global . Tone = { UserMedia : jest . fn ( ( ) => ( { open } ) ) } ;
927+ if ( logo . deps ) logo . deps . Tone = global . Tone ;
919928
920929 logo . initMediaDevices ( ) ;
921930 expect ( open ) . toHaveBeenCalled ( ) ;
@@ -929,6 +938,7 @@ describe("Logo comprehensive method coverage", () => {
929938 } )
930939 } ) )
931940 } ;
941+ if ( logo . deps ) logo . deps . Tone = global . Tone ;
932942 logo . initMediaDevices ( ) ;
933943 expect ( mockActivity . errorMsg ) . toHaveBeenCalledWith ( "The microphone is not available." ) ;
934944 expect ( logo . mic ) . toBeNull ( ) ;
@@ -956,7 +966,10 @@ describe("Logo comprehensive method coverage", () => {
956966 fn ( ) ;
957967 return 2 ;
958968 } ) ;
959- global . delayExecution = jest . fn ( ( ) => Promise . resolve ( ) ) ;
969+ global . delayExecution = jest . fn ( ( ms , callback ) => {
970+ if ( callback ) return callback ( ) ;
971+ return Promise . resolve ( ) ;
972+ } ) ;
960973
961974 turtle0 . singer . embeddedGraphics = { } ;
962975 await logo . dispatchTurtleSignals ( 0 , 0.5 , 3 , 0 ) ;
@@ -1062,6 +1075,7 @@ describe("Logo comprehensive method coverage", () => {
10621075 test ( "doStopTurtles covers companion/camera/recorder/showBlocks branches" , ( ) => {
10631076 const clearIntervalSpy = jest . spyOn ( global , "clearInterval" ) . mockImplementation ( ( ) => { } ) ;
10641077 global . instruments = { 0 : { flute : { } } , 1 : { piano : { } } } ;
1078+ if ( logo . deps ) logo . deps . instruments = global . instruments ;
10651079 turtle0 . singer . killAllVoices = jest . fn ( ) ;
10661080 turtle0 . companionTurtle = 1 ;
10671081 turtle1 . interval = 888 ;
@@ -1141,7 +1155,10 @@ describe("Logo comprehensive method coverage", () => {
11411155 logo . parseArg = jest . fn ( ( ) => 9 ) ;
11421156 logo . processShow = jest . fn ( ) ;
11431157 logo . processSpeak = jest . fn ( ) ;
1144- global . delayExecution = jest . fn ( ( ) => Promise . resolve ( ) ) ;
1158+ global . delayExecution = jest . fn ( ( ms , callback ) => {
1159+ if ( callback ) return callback ( ) ;
1160+ return Promise . resolve ( ) ;
1161+ } ) ;
11451162
11461163 turtle0 . singer . suppressOutput = false ;
11471164 turtle0 . embeddedGraphicsFinished = false ;
@@ -1217,7 +1234,8 @@ describe("Logo comprehensive method coverage", () => {
12171234 storage : { saveLocally : jest . fn ( ) } ,
12181235 config : { showBlocksAfterRun : false } ,
12191236 callbacks : { onStopTurtle : jest . fn ( ) , onRunTurtle : jest . fn ( ) } ,
1220- meSpeak : { speak : jest . fn ( ) }
1237+ meSpeak : { speak : jest . fn ( ) } ,
1238+ classes : { Notation : global . Notation , Synth : global . Synth }
12211239 } ;
12221240
12231241 const depLogo = new Logo ( deps ) ;
@@ -1411,7 +1429,10 @@ describe("Logo comprehensive method coverage", () => {
14111429 } ) ;
14121430
14131431 test ( "dispatchTurtleSignals with suppressOutput true executes immediate graphics operations" , async ( ) => {
1414- global . delayExecution = jest . fn ( ( ) => Promise . resolve ( ) ) ;
1432+ global . delayExecution = jest . fn ( ( ms , callback ) => {
1433+ if ( callback ) return callback ( ) ;
1434+ return Promise . resolve ( ) ;
1435+ } ) ;
14151436 turtle0 . singer . suppressOutput = true ;
14161437 logo . parseArg = jest . fn ( ( ) => 7 ) ;
14171438 logo . blockList = [
@@ -1440,7 +1461,11 @@ describe("Logo comprehensive method coverage", () => {
14401461 } ) ;
14411462
14421463 test ( "dispatchTurtleSignals adjusts dispatchFactor for large stepTime" , async ( ) => {
1443- global . delayExecution = jest . fn ( ( ) => Promise . resolve ( ) ) ;
1464+ global . instruments [ 1 ] = { piano : { } } ;
1465+ global . delayExecution = jest . fn ( ( ms , callback ) => {
1466+ if ( callback ) return callback ( ) ;
1467+ return Promise . resolve ( ) ;
1468+ } ) ;
14441469 turtle0 . singer . suppressOutput = false ;
14451470 turtle0 . singer . dispatchFactor = 1 ;
14461471 logo . parseArg = jest . fn ( ( ) => 8 ) ;
0 commit comments