| Index: chrome/test/data/webui/cr_elements/cr_action_menu_test.js
|
| diff --git a/chrome/test/data/webui/cr_elements/cr_action_menu_test.js b/chrome/test/data/webui/cr_elements/cr_action_menu_test.js
|
| index b1987c9b6add0d329c5875fd4ff3fa78529c60cc..62e51011ed259d10ee569e8da711fe095a892fe4 100644
|
| --- a/chrome/test/data/webui/cr_elements/cr_action_menu_test.js
|
| +++ b/chrome/test/data/webui/cr_elements/cr_action_menu_test.js
|
| @@ -12,9 +12,6 @@
|
|
|
| /** @type {?NodeList<HTMLElement>} */
|
| var items = null;
|
| -
|
| - /** @type {HTMLElement} */
|
| - var dots = null;
|
|
|
| setup(function() {
|
| PolymerTest.clearBody();
|
| @@ -31,13 +28,10 @@
|
|
|
| menu = document.querySelector('dialog[is=cr-action-menu]');
|
| items = menu.querySelectorAll('.dropdown-item');
|
| - dots = document.querySelector('#dots');
|
| assertEquals(3, items.length);
|
| });
|
|
|
| teardown(function() {
|
| - document.body.style.direction = 'ltr';
|
| -
|
| if (menu.open)
|
| menu.close();
|
| });
|
| @@ -51,25 +45,25 @@
|
| }
|
|
|
| test('hidden or disabled items', function() {
|
| - menu.showAt(dots);
|
| + menu.showAt(document.querySelector('#dots'));
|
| down();
|
| assertEquals(menu.root.activeElement, items[0]);
|
|
|
| menu.close();
|
| items[0].hidden = true;
|
| - menu.showAt(dots);
|
| + menu.showAt(document.querySelector('#dots'));
|
| down();
|
| assertEquals(menu.root.activeElement, items[1]);
|
|
|
| menu.close();
|
| items[1].disabled = true;
|
| - menu.showAt(dots);
|
| + menu.showAt(document.querySelector('#dots'));
|
| down();
|
| assertEquals(menu.root.activeElement, items[2]);
|
| });
|
|
|
| test('focus after down/up arrow', function() {
|
| - menu.showAt(dots);
|
| + menu.showAt(document.querySelector('#dots'));
|
|
|
| // The menu should be focused when shown, but not on any of the items.
|
| assertEquals(menu, document.activeElement);
|
| @@ -99,8 +93,8 @@
|
| assertEquals(items[0], menu.root.activeElement);
|
| });
|
|
|
| - test('pressing up arrow when no focus will focus last item', function() {
|
| - menu.showAt(dots);
|
| + test('pressing up arrow when no focus will focus last item', function(){
|
| + menu.showAt(document.querySelector('#dots'));
|
| assertEquals(menu, document.activeElement);
|
|
|
| up();
|
| @@ -112,7 +106,7 @@
|
| var item = document.createElement('button');
|
| item.classList.add('dropdown-item');
|
| menu.insertBefore(item, items[0]);
|
| - menu.showAt(dots);
|
| + menu.showAt(document.querySelector('#dots'));
|
|
|
| down();
|
| assertEquals(item, menu.root.activeElement);
|
| @@ -128,7 +122,7 @@
|
| });
|
|
|
| test('close on resize', function() {
|
| - menu.showAt(dots);
|
| + menu.showAt(document.querySelector('#dots'));
|
| assertTrue(menu.open);
|
|
|
| window.dispatchEvent(new CustomEvent('resize'));
|
| @@ -136,7 +130,7 @@
|
| });
|
|
|
| test('close on popstate', function() {
|
| - menu.showAt(dots);
|
| + menu.showAt(document.querySelector('#dots'));
|
| assertTrue(menu.open);
|
|
|
| window.dispatchEvent(new CustomEvent('popstate'));
|
| @@ -146,6 +140,7 @@
|
| /** @param {string} key The key to use for closing. */
|
| function testFocusAfterClosing(key) {
|
| return new Promise(function(resolve) {
|
| + var dots = document.querySelector('#dots');
|
| menu.showAt(dots);
|
| assertTrue(menu.open);
|
|
|
| @@ -156,9 +151,7 @@
|
| });
|
| }
|
|
|
| - test('close on Tab', function() {
|
| - return testFocusAfterClosing('Tab');
|
| - });
|
| + test('close on Tab', function() { return testFocusAfterClosing('Tab'); });
|
| test('close on Escape', function() {
|
| return testFocusAfterClosing('Escape');
|
| });
|
| @@ -169,7 +162,7 @@
|
| node.dispatchEvent(e);
|
| }
|
|
|
| - menu.showAt(dots);
|
| + menu.showAt(document.querySelector('#dots'));
|
|
|
| // Moving mouse on option 1 should focus it.
|
| assertNotEquals(items[0], menu.root.activeElement);
|
| @@ -266,7 +259,7 @@
|
| height: 0,
|
| maxX: menuWidth * 2 - 10,
|
| });
|
| - assertEquals(`${menuWidth - 10}px`, menu.style.left);
|
| + assertEquals(`${menuWidth - 10}px`, menu.style.left);
|
| assertEquals(`0px`, menu.style.top);
|
| menu.close();
|
|
|
| @@ -277,116 +270,88 @@
|
| assertEquals(140 - menuWidth, menu.offsetLeft);
|
| assertEquals('250px', menu.style.top);
|
| menu.close();
|
| - });
|
| -
|
| - suite('offscreen scroll positioning', function() {
|
| + document.body.style.direction = 'ltr';
|
| + });
|
| +
|
| + test('offscreen scroll positioning', function() {
|
| var bodyHeight = 10000;
|
| var bodyWidth = 20000;
|
| var containerLeft = 5000;
|
| var containerTop = 10000;
|
| var containerWidth = 500;
|
| var containerHeight = 500;
|
| -
|
| - setup(function() {
|
| - document.body.scrollTop = 0;
|
| - document.body.scrollLeft = 0;
|
| - document.body.innerHTML = `
|
| - <style>
|
| - body {
|
| - height: ${bodyHeight}px;
|
| - width: ${bodyWidth}px;
|
| - }
|
| -
|
| - #container {
|
| - overflow: auto;
|
| - position: absolute;
|
| - top: ${containerTop}px;
|
| - left: ${containerLeft}px;
|
| - right: ${containerLeft}px;
|
| - height: ${containerHeight}px;
|
| - width: ${containerWidth}px;
|
| - }
|
| -
|
| - #inner-container {
|
| - height: 1000px;
|
| - width: 1000px;
|
| - }
|
| - </style>
|
| - <div id="container">
|
| - <div id="inner-container">
|
| - <button id="dots">...</button>
|
| - <dialog is="cr-action-menu">
|
| - <button class="dropdown-item">Un</button>
|
| - <hr>
|
| - <button class="dropdown-item">Dos</button>
|
| - <button class="dropdown-item">Tres</button>
|
| - </dialog>
|
| - </div>
|
| + document.body.innerHTML = `
|
| + <style>
|
| + body {
|
| + height: ${bodyHeight}px;
|
| + width: ${bodyWidth}px;
|
| + }
|
| +
|
| + #container {
|
| + overflow: auto;
|
| + position: absolute;
|
| + top: ${containerTop}px;
|
| + left: ${containerLeft}px;
|
| + height: ${containerHeight}px;
|
| + width: ${containerWidth}px;
|
| + }
|
| +
|
| + #inner-container {
|
| + height: 1000px;
|
| + width: 1000px;
|
| + }
|
| + </style>
|
| + <div id="container">
|
| + <div id="inner-container">
|
| + <button id="dots">...</button>
|
| + <dialog is="cr-action-menu">
|
| + <button class="dropdown-item">Un</button>
|
| + <hr>
|
| + <button class="dropdown-item">Dos</button>
|
| + <button class="dropdown-item">Tres</button>
|
| + </dialog>
|
| </div>
|
| - `;
|
| - menu = document.querySelector('dialog[is=cr-action-menu]');
|
| - dots = document.querySelector('#dots');
|
| - })
|
| + </div>
|
| + `;
|
| + menu = document.querySelector('dialog[is=cr-action-menu]');
|
| + var dots = document.querySelector('#dots');
|
|
|
| // Show the menu, scrolling the body to the button.
|
| - test('simple offscreen', function() {
|
| - menu.showAt(dots, {anchorAlignmentX: AnchorAlignment.AFTER_START});
|
| - assertEquals(`${containerLeft}px`, menu.style.left);
|
| - assertEquals(`${containerTop}px`, menu.style.top);
|
| - menu.close();
|
| - });
|
| + menu.showAt(
|
| + dots,
|
| + {anchorAlignmentX: AnchorAlignment.AFTER_START});
|
| + assertEquals(`${containerLeft}px`, menu.style.left);
|
| + assertEquals(`${containerTop}px`, menu.style.top);
|
| + menu.close();
|
|
|
| // Show the menu, scrolling the container to the button, and the body to the
|
| // button.
|
| - test('offscreen and out of scroll container viewport', function() {
|
| - document.body.scrollLeft = bodyWidth;
|
| - document.body.scrollTop = bodyHeight;
|
| - var container = document.querySelector('#container');
|
| -
|
| - container.scrollLeft = containerLeft;
|
| - container.scrollTop = containerTop;
|
| -
|
| - menu.showAt(dots, {anchorAlignmentX: AnchorAlignment.AFTER_START});
|
| - assertEquals(`${containerLeft}px`, menu.style.left);
|
| - assertEquals(`${containerTop}px`, menu.style.top);
|
| - menu.close();
|
| - });
|
| + document.body.scrollLeft = bodyWidth;
|
| + document.body.scrollTop = bodyHeight;
|
| +
|
| + document.querySelector('#container').scrollLeft = containerLeft;
|
| + document.querySelector('#container').scrollTop = containerTop;
|
| +
|
| + menu.showAt(dots, {anchorAlignmentX: AnchorAlignment.AFTER_START});
|
| + assertEquals(`${containerLeft}px`, menu.style.left);
|
| + assertEquals(`${containerTop}px`, menu.style.top);
|
| + menu.close();
|
|
|
| // Show the menu for an already onscreen button. The anchor should be
|
| // overridden so that no scrolling happens.
|
| - test('onscreen forces anchor change', function() {
|
| - var rect = dots.getBoundingClientRect();
|
| - document.body.scrollLeft = rect.right - document.body.clientWidth;
|
| - document.body.scrollTop = rect.bottom - document.body.clientHeight;
|
| -
|
| - menu.showAt(dots, {anchorAlignmentX: AnchorAlignment.AFTER_START});
|
| - var menuWidth = menu.offsetWidth;
|
| - var menuHeight = menu.offsetHeight;
|
| - var buttonWidth = dots.offsetWidth;
|
| - var buttonHeight = dots.offsetHeight;
|
| - assertEquals(containerLeft - menuWidth + buttonWidth, menu.offsetLeft);
|
| - assertEquals(containerTop - menuHeight + buttonHeight, menu.offsetTop);
|
| - menu.close();
|
| - });
|
| -
|
| - test('scroll position maintained for showAtPosition', function() {
|
| - document.body.scrollLeft = 500;
|
| - document.body.scrollTop = 1000;
|
| - menu.showAtPosition({top: 50, left: 50});
|
| - assertEquals(550, menu.offsetLeft);
|
| - assertEquals(1050, menu.offsetTop);
|
| - menu.close();
|
| - });
|
| -
|
| - test('rtl', function() {
|
| - // Anchor to an item in RTL.
|
| - document.body.style.direction = 'rtl';
|
| - menu.showAt(dots, {anchorAlignmentX: AnchorAlignment.AFTER_START});
|
| - assertEquals(
|
| - container.offsetLeft + containerWidth - menu.offsetWidth,
|
| - menu.offsetLeft);
|
| - assertEquals(containerTop, menu.offsetTop);
|
| - menu.close();
|
| - });
|
| + document.body.scrollLeft = 0;
|
| + document.body.scrollTop = 0;
|
| +
|
| + var rect = dots.getBoundingClientRect();
|
| + document.body.scrollLeft = rect.right - document.body.clientWidth;
|
| + document.body.scrollTop = rect.bottom - document.body.clientHeight;
|
| +
|
| + menu.showAt(dots, {anchorAlignmentX: AnchorAlignment.AFTER_START});
|
| + var menuWidth = menu.offsetWidth;
|
| + var menuHeight = menu.offsetHeight;
|
| + var buttonWidth = dots.offsetWidth;
|
| + var buttonHeight = dots.offsetHeight;
|
| + assertEquals(containerLeft - menuWidth + buttonWidth, menu.offsetLeft);
|
| + assertEquals(containerTop - menuHeight + buttonHeight, menu.offsetTop);
|
| });
|
| });
|
|
|