[go: nahoru, domu]

blob: 21f633bca7e8ac52db0b7436ac56ee06375fcac1 [file] [log] [blame]
// Copyright 2023 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.
const {assert} = chai;
import * as Components from '../../../../../../front_end/panels/recorder/components/components.js';
import {
describeWithEnvironment,
} from '../../../../../../test/unittests/front_end/helpers/EnvironmentHelpers.js';
import {
dispatchClickEvent,
dispatchKeyDownEvent,
} from '../../../../../../test/unittests/front_end/helpers/DOMHelpers.js';
import * as Coordinator from '../../../../../../front_end/ui/components/render_coordinator/render_coordinator.js';
import * as UI from '../../../../../../front_end/ui/legacy/legacy.js';
const coordinator = Coordinator.RenderCoordinator.RenderCoordinator.instance();
describeWithEnvironment('RecordingListView', () => {
before(() => {
const actionRegistry = UI.ActionRegistry.ActionRegistry.instance({forceNew: true});
UI.ShortcutRegistry.ShortcutRegistry.instance({
forceNew: true,
actionRegistry,
});
});
after(() => {
UI.ShortcutRegistry.ShortcutRegistry.removeInstance();
UI.ActionRegistry.ActionRegistry.removeInstance();
});
it('should open a recording on Enter', async () => {
const view = new Components.RecordingListView.RecordingListView();
view.connectedCallback();
view.recordings = [{storageName: 'storage-test', name: 'test'}];
await coordinator.done();
const recording = view.shadowRoot?.querySelector('.row') as HTMLDivElement;
assert.ok(recording);
const eventSent = new Promise<Components.RecordingListView.OpenRecordingEvent>(
resolve => {
view.addEventListener('openrecording', resolve, {once: true});
},
);
dispatchKeyDownEvent(recording, {key: 'Enter'});
const event = await eventSent;
assert.strictEqual(event.storageName, 'storage-test');
});
it('should delete a recording', async () => {
const view = new Components.RecordingListView.RecordingListView();
view.connectedCallback();
view.recordings = [{storageName: 'storage-test', name: 'test'}];
await coordinator.done();
const deleteButton = view.shadowRoot?.querySelector(
'.delete-recording-button',
) as HTMLDivElement;
assert.ok(deleteButton);
const eventSent = new Promise<Components.RecordingListView.DeleteRecordingEvent>(
resolve => {
view.addEventListener('deleterecording', resolve, {once: true});
},
);
dispatchClickEvent(deleteButton);
const event = await eventSent;
assert.strictEqual(event.storageName, 'storage-test');
});
it('should not open a recording on Enter on the delete button', async () => {
const view = new Components.RecordingListView.RecordingListView();
view.connectedCallback();
view.recordings = [{storageName: 'storage-test', name: 'test'}];
await coordinator.done();
const deleteButton = view.shadowRoot?.querySelector(
'.delete-recording-button',
) as HTMLDivElement;
assert.ok(deleteButton);
let forceResolve: Function|undefined;
const eventSent = new Promise<Components.RecordingListView.OpenRecordingEvent>(
resolve => {
forceResolve = resolve;
view.addEventListener('openrecording', resolve, {once: true});
},
);
dispatchKeyDownEvent(deleteButton, {key: 'Enter', bubbles: true});
const maybeEvent = await Promise.race([
eventSent,
new Promise(resolve => queueMicrotask(() => resolve('timeout'))),
]);
assert.strictEqual(maybeEvent, 'timeout');
forceResolve?.();
});
});