blob: 649e2cb2aea6e7adbbb336c10e1620a9321e2429 [file] [edit]
// Copyright 2025 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.
// Run these tests with:
//
// npx mocha scripts/devtools_build.test.mjs
import {assert} from 'chai';
import {FeatureSet} from './devtools_build.mjs';
describe('FeatureSet', () => {
it('yields an empty set of arguments by default', () => {
const featureSet = new FeatureSet();
assert.isEmpty([...featureSet]);
});
it('can enable features', () => {
const featureSet = new FeatureSet();
featureSet.enable('DevToolsFreestyler');
featureSet.enable('DevToolsWellKnown');
assert.deepEqual([...featureSet], [
'--enable-features=DevToolsFreestyler,DevToolsWellKnown',
]);
});
it('can enable features with parameters', () => {
const featureSet = new FeatureSet();
featureSet.enable('DevToolsFreestyler', {patching: true});
featureSet.enable('DevToolsFreestyler', {user_tier: 'TESTERS', multimodal: true});
featureSet.enable('DevToolsAiAssistancePerformanceAgent', {insights_enabled: true});
assert.deepEqual([...featureSet], [
'--enable-features=DevToolsAiAssistancePerformanceAgent:insights_enabled/true,DevToolsFreestyler:multimodal/true/patching/true/user_tier/TESTERS',
]);
});
it('can disable features', () => {
const featureSet = new FeatureSet();
featureSet.disable('MediaRouter');
featureSet.disable('DevToolsAiGeneratedTimelineLabels');
assert.deepEqual([...featureSet], [
'--disable-features=DevToolsAiGeneratedTimelineLabels,MediaRouter',
]);
});
it('can disable and enable unrelated features', () => {
const featureSet = new FeatureSet();
featureSet.disable('MediaRouter');
featureSet.enable('DevToolsAutomaticFileSystems');
assert.deepEqual([...featureSet], [
'--disable-features=MediaRouter',
'--enable-features=DevToolsAutomaticFileSystems',
]);
});
it('can disable previously enabled features', () => {
const featureSet = new FeatureSet();
featureSet.enable('DevToolsFreestyler', {patching: true});
featureSet.enable('DevToolsWellKnown');
featureSet.disable('DevToolsFreestyler');
assert.deepEqual([...featureSet], [
'--disable-features=DevToolsFreestyler',
'--enable-features=DevToolsWellKnown',
]);
});
it('can merge feature sets', () => {
const fs1 = new FeatureSet();
fs1.enable('DevToolsFreestyler', {patching: true});
fs1.enable('DevToolsWellKnown');
fs1.disable('MediaRouter');
const fs2 = new FeatureSet();
fs2.disable('DevToolsWellKnown');
fs2.enable('DevToolsFreestyler', {multimodal: true});
fs1.merge(fs2);
assert.deepEqual([...fs1], [
'--disable-features=DevToolsWellKnown,MediaRouter',
'--enable-features=DevToolsFreestyler:multimodal/true/patching/true',
]);
assert.deepEqual([...fs2], [
'--disable-features=DevToolsWellKnown',
'--enable-features=DevToolsFreestyler:multimodal/true',
]);
});
it('can parse --enable-features/--disable-features declarations', () => {
assert.deepEqual(FeatureSet.parse('MediaRouter'), [
{feature: 'MediaRouter', parameters: {}},
]);
assert.deepEqual(FeatureSet.parse('DevToolsFreestyler:multimodal/true/patching/true'), [
{feature: 'DevToolsFreestyler', parameters: {multimodal: 'true', patching: 'true'}},
]);
assert.deepEqual(FeatureSet.parse('DevToolsFreestyler:multimodal/true,DevToolsWellKnown'), [
{feature: 'DevToolsFreestyler', parameters: {multimodal: 'true'}},
{feature: 'DevToolsWellKnown', parameters: {}},
]);
});
});