/* Copyright 2026 Marimo. All rights reserved. */
import { fireEvent, render, screen } from "@testing-library/react";
import { describe, expect, it, vi } from "vitest";
import { ToolbarItem } from "../toolbar";
describe("ToolbarItem keyboard activation", () => {
it.each(["Enter", " "])(
"keeps native %s activation out of cell navigation and calls the consumer handler",
(key) => {
const onCellKeyDown = vi.fn();
const onKeyDown = vi.fn();
render(
Run
,
);
const button = screen.getByRole("button", { name: "Run" });
expect(fireEvent.keyDown(button, { key })).toBe(true);
expect(onCellKeyDown).not.toHaveBeenCalled();
expect(onKeyDown).toHaveBeenCalledOnce();
expect(onKeyDown.mock.calls[0][0].defaultPrevented).toBe(false);
},
);
it.each([
{ key: "Enter", ctrlKey: true },
{ key: "Enter", metaKey: true },
{ key: "Enter", shiftKey: true },
{ key: "Enter", altKey: true },
{ key: " ", ctrlKey: true },
{ key: "ArrowLeft" },
{ key: "ArrowRight" },
{ key: "Tab" },
{ key: "Escape" },
])("preserves propagation for %j", (event) => {
const onCellKeyDown = vi.fn();
render(
Run
,
);
expect(fireEvent.keyDown(screen.getByRole("button"), event)).toBe(true);
expect(onCellKeyDown).toHaveBeenCalledOnce();
});
it("does not submit forms and preserves disabled and mouse-focus behavior", () => {
const onClick = vi.fn();
const { rerender } = render(
Run
,
);
const button = screen.getByRole("button");
expect(button).toHaveAttribute("type", "button");
expect(fireEvent.mouseDown(button)).toBe(false);
fireEvent.click(button);
expect(onClick).toHaveBeenCalledOnce();
rerender(
Run
,
);
expect(button).toBeDisabled();
fireEvent.click(button);
expect(onClick).toHaveBeenCalledOnce();
});
});