Commit 9b3ab4ba authored by dpapad's avatar dpapad Committed by Commit Bot

WebUI: Add JS type checking for more cr_elements/ tests, part 2.

Specifically:
 - cr_drawer_tests.js
 - cr_expand_button_focus_tests.js
 - cr_expand_button_tests.js

Bug: 1000989
Change-Id: I5b7bb247e645d795dd45387d4b9d80a2e02e6c12
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2215459
Commit-Queue: dpapad <dpapad@chromium.org>
Commit-Queue: John Lee <johntlee@chromium.org>
Auto-Submit: dpapad <dpapad@chromium.org>
Reviewed-by: default avatarJohn Lee <johntlee@chromium.org>
Cr-Commit-Position: refs/heads/master@{#772302}
parent 7b39bed1
...@@ -57,10 +57,10 @@ js_type_check("closure_compile") { ...@@ -57,10 +57,10 @@ js_type_check("closure_compile") {
":cr_checkbox_test.m", ":cr_checkbox_test.m",
":cr_container_shadow_behavior_test.m", ":cr_container_shadow_behavior_test.m",
":cr_dialog_test.m", ":cr_dialog_test.m",
":cr_drawer_tests.m",
":cr_expand_button_focus_tests.m",
":cr_expand_button_tests.m",
#":cr_drawer_tests",
#":cr_expand_button_focus_tests",
#":cr_expand_button_tests",
#":cr_fingerprint_progress_arc_tests", #":cr_fingerprint_progress_arc_tests",
#":cr_icon_button_focus_tests", #":cr_icon_button_focus_tests",
#":cr_icon_button_tests", #":cr_icon_button_tests",
...@@ -168,3 +168,42 @@ js_library("cr_dialog_test.m") { ...@@ -168,3 +168,42 @@ js_library("cr_dialog_test.m") {
externs_list = [ "$externs_path/mocha-2.5.js" ] externs_list = [ "$externs_path/mocha-2.5.js" ]
extra_deps = [ ":modulize" ] extra_deps = [ ":modulize" ]
} }
js_library("cr_drawer_tests.m") {
sources = [
"$root_gen_dir/chrome/test/data/webui/cr_elements/cr_drawer_tests.m.js",
]
deps = [
"..:chai_assert",
"..:test_util.m",
"//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
"//ui/webui/resources/cr_elements/cr_drawer:cr_drawer.m",
]
externs_list = [ "$externs_path/mocha-2.5.js" ]
extra_deps = [ ":modulize" ]
}
js_library("cr_expand_button_focus_tests.m") {
sources = [ "$root_gen_dir/chrome/test/data/webui/cr_elements/cr_expand_button_focus_tests.m.js" ]
deps = [
"..:chai_assert",
"..:test_util.m",
"//third_party/polymer/v3_0/components-chromium/iron-test-helpers:mock-interactions",
"//ui/webui/resources/cr_elements/cr_expand_button:cr_expand_button.m",
"//ui/webui/resources/cr_elements/cr_icon_button:cr_icon_button.m",
"//ui/webui/resources/js:util.m",
]
externs_list = [ "$externs_path/mocha-2.5.js" ]
extra_deps = [ ":modulize" ]
}
js_library("cr_expand_button_tests.m") {
sources = [ "$root_gen_dir/chrome/test/data/webui/cr_elements/cr_expand_button_tests.m.js" ]
deps = [
"..:chai_assert",
"//ui/webui/resources/cr_elements/cr_expand_button:cr_expand_button.m",
"//ui/webui/resources/cr_elements/cr_icon_button:cr_icon_button.m",
]
externs_list = [ "$externs_path/mocha-2.5.js" ]
extra_deps = [ ":modulize" ]
}
...@@ -7,13 +7,18 @@ ...@@ -7,13 +7,18 @@
// //
// #import {eventToPromise} from '../test_util.m.js'; // #import {eventToPromise} from '../test_util.m.js';
// #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; // #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
// #import {assertEquals, assertFalse, assertNotEquals, assertTrue, assertThrows} from '../chai_assert.js';
// clang-format on // clang-format on
suite('cr-drawer', function() { suite('cr-drawer', function() {
setup(function() { setup(function() {
PolymerTest.clearBody(); document.body.innerHTML = '';
}); });
/**
* @param {string} align
* @return {!CrDrawerElement}
*/
function createDrawer(align) { function createDrawer(align) {
document.body.innerHTML = ` document.body.innerHTML = `
<cr-drawer id="drawer" align="${align}"> <cr-drawer id="drawer" align="${align}">
...@@ -22,7 +27,7 @@ suite('cr-drawer', function() { ...@@ -22,7 +27,7 @@ suite('cr-drawer', function() {
</cr-drawer> </cr-drawer>
`; `;
Polymer.dom.flush(); Polymer.dom.flush();
return document.getElementById('drawer'); return /** @type {!CrDrawerElement} */ (document.getElementById('drawer'));
} }
test('open and close', function() { test('open and close', function() {
...@@ -39,7 +44,7 @@ suite('cr-drawer', function() { ...@@ -39,7 +44,7 @@ suite('cr-drawer', function() {
document.querySelector('.drawer-content').click(); document.querySelector('.drawer-content').click();
const whenClosed = test_util.eventToPromise('close', drawer); const whenClosed = test_util.eventToPromise('close', drawer);
drawer.$.dialog.dispatchEvent(new MouseEvent('click', { drawer.$$('#dialog').dispatchEvent(new MouseEvent('click', {
bubbles: true, bubbles: true,
cancelable: true, cancelable: true,
clientX: 300, // Must be larger than the drawer width (256px). clientX: 300, // Must be larger than the drawer width (256px).
...@@ -71,7 +76,7 @@ suite('cr-drawer', function() { ...@@ -71,7 +76,7 @@ suite('cr-drawer', function() {
await test_util.eventToPromise('cr-drawer-opened', drawer); await test_util.eventToPromise('cr-drawer-opened', drawer);
// Clicking the icon closes the drawer. // Clicking the icon closes the drawer.
drawer.$.iconButton.click(); drawer.$$('#iconButton').click();
await test_util.eventToPromise('close', drawer); await test_util.eventToPromise('close', drawer);
assertFalse(drawer.open); assertFalse(drawer.open);
assertTrue(drawer.wasCanceled()); assertTrue(drawer.wasCanceled());
...@@ -81,7 +86,7 @@ suite('cr-drawer', function() { ...@@ -81,7 +86,7 @@ suite('cr-drawer', function() {
const drawer = createDrawer('ltr'); const drawer = createDrawer('ltr');
drawer.openDrawer(); drawer.openDrawer();
return test_util.eventToPromise('cr-drawer-opened', drawer).then(() => { return test_util.eventToPromise('cr-drawer-opened', drawer).then(() => {
const rect = drawer.$.dialog.getBoundingClientRect(); const rect = drawer.$$('#dialog').getBoundingClientRect();
assertEquals(0, rect.left); assertEquals(0, rect.left);
assertNotEquals(0, rect.right); assertNotEquals(0, rect.right);
}); });
...@@ -91,14 +96,14 @@ suite('cr-drawer', function() { ...@@ -91,14 +96,14 @@ suite('cr-drawer', function() {
const drawer = createDrawer('rtl'); const drawer = createDrawer('rtl');
drawer.openDrawer(); drawer.openDrawer();
return test_util.eventToPromise('cr-drawer-opened', drawer).then(() => { return test_util.eventToPromise('cr-drawer-opened', drawer).then(() => {
const rect = drawer.$.dialog.getBoundingClientRect(); const rect = drawer.$$('#dialog').getBoundingClientRect();
assertNotEquals(0, rect.left); assertNotEquals(0, rect.left);
assertEquals(window.innerWidth, rect.right); assertEquals(window.innerWidth, rect.right);
}); });
}); });
test('close and cancel', () => { test('close and cancel', () => {
const drawer = createDrawer(); const drawer = createDrawer('ltr');
drawer.openDrawer(); drawer.openDrawer();
return test_util.eventToPromise('cr-drawer-opened', drawer) return test_util.eventToPromise('cr-drawer-opened', drawer)
.then(() => { .then(() => {
...@@ -125,7 +130,7 @@ suite('cr-drawer', function() { ...@@ -125,7 +130,7 @@ suite('cr-drawer', function() {
}); });
test('openDrawer/close/toggle can be called multiple times in a row', () => { test('openDrawer/close/toggle can be called multiple times in a row', () => {
const drawer = createDrawer(); const drawer = createDrawer('ltr');
drawer.openDrawer(); drawer.openDrawer();
drawer.close(); drawer.close();
drawer.close(); drawer.close();
...@@ -138,7 +143,7 @@ suite('cr-drawer', function() { ...@@ -138,7 +143,7 @@ suite('cr-drawer', function() {
}); });
test('cannot set open', () => { test('cannot set open', () => {
const drawer = createDrawer(); const drawer = createDrawer('ltr');
assertThrows(() => { assertThrows(() => {
drawer.open = true; drawer.open = true;
}); });
......
...@@ -8,15 +8,20 @@ ...@@ -8,15 +8,20 @@
// #import {eventToPromise} from '../test_util.m.js'; // #import {eventToPromise} from '../test_util.m.js';
// #import {getDeepActiveElement} from 'chrome://resources/js/util.m.js'; // #import {getDeepActiveElement} from 'chrome://resources/js/util.m.js';
// #import {pressAndReleaseKeyOn} from 'chrome://resources/polymer/v3_0/iron-test-helpers/mock-interactions.js'; // #import {pressAndReleaseKeyOn} from 'chrome://resources/polymer/v3_0/iron-test-helpers/mock-interactions.js';
// #import {assertEquals, assertFalse, assertNotEquals, assertTrue} from '../chai_assert.js';
// clang-format on // clang-format on
suite('cr-expand-button-focus-tests', () => { suite('cr-expand-button-focus-tests', () => {
/** @type {!CrExpandButtonElement} */
let button; let button;
/** @param {boolean} */ /** @type {!CrIconButtonElement} */
let icon;
/** @param {boolean} rippleShown */
function assertRippleState(rippleShown) { function assertRippleState(rippleShown) {
assertEquals(button.$.icon, getDeepActiveElement()); assertEquals(icon, getDeepActiveElement());
assertEquals(rippleShown, button.$.icon.getRipple().holdDown); assertEquals(rippleShown, icon.getRipple().holdDown);
} }
function assertRipple() { function assertRipple() {
...@@ -27,41 +32,50 @@ suite('cr-expand-button-focus-tests', () => { ...@@ -27,41 +32,50 @@ suite('cr-expand-button-focus-tests', () => {
assertRippleState(false); assertRippleState(false);
} }
/** @param {!Function} toggler */ /**
async function waitForExpansion(toggler) { * @param {!Function} toggler
* @return {!Promise<void>}
*/
function waitForExpansion(toggler) {
const wait = test_util.eventToPromise('expanded-changed', button); const wait = test_util.eventToPromise('expanded-changed', button);
toggler(); toggler();
await wait; return wait;
} }
async function click() { /** @return {!Promise<void>} */
await waitForExpansion(() => { function click() {
return waitForExpansion(() => {
// This is used in cr.ui.focusWithoutInk to change mode into ink hidden // This is used in cr.ui.focusWithoutInk to change mode into ink hidden
// when focused. // when focused.
button.dispatchEvent(new PointerEvent('pointerdown')); button.dispatchEvent(new PointerEvent('pointerdown'));
// Used to simulate releasing the mouse button. // Used to simulate releasing the mouse button.
button.$.icon.fire('up'); icon.fire('up');
// When the mouse is pressed and released, it will also emit a 'click' // When the mouse is pressed and released, it will also emit a 'click'
// event which is used in cr-expand-button to toggle expansion. // event which is used in cr-expand-button to toggle expansion.
button.fire('click'); button.fire('click');
}); });
} }
async function enter() { /** @return {!Promise<void>} */
await waitForExpansion(() => { function enter() {
MockInteractions.pressAndReleaseKeyOn(button.$.icon, '', '', 'Enter'); return waitForExpansion(() => {
MockInteractions.pressAndReleaseKeyOn(icon, 0, '', 'Enter');
}); });
} }
async function space() { /** @return {!Promise<void>} */
await waitForExpansion(() => { function space() {
MockInteractions.pressAndReleaseKeyOn(button.$.icon, '', '', ' '); return waitForExpansion(() => {
MockInteractions.pressAndReleaseKeyOn(icon, 0, '', ' ');
}); });
} }
setup(() => { setup(() => {
document.body.innerHTML = '<cr-expand-button></cr-expand-button>'; document.body.innerHTML = '';
button = document.body.querySelector('cr-expand-button'); button = /** @type {!CrExpandButtonElement} */ (
document.createElement('cr-expand-button'));
document.body.appendChild(button);
icon = /** @type {!CrIconButtonElement} */ (button.$$('#icon'));
}); });
test('focus, ripple', () => { test('focus, ripple', () => {
......
...@@ -4,45 +4,49 @@ ...@@ -4,45 +4,49 @@
// clang-format off // clang-format off
// #import 'chrome://resources/cr_elements/cr_expand_button/cr_expand_button.m.js'; // #import 'chrome://resources/cr_elements/cr_expand_button/cr_expand_button.m.js';
// #import {assertEquals, assertFalse, assertTrue} from '../chai_assert.js';
// clang-format on // clang-format on
suite('cr-expand-button', function() { suite('cr-expand-button', function() {
/** @type {!CrExpandButtonElement} */
let button; let button;
/** @type {!CrIconButtonElement} */
let icon;
setup(() => { setup(() => {
PolymerTest.clearBody(); document.body.innerHTML = '';
document.body.innerHTML = '<cr-expand-button></cr-expand-button>'; button = /** @type {!CrExpandButtonElement} */ (
button = document.body.querySelector('cr-expand-button'); document.createElement('cr-expand-button'));
document.body.appendChild(button);
icon = /** @type {!CrIconButtonElement} */ (button.$$('#icon'));
}); });
test('setting |alt| label', () => { test('setting |alt| label', () => {
const iconButton = button.$.icon;
assertFalse(!!button.alt); assertFalse(!!button.alt);
assertEquals('label', iconButton.getAttribute('aria-labelledby')); assertEquals('label', icon.getAttribute('aria-labelledby'));
assertEquals(null, iconButton.getAttribute('aria-label')); assertEquals(null, icon.getAttribute('aria-label'));
const altLabel = 'alt label'; const altLabel = 'alt label';
button.alt = altLabel; button.alt = altLabel;
assertEquals(null, iconButton.getAttribute('aria-labelledby')); assertEquals(null, icon.getAttribute('aria-labelledby'));
assertEquals('alt label', iconButton.getAttribute('aria-label')); assertEquals('alt label', icon.getAttribute('aria-label'));
}); });
test('changing |expanded|', () => { test('changing |expanded|', () => {
const iconButton = button.$.icon;
assertFalse(button.expanded); assertFalse(button.expanded);
assertEquals('false', iconButton.getAttribute('aria-expanded')); assertEquals('false', icon.getAttribute('aria-expanded'));
assertEquals('cr:expand-more', iconButton.ironIcon); assertEquals('cr:expand-more', icon.ironIcon);
button.expanded = true; button.expanded = true;
assertEquals('true', iconButton.getAttribute('aria-expanded')); assertEquals('true', icon.getAttribute('aria-expanded'));
assertEquals('cr:expand-less', iconButton.ironIcon); assertEquals('cr:expand-less', icon.ironIcon);
}); });
test('changing |disabled|', () => { test('changing |disabled|', () => {
const iconButton = button.$.icon;
assertFalse(button.disabled); assertFalse(button.disabled);
assertEquals('false', iconButton.getAttribute('aria-expanded')); assertEquals('false', icon.getAttribute('aria-expanded'));
assertFalse(iconButton.disabled); assertFalse(icon.disabled);
button.disabled = true; button.disabled = true;
assertFalse(iconButton.hasAttribute('aria-expanded')); assertFalse(icon.hasAttribute('aria-expanded'));
assertTrue(iconButton.disabled); assertTrue(icon.disabled);
}); });
}); });
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment