Replace 20% of all done() usages in frontend tests. Replaces all usages in elements/shared/... showcasing that there is no instance where the usage of done() is justified. Change-Id: I24b5644cd96c68097429583c44ae58301df374d6
137 lines
4.5 KiB
JavaScript
137 lines
4.5 KiB
JavaScript
/**
|
|
* @license
|
|
* Copyright (C) 2017 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
import '../../../test/common-test-setup-karma.js';
|
|
import './gr-autocomplete-dropdown.js';
|
|
|
|
const basicFixture = fixtureFromElement('gr-autocomplete-dropdown');
|
|
|
|
suite('gr-autocomplete-dropdown', () => {
|
|
let element;
|
|
|
|
setup(() => {
|
|
element = basicFixture.instantiate();
|
|
element.open();
|
|
element.suggestions = [
|
|
{dataValue: 'test value 1', name: 'test name 1', text: 1, label: 'hi'},
|
|
{dataValue: 'test value 2', name: 'test name 2', text: 2}];
|
|
flush();
|
|
});
|
|
|
|
teardown(() => {
|
|
if (element.isOpen) element.close();
|
|
});
|
|
|
|
test('shows labels', () => {
|
|
const els = element.$.suggestions.querySelectorAll('li');
|
|
assert.equal(els[0].innerText.trim(), '1\nhi');
|
|
assert.equal(els[1].innerText.trim(), '2');
|
|
});
|
|
|
|
test('escape key', () => {
|
|
const closeSpy = sinon.spy(element, 'close');
|
|
MockInteractions.pressAndReleaseKeyOn(element, 27);
|
|
flush();
|
|
assert.isTrue(closeSpy.called);
|
|
});
|
|
|
|
test('tab key', () => {
|
|
const handleTabSpy = sinon.spy(element, '_handleTab');
|
|
const itemSelectedStub = sinon.stub();
|
|
element.addEventListener('item-selected', itemSelectedStub);
|
|
MockInteractions.pressAndReleaseKeyOn(element, 9);
|
|
assert.isTrue(handleTabSpy.called);
|
|
assert.equal(element.$.cursor.index, 0);
|
|
assert.isTrue(itemSelectedStub.called);
|
|
assert.deepEqual(itemSelectedStub.lastCall.args[0].detail, {
|
|
trigger: 'tab',
|
|
selected: element.getCursorTarget(),
|
|
});
|
|
});
|
|
|
|
test('enter key', () => {
|
|
const handleEnterSpy = sinon.spy(element, '_handleEnter');
|
|
const itemSelectedStub = sinon.stub();
|
|
element.addEventListener('item-selected', itemSelectedStub);
|
|
MockInteractions.pressAndReleaseKeyOn(element, 13);
|
|
assert.isTrue(handleEnterSpy.called);
|
|
assert.equal(element.$.cursor.index, 0);
|
|
assert.deepEqual(itemSelectedStub.lastCall.args[0].detail, {
|
|
trigger: 'enter',
|
|
selected: element.getCursorTarget(),
|
|
});
|
|
});
|
|
|
|
test('down key', () => {
|
|
element.isHidden = true;
|
|
const nextSpy = sinon.spy(element.$.cursor, 'next');
|
|
MockInteractions.pressAndReleaseKeyOn(element, 40);
|
|
assert.isFalse(nextSpy.called);
|
|
assert.equal(element.$.cursor.index, 0);
|
|
element.isHidden = false;
|
|
MockInteractions.pressAndReleaseKeyOn(element, 40);
|
|
assert.isTrue(nextSpy.called);
|
|
assert.equal(element.$.cursor.index, 1);
|
|
});
|
|
|
|
test('up key', () => {
|
|
element.isHidden = true;
|
|
const prevSpy = sinon.spy(element.$.cursor, 'previous');
|
|
MockInteractions.pressAndReleaseKeyOn(element, 38);
|
|
assert.isFalse(prevSpy.called);
|
|
assert.equal(element.$.cursor.index, 0);
|
|
element.isHidden = false;
|
|
element.$.cursor.setCursorAtIndex(1);
|
|
assert.equal(element.$.cursor.index, 1);
|
|
MockInteractions.pressAndReleaseKeyOn(element, 38);
|
|
assert.isTrue(prevSpy.called);
|
|
assert.equal(element.$.cursor.index, 0);
|
|
});
|
|
|
|
test('tapping selects item', () => {
|
|
const itemSelectedStub = sinon.stub();
|
|
element.addEventListener('item-selected', itemSelectedStub);
|
|
|
|
MockInteractions.tap(element.$.suggestions.querySelectorAll('li')[1]);
|
|
flush();
|
|
assert.deepEqual(itemSelectedStub.lastCall.args[0].detail, {
|
|
trigger: 'click',
|
|
selected: element.$.suggestions.querySelectorAll('li')[1],
|
|
});
|
|
});
|
|
|
|
test('tapping child still selects item', () => {
|
|
const itemSelectedStub = sinon.stub();
|
|
element.addEventListener('item-selected', itemSelectedStub);
|
|
|
|
MockInteractions.tap(element.$.suggestions.querySelectorAll('li')[0]
|
|
.lastElementChild);
|
|
flush();
|
|
assert.deepEqual(itemSelectedStub.lastCall.args[0].detail, {
|
|
trigger: 'click',
|
|
selected: element.$.suggestions.querySelectorAll('li')[0],
|
|
});
|
|
});
|
|
|
|
test('updated suggestions resets cursor stops', () => {
|
|
const resetStopsSpy = sinon.spy(element, '_resetCursorStops');
|
|
element.suggestions = [];
|
|
assert.isTrue(resetStopsSpy.called);
|
|
});
|
|
});
|
|
|