@@ -308,7 +308,8 @@ function spreadsheetCell(page, lane, stepIndex) {
308308}
309309
310310async function setSpreadsheetRowToggle ( page , laneLabel , kind , checked ) {
311- const toggle = page . locator ( `.midi-studio-v2__lane-header-cell [aria-label="${ kind } ${ laneLabel } "]` ) ;
311+ const labelKind = kind . charAt ( 0 ) . toUpperCase ( ) + kind . slice ( 1 ) ;
312+ const toggle = page . locator ( `.midi-studio-v2__instrument-row [aria-label="${ labelKind } ${ laneLabel } "]` ) ;
312313 await expect ( toggle ) . toHaveCount ( 1 ) ;
313314 await toggle . evaluate (
314315 ( input , nextChecked ) => {
@@ -357,23 +358,46 @@ test.describe("MIDI Studio V2", () => {
357358 await expect ( page . locator ( "#previewInstrumentDrumsSelect" ) ) . toHaveValue ( "basic-drums" ) ;
358359
359360 await expect ( page . locator ( '[data-midi-studio-tab="studio"]' ) ) . toHaveAttribute ( "aria-selected" , "true" ) ;
360- await expect ( page . locator ( ".midi-studio-v2__track-list-panel" ) ) . toBeVisible ( ) ;
361- await expect ( page . locator ( ".midi-studio-v2__track-list li" ) ) . toContainText ( [ "Lead" , "Bass" , "Chords/Pad" , "Drums" ] ) ;
361+ await expect ( page . locator ( ".midi-studio-v2__instrument-list-panel" ) ) . toBeVisible ( ) ;
362+ await expect ( page . locator ( ".midi-studio-v2__instrument-list-panel h2" ) ) . toHaveText ( "Instruments" ) ;
363+ await expect ( page . locator ( ".midi-studio-v2__instrument-row-name" ) ) . toContainText ( [ "Lead" , "Bass" , "Pad/Chords" , "Pad Layer" , "Drums" ] ) ;
364+ await expect ( page . locator ( '.midi-studio-v2__instrument-row[data-preview-lane="lead"] [aria-label="Mute Lead"]' ) ) . toHaveCount ( 1 ) ;
365+ await expect ( page . locator ( '.midi-studio-v2__instrument-row[data-preview-lane="lead"] [aria-label="Solo Lead"]' ) ) . toHaveCount ( 1 ) ;
366+ await expect ( page . locator ( '.midi-studio-v2__instrument-row[data-preview-lane="lead"] [aria-label="Volume Lead"]' ) ) . toHaveCount ( 1 ) ;
367+ await expect ( page . locator ( '.midi-studio-v2__instrument-row[data-preview-lane="lead"] [aria-label="Pan Lead"]' ) ) . toHaveCount ( 1 ) ;
368+ await expect ( page . locator ( '.midi-studio-v2__instrument-row[data-preview-lane="lead"] #previewInstrumentLeadSelect' ) ) . toHaveCount ( 1 ) ;
362369 await expect ( page . locator ( "#instrumentGridContent" ) ) . toBeVisible ( ) ;
370+ await expect ( page . locator ( '.accordion-v2__header[aria-controls="instrumentGridContent"]' ) ) . toHaveCount ( 0 ) ;
371+ await expect ( page . locator ( ".midi-studio-v2__timeline-title" ) ) . toContainText ( "Timeline" ) ;
372+ await expect ( page . locator ( ".midi-studio-v2__timeline-title" ) ) . toContainText ( "Edit Notes Here" ) ;
363373 await expect ( page . locator ( ".midi-studio-v2__note-table" ) ) . toHaveCount ( 1 ) ;
364374 await expect ( page . locator ( ".midi-studio-v2__note-block" ) ) . not . toHaveCount ( 0 ) ;
365375 await expect ( page . locator ( '.midi-studio-v2__note-table-cell[data-lane="lead"] .midi-studio-v2__note-block' ) . first ( ) ) . toHaveText ( "G4" ) ;
366376 await expect ( page . locator ( '.midi-studio-v2__note-table-cell[data-lane="bass"] .midi-studio-v2__note-block' ) . first ( ) ) . toHaveText ( "G2" ) ;
367377 await expect ( page . locator ( '.midi-studio-v2__note-table-cell[data-lane="chords"] .midi-studio-v2__note-block' ) . first ( ) ) . toHaveText ( "G" ) ;
368378 await expect ( page . locator ( '.midi-studio-v2__note-table-cell[data-lane="pad"] .midi-studio-v2__note-block' ) . first ( ) ) . toHaveText ( "G" ) ;
369379 await expect ( page . locator ( '.midi-studio-v2__note-table-cell[data-lane="drums"] .midi-studio-v2__note-block' ) . first ( ) ) . toHaveText ( "kick" ) ;
380+ await page . locator ( '.midi-studio-v2__instrument-row[data-preview-lane="lead"]' ) . click ( ) ;
381+ await expect ( page . locator ( '.midi-studio-v2__instrument-row[data-preview-lane="lead"]' ) ) . toHaveClass ( / i s - s e l e c t e d / ) ;
382+ await expect ( page . locator ( '.midi-studio-v2__note-table-cell[data-lane="lead"].midi-studio-v2__grid-cell--lane-selected' ) ) . not . toHaveCount ( 0 ) ;
383+ await expect ( page . locator ( "#audioDiagnosticsContent" ) ) . toBeHidden ( ) ;
384+ await expect ( page . locator ( "#inspectorContent" ) ) . toBeHidden ( ) ;
385+ await spreadsheetCell ( page , "lead" , 0 ) . fill ( "C5" ) ;
386+ await expect ( spreadsheetCell ( page , "lead" , 0 ) ) . toHaveText ( "C5" ) ;
387+ await expect ( page . locator ( "#instrumentGridLeadInput" ) ) . toHaveValue ( / C 5 G 4 E 4 G 4 / ) ;
388+ expect ( await page . evaluate ( ( ) => window . __midiStudioV2App . lastInstrumentGridResult . timeline . some ( ( event ) => (
389+ event . lane === "lead" && event . stepIndex === 0 && event . value === "C5"
390+ ) ) ) ) . toBe ( true ) ;
370391
371392 await page . locator ( "#playButton" ) . click ( ) ;
372393 await expect ( page . locator ( "#playbackState" ) ) . toContainText ( "Playing audible preview: Camptown Races UAT Reel" ) ;
373394 await expect ( page . locator ( "#nowPlayingLabel" ) ) . toHaveText ( "Playing: Camptown Races UAT Reel" ) ;
374395 await expect ( page . locator ( "#statusLog" ) ) . toHaveValue ( / O K A u d i b l e p r e v i e w p l a y b a c k s t a r t e d f o r C a m p t o w n R a c e s U A T R e e l \. / ) ;
375396 expect ( await page . evaluate ( ( ) => window . __midiStudioPreviewSynthEvents . some ( ( event ) => event . action === "oscillator-start" ) ) ) . toBe ( true ) ;
376397 expect ( await page . evaluate ( ( ) => window . __midiStudioV2App . previewSynth . getSnapshot ( ) . playing ) ) . toBe ( true ) ;
398+ expect ( await page . evaluate ( ( ) => window . __midiStudioV2App . lastInstrumentGridResult . timeline . some ( ( event ) => (
399+ event . lane === "lead" && event . stepIndex === 0 && event . value === "C5"
400+ ) ) ) ) . toBe ( true ) ;
377401
378402 await page . locator ( "#stopButton" ) . click ( ) ;
379403 await expect ( page . locator ( "#playbackState" ) ) . toContainText ( "Stopped audible preview: Camptown Races UAT Reel" ) ;
@@ -425,8 +449,7 @@ test.describe("MIDI Studio V2", () => {
425449 await expect ( page . locator ( ".midi-studio-v2__tool-menu #exportMp3Button" ) ) . toBeVisible ( ) ;
426450 await expect ( page . locator ( ".midi-studio-v2__tool-menu #exportOggButton" ) ) . toBeVisible ( ) ;
427451 await expect ( page . locator ( "#midiSourceDetails" ) ) . toContainText ( "No MIDI source inspected." ) ;
428- await expect ( page . locator ( "#audioDiagnostics" ) ) . toContainText ( "Audio context state" ) ;
429- await expect ( page . locator ( "#audioDiagnostics" ) ) . toContainText ( "Playable note count" ) ;
452+ await expect ( page . locator ( "#audioDiagnosticsContent" ) ) . toBeHidden ( ) ;
430453 await expect ( page . locator ( "#playbackState" ) ) . toContainText ( "Audible preview ready: Main Theme." ) ;
431454 await expect ( page . locator ( "#statusLog" ) ) . toHaveValue ( / O K L o a d e d 3 M I D I s o n g s / ) ;
432455 await expect ( page . locator ( "#statusLog" ) ) . toHaveValue ( / I N F O N e x t : s e l e c t a M I D I S t u d i o s o n g , r e v i e w t h e S t u d i o t a b t i m e l i n e , t h e n p r e s s P l a y t o a u d i t i o n t h e i m p o r t e d a r r a n g e m e n t \. / ) ;
@@ -1190,27 +1213,30 @@ Am F`);
11901213 const normalWidth = ( await centerPanel . boundingBox ( ) ) ?. width || 0 ;
11911214 await page . locator ( "[data-midi-studio-summary]" ) . click ( ) ;
11921215 await expect ( page . locator ( "body" ) ) . toHaveClass ( / m i d i - s t u d i o - v 2 - - e x p a n d e d / ) ;
1193- await expect ( page . locator ( "[data-midi-studio-summary]" ) ) . toContainText ( "Show Header and Details" ) ;
1194- await expect ( page . locator ( "#shared-theme-header" ) ) . toBeHidden ( ) ;
1195- await expect ( page . locator ( ".tool-starter__panel--left" ) ) . toBeHidden ( ) ;
1196- await expect ( page . locator ( "#songDetailsContent" ) ) . toBeHidden ( ) ;
1197- await expect ( page . locator ( "#instrumentGridContent" ) ) . toBeVisible ( ) ;
1216+ await expect ( page . locator ( "[data-midi-studio-summary]" ) ) . toContainText ( "Exit Expanded View" ) ;
1217+ await expect ( page . locator ( "#shared-theme-header" ) ) . toBeVisible ( ) ;
1218+ await expect ( page . locator ( "[data-midi-studio-header]" ) ) . toBeVisible ( ) ;
11981219 await expect ( page . locator ( ".midi-studio-v2__tool-menu" ) ) . toBeVisible ( ) ;
1220+ await expect ( page . locator ( "#playButton" ) ) . toBeVisible ( ) ;
1221+ await expect ( page . locator ( ".tool-starter__panel--left" ) ) . toBeVisible ( ) ;
1222+ await expect ( page . locator ( ".midi-studio-v2__instrument-list-panel" ) ) . toBeVisible ( ) ;
1223+ await expect ( page . locator ( "#instrumentGridContent" ) ) . toBeVisible ( ) ;
11991224 await expect ( page . locator ( "#toolImportManifestButton" ) ) . toBeVisible ( ) ;
12001225 await expect ( page . locator ( "#statusLogContent" ) ) . toBeVisible ( ) ;
12011226 await expect ( page . locator ( "#clearStatusButton" ) ) . toBeVisible ( ) ;
12021227 const expandedWidth = ( await centerPanel . boundingBox ( ) ) ?. width || 0 ;
12031228 expect ( expandedWidth ) . toBeGreaterThan ( normalWidth ) ;
1204- await expect ( page . locator ( "#statusLog" ) ) . toHaveValue ( / I N F O E n t e r e d e x p a n d e d M I D I S t u d i o w o r k s p a c e v i e w / ) ;
1229+ await expect ( page . locator ( "#audioDiagnosticsContent" ) ) . toBeHidden ( ) ;
1230+ await expect ( page . locator ( "#statusLog" ) ) . toHaveValue ( / I N F O E n t e r e d e x p a n d e d M I D I S t u d i o v i e w \. H e a d e r , t o p t r a n s p o r t , a n d I n s t r u m e n t s c o l u m n r e m a i n v i s i b l e ; s e c o n d a r y d i a g n o s t i c s a r e m i n i m i z e d \. / ) ;
12051231
12061232 await page . locator ( "[data-midi-studio-summary]" ) . click ( ) ;
12071233 await expect ( page . locator ( "body" ) ) . not . toHaveClass ( / m i d i - s t u d i o - v 2 - - e x p a n d e d / ) ;
1208- await expect ( page . locator ( "[data-midi-studio-summary]" ) ) . toContainText ( "Hide Header and Details " ) ;
1234+ await expect ( page . locator ( "[data-midi-studio-summary]" ) ) . toContainText ( "Enter Expanded View " ) ;
12091235 await expect ( page . locator ( "#shared-theme-header" ) ) . toBeVisible ( ) ;
12101236 await expect ( page . locator ( ".tool-starter__panel--left" ) ) . toBeVisible ( ) ;
12111237 await expect ( page . locator ( '[data-midi-studio-tab="studio"]' ) ) . toHaveAttribute ( "aria-selected" , "true" ) ;
12121238 await expect ( page . locator ( "#instrumentGridContent" ) ) . toBeVisible ( ) ;
1213- await expect ( page . locator ( "#statusLog" ) ) . toHaveValue ( / I N F O E x i t e d e x p a n d e d M I D I S t u d i o w o r k s p a c e v i e w / ) ;
1239+ await expect ( page . locator ( "#statusLog" ) ) . toHaveValue ( / I N F O E x i t e d e x p a n d e d M I D I S t u d i o v i e w \. F u l l S t u d i o , s e t u p , a n d d i a g n o s t i c s l a y o u t r e s t o r e d \. / ) ;
12141240 } finally {
12151241 await workspaceV2CoverageReporter . stop ( page ) ;
12161242 await server . close ( ) ;
0 commit comments