// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import { assert } from 'chai';
import { describeWithEnvironment } from '../../testing/EnvironmentHelpers.js';
import * as UI from './legacy.js';
describeWithEnvironment('Dialog', () => {
    describe('Dialog stacking', () => {
        it('should hide an existing dialog when a new one is shown without stacking', () => {
            const dialog1 = new UI.Dialog.Dialog();
            dialog1.show();
            assert.isTrue(dialog1.isShowing(), 'dialog1 should be showing');
            const dialog2 = new UI.Dialog.Dialog();
            dialog2.show();
            assert.isTrue(dialog2.isShowing(), 'dialog2 should be showing');
            assert.isFalse(dialog1.isShowing(), 'dialog1 should be hidden');
            assert.strictEqual(UI.Dialog.Dialog.getInstance(), dialog2, 'dialog2 should be the current instance');
        });
        it('should keep the first dialog visible when a second one is stacked on top', () => {
            const dialog1 = new UI.Dialog.Dialog();
            dialog1.show();
            assert.isTrue(dialog1.isShowing(), 'dialog1 should be showing');
            const dialog2 = new UI.Dialog.Dialog();
            // Show the second dialog stacked on top of the first one.
            dialog2.show(undefined, /* stack */ true);
            assert.isTrue(dialog1.isShowing(), 'dialog1 should still be showing');
            assert.isTrue(dialog2.isShowing(), 'dialog2 should be showing');
            assert.strictEqual(UI.Dialog.Dialog.getInstance(), dialog2, 'dialog2 should be the current instance');
        });
        it('should only hide the top-most dialog on an outside click when stacked', () => {
            const dialog1 = new UI.Dialog.Dialog();
            dialog1.show();
            const dialog2 = new UI.Dialog.Dialog();
            dialog2.show(undefined, /* stack */ true);
            // We are clicking on the document body, which should be considered
            // an outside click for the top-most dialog.
            dialog2.element.ownerDocument.body.dispatchEvent(new MouseEvent('mousedown', { bubbles: true, cancelable: true }));
            assert.isFalse(dialog2.isShowing(), 'dialog2 should be hidden after outside click');
            assert.isTrue(dialog1.isShowing(), 'dialog1 should still be showing');
            assert.strictEqual(UI.Dialog.Dialog.getInstance(), dialog1, 'dialog1 should now be the current instance');
        });
        it('should only hide the top-most dialog on Escape key press when stacked', () => {
            const dialog1 = new UI.Dialog.Dialog();
            dialog1.show();
            const dialog2 = new UI.Dialog.Dialog();
            dialog2.show(undefined, /* stack */ true);
            // The keydown handler is on the document.
            dialog2.contentElement.ownerDocument.dispatchEvent(new KeyboardEvent('keydown', { keyCode: UI.KeyboardShortcut.Keys.Esc.code }));
            assert.isFalse(dialog2.isShowing(), 'dialog2 should be hidden after Escape key');
            assert.isTrue(dialog1.isShowing(), 'dialog1 should still be showing');
            assert.strictEqual(UI.Dialog.Dialog.getInstance(), dialog1, 'dialog1 should now be the current instance');
        });
    });
});
//# sourceMappingURL=Dialog.test.js.map