chrome-devtools-frontend
Version:
Chrome DevTools UI
123 lines (104 loc) • 4.05 kB
text/typescript
// Copyright 2022 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import type * as Protocol from '../../../generated/protocol.js';
import {
dispatchClickEvent,
getCleanTextContentFromElements,
getElementWithinComponent,
renderElementIntoDOM,
} from '../../../testing/DOMHelpers.js';
import {describeWithLocale} from '../../../testing/EnvironmentHelpers.js';
import * as RenderCoordinator from '../../../ui/components/render_coordinator/render_coordinator.js';
import * as ReportView from '../../../ui/components/report_view/report_view.js';
import * as ApplicationComponents from './components.js';
function makeView(origin: string, metadata: Protocol.Storage.SharedStorageMetadata, resetBudget?: () => Promise<void>) {
return new ApplicationComponents.SharedStorageMetadataView.SharedStorageMetadataView(
{
getMetadata: async () => metadata,
resetBudget: resetBudget || (async () => {}),
},
origin);
}
describeWithLocale('SharedStorageMetadataView', () => {
it('renders with a title', async () => {
const component = makeView('https://a.test', {
creationTime: 10 as Protocol.Network.TimeSinceEpoch,
length: 4,
remainingBudget: 8.3,
bytesUsed: 200,
});
renderElementIntoDOM(component);
assert.isNotNull(component.shadowRoot);
await RenderCoordinator.done();
const report = getElementWithinComponent(component, 'devtools-report', ReportView.ReportView.Report);
const {textContent} = report.shadowRoot!.querySelector('.report-title')!;
assert.strictEqual(textContent, 'Shared storage');
});
it('renders report keys and values', async () => {
const component = makeView('https://a.test', {
creationTime: 10 as Protocol.Network.TimeSinceEpoch,
length: 4,
remainingBudget: 8.3,
bytesUsed: 200,
});
renderElementIntoDOM(component);
assert.isNotNull(component.shadowRoot);
await RenderCoordinator.done({waitForWork: true});
const keys = getCleanTextContentFromElements(component.shadowRoot, 'devtools-report-key');
assert.deepEqual(keys, [
'Origin',
'Creation Time',
'Number of Entries',
'Number of Bytes Used',
'Entropy Budget for Fenced Frames',
]);
const values = getCleanTextContentFromElements(component.shadowRoot, 'devtools-report-value');
assert.deepEqual(values, [
'https://a.test',
(new Date(10 * 1e3)).toLocaleString(),
'4',
'200',
'8.3',
]);
});
it('renders default view when data is empty', async () => {
const component = makeView('', {} as Protocol.Storage.SharedStorageMetadata);
renderElementIntoDOM(component);
assert.isNotNull(component.shadowRoot);
await RenderCoordinator.done({waitForWork: true});
const keys = getCleanTextContentFromElements(component.shadowRoot, 'devtools-report-key');
assert.deepEqual(keys, [
'Origin',
'Creation Time',
'Number of Entries',
'Number of Bytes Used',
'Entropy Budget for Fenced Frames',
]);
const values = getCleanTextContentFromElements(component.shadowRoot, 'devtools-report-value');
assert.deepEqual(values, [
'',
'Not yet created',
'0',
'0',
'0',
]);
});
it('renders reset budget button', async () => {
const resetBudgetHandlerSpy = sinon.spy();
const component = makeView(
'https://a.test', {
creationTime: 10 as Protocol.Network.TimeSinceEpoch,
length: 4,
remainingBudget: 8.3,
bytesUsed: 200,
},
resetBudgetHandlerSpy);
renderElementIntoDOM(component);
await RenderCoordinator.done({waitForWork: true});
const resetButtonComponent = component.shadowRoot!.querySelector('devtools-button');
assert.instanceOf(resetButtonComponent, HTMLElement);
dispatchClickEvent(resetButtonComponent);
sinon.assert.calledOnce(resetBudgetHandlerSpy);
});
});