import { describe, it } from '@ephox/bedrock-client';
import { assert } from 'chai';
import { Menu } from 'tinymce/core/api/ui/Ui';
import * as MenuConversion from 'tinymce/themes/silver/ui/menus/menu/MenuConversion';
describe('atomic.tinymce.themes.silver.menus.MenuConversionTest', () => {
const buildMenuItem = (name: string): Menu.MenuItemSpec => ({
type: 'menuitem',
text: name,
value: `${name}-value`
});
const buildNestedMenuItem = (name: string, submenus: string | Array
): Menu.NestedMenuItemSpec => ({
type: 'nestedmenuitem',
text: name,
value: `${name}-value`,
getSubmenuItems: () => submenus
});
const separator: Menu.SeparatorMenuItemSpec = {
type: 'separator'
};
const menu1 = buildMenuItem('menu-1');
const menu2 = buildMenuItem('menu-2');
const submenu1 = buildMenuItem('submenu-1');
const submenu2a = buildMenuItem('submenu-2a');
const submenu2 = buildNestedMenuItem('submenu-2', [ submenu2a ]);
const nestedMenu = buildNestedMenuItem('nested-menu-1', [ submenu1, separator, submenu2 ]);
const nestedMenuWithReferences = buildNestedMenuItem('nested-menu-2', 'submenu-1 | submenu-2');
const menuItems = {
'menu-1': menu1,
'menu-2': menu2,
'submenu-1': submenu1,
'submenu-2': submenu2
};
const expandAndAssertEq = (items: string | Array, expected: MenuConversion.ExpandedMenus) => {
assert.deepEqual(MenuConversion.expand(items, menuItems), expected);
};
// Menu reference
it('can expand string menu references', () => {
expandAndAssertEq('menu-1 | menu-2', {
items: [ menu1, separator, menu2 ],
menus: {},
expansions: {}
});
});
// Menu reference array
it('can expand an array of menu references', () => {
expandAndAssertEq([ 'menu-1', '|', 'menu-2' ], {
items: [ menu1, separator, menu2 ],
menus: {},
expansions: {}
});
});
// Menu with submenus
it('can expand nested menus', () => {
expandAndAssertEq([ nestedMenu ], {
items: [ nestedMenu ],
menus: {
'nested-menu-1-value': [ submenu1, separator, submenu2 ],
'submenu-2-value': [ submenu2a ]
},
expansions: {
'nested-menu-1-value': 'nested-menu-1-value',
'submenu-2-value': 'submenu-2-value'
}
});
});
// Menu with submenu references
it('can expand nested menus with references', () => {
expandAndAssertEq([ nestedMenuWithReferences ], {
items: [ nestedMenuWithReferences ],
menus: {
'nested-menu-2-value': [ submenu1, separator, submenu2 ],
'submenu-2-value': [ submenu2a ]
},
expansions: {
'nested-menu-2-value': 'nested-menu-2-value',
'submenu-2-value': 'submenu-2-value'
}
});
});
});