Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
This commit is contained in:
parent
93e3a48004
commit
b38dea0597
25901 changed files with 9982925 additions and 369 deletions
225
gaia/apps/system/test/unit/ime_menu_test.js
Executable file
225
gaia/apps/system/test/unit/ime_menu_test.js
Executable file
|
|
@ -0,0 +1,225 @@
|
|||
'use strict';
|
||||
|
||||
/* global ImeMenu, MocksHelper, Event */
|
||||
|
||||
requireApp('system/js/ime_menu.js');
|
||||
require('/shared/test/unit/load_body_html_helper.js');
|
||||
require('/shared/test/unit/mocks/mock_lazy_loader.js');
|
||||
requireApp('system/shared/js/sanitizer.js');
|
||||
|
||||
var mocksForAppInstallManager = new MocksHelper([
|
||||
'LazyLoader'
|
||||
]).init();
|
||||
|
||||
suite('ImeMenu', function() {
|
||||
var imeListMockup = [
|
||||
{
|
||||
value: 0,
|
||||
name: 'Test Layout 1',
|
||||
appName: 'test app 1'
|
||||
},
|
||||
{
|
||||
value: 1,
|
||||
name: 'Test Layout 2',
|
||||
appName: 'test app 1',
|
||||
selected: true
|
||||
}
|
||||
];
|
||||
|
||||
var newImeListMockup = [
|
||||
{
|
||||
value: 0,
|
||||
name: 'New Test Layout 1',
|
||||
appName: 'test app 1'
|
||||
},
|
||||
{
|
||||
value: 1,
|
||||
name: 'New Test Layout 2',
|
||||
appName: 'test app 1'
|
||||
},
|
||||
{
|
||||
value: 2,
|
||||
name: 'New Test Layout 3',
|
||||
appName: 'test app 2',
|
||||
selected: true
|
||||
}
|
||||
];
|
||||
|
||||
var title = 'Test Layout Menu';
|
||||
var screenElement;
|
||||
|
||||
mocksForAppInstallManager.attachTestHelpers();
|
||||
|
||||
function getMenu() {
|
||||
return screenElement.querySelector('.ime-menu');
|
||||
}
|
||||
|
||||
/*
|
||||
* Check each ime item in the menu matches the data we passed.
|
||||
*/
|
||||
function checkImeItems(imeListContainer, imeList) {
|
||||
var i = 0;
|
||||
var layoutNameElement = null;
|
||||
var appNameElement = null;
|
||||
|
||||
for (i = 0; i < imeListContainer.length; i++) {
|
||||
layoutNameElement = imeListContainer[i].querySelector('.item-label');
|
||||
appNameElement = imeListContainer[i].querySelector('.item-note');
|
||||
|
||||
assert.equal(layoutNameElement.textContent,
|
||||
imeList[i].name);
|
||||
|
||||
assert.equal(appNameElement.textContent, imeList[i].appName);
|
||||
}
|
||||
}
|
||||
|
||||
suiteSetup(function() {
|
||||
loadBodyHTML('/index.html');
|
||||
screenElement = document.getElementById('screen');
|
||||
});
|
||||
|
||||
suiteTeardown(function() {
|
||||
document.body.innerHTML = '';
|
||||
});
|
||||
|
||||
suite(' > Structure & Basic methods', function() {
|
||||
test(' > start()', function() {
|
||||
// We must have *only* one action menu in system
|
||||
var menu = new ImeMenu(imeListMockup, title);
|
||||
menu.start();
|
||||
|
||||
// We should have only one 'action' menu in system
|
||||
var imeMenus = screenElement.querySelectorAll('.ime-menu');
|
||||
assert.equal(imeMenus.length, 1);
|
||||
|
||||
var imeMenu = imeMenus[0];
|
||||
|
||||
// Check header
|
||||
var sections = imeMenu.getElementsByTagName('section');
|
||||
assert.equal(sections.length, 1);
|
||||
|
||||
var headers = sections[0].getElementsByTagName('h1');
|
||||
assert.equal(headers.length, 1);
|
||||
|
||||
// Check button menu
|
||||
var menus = imeMenu.getElementsByTagName('menu');
|
||||
assert.equal(menus.length, 1);
|
||||
|
||||
menu.stop();
|
||||
});
|
||||
|
||||
test(' > check title', function() {
|
||||
var menu = new ImeMenu(imeListMockup, title);
|
||||
menu.start();
|
||||
assert.equal(
|
||||
getMenu().querySelector('section > h1').getAttribute('data-l10n-id'),
|
||||
title);
|
||||
menu.stop();
|
||||
});
|
||||
|
||||
test(' > check ime list', function() {
|
||||
var menu = new ImeMenu(imeListMockup, title);
|
||||
menu.start();
|
||||
|
||||
var imeItems = getMenu().querySelectorAll('.ime-menu-list li');
|
||||
assert.equal(imeItems.length, imeListMockup.length);
|
||||
|
||||
// Check the selected item is correct
|
||||
var selectedItem = getMenu().querySelector('li[aria-selected="true"]');
|
||||
assert.equal(selectedItem.dataset.id, '1');
|
||||
|
||||
menu.stop();
|
||||
});
|
||||
|
||||
test(' > check each item in the ime list', function() {
|
||||
var menu = new ImeMenu(imeListMockup, title);
|
||||
menu.start();
|
||||
|
||||
var imeItems = getMenu().querySelectorAll('.ime-menu-list li');
|
||||
assert.equal(imeItems.length, imeListMockup.length);
|
||||
checkImeItems(imeItems, imeListMockup);
|
||||
|
||||
menu.stop();
|
||||
});
|
||||
|
||||
test(' > renew ime list', function() {
|
||||
// Show menu 1
|
||||
var menu = new ImeMenu(imeListMockup, title);
|
||||
menu.start();
|
||||
|
||||
var imeItems = getMenu().querySelectorAll('.ime-menu-list li');
|
||||
assert.equal(imeItems.length, imeListMockup.length);
|
||||
|
||||
// Check the selected item is correct
|
||||
var selectedItem = getMenu().querySelector('li[aria-selected="true"]');
|
||||
assert.equal(selectedItem.dataset.id, '1');
|
||||
|
||||
menu.stop();
|
||||
|
||||
// Show menu 2
|
||||
var menu2 = new ImeMenu(newImeListMockup, title);
|
||||
menu2.start();
|
||||
|
||||
imeItems = getMenu().querySelectorAll('.ime-menu-list li');
|
||||
assert.equal(imeItems.length, newImeListMockup.length);
|
||||
|
||||
// Check the selected item is correct
|
||||
selectedItem = getMenu().querySelector('li[aria-selected="true"]');
|
||||
assert.equal(selectedItem.dataset.id, '2');
|
||||
|
||||
checkImeItems(imeItems, newImeListMockup);
|
||||
|
||||
menu2.stop();
|
||||
});
|
||||
|
||||
test(' > start > hide', function() {
|
||||
var menu = new ImeMenu(imeListMockup, title);
|
||||
menu.start();
|
||||
|
||||
// Hide -> stop() will be called
|
||||
var spy = this.sinon.spy(menu, 'stop');
|
||||
menu.hide();
|
||||
assert.ok(spy.calledOnce);
|
||||
});
|
||||
});
|
||||
|
||||
suite(' > handleEvent', function() {
|
||||
var menu;
|
||||
var clickEvent;
|
||||
|
||||
setup(function() {
|
||||
menu = new ImeMenu(imeListMockup, title);
|
||||
menu.start();
|
||||
this.sinon.spy(menu, 'handleEvent');
|
||||
this.sinon.spy(menu, 'hide');
|
||||
this.sinon.spy(menu, 'oncancel');
|
||||
this.sinon.spy(menu, 'launchSettings');
|
||||
clickEvent = new Event('click', {
|
||||
cancelable: true,
|
||||
bubbles: true
|
||||
});
|
||||
});
|
||||
|
||||
test(' > click > ime item', function(done) {
|
||||
this.sinon.stub(menu, 'onselected', function() {
|
||||
assert.isTrue(menu.onselected.called);
|
||||
assert.isTrue(menu.onselected.calledWith(0));
|
||||
done();
|
||||
});
|
||||
|
||||
var element = getMenu().querySelector('.ime-menu-list').firstElementChild;
|
||||
element.dispatchEvent(clickEvent);
|
||||
assert.isTrue(menu.handleEvent.called);
|
||||
assert.isTrue(menu.hide.called);
|
||||
assert.isTrue(clickEvent.defaultPrevented);
|
||||
});
|
||||
|
||||
test(' > click > cancel', function() {
|
||||
var element = getMenu().querySelector('[data-action="cancel"]');
|
||||
element.dispatchEvent(clickEvent);
|
||||
assert.isTrue(menu.handleEvent.called);
|
||||
assert.isTrue(menu.hide.called);
|
||||
assert.isTrue(menu.oncancel.called);
|
||||
});
|
||||
});
|
||||
});
|
||||
Loading…
Reference in a new issue