Index: trunk/src/chrome/test/data/extensions/api_test/notifications/api/basic_usage/background.js |
=================================================================== |
--- trunk/src/chrome/test/data/extensions/api_test/notifications/api/basic_usage/background.js (revision 272269) |
+++ trunk/src/chrome/test/data/extensions/api_test/notifications/api/basic_usage/background.js (working copy) |
@@ -1,305 +0,0 @@ |
-// Copyright 2014 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. |
- |
-const notifications = chrome.notifications; |
- |
-const red_dot = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA" + |
- "AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO" + |
- "9TXL0Y4OHwAAAABJRU5ErkJggg=="; |
- |
-var basicNotificationOptions = { |
- type: "basic", |
- title: "Basic title", |
- message: "Basic message", |
- iconUrl: red_dot |
-}; |
- |
-function create(id, options) { |
- return new Promise(function (resolve, reject) { |
- notifications.create(id, options, function (id) { |
- if (chrome.runtime.lastError) { |
- reject(new Error("Unable to create notification")); |
- return; |
- } |
- resolve(id); |
- return; |
- }); |
- }); |
-}; |
- |
-function update(id, options) { |
- return new Promise(function (resolve, reject) { |
- notifications.update(id, options, function (ok) { |
- if (chrome.runtime.lastError || !ok) { |
- reject(new Error("Unable to update notification")); |
- return; |
- } |
- resolve(ok); |
- return; |
- }); |
- }); |
-} |
- |
-function clear(id) { |
- return new Promise(function (resolve, reject) { |
- notifications.clear(id, function (ok) { |
- if (chrome.runtime.lastError || !ok) { |
- reject(new Error("Unable to clear notification")); |
- return; |
- } |
- resolve(ok); |
- return; |
- }); |
- }); |
-} |
- |
-function getAll() { |
- return new Promise(function (resolve, reject) { |
- notifications.getAll(function (ids) { |
- if (chrome.runtime.lastError) { |
- reject(new Error(chrome.runtime.lastError.message)); |
- return; |
- } |
- |
- if (ids === undefined) { |
- resolve([]); |
- return |
- } |
- |
- var id_list = Object.keys(ids); |
- resolve(id_list); |
- }); |
- }); |
-} |
- |
-function clearAll() { |
- return getAll().then(function (ids) { |
- var idPromises = ids.map(function (id) { return clear(id); }); |
- return Promise.all(idPromises); |
- }); |
-} |
- |
-function succeedTest(testName) { |
- return function () { |
- return clearAll().then( |
- function () { chrome.test.succeed(testName); }, |
- function (error) { |
- console.log("Unknown error in clearAll: " + |
- JSON.stringify(arguments)); |
- }); |
- }; |
-} |
- |
-function failTest(testName) { |
- return function () { |
- return clearAll().then( |
- function () { chrome.test.fail(testName); }, |
- function (error) { |
- console.log("Unknown error in clearAll: " + |
- JSON.stringify(error.message)); |
- }); |
- }; |
-} |
- |
-function testIdUsage() { |
- var testName = "testIdUsage"; |
- console.log("Starting testIdUsage."); |
- var succeed = succeedTest(testName); |
- var fail = failTest(testName); |
- |
- var createNotification = function (idString) { |
- var options = { |
- type: "basic", |
- iconUrl: red_dot, |
- title: "Attention!", |
- message: "Check out Cirque du Soleil" |
- }; |
- |
- return create(idString, options); |
- }; |
- |
- var updateNotification = function (idString) { |
- var options = { title: "!", message: "!" }; |
- return update(idString, options); |
- }; |
- |
- // Should successfully create the notification |
- createNotification("foo") |
- // And update it. |
- .then(updateNotification) |
- .catch(fail) |
- // Next try to update a non-existent notification. |
- .then(function () { return updateNotification("foo2"); }) |
- // And fail if it returns true. |
- .then(fail) |
- // Next try to clear a non-existent notification. |
- .catch(function () { return clear("foo2"); }) |
- .then(fail) |
- // And finally clear the original notification. |
- .catch(function () { return clear("foo"); }) |
- .catch(fail) |
- .then(succeed); |
-}; |
- |
-function testBaseFormat() { |
- var testName = "testBaseFormat"; |
- console.log("Starting " + testName); |
- var succeed = succeedTest(testName); |
- var fail = failTest(testName); |
- |
- var createNotificationWithout = function(toDelete) { |
- var options = { |
- type: "basic", |
- iconUrl: red_dot, |
- title: "Attention!", |
- message: "Check out Cirque du Soleil", |
- contextMessage: "Foobar.", |
- priority: 1, |
- eventTime: 123457896.12389, |
- expandedMessage: "This is a longer expanded message.", |
- isClickable: true |
- }; |
- |
- for (var i = 0; i < toDelete.length; i++) { |
- delete options[toDelete[i]]; |
- } |
- |
- return create("", options); |
- }; |
- |
- // Construct some exclusion lists. The |createNotificationWithout| function |
- // starts with a complex notification and then deletes items in this list. |
- var basicNotification= [ |
- "buttons", |
- "items", |
- "progress", |
- "imageUrl" |
- ]; |
- var bareNotification = basicNotification.concat([ |
- "priority", |
- "eventTime", |
- "expandedMessage", |
- ]); |
- var basicNoType = basicNotification.concat(["type"]); |
- var basicNoIcon = basicNotification.concat(["iconUrl"]); |
- var basicNoTitle = basicNotification.concat(["title"]); |
- var basicNoMessage = basicNotification.concat(["message"]); |
- |
- // Try creating a basic notification with just some of the fields. |
- createNotificationWithout(basicNotification) |
- // Try creating a basic notification with all possible fields. |
- .then(function () { return createNotificationWithout([]); }) |
- // Try creating a basic notification with the minimum in fields. |
- .then(function () { return createNotificationWithout(bareNotification); }) |
- // After this line we are checking to make sure that there is an error |
- // when notifications are created without the proper fields. |
- .catch(fail) |
- // Error if no type. |
- .then(function () { return createNotificationWithout(basicNoType) }) |
- // Error if no icon. |
- .catch(function () { return createNotificationWithout(basicNoIcon) }) |
- // Error if no title. |
- .catch(function () { return createNotificationWithout(basicNoTitle) }) |
- // Error if no message. |
- .catch(function () { return createNotificationWithout(basicNoMessage) }) |
- .then(fail, succeed); |
-}; |
- |
-function testListItem() { |
- var testName = "testListItem"; |
- console.log("Starting " + testName); |
- var succeed = succeedTest(testName); |
- var fail = failTest(testName); |
- |
- var item = { title: "Item title.", message: "Item message." }; |
- var options = { |
- type: "list", |
- iconUrl: red_dot, |
- title: "Attention!", |
- message: "Check out Cirque du Soleil", |
- contextMessage: "Foobar.", |
- priority: 1, |
- eventTime: 123457896.12389, |
- items: [item, item, item, item, item], |
- isClickable: true |
- }; |
- create("id", options).then(succeed, fail); |
-}; |
- |
-function arrayEquals(a, b) { |
- if (a === b) return true; |
- if (a == null || b == null) return false; |
- if (a.length !== b.length) return false; |
- |
- for (var i = 0; i < a.length; i++) { |
- if (a[i] !== b[i]) return false; |
- } |
- return true; |
-}; |
- |
-function testGetAll() { |
- var testName = "testGetAll"; |
- console.log("Starting " + testName); |
- var succeed = succeedTest(testName); |
- var fail = failTest(testName); |
- var in_ids = ["a", "b", "c", "d"]; |
- |
- // First do a get all, make sure the list is empty. |
- getAll() |
- .then(function (ids) { |
- chrome.test.assertEq(0, ids.length); |
- }) |
- // Then create a bunch of notifications. |
- .then(function () { |
- var newNotifications = in_ids.map(function (id) { |
- return create(id, basicNotificationOptions); |
- }); |
- return Promise.all(newNotifications); |
- }) |
- // Try getAll again. |
- .then(function () { return getAll(); }) |
- // Check that the right set of notifications is in the center. |
- .then(function (ids) { |
- chrome.test.assertEq(4, ids.length); |
- chrome.test.assertTrue(arrayEquals(ids, in_ids)); |
- succeed(); |
- }, fail); |
-} |
- |
-function testProgress() { |
- var testName = "testProgress"; |
- console.log("Starting " + testName); |
- var succeed = succeedTest(testName); |
- var fail = failTest(testName); |
- var progressOptions = { |
- type: "progress", |
- title: "Basic title", |
- message: "Basic message", |
- iconUrl: red_dot, |
- progress: 30 |
- }; |
- |
- // First, create a basic progress notification. |
- create("progress", progressOptions) |
- // and update it to have a different progress level. |
- .then(function () { return update("progress", { progress: 60 }); }) |
- // If either of the above failed, the test fails. |
- .catch(fail) |
- // Now the following parts should all cause an error: |
- // First update the progress to a low value, out-of-range |
- .then(function () { return update("progress", { progress: -10 }); }) |
- // First update the progress to a high value, out-of-range |
- .then(fail, function () { return update("progress", { progress: 101 }); }) |
- .then(function () { return clear("progress"); }) |
- // Finally try to create a notification that has a progress value but not |
- // progress type. |
- .then(fail, function () { |
- progressOptions.type = "basic"; |
- return create("progress", progressOptions); |
- }).then(fail, succeed); |
-} |
- |
-chrome.test.runTests([ |
- testIdUsage, testBaseFormat, testListItem, testGetAll, testProgress |
-]); |