| // Copyright 2021 The Chromium Authors |
| // 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 { |
| deinitializeGlobalVars, |
| initializeGlobalVars, |
| } from '../../testing/EnvironmentHelpers.js'; |
| |
| import * as LegacyUI from './legacy.js'; |
| |
| async function registerDockingSettings(currentValue: string) { |
| Common.Settings.registerSettingsForTest([{ |
| category: Common.Settings.SettingCategory.GLOBAL, |
| settingName: 'currentDockState', |
| settingType: Common.Settings.SettingType.ENUM, |
| defaultValue: currentValue, |
| options: [ |
| { |
| value: 'right', |
| text: () => 'right' as Platform.UIString.LocalizedString, |
| title: () => 'Dock to right' as Platform.UIString.LocalizedString, |
| raw: false, |
| }, |
| { |
| value: 'bottom', |
| text: () => 'bottom' as Platform.UIString.LocalizedString, |
| title: () => 'Dock to bottom' as Platform.UIString.LocalizedString, |
| raw: false, |
| }, |
| { |
| value: 'left', |
| text: () => 'left' as Platform.UIString.LocalizedString, |
| title: () => 'Dock to left' as Platform.UIString.LocalizedString, |
| raw: false, |
| }, |
| { |
| value: 'undocked', |
| text: () => 'undocked' as Platform.UIString.LocalizedString, |
| title: () => 'Undock' as Platform.UIString.LocalizedString, |
| raw: false, |
| }, |
| ], |
| }]); |
| Root.Runtime.experiments.clearForTest(); |
| await initializeGlobalVars({reset: false}); |
| } |
| |
| describe('DockController', () => { |
| after(async () => { |
| await deinitializeGlobalVars(); |
| }); |
| it('defaults the dockside to undefined when first created', async () => { |
| /* Note: this seems like weird behaviour, but updating DockController to |
| * explicitly set DockSide by default seems to cause issues in Chrome web |
| * tests, so adding this test here to ensure we don't cause any problems. |
| */ |
| await registerDockingSettings('left'); |
| const dockController = LegacyUI.DockController.DockController.instance({forceNew: true, canDock: true}); |
| assert.isUndefined(dockController.dockSide()); |
| }); |
| |
| it('falls back to undefined if the setting value is unexpected', async () => { |
| await registerDockingSettings('woah-not-a-real-setting-value'); |
| const dockController = LegacyUI.DockController.DockController.instance({forceNew: true, canDock: true}); |
| assert.isUndefined(dockController.dockSide()); |
| }); |
| |
| it('sets the dockSide to undocked if the dock cannot be docked', async () => { |
| await registerDockingSettings('left'); |
| const dockController = LegacyUI.DockController.DockController.instance({forceNew: true, canDock: false}); |
| assert.strictEqual(dockController.dockSide(), LegacyUI.DockController.DockState.UNDOCKED); |
| }); |
| |
| it('can toggle the dock between two settings', async () => { |
| await registerDockingSettings('left'); |
| const dockController = LegacyUI.DockController.DockController.instance({forceNew: true, canDock: true}); |
| dockController.toggleDockSide(); |
| assert.strictEqual(dockController.dockSide(), LegacyUI.DockController.DockState.BOTTOM); |
| dockController.toggleDockSide(); |
| assert.strictEqual(dockController.dockSide(), LegacyUI.DockController.DockState.LEFT); |
| dockController.toggleDockSide(); |
| assert.strictEqual(dockController.dockSide(), LegacyUI.DockController.DockState.BOTTOM); |
| }); |
| }); |