test(editor): ensure both toolbars have same items

This commit is contained in:
Elian Doran 2025-03-15 01:57:53 +02:00
parent fd029ac451
commit 598413b56d
No known key found for this signature in database
2 changed files with 33 additions and 2 deletions

View File

@ -0,0 +1,31 @@
import { describe, expect, it } from "vitest";
import { buildClassicToolbar, buildFloatingToolbar } from "./config.js";
type ToolbarConfig = string | "|" | { items: ToolbarConfig[] };
describe("CKEditor config", () => {
it("has same toolbar items for fixed and floating", () => {
function traverseItems(config: ToolbarConfig): string[] {
const result = [];
if (typeof config === "object") {
for (const item of config.items) {
result.push(traverseItems(item));
}
} else if (config !== "|") {
result.push(config);
}
return result.flat();
}
const classicToolbarConfig = buildClassicToolbar(false);
const classicToolbarItems = new Set(traverseItems(classicToolbarConfig.toolbar));
const floatingToolbarConfig = buildFloatingToolbar();
const floatingToolbarItems = traverseItems(floatingToolbarConfig.toolbar);
const floatingBlockToolbarItems = traverseItems({ items: floatingToolbarConfig.blockToolbar });
const floatingToolbarAllItems = new Set([ ...floatingToolbarItems, ...floatingBlockToolbarItems ]);
expect([ ...classicToolbarItems ].toSorted())
.toStrictEqual([...floatingToolbarAllItems ].toSorted());
});
});

View File

@ -110,7 +110,7 @@ export function buildToolbarConfig(isClassicToolbar: boolean) {
}
}
function buildClassicToolbar(multilineToolbar: boolean) {
export function buildClassicToolbar(multilineToolbar: boolean) {
// For nested toolbars, refer to https://ckeditor.com/docs/ckeditor5/latest/getting-started/setup/toolbar.html#grouping-toolbar-items-in-dropdowns-nested-toolbars.
return {
toolbar: {
@ -156,7 +156,7 @@ function buildClassicToolbar(multilineToolbar: boolean) {
};
}
function buildFloatingToolbar() {
export function buildFloatingToolbar() {
return {
toolbar: {
items: [