@@ -57,7 +57,7 @@ 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 ( ( ) => Promise . resolve ( ) ) ;
6161global . getStatsFromNotation = jest . fn ( ) ;
6262global . Tone = {
6363 UserMedia : jest . fn ( ) . mockImplementation ( ( ) => ( {
@@ -230,7 +230,8 @@ describe("Logo Class", () => {
230230 } ,
231231 stage : {
232232 removeEventListener : jest . fn ( ) ,
233- addEventListener : jest . fn ( )
233+ addEventListener : jest . fn ( ) ,
234+ update : jest . fn ( )
234235 } ,
235236 onStopTurtle : jest . fn ( ) ,
236237 onRunTurtle : jest . fn ( ) ,
@@ -708,7 +709,8 @@ describe("Logo comprehensive method coverage", () => {
708709 stage : {
709710 addEventListener : jest . fn ( ) ,
710711 removeEventListener : jest . fn ( ) ,
711- dispatchEvent : jest . fn ( )
712+ dispatchEvent : jest . fn ( ) ,
713+ update : jest . fn ( )
712714 } ,
713715 errorMsg : jest . fn ( ) ,
714716 textMsg : jest . fn ( ) ,
@@ -913,16 +915,15 @@ describe("Logo comprehensive method coverage", () => {
913915 } ) ;
914916
915917 test ( "initMediaDevices sets mic/limit on success and reports microphone errors" , ( ) => {
916- const originalTone = global . Tone ;
917918 const open = jest . fn ( ) ;
918- global . Tone = { UserMedia : jest . fn ( ( ) => ( { open } ) ) } ;
919+ logo . deps . Tone = { UserMedia : jest . fn ( ( ) => ( { open } ) ) } ;
919920
920921 logo . initMediaDevices ( ) ;
921922 expect ( open ) . toHaveBeenCalled ( ) ;
922923 expect ( logo . limit ) . toBe ( 16384 ) ;
923924 expect ( logo . mic ) . toBeTruthy ( ) ;
924925
925- global . Tone = {
926+ logo . deps . Tone = {
926927 UserMedia : jest . fn ( ( ) => ( {
927928 open : jest . fn ( ( ) => {
928929 throw new Error ( "no mic" ) ;
@@ -932,8 +933,6 @@ describe("Logo comprehensive method coverage", () => {
932933 logo . initMediaDevices ( ) ;
933934 expect ( mockActivity . errorMsg ) . toHaveBeenCalledWith ( "The microphone is not available." ) ;
934935 expect ( logo . mic ) . toBeNull ( ) ;
935-
936- global . Tone = originalTone ;
937936 } ) ;
938937
939938 test ( "processShow handles image/url/loadFile/default branches" , ( ) => {
@@ -956,23 +955,23 @@ describe("Logo comprehensive method coverage", () => {
956955 fn ( ) ;
957956 return 2 ;
958957 } ) ;
959- global . delayExecution = jest . fn ( ( ) => Promise . resolve ( ) ) ;
958+ logo . deps . utils . delayExecution = jest . fn ( ( ) => Promise . resolve ( ) ) ;
960959
961960 turtle0 . singer . embeddedGraphics = { } ;
962961 await logo . dispatchTurtleSignals ( 0 , 0.5 , 3 , 0 ) ;
963- expect ( global . delayExecution ) . not . toHaveBeenCalled ( ) ;
962+ expect ( logo . deps . utils . delayExecution ) . not . toHaveBeenCalled ( ) ;
964963
965964 turtle0 . singer . embeddedGraphics = { 3 : [ ] } ;
966965 await logo . dispatchTurtleSignals ( 0 , 0.5 , 3 , 0 ) ;
967- expect ( global . delayExecution ) . not . toHaveBeenCalled ( ) ;
966+ expect ( logo . deps . utils . delayExecution ) . not . toHaveBeenCalled ( ) ;
968967
969968 turtle0 . singer . embeddedGraphics = { 3 : [ 1 ] } ;
970969 logo . blockList = [ null , { name : "clear" , connections : [ ] } ] ;
971970 await logo . dispatchTurtleSignals ( 0 , 0.5 , 3 , 0.1 ) ;
972971
973972 expect ( turtle0 . painter . doSetHeading ) . toHaveBeenCalledWith ( 0 ) ;
974973 expect ( turtle0 . painter . doSetXY ) . toHaveBeenCalledWith ( 0 , 0 ) ;
975- expect ( global . delayExecution ) . toHaveBeenCalledWith ( 500 ) ;
974+ expect ( logo . deps . utils . delayExecution ) . toHaveBeenCalledWith ( 500 ) ;
976975 expect ( turtle0 . embeddedGraphicsFinished ) . toBe ( true ) ;
977976 } ) ;
978977
@@ -1061,7 +1060,7 @@ describe("Logo comprehensive method coverage", () => {
10611060
10621061 test ( "doStopTurtles covers companion/camera/recorder/showBlocks branches" , ( ) => {
10631062 const clearIntervalSpy = jest . spyOn ( global , "clearInterval" ) . mockImplementation ( ( ) => { } ) ;
1064- global . instruments = { 0 : { flute : { } } , 1 : { piano : { } } } ;
1063+ logo . deps . instruments = { 0 : { flute : { } } , 1 : { piano : { } } } ;
10651064 turtle0 . singer . killAllVoices = jest . fn ( ) ;
10661065 turtle0 . companionTurtle = 1 ;
10671066 turtle1 . interval = 888 ;
@@ -1141,7 +1140,7 @@ describe("Logo comprehensive method coverage", () => {
11411140 logo . parseArg = jest . fn ( ( ) => 9 ) ;
11421141 logo . processShow = jest . fn ( ) ;
11431142 logo . processSpeak = jest . fn ( ) ;
1144- global . delayExecution = jest . fn ( ( ) => Promise . resolve ( ) ) ;
1143+ logo . deps . utils . delayExecution = jest . fn ( ( ) => Promise . resolve ( ) ) ;
11451144
11461145 turtle0 . singer . suppressOutput = false ;
11471146 turtle0 . embeddedGraphicsFinished = false ;
@@ -1204,7 +1203,7 @@ describe("Logo comprehensive method coverage", () => {
12041203 expect ( logo . processShow ) . toHaveBeenCalled ( ) ;
12051204 expect ( logo . processSpeak ) . toHaveBeenCalled ( ) ;
12061205 expect ( mockActivity . textMsg ) . toHaveBeenCalledWith ( "9" ) ;
1207- expect ( global . delayExecution ) . toHaveBeenCalledWith ( 1000 ) ;
1206+ expect ( logo . deps . utils . delayExecution ) . toHaveBeenCalledWith ( 1000 ) ;
12081207 } ) ;
12091208
12101209 test ( "constructor supports explicit dependency object mode" , ( ) => {
@@ -1217,7 +1216,11 @@ describe("Logo comprehensive method coverage", () => {
12171216 storage : { saveLocally : jest . fn ( ) } ,
12181217 config : { showBlocksAfterRun : false } ,
12191218 callbacks : { onStopTurtle : jest . fn ( ) , onRunTurtle : jest . fn ( ) } ,
1220- meSpeak : { speak : jest . fn ( ) }
1219+ meSpeak : { speak : jest . fn ( ) } ,
1220+ classes : {
1221+ Notation : jest . fn ( ( ) => ( { } ) ) ,
1222+ Synth : jest . fn ( ( ) => ( { } ) )
1223+ }
12211224 } ;
12221225
12231226 const depLogo = new Logo ( deps ) ;
0 commit comments