@@ -1226,12 +1226,15 @@ test.describe("MIDI Studio V2", () => {
12261226 const renderedHeader = page . locator ( '.accordion-v2__header[aria-controls="renderedTargetsContent"]' ) ;
12271227 await expect ( renderedHeader ) . toContainText ( "Rendered Export Targets" ) ;
12281228 await expect ( renderedHeader . locator ( "#exportWavButton" ) ) . toHaveCount ( 0 ) ;
1229+ await expect ( page . locator ( "#exportWavButton" ) ) . toHaveCount ( 0 ) ;
1230+ await expect ( page . locator ( "#exportMp3Button" ) ) . toHaveCount ( 0 ) ;
1231+ await expect ( page . locator ( "#exportOggButton" ) ) . toHaveCount ( 0 ) ;
12291232 await expect ( page . locator ( ".midi-studio-v2__tool-menu #toolImportManifestButton" ) ) . toBeVisible ( ) ;
12301233 await expect ( page . locator ( ".midi-studio-v2__tool-menu #loadExampleAndPlayButton" ) ) . toHaveCount ( 0 ) ;
12311234 await expect ( page . locator ( ".midi-studio-v2__tool-menu #stopAllAudioButton" ) ) . toBeVisible ( ) ;
1232- await expect ( page . locator ( " .midi-studio-v2__tool-menu #exportWavButton" ) ) . toBeVisible ( ) ;
1233- await expect ( page . locator ( ".midi-studio-v2__tool-menu #exportMp3Button " ) ) . toBeVisible ( ) ;
1234- await expect ( page . locator ( ".midi-studio-v2__tool-menu #exportOggButton " ) ) . toBeVisible ( ) ;
1235+ await expect ( page . locator ( ' .midi-studio-v2__tool-menu label[for="renderedExportTargetTypeSelect"]' ) ) . toContainText ( "Type" ) ;
1236+ await expect ( page . locator ( ".midi-studio-v2__tool-menu #renderedExportTargetTypeSelect " ) ) . toBeVisible ( ) ;
1237+ await expect ( page . locator ( ".midi-studio-v2__tool-menu #renderedExportSaveButton " ) ) . toBeVisible ( ) ;
12351238 await expect ( page . locator ( "#midiSourceDetails" ) ) . toContainText ( "No MIDI source inspected." ) ;
12361239 await expect ( page . locator ( "#audioDiagnosticsContent" ) ) . toBeHidden ( ) ;
12371240 await expect ( page . locator ( "#playbackState" ) ) . toContainText ( "Audible preview ready: Main Theme." ) ;
@@ -1297,19 +1300,39 @@ test.describe("MIDI Studio V2", () => {
12971300 }
12981301 } ) ;
12991302
1300- test ( "reports rendered export nav action status without claiming files were written" , async ( { page } ) => {
1303+ test ( "exports through Type dropdown and Save without claiming files were written" , async ( { page } ) => {
13011304 const server = await openMidiStudio ( page ) ;
13021305 try {
1303- await expect ( page . locator ( '.accordion-v2__header[aria-controls="renderedTargetsContent"] #exportWavButton' ) ) . toHaveCount ( 0 ) ;
1304- await expect ( page . locator ( ".midi-studio-v2__tool-menu #exportWavButton" ) ) . toBeVisible ( ) ;
1305- await page . locator ( "#exportWavButton" ) . click ( ) ;
1306- await page . locator ( "#exportMp3Button" ) . click ( ) ;
1307- await page . locator ( "#exportOggButton" ) . click ( ) ;
1306+ await expect ( page . locator ( "#exportWavButton" ) ) . toHaveCount ( 0 ) ;
1307+ await expect ( page . locator ( "#exportMp3Button" ) ) . toHaveCount ( 0 ) ;
1308+ await expect ( page . locator ( "#exportOggButton" ) ) . toHaveCount ( 0 ) ;
1309+ await expect ( page . locator ( "#renderedExportTargetTypeSelect" ) ) . toBeVisible ( ) ;
1310+ await expect ( page . locator ( "#renderedExportTargetTypeSelect option" ) ) . toContainText ( [ "WAV" , "MP3" , "OGG" ] ) ;
1311+ await expect ( page . locator ( "#renderedExportSaveButton" ) ) . toBeVisible ( ) ;
1312+ const exportControlsFit = await page . locator ( ".midi-studio-v2__tool-menu" ) . evaluate ( ( menu ) => {
1313+ const label = menu . querySelector ( 'label[for="renderedExportTargetTypeSelect"]' ) . getBoundingClientRect ( ) ;
1314+ const typeSelect = menu . querySelector ( "#renderedExportTargetTypeSelect" ) . getBoundingClientRect ( ) ;
1315+ const saveButton = menu . querySelector ( "#renderedExportSaveButton" ) . getBoundingClientRect ( ) ;
1316+ const menuRect = menu . getBoundingClientRect ( ) ;
1317+ return {
1318+ fit : typeSelect . left >= menuRect . left - 1 && saveButton . right <= menuRect . right + 1 ,
1319+ sameRow : label . right <= saveButton . left && label . bottom >= saveButton . top && saveButton . bottom >= label . top
1320+ } ;
1321+ } ) ;
1322+ expect ( exportControlsFit . fit ) . toBe ( true ) ;
1323+ expect ( exportControlsFit . sameRow ) . toBe ( true ) ;
1324+ await page . locator ( "#renderedExportTargetTypeSelect" ) . selectOption ( "wav" ) ;
1325+ await page . locator ( "#renderedExportSaveButton" ) . click ( ) ;
1326+ await page . locator ( "#renderedExportTargetTypeSelect" ) . selectOption ( "mp3" ) ;
1327+ await page . locator ( "#renderedExportSaveButton" ) . click ( ) ;
1328+ await page . locator ( "#renderedExportTargetTypeSelect" ) . selectOption ( "ogg" ) ;
1329+ await page . locator ( "#renderedExportSaveButton" ) . click ( ) ;
13081330 await expect ( page . locator ( "#statusLog" ) ) . toHaveValue ( / W A R N E x p o r t r e n d e r i n g n o t i m p l e m e n t e d f o r W A V \. P l a n n e d t a r g e t : a s s e t s \/ m u s i c \/ r e n d e r e d \/ t h e m e - m a i n \. w a v \. / ) ;
13091331 await expect ( page . locator ( "#statusLog" ) ) . toHaveValue ( / W A R N E x p o r t r e n d e r i n g n o t i m p l e m e n t e d f o r M P 3 \. P l a n n e d t a r g e t : a s s e t s \/ m u s i c \/ r e n d e r e d \/ t h e m e - m a i n \. m p 3 \. / ) ;
13101332 await expect ( page . locator ( "#statusLog" ) ) . toHaveValue ( / W A R N E x p o r t r e n d e r i n g n o t i m p l e m e n t e d f o r O G G \. P l a n n e d t a r g e t : a s s e t s \/ m u s i c \/ r e n d e r e d \/ t h e m e - m a i n \. o g g \. / ) ;
13111333 await page . locator ( '[data-song-id="source-only"]' ) . click ( ) ;
1312- await page . locator ( "#exportWavButton" ) . click ( ) ;
1334+ await page . locator ( "#renderedExportTargetTypeSelect" ) . selectOption ( "wav" ) ;
1335+ await page . locator ( "#renderedExportSaveButton" ) . click ( ) ;
13131336 await expect ( page . locator ( "#statusLog" ) ) . toHaveValue ( / F A I L M i s s i n g r e n d e r e d W A V e x p o r t t a r g e t f o r S o u r c e O n l y \. A d d m u s i c \. s o n g s \[ \] \. r e n d e r e d \. w a v b e f o r e e x p o r t i n g \. / ) ;
13141337 } finally {
13151338 await workspaceV2CoverageReporter . stop ( page ) ;
@@ -2230,7 +2253,8 @@ test.describe("MIDI Studio V2", () => {
22302253 await expect ( page . locator ( "#songSourceField" ) ) . toHaveValue ( "No song selected" ) ;
22312254 await expect ( page . locator ( "#renderedTargets" ) ) . toContainText ( "No rendered WAV target selected." ) ;
22322255 await expect ( page . locator ( "#statusLog" ) ) . toHaveValue ( / F A I L M I D I S t u d i o V 2 p a y l o a d r e j e c t e d b e f o r e r e n d e r .* m u s i c \. s o n g s \[ 0 \] \. i d i s r e q u i r e d \. / ) ;
2233- await page . locator ( "#exportWavButton" ) . click ( ) ;
2256+ await page . locator ( "#renderedExportTargetTypeSelect" ) . selectOption ( "wav" ) ;
2257+ await page . locator ( "#renderedExportSaveButton" ) . click ( ) ;
22342258 await expect ( page . locator ( "#statusLog" ) ) . toHaveValue ( / F A I L M i s s i n g M I D I s o n g f o r W A V e x p o r t \. L o a d o r s e l e c t a s o n g b e f o r e e x p o r t i n g \. / ) ;
22352259 } finally {
22362260 await workspaceV2CoverageReporter . stop ( page ) ;
0 commit comments