@@ -218,58 +218,57 @@ describe("Utility Functions (logic-only)", () => {
218218 beforeAll ( ( ) => {
219219 loadSamples ( ) ;
220220 } ) ;
221- it ( "it should create a PolySynth based on the specified parameters, either using samples, built-in synths, or custom synths" , ( ) => {
222- __createSynth ( turtle , "guitar " , "guitar " , { } ) ;
221+ it ( "it should create a PolySynth based on the specified parameters, either using samples, built-in synths, or custom synths" , async ( ) => {
222+ await __createSynth ( turtle , "test-instrument " , "sine " , { } ) ;
223223 expect ( instruments [ turtle ] [ "electronic synth" ] ) . toBeInstanceOf ( Tone . PolySynth ) ;
224224 } ) ;
225- it ( "it should create a PolySynth based on the specified parameters, either using samples, built-in synths, or custom synths" , ( ) => {
226- __createSynth ( turtle , "guitar" , "sine" , { } ) ;
225+ it ( "it should create a PolySynth based on the specified parameters, either using samples, built-in synths, or custom synths" , async ( ) => {
226+ await __createSynth ( turtle , "guitar" , "sine" , { } ) ;
227227 expect ( instruments [ turtle ] [ "electronic synth" ] ) . toBeInstanceOf ( Tone . PolySynth ) ;
228228 } ) ;
229- it ( "it should create a amsynth based on the specified parameters, either using samples, built-in synths, or custom synths" , ( ) => {
229+ it ( "it should create a amsynth based on the specified parameters, either using samples, built-in synths, or custom synths" , async ( ) => {
230230 const instrumentName = "poly" ;
231- __createSynth ( turtle , instrumentName , "amsynth" , { } ) ;
231+ await __createSynth ( turtle , instrumentName , "amsynth" , { } ) ;
232232 expect ( instruments [ turtle ] [ instrumentName ] ) . toBeInstanceOf ( Tone . AMSynth ) ;
233233 } ) ;
234234
235- it ( "it should create a CUSTOMSAMPLES based on the specified parameters, either using samples, built-in synths, or custom synths" , ( ) => {
235+ it ( "it should create a CUSTOMSAMPLES based on the specified parameters, either using samples, built-in synths, or custom synths" , async ( ) => {
236236 CUSTOMSAMPLES [ "pianoC4" ] = "pianoC4" ;
237237 CUSTOMSAMPLES [ "drumKick" ] = "drumKick" ;
238238 const instrumentName = "piano" ;
239- __createSynth ( turtle , instrumentName , "pianoC4" , { } ) ;
239+ await __createSynth ( turtle , instrumentName , "pianoC4" , { } ) ;
240240 expect ( instruments [ turtle ] [ instrumentName ] ) . toBeInstanceOf ( Tone . Sampler ) ;
241241 } ) ;
242242
243- it ( "it should create a CUSTOMSAMPLES based on the specified parameters, either using samples, built-in synths, or custom synths" , ( ) => {
243+ it ( "it should create a CUSTOMSAMPLES based on the specified parameters, either using samples, built-in synths, or custom synths" , async ( ) => {
244244 const instrumentName = "drumKick" ;
245245 const sourceName = "http://example.com/drumKick.wav" ;
246- __createSynth ( turtle , instrumentName , sourceName , { } ) ;
246+ await __createSynth ( turtle , instrumentName , sourceName , { } ) ;
247247 expect ( instruments [ turtle ] [ sourceName ] [ "noteDict" ] ) . toBe ( sourceName ) ;
248248 expect ( instrumentsSource [ instrumentName ] ) . toStrictEqual ( [ 1 , "drum" ] ) ;
249249 } ) ;
250- it ( "it should create a CUSTOMSAMPLES based on the specified parameters, either using samples, built-in synths, or custom synths" , ( ) => {
250+ it ( "it should create a CUSTOMSAMPLES based on the specified parameters, either using samples, built-in synths, or custom synths" , async ( ) => {
251251 const instrumentName = "guitar" ;
252252 const sourceName = "file://testing.wav" ;
253- __createSynth ( turtle , instrumentName , sourceName , { } ) ;
253+ await __createSynth ( turtle , instrumentName , sourceName , { } ) ;
254254 expect ( instruments [ turtle ] [ sourceName ] [ "noteDict" ] ) . toBe ( sourceName ) ;
255255 expect ( instrumentsSource [ instrumentName ] ) . toStrictEqual ( [ 1 , "drum" ] ) ;
256256 } ) ;
257- it ( "it should create a CUSTOMSAMPLES based on the specified parameters, either using samples, built-in synths, or custom synths" , ( ) => {
257+ it ( "it should create a CUSTOMSAMPLES based on the specified parameters, either using samples, built-in synths, or custom synths" , async ( ) => {
258258 const instrumentName = "snare drum" ;
259259 const sourceName = "drum" ;
260- __createSynth ( turtle , instrumentName , sourceName , { } ) ;
260+ await __createSynth ( turtle , instrumentName , sourceName , { } ) ;
261261 expect ( instrumentsSource [ instrumentName ] ) . toStrictEqual ( [ 1 , "drum" ] ) ;
262262 } ) ;
263263 } ) ;
264264
265265 describe ( "loadSynth" , ( ) => {
266- it ( "it should loads a synth based on the user's input, creating and setting volume for the specified turtle." , ( ) => {
267- const result = loadSynth ( "turtle1" , "flute" ) ;
266+ it ( "it should loads a synth based on the user's input, creating and setting volume for the specified turtle." , async ( ) => {
267+ // Use a built-in synth to avoid async sample loading timeout
268+ const result = await loadSynth ( "turtle1" , "sine" ) ;
268269
269270 expect ( result ) . toBeTruthy ( ) ;
270- expect ( result ) . toBeInstanceOf ( Tone . Sampler ) ;
271-
272- expect ( instruments . turtle1 ) . toHaveProperty ( "flute" ) ;
271+ expect ( instruments . turtle1 ) . toHaveProperty ( "sine" ) ;
273272 } ) ;
274273 } ) ;
275274
@@ -429,6 +428,14 @@ describe("Utility Functions (logic-only)", () => {
429428 } ) ;
430429
431430 describe ( "rampTo function" , ( ) => {
431+ beforeAll ( async ( ) => {
432+ // Ensure flute instrument exists for these tests
433+ if ( ! instruments . turtle1 ) instruments . turtle1 = { } ;
434+ if ( ! instruments . turtle1 . flute ) {
435+ instruments . turtle1 . flute = new Tone . Sampler ( ) ;
436+ }
437+ } ) ;
438+
432439 test ( "should ramp the volume for non-percussion and non-string instruments" , ( ) => {
433440 const turtle = "turtle1" ,
434441 instrumentName = "flute" ,
@@ -454,6 +461,14 @@ describe("Utility Functions (logic-only)", () => {
454461 } ) ;
455462
456463 describe ( "setVolume function" , ( ) => {
464+ beforeAll ( ( ) => {
465+ // Ensure flute instrument exists for these tests
466+ if ( ! instruments . turtle1 ) instruments . turtle1 = { } ;
467+ if ( ! instruments . turtle1 . flute ) {
468+ instruments . turtle1 . flute = new Tone . Sampler ( ) ;
469+ }
470+ } ) ;
471+
457472 test ( "should set the volume for an instrument using DEFAULTSYNTHVOLUME" , ( ) => {
458473 setVolume ( "turtle1" , "flute" , 80 ) ;
459474
@@ -481,6 +496,14 @@ describe("Utility Functions (logic-only)", () => {
481496 } ) ;
482497
483498 describe ( "getVolume function" , ( ) => {
499+ beforeAll ( ( ) => {
500+ // Ensure flute instrument exists for these tests
501+ if ( ! instruments . turtle1 ) instruments . turtle1 = { } ;
502+ if ( ! instruments . turtle1 . flute ) {
503+ instruments . turtle1 . flute = new Tone . Sampler ( ) ;
504+ }
505+ } ) ;
506+
484507 beforeEach ( ( ) => {
485508 jest . clearAllMocks ( ) ;
486509 } ) ;
@@ -533,6 +556,20 @@ describe("Utility Functions (logic-only)", () => {
533556 describe ( "startSound" , ( ) => {
534557 const turtle = "turtle1" ;
535558
559+ beforeAll ( ( ) => {
560+ // Ensure instruments exist for these tests
561+ if ( ! instruments . turtle1 ) instruments . turtle1 = { } ;
562+ if ( ! instruments . turtle1 . flute ) {
563+ instruments . turtle1 . flute = new Tone . Sampler ( ) ;
564+ }
565+ if ( ! instruments . turtle1 . guitar ) {
566+ instruments . turtle1 . guitar = new Tone . Sampler ( ) ;
567+ }
568+ // Set up instrumentsSource for non-drum instrument tests
569+ instrumentsSource . flute = [ 0 , "voice" ] ;
570+ instrumentsSource . guitar = [ 1 , "drum" ] ;
571+ } ) ;
572+
536573 test ( "should call start() for drum instruments" , ( ) => {
537574 // Arrange
538575 const instrumentName = "guitar" ; // Assuming 'snare' is a drum
@@ -582,6 +619,20 @@ describe("Utility Functions (logic-only)", () => {
582619 describe ( "stopSound" , ( ) => {
583620 const turtle = "turtle1" ;
584621
622+ beforeAll ( ( ) => {
623+ // Ensure instruments exist for these tests
624+ if ( ! instruments . turtle1 ) instruments . turtle1 = { } ;
625+ if ( ! instruments . turtle1 . flute ) {
626+ instruments . turtle1 . flute = new Tone . Sampler ( ) ;
627+ }
628+ if ( ! instruments . turtle1 . guitar ) {
629+ instruments . turtle1 . guitar = new Tone . Sampler ( ) ;
630+ }
631+ // Set up instrumentsSource for non-drum instrument tests
632+ instrumentsSource . flute = [ 0 , "voice" ] ;
633+ instrumentsSource . guitar = [ 1 , "drum" ] ;
634+ } ) ;
635+
585636 test ( "should call stop() for drum instruments" , ( ) => {
586637 // Arrange
587638 const instrumentName = "guitar" ;
@@ -640,6 +691,20 @@ describe("Utility Functions (logic-only)", () => {
640691 } ) ;
641692
642693 describe ( "loop" , ( ) => {
694+ beforeAll ( ( ) => {
695+ // Ensure instruments exist for these tests
696+ if ( ! instruments . turtle1 ) instruments . turtle1 = { } ;
697+ if ( ! instruments . turtle1 . flute ) {
698+ instruments . turtle1 . flute = new Tone . Sampler ( ) ;
699+ }
700+ if ( ! instruments . turtle1 . guitar ) {
701+ instruments . turtle1 . guitar = new Tone . Sampler ( ) ;
702+ }
703+ // Set up instrumentsSource for non-drum instrument tests
704+ instrumentsSource . flute = [ 0 , "voice" ] ;
705+ instrumentsSource . guitar = [ 1 , "drum" ] ;
706+ } ) ;
707+
643708 test ( "should create and start a loop for drum instruments" , ( ) => {
644709 const turtle = "turtle1" ;
645710 const instrumentName = "guitar" ;
@@ -814,11 +879,13 @@ describe("Utility Functions (logic-only)", () => {
814879 // Act
815880 loadSamples ( ) ;
816881
817- // Assert
818- expect ( Synth . samples ) . toEqual ( {
819- voice : { } ,
820- drum : { }
821- } ) ;
882+ // Assert - samples should be initialized with null placeholders for lazy loading
883+ expect ( Synth . samples ) . toBeDefined ( ) ;
884+ expect ( Synth . samples . voice ) . toBeDefined ( ) ;
885+ expect ( Synth . samples . drum ) . toBeDefined ( ) ;
886+ // Verify some known samples exist with null values (will be loaded on demand)
887+ expect ( Synth . samples . voice . piano ) . toBeNull ( ) ;
888+ expect ( Synth . samples . voice . guitar ) . toBeNull ( ) ;
822889 } ) ;
823890
824891 test ( "should not overwrite existing samples object" , ( ) => {
@@ -836,24 +903,22 @@ describe("Utility Functions (logic-only)", () => {
836903 expect ( Synth . samples ) . toEqual ( initialSamples ) ;
837904 } ) ;
838905
839- test ( "should correctly populate samplesManifest " , ( ) => {
906+ test ( "should correctly initialize sample placeholders " , ( ) => {
840907 // Act
841908 loadSamples ( ) ;
842909
843- // Assert
844- expect ( Synth . samplesManifest ) . toEqual ( {
845- voice : expect . anything ( ) ,
846- drum : expect . anything ( )
847- } ) ;
910+ // Assert - samples should have voice and drum categories
911+ expect ( Object . keys ( Synth . samples . voice ) . length ) . toBeGreaterThan ( 0 ) ;
912+ expect ( Object . keys ( Synth . samples . drum ) . length ) . toBeGreaterThan ( 0 ) ;
848913 } ) ;
849914
850- test ( "empty data function should return null" , ( ) => {
915+ test ( "empty voice sample should return null function " , ( ) => {
851916 // Act
852917 loadSamples ( ) ;
853- const emptyDataFn = Synth . samplesManifest . voice . find ( x => x . name === "empty" ) . data ;
854918
855- // Assert
856- expect ( emptyDataFn ( ) ) . toBeNull ( ) ;
919+ // Assert - the 'empty' voice should exist and return null when called
920+ expect ( Synth . samples . voice . empty ) . toBeDefined ( ) ;
921+ expect ( Synth . samples . voice . empty ( ) ) . toBeNull ( ) ;
857922 } ) ;
858923
859924 test ( "should create separate objects for each manifest type" , ( ) => {
@@ -868,8 +933,10 @@ describe("Utility Functions (logic-only)", () => {
868933 } ) ;
869934
870935 describe ( "_loadSample" , ( ) => {
871- it ( "it should loads samples into the Synth instance." , ( ) => {
872- expect ( _loadSample ( ) ) . toBe ( undefined ) ;
936+ it ( "it should return a Promise for loading samples." , async ( ) => {
937+ loadSamples ( ) ;
938+ const result = _loadSample ( "piano" ) ;
939+ expect ( result ) . toBeInstanceOf ( Promise ) ;
873940 } ) ;
874941 } ) ;
875942
@@ -906,11 +973,12 @@ describe("Utility Functions (logic-only)", () => {
906973 } ) ;
907974
908975 describe ( "createSynth" , ( ) => {
909- it ( "it should create a synth based on the user's input in the 'Timbre' clamp, handling race conditions with the samples loader." , ( ) => {
910- const turtle = "turtle1" ; // Use const or let
911- const instrumentName = "piano" ; // Localize declaration
912- const sourceName = "voice recording" ; // Localize declaration
913- expect ( createSynth ( turtle , instrumentName , sourceName , { } ) ) . toBe ( undefined ) ;
976+ it ( "it should return a Promise when creating a synth based on the user's input." , async ( ) => {
977+ const turtle = "turtle1" ;
978+ const instrumentName = "piano" ;
979+ const sourceName = "amsynth" ; // Use a built-in synth for synchronous test
980+ const result = createSynth ( turtle , instrumentName , sourceName , { } ) ;
981+ expect ( result ) . toBeInstanceOf ( Promise ) ;
914982 } ) ;
915983 } ) ;
916984} ) ;
0 commit comments