blob: 603bd5a1fe06185091ce155bf71b5a0f86acdc40 [file] [log] [blame]
// Copyright (c) 2012 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.
/**
* TestFixture for EditDictionaryOverlay WebUI testing.
* @extends {testing.Test}
* @constructor
**/
function EditDictionaryWebUITest() {}
EditDictionaryWebUITest.prototype = {
__proto__: testing.Test.prototype,
/**
* Browse to the edit dictionary page & call our preLoad().
*/
browsePreload: 'chrome://settings-frame/editDictionary',
/**
* Register a mock dictionary handler.
*/
preLoad: function() {
this.makeAndRegisterMockHandler(
['refreshDictionaryWords',
'addDictionaryWord',
'removeDictionaryWord',
]);
this.mockHandler.stubs().refreshDictionaryWords().
will(callFunction(function() {
EditDictionaryOverlay.setWordList([]);
}));
this.mockHandler.stubs().addDictionaryWord(ANYTHING);
this.mockHandler.stubs().removeDictionaryWord(ANYTHING);
},
};
// Verify that users can add and remove words in the dictionary.
TEST_F('EditDictionaryWebUITest', 'testAddRemoveWords', function() {
var testWord = 'foo';
$('language-dictionary-overlay-word-list').querySelector('input').value =
testWord;
this.mockHandler.expects(once()).addDictionaryWord([testWord]).
will(callFunction(function() {
EditDictionaryOverlay.setWordList([testWord]);
}));
var addWordItem = EditDictionaryOverlay.getWordListForTesting().items[0];
addWordItem.onEditCommitted_({currentTarget: addWordItem});
this.mockHandler.expects(once()).removeDictionaryWord([testWord]).
will(callFunction(function() {
EditDictionaryOverlay.setWordList([]);
}));
EditDictionaryOverlay.getWordListForTesting().deleteItemAtIndex(0);
});
// Verify that users can search words in the dictionary.
TEST_F('EditDictionaryWebUITest', 'testSearch', function() {
EditDictionaryOverlay.setWordList(['foo', 'bar']);
expectEquals(3, EditDictionaryOverlay.getWordListForTesting().items.length);
/**
* @param {Element} el The element to dispatch an event on.
* @param {string} value The text of the search event.
*/
var fakeSearchEvent = function(el, value) {
el.value = value;
cr.dispatchSimpleEvent(el, 'search');
};
var searchField = $('language-dictionary-overlay-search-field');
fakeSearchEvent(searchField, 'foo');
expectEquals(2, EditDictionaryOverlay.getWordListForTesting().items.length);
fakeSearchEvent(searchField, '');
expectEquals(3, EditDictionaryOverlay.getWordListForTesting().items.length);
});
TEST_F('EditDictionaryWebUITest', 'testNoCloseOnSearchEnter', function() {
var editDictionaryPage = EditDictionaryOverlay.getInstance();
assertTrue(editDictionaryPage.visible);
var searchField = $('language-dictionary-overlay-search-field');
searchField.dispatchEvent(new KeyboardEvent('keydown', {
'bubbles': true,
'cancelable': true,
'keyIdentifier': 'Enter'
}));
assertTrue(editDictionaryPage.visible);
});
// Verify that dictionary shows newly added words that arrived in a
// notification, but ignores duplicate add notifications.
TEST_F('EditDictionaryWebUITest', 'testAddNotification', function() {
// Begin with an empty dictionary.
EditDictionaryOverlay.setWordList([]);
expectEquals(1, EditDictionaryOverlay.getWordListForTesting().items.length);
// User adds word 'foo'.
EditDictionaryOverlay.getWordListForTesting().addDictionaryWord_('foo');
expectEquals(2, EditDictionaryOverlay.getWordListForTesting().items.length);
// Backend notifies UI that the word 'foo' has been added. UI ignores this
// notification, because the word is displayed immediately after user added
// it.
EditDictionaryOverlay.updateWords(['foo'], []);
expectEquals(2, EditDictionaryOverlay.getWordListForTesting().items.length);
// Backend notifies UI that the words 'bar' and 'baz' were added. UI shows
// these new words.
EditDictionaryOverlay.updateWords(['bar', 'baz'], []);
expectEquals(4, EditDictionaryOverlay.getWordListForTesting().items.length);
});
// Verify that dictionary hides newly removed words that arrived in a
// notification, but ignores duplicate remove notifications.
TEST_F('EditDictionaryWebUITest', 'testRemoveNotification', function() {
// Begin with a dictionary with words 'foo', 'bar', 'baz', and 'baz'. The
// second instance of 'baz' appears because the user added the word twice.
// The backend keeps only one copy of the word.
EditDictionaryOverlay.setWordList(['foo', 'bar', 'baz', 'baz']);
expectEquals(5, EditDictionaryOverlay.getWordListForTesting().items.length);
// User deletes the second instance of 'baz'.
EditDictionaryOverlay.getWordListForTesting().deleteItemAtIndex(3);
expectEquals(4, EditDictionaryOverlay.getWordListForTesting().items.length);
// Backend notifies UI that the word 'baz' has been removed. UI ignores this
// notification.
EditDictionaryOverlay.updateWords([], ['baz']);
expectEquals(4, EditDictionaryOverlay.getWordListForTesting().items.length);
// Backend notifies UI that words 'foo' and 'bar' have been removed. UI
// removes these words.
EditDictionaryOverlay.updateWords([], ['foo', 'bar']);
expectEquals(2, EditDictionaryOverlay.getWordListForTesting().items.length);
});