Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"changes": [
{
"packageName": "office-ui-fabric-react",
"comment": "Add ContextualMenuItem functions to open and close menus",
"type": "minor"
}
],
"packageName": "office-ui-fabric-react",
"email": "[email protected]"
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@ import * as React from 'react';
import { Promise } from 'es6-promise';
import * as ReactTestUtils from 'react-dom/test-utils';
import {
KeyCodes
KeyCodes,
createRef
} from '../../Utilities';
import { FocusZoneDirection } from '../../FocusZone';

import { ContextualMenu, canAnyMenuItemsCheck } from './ContextualMenu';
import { IContextualMenuItem, ContextualMenuItemType } from './ContextualMenu.types';
import { IContextualMenuRenderItem } from './ContextualMenuItem.types';
import { LayerBase as Layer } from '../Layer/Layer.base';

describe('ContextualMenu', () => {
Expand Down Expand Up @@ -859,4 +861,162 @@ describe('ContextualMenu', () => {
expect(canAnyMenuItemsCheck(items)).toEqual(true);
});
});

describe('IContextualMenuRenderItem function tests', () => {
const contextualItem = createRef<IContextualMenuRenderItem>();
let menuDismissed: boolean;
const onDismiss = (ev?: any, dismissAll?: boolean) => { menuDismissed = true; };

describe('for a button element', () => {
beforeEach(() => {
menuDismissed = false;
const menu: IContextualMenuItem[] = [
{
name: 'Test1',
key: 'Test1',
componentRef: contextualItem,
subMenuProps: {
items: [
{
name: 'Test2',
key: 'Test2',
className: 'SubMenuClass'
},
{
name: 'Test3',
key: 'Test3',
className: 'SubMenuClass'
}
],
}
}
];
ReactTestUtils.renderIntoDocument<ContextualMenu>(
<ContextualMenu
onDismiss={ onDismiss }
items={ menu }
/>
);
});

it('openSubMenu will open the item`s submenu if present', () => {
contextualItem.value!.openSubMenu();
expect(document.querySelector('.SubMenuClass')).not.toEqual(null);
});

it('dismissSubMenu will close the item`s submenu if present', () => {
contextualItem.value!.openSubMenu();
expect(document.querySelector('.SubMenuClass')).not.toEqual(null);
contextualItem.value!.dismissSubMenu();
expect(document.querySelector('.SubMenuClass')).toEqual(null);
});

it('dismissMenu will close the item`s menu', () => {
contextualItem.value!.dismissMenu();
expect(menuDismissed).toEqual(true);
});
});

describe('for a split button element', () => {
beforeEach(() => {
menuDismissed = false;
const menu: IContextualMenuItem[] = [
{
name: 'Test1',
key: 'Test1',
componentRef: contextualItem,
split: true,
subMenuProps: {
items: [
{
name: 'Test2',
key: 'Test2',
className: 'SubMenuClass'
},
{
name: 'Test3',
key: 'Test3',
className: 'SubMenuClass'
}
],
}
}
];
ReactTestUtils.renderIntoDocument<ContextualMenu>(
<ContextualMenu
onDismiss={ onDismiss }
items={ menu }
/>
);
});

it('openSubMenu will open the item`s submenu if present', () => {
contextualItem.value!.openSubMenu();
expect(document.querySelector('.SubMenuClass')).not.toEqual(null);
});

it('dismissSubMenu will close the item`s submenu if present', () => {
contextualItem.value!.openSubMenu();
expect(document.querySelector('.SubMenuClass')).not.toEqual(null);
contextualItem.value!.dismissSubMenu();
expect(document.querySelector('.SubMenuClass')).toEqual(null);
});

it('dismissMenu will close the item`s menu', () => {
contextualItem.value!.dismissMenu();
expect(menuDismissed).toEqual(true);
});
});

describe('for an anchor element', () => {
beforeEach(() => {
menuDismissed = false;
const menu: IContextualMenuItem[] = [
{
name: 'Test1',
key: 'Test1',
componentRef: contextualItem,
href: '#test',
subMenuProps: {
items: [
{
name: 'Test2',
key: 'Test2',
className: 'SubMenuClass'
},
{
name: 'Test3',
key: 'Test3',
className: 'SubMenuClass'
}
],
}
}
];
ReactTestUtils.renderIntoDocument<ContextualMenu>(
<ContextualMenu
onDismiss={ onDismiss }
items={ menu }
/>
);
});

it('openSubMenu will open the item`s submenu if present', () => {
contextualItem.value!.openSubMenu();
expect(document.querySelector('.SubMenuClass')).not.toEqual(null);
});

it('dismissSubMenu will close the item`s submenu if present', () => {
contextualItem.value!.openSubMenu();
expect(document.querySelector('.SubMenuClass')).not.toEqual(null);
contextualItem.value!.dismissSubMenu();
expect(document.querySelector('.SubMenuClass')).toEqual(null);
});

it('dismissMenu will close the item`s menu', () => {
contextualItem.value!.dismissMenu();
expect(menuDismissed).toEqual(true);
});
});
});
});
Loading