Show duration in the tab title

This commit is contained in:
Yury Semikhatsky 2025-02-06 12:14:10 -08:00
parent 6755c80172
commit 5e01df2af9
3 changed files with 19 additions and 6 deletions

View file

@ -50,6 +50,11 @@
line-height: 24px; line-height: 24px;
} }
.test-case-run-duration {
color: var(--color-fg-subtle);
padding-left: 8px;
}
.test-case-path { .test-case-path {
flex: none; flex: none;
align-items: center; align-items: center;

View file

@ -212,7 +212,7 @@ test('should correctly render prev and next', async ({ mount }) => {
- text: group - text: group
- link "« previous" - link "« previous"
- link "next »" - link "next »"
- text: "My test test.spec.ts:42 100ms" - text: "My test test.spec.ts:42 10ms"
`); `);
}); });
@ -237,10 +237,15 @@ const testCaseWithTwoAttempts: TestCase = {
test('total duration is selected run duration', async ({ mount, page }) => { test('total duration is selected run duration', async ({ mount, page }) => {
const component = await mount(<TestCaseView projectNames={['chromium', 'webkit']} test={testCaseWithTwoAttempts} prev={undefined} next={undefined} run={0}></TestCaseView>); const component = await mount(<TestCaseView projectNames={['chromium', 'webkit']} test={testCaseWithTwoAttempts} prev={undefined} next={undefined} run={0}></TestCaseView>);
await expect(component).toMatchAriaSnapshot(` await expect(component).toMatchAriaSnapshot(`
- text: "My test test.spec.ts:42 50ms" - text: "My test test.spec.ts:42 200ms"
- text: "Run 50ms Retry #1 150ms"
`); `);
await page.getByText('Retry #1').click(); await page.locator('.tabbed-pane-tab-label', { hasText: 'Run50ms' }).click();
await expect(component).toMatchAriaSnapshot(` await expect(component).toMatchAriaSnapshot(`
- text: "My test test.spec.ts:42 150ms" - text: "My test test.spec.ts:42 200ms"
`);
await page.locator('.tabbed-pane-tab-label', { hasText: 'Retry #1150ms' }).click();
await expect(component).toMatchAriaSnapshot(`
- text: "My test test.spec.ts:42 200ms"
`); `);
}); });

View file

@ -65,7 +65,7 @@ export const TestCaseView: React.FC<{
</CopyToClipboardContainer> </CopyToClipboardContainer>
</div> </div>
<div style={{ flex: 'auto' }}></div> <div style={{ flex: 'auto' }}></div>
<div className='test-case-duration'>{msToString(test.results[selectedResultIndex]?.duration ?? test.duration)}</div> <div className='test-case-duration'>{msToString(test.duration)}</div>
</div>} </div>}
{test && (!!test.projectName || labels) && <div className='test-case-project-labels-row'> {test && (!!test.projectName || labels) && <div className='test-case-project-labels-row'>
{test && !!test.projectName && <ProjectLink projectNames={projectNames} projectName={test.projectName}></ProjectLink>} {test && !!test.projectName && <ProjectLink projectNames={projectNames} projectName={test.projectName}></ProjectLink>}
@ -77,7 +77,10 @@ export const TestCaseView: React.FC<{
{test && <TabbedPane tabs={ {test && <TabbedPane tabs={
test.results.map((result, index) => ({ test.results.map((result, index) => ({
id: String(index), id: String(index),
title: <div style={{ display: 'flex', alignItems: 'center' }}>{statusIcon(result.status)} {retryLabel(index)}</div>, title: <div style={{ display: 'flex', alignItems: 'center' }}>
{statusIcon(result.status)} {retryLabel(index)}
{(test.results.length > 1) && <span className='test-case-run-duration'>{msToString(result.duration)}</span>}
</div>,
render: () => <TestResultView test={test!} result={result} /> render: () => <TestResultView test={test!} result={result} />
})) || []} selectedTab={String(selectedResultIndex)} setSelectedTab={id => setSelectedResultIndex(+id)} />} })) || []} selectedTab={String(selectedResultIndex)} setSelectedTab={id => setSelectedResultIndex(+id)} />}
</div>; </div>;