| // 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: {}}, |
| ]); |
| }); |
| }); |