Files
ohif-viewer/tests/SEGHydrationFromMPR.spec.ts
T

82 lines
2.5 KiB
TypeScript
Raw Normal View History

import {
checkForScreenshot,
screenShotPaths,
test,
visitStudy,
waitForViewportRenderCycle,
waitForViewportsRendered,
} from './utils';
test.beforeEach(async ({ page }) => {
const studyInstanceUID = '1.3.12.2.1107.5.2.32.35162.30000015050317233592200000046';
const mode = 'viewer';
await visitStudy(page, studyInstanceUID, mode, 2000);
});
test('should properly display MPR for MR', async ({
page,
DOMOverlayPageObject,
leftPanelPageObject,
mainToolbarPageObject,
rightPanelPageObject,
viewportPageObject,
}) => {
await rightPanelPageObject.toggle();
await mainToolbarPageObject.layoutSelection.MPR.click();
await waitForViewportsRendered(page);
await checkForScreenshot(
page,
viewportPageObject.grid,
screenShotPaths.segHydrationFromMPR.mprBeforeSEG
);
await leftPanelPageObject.loadSeriesByDescription('SEG');
// SEG load triggers a progressive labelmap volume upload. waitForViewportsRendered
// (waitVolumeLoad defaults to true) polls the viewport volume actors until the
// labelmap reports loadStatus.loaded, then settles, so the screenshot captures the
// finished upload rather than a mid-stream frame.
await waitForViewportsRendered(page);
await checkForScreenshot(
page,
viewportPageObject.grid,
screenShotPaths.segHydrationFromMPR.mprAfterSEG
);
// start watching for viewports to render
const viewportRenderCycle = waitForViewportRenderCycle(page);
await DOMOverlayPageObject.viewport.segmentationHydration.yes.click();
await viewportRenderCycle;
// Hydration propagates the labelmap volume to the sagittal/coronal MPR viewports
// asynchronously, adding new volume actors after the first render cycle resolves.
// waitForViewportsRendered re-polls every viewport's volume actors until those
// propagated labelmaps report loadStatus.loaded, then settles.
await waitForViewportsRendered(page);
await checkForScreenshot(
page,
viewportPageObject.grid,
screenShotPaths.segHydrationFromMPR.mprAfterSegHydrated
);
const viewportRenderAfterLayoutChange = waitForViewportRenderCycle(page);
await mainToolbarPageObject.layoutSelection.axialPrimary.click();
await viewportRenderAfterLayoutChange;
// The layout change rebuilds the viewports; wait for their volume actors (image
// + labelmap) to report loaded before settling and capturing.
await waitForViewportsRendered(page);
await checkForScreenshot(
page,
viewportPageObject.grid,
screenShotPaths.segHydrationFromMPR.mprAfterSegHydratedAfterLayoutChange
);
});