blob: cfe628d2c9a3b4591e35ab64c418b23e2cfe3aca [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
suite('cr-drawer', function() {
setup(function() {
PolymerTest.clearBody();
});
function createDrawer(align) {
document.body.innerHTML = `
<cr-drawer id="drawer" align="${align}">
<div class="drawer-header">Test</div>
<div class="drawer-content">Test content</div>
</cr-drawer>
`;
Polymer.dom.flush();
return document.getElementById('drawer');
}
test('open and close', function() {
const drawer = createDrawer('ltr');
const waits = Promise.all(['cr-drawer-opening', 'cr-drawer-opened'].map(
eventName => test_util.eventToPromise(eventName, drawer)));
drawer.openDrawer();
return waits
.then(() => {
assertTrue(drawer.open);
// Clicking the content does not close the drawer.
MockInteractions.tap(document.querySelector('.drawer-content'));
const whenClosed = test_util.eventToPromise('close', drawer);
drawer.$.dialog.dispatchEvent(new MouseEvent('click', {
bubbles: true,
cancelable: true,
clientX: 300, // Must be larger than the drawer width (256px).
clientY: 300,
}));
return whenClosed;
})
.then(() => {
assertFalse(drawer.open);
drawer.openDrawer();
return test_util.eventToPromise('cr-drawer-opened', drawer);
})
.then(() => {
drawer.close();
return test_util.eventToPromise('close', drawer);
});
});
test('align=ltr', function() {
const drawer = createDrawer('ltr');
drawer.openDrawer();
return test_util.eventToPromise('cr-drawer-opened', drawer).then(() => {
const rect = drawer.$.dialog.getBoundingClientRect();
assertEquals(0, rect.left);
assertNotEquals(0, rect.right);
});
});
test('align=rtl', function() {
const drawer = createDrawer('rtl');
drawer.openDrawer();
return test_util.eventToPromise('cr-drawer-opened', drawer).then(() => {
const rect = drawer.$.dialog.getBoundingClientRect();
assertNotEquals(0, rect.left);
assertEquals(window.innerWidth, rect.right);
});
});
test('close and cancel', () => {
const drawer = createDrawer();
drawer.openDrawer();
return test_util.eventToPromise('cr-drawer-opened', drawer)
.then(() => {
assertFalse(drawer.wasCanceled());
drawer.cancel();
return test_util.eventToPromise('close', drawer);
})
.then(() => {
assertTrue(drawer.wasCanceled());
drawer.openDrawer();
assertFalse(drawer.wasCanceled());
return test_util.eventToPromise('cr-drawer-opened', drawer);
})
.then(() => {
drawer.close();
return test_util.eventToPromise('close', drawer);
})
.then(() => {
assertFalse(drawer.wasCanceled());
drawer.toggle();
assertFalse(drawer.wasCanceled());
return test_util.eventToPromise('cr-drawer-opened', drawer);
});
});
test('openDrawer/close/toggle can be called multiple times in a row', () => {
const drawer = createDrawer();
drawer.openDrawer();
drawer.close();
drawer.close();
drawer.openDrawer();
drawer.openDrawer();
drawer.toggle();
drawer.toggle();
drawer.toggle();
drawer.toggle();
});
test('cannot set open', () => {
const drawer = createDrawer();
assertThrows(() => {
drawer.open = true;
});
});
});