// Copyright 2026 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 sinon from 'sinon';
import * as Host from '../../../core/host/host.js';
import { describeWithEnvironment } from '../../../testing/EnvironmentHelpers.js';
import { createViewFunctionStub } from '../../../testing/ViewFunctionHelpers.js';
import * as UI from '../../../ui/legacy/legacy.js';
import * as ApplicationComponents from './components.js';
describeWithEnvironment('CrashReportContextGrid', () => {
    let viewFunction;
    let component;
    beforeEach(() => {
        viewFunction = createViewFunctionStub(ApplicationComponents.CrashReportContextGrid.CrashReportContextGrid);
        component = new ApplicationComponents.CrashReportContextGrid.CrashReportContextGrid(undefined, viewFunction);
    });
    it('renders entries in the grid', async () => {
        const inputPromise = viewFunction.nextInput;
        component.data = {
            entries: [
                { key: 'key1', value: 'value1' },
                { key: 'key2', value: 'value2' },
            ]
        };
        const input = await inputPromise;
        assert.lengthOf(input.entries, 2);
        assert.strictEqual(input.entries[0].key, 'key1');
        assert.strictEqual(input.entries[0].value, 'value1');
        assert.strictEqual(input.entries[1].key, 'key2');
        assert.strictEqual(input.entries[1].value, 'value2');
    });
    it('filters entries when a filter is applied', async () => {
        const inputPromise = viewFunction.nextInput;
        component.data = {
            entries: [
                { key: 'apple', value: 'red' },
                { key: 'banana', value: 'yellow' },
            ],
            filters: [{ key: 'key,value', regex: /apple/i, negative: false }],
        };
        const input = await inputPromise;
        assert.lengthOf(input.entries, 1);
        assert.strictEqual(input.entries[0].key, 'apple');
    });
    it('fires select event when a row is selected', async () => {
        const inputPromise = viewFunction.nextInput;
        component.data = {
            entries: [
                { key: 'apple', value: 'red' },
            ],
        };
        const input = await inputPromise;
        let selectedKey = '';
        component.element.addEventListener('select', (e) => {
            selectedKey = e.detail;
        });
        // Simulate selecting
        input.onSelect('apple');
        assert.strictEqual(selectedKey, 'apple');
    });
    it('copies key and value correctly from context menu', async () => {
        const inputPromise = viewFunction.nextInput;
        component.data = {
            entries: [
                { key: 'apple', value: 'red' },
            ],
        };
        const input = await inputPromise;
        const copyTextStub = sinon.stub(Host.InspectorFrontendHost.InspectorFrontendHostInstance, 'copyText');
        const contextMenu = new UI.ContextMenu.ContextMenu(new MouseEvent('contextmenu'));
        input.onContextMenu(new CustomEvent('contextmenu', { detail: contextMenu }), 'apple', 'red');
        const copyKeyItem = contextMenu.defaultSection().items.find(item => item.buildDescriptor().label === 'Copy key');
        assert.exists(copyKeyItem);
        const copyValueItem = contextMenu.defaultSection().items.find(item => item.buildDescriptor().label === 'Copy value');
        assert.exists(copyValueItem);
        // Trigger copy key
        contextMenu.invokeHandler(copyKeyItem.id());
        sinon.assert.calledWith(copyTextStub, 'apple');
        // Trigger copy value
        contextMenu.invokeHandler(copyValueItem.id());
        sinon.assert.calledWith(copyTextStub, 'red');
    });
});
//# sourceMappingURL=CrashReportContextGrid.test.js.map