chrome-devtools-frontend
Version:
Chrome DevTools UI
69 lines (57 loc) • 2.89 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 * as Common from '../../../core/common/common.js';
import type * as Platform from '../../../core/platform/platform.js';
import * as Root from '../../../core/root/root.js';
import * as SettingComponents from './settings.js';
function createWarningElement(deprecationNotice: Common.SettingRegistration.SettingRegistration['deprecationNotice']) {
const registration: Common.SettingRegistration.SettingRegistration = {
settingName: 'boolean',
settingType: Common.Settings.SettingType.BOOLEAN,
defaultValue: false,
deprecationNotice,
};
const component = new SettingComponents.SettingDeprecationWarning.SettingDeprecationWarning();
component.data = new Common.Settings.Deprecation(registration);
const element = component.shadowRoot!.querySelector('devtools-icon');
return {component, element};
}
const warning = () => 'Warning' as Platform.UIString.LocalizedString;
const EXPERIMENT_NAME = 'testExperiment';
describe('SettingDeprecationWarning', () => {
beforeEach(() => {
Root.Runtime.experiments.clearForTest();
});
afterEach(() => {
Root.Runtime.experiments.clearForTest();
});
it('shows the warning tooltip', () => {
const {element} = createWarningElement({disabled: true, warning});
assert.deepEqual(element?.title, warning());
});
it('is clickable when disabled and associated with an experiment', () => {
Root.Runtime.experiments.register(EXPERIMENT_NAME, EXPERIMENT_NAME);
const {element} = createWarningElement({disabled: true, warning, experiment: EXPERIMENT_NAME});
assert.exists(element);
assert.include(Array.from(element.classList.values()), 'clickable');
});
it('is not clickable when not disabled and associated with an experiment', () => {
Root.Runtime.experiments.register(EXPERIMENT_NAME, EXPERIMENT_NAME);
const {element} = createWarningElement({disabled: false, warning, experiment: EXPERIMENT_NAME});
assert.exists(element);
assert.notInclude(Array.from(element.classList.values()), 'clickable');
});
it('reveals the associated experiment on click', () => {
Root.Runtime.experiments.register(EXPERIMENT_NAME, EXPERIMENT_NAME);
const experiment = Root.Runtime.experiments.allConfigurableExperiments().find(e => e.name === EXPERIMENT_NAME);
assert.exists(experiment);
const {element} = createWarningElement({disabled: true, warning, experiment: EXPERIMENT_NAME});
const reveal = sinon.stub(Common.Revealer.RevealerRegistry.prototype, 'reveal').resolves();
assert.exists(element);
element.click();
assert.isTrue(
reveal.calledOnceWithExactly(experiment, false),
'Revealer was either not called or was called with unexpected arguments');
});
});