Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nasa/openmct.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/api/menu/MenuAPISpec.js')
-rw-r--r--src/api/menu/MenuAPISpec.js180
1 files changed, 99 insertions, 81 deletions
diff --git a/src/api/menu/MenuAPISpec.js b/src/api/menu/MenuAPISpec.js
index 354254b8b..00a55f873 100644
--- a/src/api/menu/MenuAPISpec.js
+++ b/src/api/menu/MenuAPISpec.js
@@ -1,5 +1,5 @@
/*****************************************************************************
- * Open MCT, Copyright (c) 2014-2021, United States Government
+ * Open MCT, Copyright (c) 2014-2022, United States Government
* as represented by the Administrator of the National Aeronautics and Space
* Administration. All rights reserved.
*
@@ -26,29 +26,31 @@ import { createOpenMct, createMouseEvent, resetApplicationState } from '../../ut
describe ('The Menu API', () => {
let openmct;
- let element;
+ let appHolder;
let menuAPI;
let actionsArray;
- let x;
- let y;
let result;
- let onDestroy;
+ let menuElement;
+
+ const x = 8;
+ const y = 16;
+
+ const menuOptions = {
+ onDestroy: () => {
+ console.log('default onDestroy');
+ }
+ };
beforeEach((done) => {
- const appHolder = document.createElement('div');
+ appHolder = document.createElement('div');
appHolder.style.display = 'block';
appHolder.style.width = '1920px';
appHolder.style.height = '1080px';
openmct = createOpenMct();
- element = document.createElement('div');
- element.style.display = 'block';
- element.style.width = '1920px';
- element.style.height = '1080px';
-
openmct.on('start', done);
- openmct.startHeadless(appHolder);
+ openmct.startHeadless();
menuAPI = new MenuAPI(openmct);
actionsArray = [
@@ -56,7 +58,7 @@ describe ('The Menu API', () => {
key: 'test-css-class-1',
name: 'Test Action 1',
cssClass: 'icon-clock',
- description: 'This is a test action',
+ description: 'This is a test action 1',
onItemClicked: () => {
result = 'Test Action 1 Invoked';
}
@@ -65,149 +67,165 @@ describe ('The Menu API', () => {
key: 'test-css-class-2',
name: 'Test Action 2',
cssClass: 'icon-clock',
- description: 'This is a test action',
+ description: 'This is a test action 2',
onItemClicked: () => {
result = 'Test Action 2 Invoked';
}
}
];
- x = 8;
- y = 16;
});
afterEach(() => {
return resetApplicationState(openmct);
});
- describe("showMenu method", () => {
- it("creates an instance of Menu when invoked", () => {
- menuAPI.showMenu(x, y, actionsArray);
-
- expect(menuAPI.menuComponent).toBeInstanceOf(Menu);
+ describe('showMenu method', () => {
+ beforeAll(() => {
+ spyOn(menuOptions, 'onDestroy').and.callThrough();
});
- describe("creates a menu component", () => {
- let menuComponent;
- let vueComponent;
+ it('creates an instance of Menu when invoked', (done) => {
+ menuOptions.onDestroy = done;
- beforeEach(() => {
- onDestroy = jasmine.createSpy('onDestroy');
+ menuAPI.showMenu(x, y, actionsArray, menuOptions);
- const menuOptions = {
- onDestroy
- };
+ expect(menuAPI.menuComponent).toBeInstanceOf(Menu);
+ document.body.click();
+ });
- menuAPI.showMenu(x, y, actionsArray, menuOptions);
- vueComponent = menuAPI.menuComponent.component;
- menuComponent = document.querySelector(".c-menu");
+ describe('creates a menu component', () => {
+ it('with all the actions passed in', (done) => {
+ menuOptions.onDestroy = done;
- spyOn(vueComponent, '$destroy');
- });
+ menuAPI.showMenu(x, y, actionsArray, menuOptions);
+ menuElement = document.querySelector('.c-menu');
+ expect(menuElement).toBeDefined();
- it("renders a menu component in the expected x and y coordinates", () => {
- let boundingClientRect = menuComponent.getBoundingClientRect();
- let left = boundingClientRect.left;
- let top = boundingClientRect.top;
+ const listItems = menuElement.children[0].children;
- expect(left).toEqual(x);
- expect(top).toEqual(y);
+ expect(listItems.length).toEqual(actionsArray.length);
+ document.body.click();
});
- it("with all the actions passed in", () => {
- expect(menuComponent).toBeDefined();
+ it('with click-able menu items, that will invoke the correct callBack', (done) => {
+ menuOptions.onDestroy = done;
- let listItems = menuComponent.children[0].children;
-
- expect(listItems.length).toEqual(actionsArray.length);
- });
+ menuAPI.showMenu(x, y, actionsArray, menuOptions);
- it("with click-able menu items, that will invoke the correct callBacks", () => {
- let listItem1 = menuComponent.children[0].children[0];
+ menuElement = document.querySelector('.c-menu');
+ const listItem1 = menuElement.children[0].children[0];
listItem1.click();
- expect(result).toEqual("Test Action 1 Invoked");
+ expect(result).toEqual('Test Action 1 Invoked');
});
- it("dismisses the menu when action is clicked on", () => {
- let listItem1 = menuComponent.children[0].children[0];
+ it('dismisses the menu when action is clicked on', (done) => {
+ menuOptions.onDestroy = done;
+ menuAPI.showMenu(x, y, actionsArray, menuOptions);
+
+ menuElement = document.querySelector('.c-menu');
+ const listItem1 = menuElement.children[0].children[0];
listItem1.click();
- let menu = document.querySelector('.c-menu');
+ menuElement = document.querySelector('.c-menu');
- expect(menu).toBeNull();
+ expect(menuElement).toBeNull();
});
- it("invokes the destroy method when menu is dismissed", () => {
+ it('invokes the destroy method when menu is dismissed', (done) => {
+ menuOptions.onDestroy = done;
+
+ menuAPI.showMenu(x, y, actionsArray, menuOptions);
+
+ const vueComponent = menuAPI.menuComponent.component;
+ spyOn(vueComponent, '$destroy');
+
document.body.click();
expect(vueComponent.$destroy).toHaveBeenCalled();
});
- it("invokes the onDestroy callback if passed in", () => {
- document.body.click();
+ it('invokes the onDestroy callback if passed in', (done) => {
+ let count = 0;
+ menuOptions.onDestroy = () => {
+ count++;
+ expect(count).toEqual(1);
+ done();
+ };
- expect(onDestroy).toHaveBeenCalled();
+ menuAPI.showMenu(x, y, actionsArray, menuOptions);
+
+ document.body.click();
});
});
});
- describe("superMenu method", () => {
- it("creates a superMenu", () => {
- menuAPI.showSuperMenu(x, y, actionsArray);
+ describe('superMenu method', () => {
+ it('creates a superMenu', (done) => {
+ menuOptions.onDestroy = done;
- const superMenu = document.querySelector('.c-super-menu__menu');
+ menuAPI.showSuperMenu(x, y, actionsArray, menuOptions);
+ menuElement = document.querySelector('.c-super-menu__menu');
- expect(superMenu).not.toBeNull();
+ expect(menuElement).not.toBeNull();
+ document.body.click();
});
- it("Mouse over a superMenu shows correct description", (done) => {
- menuAPI.showSuperMenu(x, y, actionsArray);
+ it('Mouse over a superMenu shows correct description', (done) => {
+ menuOptions.onDestroy = done;
+
+ menuAPI.showSuperMenu(x, y, actionsArray, menuOptions);
+ menuElement = document.querySelector('.c-super-menu__menu');
- const superMenu = document.querySelector('.c-super-menu__menu');
- const superMenuItem = superMenu.querySelector('li');
+ const superMenuItem = menuElement.querySelector('li');
const mouseOverEvent = createMouseEvent('mouseover');
superMenuItem.dispatchEvent(mouseOverEvent);
const itemDescription = document.querySelector('.l-item-description__description');
- setTimeout(() => {
+ menuAPI.menuComponent.component.$nextTick(() => {
+ expect(menuElement).not.toBeNull();
expect(itemDescription.innerText).toEqual(actionsArray[0].description);
- expect(superMenu).not.toBeNull();
- done();
- }, 300);
+
+ document.body.click();
+ });
});
});
- describe("Menu Placements", () => {
- it("default menu position BOTTOM_RIGHT", () => {
- menuAPI.showMenu(x, y, actionsArray);
+ describe('Menu Placements', () => {
+ it('default menu position BOTTOM_RIGHT', (done) => {
+ menuOptions.onDestroy = done;
- const menu = document.querySelector('.c-menu');
+ menuAPI.showMenu(x, y, actionsArray, menuOptions);
+ menuElement = document.querySelector('.c-menu');
- const boundingClientRect = menu.getBoundingClientRect();
+ const boundingClientRect = menuElement.getBoundingClientRect();
const left = boundingClientRect.left;
const top = boundingClientRect.top;
expect(left).toEqual(x);
expect(top).toEqual(y);
+
+ document.body.click();
});
- it("menu position BOTTOM_RIGHT", () => {
- const menuOptions = {
- placement: openmct.menus.menuPlacement.BOTTOM_RIGHT
- };
+ it('menu position BOTTOM_RIGHT', (done) => {
+ menuOptions.onDestroy = done;
+ menuOptions.placement = openmct.menus.menuPlacement.BOTTOM_RIGHT;
menuAPI.showMenu(x, y, actionsArray, menuOptions);
+ menuElement = document.querySelector('.c-menu');
- const menu = document.querySelector('.c-menu');
- const boundingClientRect = menu.getBoundingClientRect();
+ const boundingClientRect = menuElement.getBoundingClientRect();
const left = boundingClientRect.left;
const top = boundingClientRect.top;
expect(left).toEqual(x);
expect(top).toEqual(y);
+
+ document.body.click();
});
});
});