@@ -607,6 +607,27 @@ test.describe("MIDI Studio V2", () => {
607607 await expect ( instrumentRow ( page , "lead" ) . locator ( "[data-delete-instrument-row='lead']" ) ) . toHaveAttribute ( "title" , "Delete instrument row Lead" ) ;
608608 await expect ( page . locator ( "#addInstrumentRowButton" ) ) . toHaveAttribute ( "aria-label" , "Add instrument" ) ;
609609 await expect ( page . locator ( "#addInstrumentRowButton" ) ) . toHaveAttribute ( "title" , "Add instrument" ) ;
610+ const instrumentHeaderLayout = await page . locator ( ".midi-studio-v2__instrument-accordion-header" ) . evaluate ( ( header ) => {
611+ const title = header . querySelector ( "span:first-child" ) . getBoundingClientRect ( ) ;
612+ const add = header . querySelector ( "#addInstrumentRowButton" ) . getBoundingClientRect ( ) ;
613+ const close = header . querySelector ( "#closeInstrumentPanelButton" ) . getBoundingClientRect ( ) ;
614+ return {
615+ addAfterTitle : add . left > title . right ,
616+ addText : header . querySelector ( "#addInstrumentRowButton" ) . textContent ,
617+ closeAfterAdd : close . left > add . right ,
618+ closeText : header . querySelector ( "#closeInstrumentPanelButton" ) . textContent ,
619+ sameRow : Math . abs ( title . top - add . top ) <= 2 && Math . abs ( add . top - close . top ) <= 2 ,
620+ titleText : header . querySelector ( "span:first-child" ) . textContent
621+ } ;
622+ } ) ;
623+ expect ( instrumentHeaderLayout ) . toEqual ( {
624+ addAfterTitle : true ,
625+ addText : "Add" ,
626+ closeAfterAdd : true ,
627+ closeText : "X" ,
628+ sameRow : true ,
629+ titleText : "Instruments"
630+ } ) ;
610631 await expect ( instrumentRow ( page , "lead" ) . locator ( '[aria-label="Mute Lead"]' ) ) . not . toBeChecked ( ) ;
611632 await instrumentToggle ( page , "lead" , "mute" ) . click ( ) ;
612633 await expect ( instrumentRow ( page , "lead" ) . locator ( '[aria-label="Mute Lead"]' ) ) . toBeChecked ( ) ;
@@ -761,6 +782,13 @@ test.describe("MIDI Studio V2", () => {
761782 await expectInstrumentClickKeepsScroll ( page , leadVisibility ) ;
762783 await page . locator ( "#addInstrumentRowButton" ) . click ( ) ;
763784 await expect ( instrumentRow ( page , "instrument-1" ) ) . toBeVisible ( ) ;
785+ await page . locator ( "#closeInstrumentPanelButton" ) . click ( ) ;
786+ await expect ( page . locator ( ".midi-studio-v2__instrument-accordion-header" ) ) . toHaveAttribute ( "aria-expanded" , "false" ) ;
787+ await expect ( page . locator ( "#instrumentListContent" ) ) . toBeHidden ( ) ;
788+ await expect ( instrumentRow ( page , "instrument-1" ) ) . toHaveCount ( 1 ) ;
789+ await page . locator ( ".midi-studio-v2__instrument-accordion-header" ) . click ( ) ;
790+ await expect ( page . locator ( ".midi-studio-v2__instrument-accordion-header" ) ) . toHaveAttribute ( "aria-expanded" , "true" ) ;
791+ await expect ( instrumentRow ( page , "instrument-1" ) ) . toBeVisible ( ) ;
764792 await expectInstrumentClickKeepsScroll ( page , instrumentRow ( page , "instrument-1" ) . locator ( "[data-delete-instrument-row='instrument-1']" ) ) ;
765793 await expect ( instrumentRow ( page , "instrument-1" ) ) . toHaveCount ( 0 ) ;
766794 await selectInstrumentRow ( page , "lead" ) ;
@@ -799,7 +827,7 @@ test.describe("MIDI Studio V2", () => {
799827 } ) ;
800828 await page . locator ( "#playButton" ) . click ( ) ;
801829 await expect ( page . locator ( "#stopButton" ) ) . toBeEnabled ( ) ;
802- await expect ( page . locator ( ' .midi-studio-v2__grid-cell--playhead-active[data-step-index="0"]' ) . first ( ) ) . toBeVisible ( ) ;
830+ await expect ( page . locator ( " .midi-studio-v2__grid-cell--playhead-active" ) . first ( ) ) . toBeVisible ( ) ;
803831 const playbackEvidence = await page . evaluate ( ( ) => {
804832 const maxSameTime = ( action ) => {
805833 const counts = new Map ( ) ;
@@ -930,10 +958,10 @@ test.describe("MIDI Studio V2", () => {
930958 await page . locator ( "#toolImportManifestInput" ) . setInputFiles ( uatManifestPath ) ;
931959 await selectInstrumentRow ( page , "lead" ) ;
932960
933- await expect ( page . locator ( ".midi-studio-v2__timing-header-row-1.midi-studio-v2__note-table-instrument-header" ) ) . toHaveText ( "Octave" ) ;
934961 await expect ( page . locator ( ".midi-studio-v2__timing-header-row-1.midi-studio-v2__timing-axis-header" ) ) . toHaveText ( "Bar" ) ;
935- await expect ( page . locator ( ".midi-studio-v2__timing-header-row-2.midi-studio-v2__note-table-instrument-header" ) ) . toHaveText ( "" ) ;
936962 await expect ( page . locator ( ".midi-studio-v2__timing-header-row-2.midi-studio-v2__timing-axis-header" ) ) . toHaveText ( "Beat" ) ;
963+ expect ( await page . locator ( ".midi-studio-v2__timing-header-row-1" ) . evaluateAll ( ( cells ) => cells . map ( ( cell ) => cell . textContent ) . join ( "|" ) ) ) . not . toContain ( "Octave" ) ;
964+ expect ( await page . locator ( ".midi-studio-v2__timing-header-row-2" ) . evaluateAll ( ( cells ) => cells . map ( ( cell ) => cell . textContent ) . join ( "|" ) ) ) . not . toContain ( "Octave" ) ;
937965 await expect ( page . locator ( '.midi-studio-v2__timing-header-row-1.midi-studio-v2__note-table-column-header[data-step-index="0"]' ) ) . toHaveText ( "1" ) ;
938966 await expect ( page . locator ( '.midi-studio-v2__timing-header-row-2.midi-studio-v2__note-table-column-header[data-step-index="0"]' ) ) . toHaveText ( "1" ) ;
939967 await expect ( page . locator ( '.midi-studio-v2__timing-header-row-2.midi-studio-v2__note-table-column-header[data-step-index="1"]' ) ) . toHaveText ( "2" ) ;
@@ -943,11 +971,17 @@ test.describe("MIDI Studio V2", () => {
943971 const output = page . locator ( "#instrumentGridOutput" ) ;
944972 const gridLayout = await output . evaluate ( ( element ) => {
945973 const firstNote = element . querySelector ( '.midi-studio-v2__octave-note-cell[data-step-index="0"]' ) ;
974+ const firstRow = element . querySelector ( '.midi-studio-v2__octave-note-cell[data-octave-row-index="0"][data-step-index="0"]' ) ;
975+ const secondRow = element . querySelector ( '.midi-studio-v2__octave-note-cell[data-octave-row-index="1"][data-step-index="0"]' ) ;
946976 return {
977+ alternatingRowsDiffer : getComputedStyle ( firstRow ) . backgroundColor !== getComputedStyle ( secondRow ) . backgroundColor ,
978+ borderRightWidth : getComputedStyle ( firstNote ) . borderRightWidth ,
947979 columnWidth : firstNote . getBoundingClientRect ( ) . width ,
948980 columnTemplate : getComputedStyle ( element . querySelector ( ".midi-studio-v2__octave-timeline" ) ) . gridTemplateColumns
949981 } ;
950982 } ) ;
983+ expect ( gridLayout . alternatingRowsDiffer ) . toBe ( true ) ;
984+ expect ( gridLayout . borderRightWidth ) . toBe ( "2px" ) ;
951985 expect ( gridLayout . columnWidth ) . toBeLessThanOrEqual ( 32 ) ;
952986 expect ( gridLayout . columnTemplate ) . toContain ( "28.8px" ) ;
953987
0 commit comments