Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7176)

Unified Diff: chrome/test/data/extensions/api_test/input_method/background.js

Issue 973213003: Adds extension events for custom dictionary load/change. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@lkgr
Patch Set: Add async test. Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/common/extensions/api/input_method_private.json ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/data/extensions/api_test/input_method/background.js
diff --git a/chrome/test/data/extensions/api_test/input_method/background.js b/chrome/test/data/extensions/api_test/input_method/background.js
index 044779a5a784cb23f5f5e21b272a905d85ce334f..89eaa8a1ce840f8547e608401d999674d1536c74 100644
--- a/chrome/test/data/extensions/api_test/input_method/background.js
+++ b/chrome/test/data/extensions/api_test/input_method/background.js
@@ -8,7 +8,8 @@ var kInvalidInputMethod = 'xx::xxx';
var testParams = {
initialInputMethod: '',
- newInputMethod: ''
+ newInputMethod: '',
+ dictionaryLoaded: null,
};
// The tests needs to be executed in order.
@@ -99,36 +100,100 @@ function getListTest() {
});
}
-function initDictionaryNotLoadedTest() {
- // This test must come first because the dictionary is only lazy loaded after
- // this call is made.
- chrome.inputMethodPrivate.fetchAllDictionaryWords(function(words) {
- chrome.test.assertTrue(words === undefined);
- chrome.test.assertTrue(!!chrome.runtime.lastError);
- chrome.test.succeed();
+// Helper function
+function getFetchPromise() {
+ return new Promise(function(resolve, reject) {
+ chrome.inputMethodPrivate.fetchAllDictionaryWords(function(words) {
+ if (!!chrome.runtime.lastError) {
+ reject(Error(chrome.runtime.lastError));
+ } else {
+ resolve(words);
+ }
+ });
});
}
-function initDictionaryTests() {
- chrome.inputMethodPrivate.fetchAllDictionaryWords(function(words) {
- chrome.test.assertTrue(words !== undefined);
- chrome.test.assertTrue(words.length === 0);
- chrome.test.succeed();
+// Helper function
+function getAddPromise(word) {
+ return new Promise(function(resolve, reject) {
+ chrome.inputMethodPrivate.addWordToDictionary(word, function() {
+ if (!!chrome.runtime.lastError) {
+ reject(Error(chrome.runtime.lastError));
+ } else {
+ resolve();
+ }
+ });
});
}
-function addWordToDictionaryTest() {
- chrome.inputMethodPrivate.addWordToDictionary('helloworld', function() {
- chrome.inputMethodPrivate.fetchAllDictionaryWords(function(words) {
- chrome.test.assertTrue(words.length === 1);
- chrome.test.assertEq(words[0], 'helloworld');
- chrome.test.succeed();
- });
+function loadDictionaryAsyncTest() {
+ testParams.dictionaryLoaded = new Promise(function(resolve, reject) {
+ var message = 'before';
+ chrome.inputMethodPrivate.onDictionaryLoaded.addListener(
+ function listener() {
+ chrome.inputMethodPrivate.onDictionaryLoaded.removeListener(listener);
+ chrome.test.assertEq(message, 'after');
+ resolve();
+ });
+ message = 'after';
});
+ // We don't need to wait for the promise to resolve before continuing since
+ // promises are async wrappers.
+ chrome.test.succeed();
+}
+
+function fetchDictionaryTest() {
+ testParams.dictionaryLoaded
+ .then(function () {
+ return getFetchPromise();
+ })
+ .then(function confirmFetch(words) {
+ chrome.test.assertTrue(words !== undefined);
+ chrome.test.assertTrue(words.length === 0);
+ chrome.test.succeed();
+ });
+}
+
+function addWordToDictionaryTest() {
+ var wordToAdd = 'helloworld';
+ testParams.dictionaryLoaded
+ .then(function() {
+ return getAddPromise(wordToAdd);
+ })
+ // Adding the same word results in an error.
+ .then(function() {
+ return getAddPromise(wordToAdd);
+ })
+ .catch(function(error) {
+ chrome.test.assertTrue(!!error.message);
+ return getFetchPromise();
+ })
+ .then(function(words) {
+ chrome.test.assertTrue(words.length === 1);
+ chrome.test.assertEq(words[0], wordToAdd);
+ chrome.test.succeed();
+ });
+}
+
+function dictionaryChangedTest() {
+ var wordToAdd = 'helloworld2';
+ testParams.dictionaryLoaded
+ .then(function() {
+ chrome.inputMethodPrivate.onDictionaryChanged.addListener(
+ function(added, removed) {
+ chrome.test.assertTrue(added.length === 1);
+ chrome.test.assertTrue(removed.length === 0);
+ chrome.test.assertEq(added[0], wordToAdd);
+ chrome.test.succeed();
+ });
+ })
+ .then(function() {
+ return getAddPromise(wordToAdd);
+ });
}
chrome.test.sendMessage('ready');
chrome.test.runTests(
[initTests, setTest, getTest, observeTest, setInvalidTest, getListTest,
- initDictionaryNotLoadedTest, initDictionaryTests,
- addWordToDictionaryTest]);
+ loadDictionaryAsyncTest, fetchDictionaryTest, addWordToDictionaryTest,
+ dictionaryChangedTest]);
« no previous file with comments | « chrome/common/extensions/api/input_method_private.json ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698