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

Unified Diff: chrome/test/data/extensions/api_test/systeminfo/storage/test_storage_api.js

Issue 11419279: Implement systemInfo.storage.onChanged event (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: refine browser test and code comments Created 8 years 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
Index: chrome/test/data/extensions/api_test/systeminfo/storage/test_storage_api.js
diff --git a/chrome/test/data/extensions/api_test/systeminfo/storage/test_storage_api.js b/chrome/test/data/extensions/api_test/systeminfo/storage/test_storage_api.js
index 06c9c658cb5d50d7db2e313597479bca57cfd3ec..709fef60018b12e62e047fd49906589b8adcb5dc 100644
--- a/chrome/test/data/extensions/api_test/systeminfo/storage/test_storage_api.js
+++ b/chrome/test/data/extensions/api_test/systeminfo/storage/test_storage_api.js
@@ -3,34 +3,170 @@
// found in the LICENSE file.
// systemInfo.storage api test
-// browser_tests.exe --gtest_filter=SystemInfoStorageApiTest.Storage
+// browser_tests --gtest_filter=SystemInfoStorageApiTest.Storage
+
chrome.systemInfo = chrome.experimental.systemInfo;
+// Testing data should be the same as that in system_info_storage_apitest.cc
+var testData = [
+ { id: "0xbeaf", type: "unknown", capacity: 4098,
+ availableCapacity: 1000, step: 0 },
+ { id: "/home", type: "harddisk", capacity: 4098,
+ availableCapacity: 1000, step: 10 },
+ { id: "/data", type: "harddisk", capacity: 10000,
+ availableCapacity: 1000, step: 4097 }
+];
+
chrome.test.runTests([
function testGet() {
chrome.systemInfo.storage.get(chrome.test.callbackPass(function(units) {
- chrome.test.assertTrue(units.length == 1);
- var unit = units[0];
- chrome.test.assertTrue(unit.id == "0xbeaf");
- chrome.test.assertTrue(unit.type == "unknown");
- chrome.test.assertTrue(unit.capacity == 4098);
- chrome.test.assertTrue(unit.availableCapacity == 1024);
+ chrome.test.assertTrue(units.length == 3);
+ for (var i = 0; i < units.length; ++i) {
+ chrome.test.assertEq(testData[i].id, units[i].id);
+ chrome.test.assertEq(testData[i].type, units[i].type);
+ chrome.test.assertEq(testData[i].capacity, units[i].capacity);
+ chrome.test.assertEq(testData[i].availableCapacity,
+ units[i].availableCapacity);
+ testData[i].availableCapacity += testData[i].step;
+ }
}));
},
- function testChangedEvent() {
- chrome.test.sendMessage("ready", function() {
- var numOfChangedEvent = 0;
- var base = 10000;
- var step = 10;
- var doneChangedEvent = chrome.test.listenForever(
- chrome.systemInfo.storage.onAvailableCapacityChanged,
- function listener(changedInfo) {
- chrome.test.assertTrue(changedInfo.id == "/dev/sda1");
- chrome.test.assertTrue(
- changedInfo.availableCapacity == (base - step*numOfChangedEvent));
- if (++numOfChangedEvent > 5)
- doneChangedEvent();
- });
- });
+
+ function testAddRemoveListener() {
+ function newCallback(value) {
+ return function(details) { console.log(value); };
+ }
+ var cb1 = newCallback(1);
+ var cb2 = newCallback(2);
+ var event = chrome.systemInfo.storage.onChanged;
+ event.addListener(cb1, {id: "0xbeaf"});
+ event.addListener(cb2, {id: "0xbeaf", changeThreshold:1000});
+ chrome.test.assertTrue(event.hasListener(cb1));
+ chrome.test.assertTrue(event.hasListener(cb2));
+ event.removeListener(cb1);
+ chrome.test.assertFalse(event.hasListener(cb1));
+ chrome.test.assertTrue(event.hasListener(cb2));
+ event.removeListener(cb2);
+ chrome.test.assertFalse(event.hasListener(cb1));
+ chrome.test.assertFalse(event.hasListener(cb2));
+ event.addListener(cb1, {id: "0xbeaf", changeThreshold:1000});
+ event.addListener(cb1, {id: "0xbeaf", changeThreshold:2000});
+ event.removeListener(cb1);
+ chrome.test.assertFalse(event.hasListener(cb1));
+ chrome.test.succeed();
+ },
+
+ function testAddInvalidListener() {
+ var event = chrome.systemInfo.storage.onChanged;
+ function cb(details) { console.log("empty callback"); }
+
+ // Try a bad changeThreshold.
+ try {
+ event.addListener(cb, {id:"/home", changeThreshold: "invalid"});
+ chrome.test.fail("Failed to validate 'changeThreshold' parameter.");
+ } catch (e) {
+ chrome.test.assertFalse(event.hasListener(cb));
+ chrome.test.assertTrue(e.message.search("Invalid value") >= 0);
+ }
+ // Try a bad id.
+ try {
+ event.addListener(cb, {id: 2});
+ chrome.test.fail("Failed to validate 'id' parameter.");
+ } catch (e) {
+ chrome.test.assertFalse(event.hasListener(cb));
+ chrome.test.assertTrue(e.message.search("Invalid value") >= 0);
+ }
+ // Try without id.
+ try {
+ event.addListener(cb, {changeThreshold: 100});
+ chrome.test.fail("No mandatory 'id' parameter is given.");
+ } catch (e) {
+ chrome.test.assertFalse(event.hasListener(cb));
+ chrome.test.assertTrue(e.message.search("Invalid value") >= 0);
+ }
+ // Try without any option.
+ try {
+ event.addListener(cb);
+ chrome.test.fail("No event option is provided.");
+ } catch (e) {
+ chrome.test.assertFalse(event.hasListener(cb));
+ chrome.test.assertTrue(e.message.search("undefined") >= 0);
}
+ chrome.test.succeed();
+ },
+
+ function testOnChangedEvent() {
+ var numOfChangedEvent = 0;
+ var callbackCompleted = chrome.test.callbackAdded();
+ chrome.systemInfo.storage.onChanged.addListener(
+ function listener(changeInfo) {
+ if (numOfChangedEvent > 3)
+ chrome.test.fail("Failed since the listener has been removed.");
+ // The availableCapacity will be auto-increased at each time it
+ // is queried.
+ testData[1].availableCapacity += testData[1].step;
+ chrome.test.assertEq(testData[1].id, changeInfo.id);
+ chrome.test.assertEq(testData[1].availableCapacity,
+ changeInfo.availableCapacity);
+ if (++numOfChangedEvent > 3) {
+ chrome.systemInfo.storage.onChanged.removeListener(listener);
+ setTimeout(callbackCompleted, 500);
+ }
+ }, {id: "/home", changeThreshold: 9});
+ },
+
+ function testOnChangedEvent2() {
+ var numOfChangedEvent = 0;
+ var callbackCompleted = chrome.test.callbackAdded();
+ var threshold = 10 * testData[1].step;
+ chrome.systemInfo.storage.onChanged.addListener(
+ function listener(changeInfo) {
+ // The availableCapacity will be auto-increased at each time it
+ // is queried.
+ chrome.test.assertEq(testData[1].id, changeInfo.id);
+ // The change delta should be equal to or greater than the specified
+ // threshold.
+ var old_value = testData[1].availableCapacity;
+ chrome.test.assertTrue(
+ changeInfo.availableCapacity - old_value >= threshold);
+ testData[1].availableCapacity = changeInfo.availableCapacity;
+ if (++numOfChangedEvent > 2) {
+ chrome.systemInfo.storage.onChanged.removeListener(listener);
+ setTimeout(callbackCompleted, 500);
+ }
+ }, {id: "/home", changeThreshold: threshold});
+ },
+
+ function testDefaultChangeThreshold() {
+ var callbackCompleted = chrome.test.callbackAdded();
+ chrome.systemInfo.storage.onChanged.addListener(
+ function listener(changeInfo) {
+ chrome.test.fail("The callback should not get called");
+ }, {id: "/home"});
+ setTimeout(callbackCompleted, 500);
+ },
+
+ function testDefaultChangeThreshold2() {
+ var numOfChangedEvent = 0;
+ var callbackCompleted = chrome.test.callbackAdded();
+ // Increase its availableCapacity since it will be queried before firing
+ // onChanged event.
+ testData[2].availableCapacity += testData[2].step;
+ // The free space change step for /data storage is 4097, bigger than the
+ // default changeThreshold.
+ chrome.systemInfo.storage.onChanged.addListener(
+ function listener(changeInfo) {
+ if (numOfChangedEvent > 3)
+ chrome.test.fail("Failed since the listener has been removed.");
+ chrome.test.assertEq(testData[2].id, changeInfo.id);
+ chrome.test.assertEq(testData[2].availableCapacity,
+ changeInfo.availableCapacity);
+ testData[2].availableCapacity += testData[2].step;
+ if (++numOfChangedEvent > 3) {
+ chrome.systemInfo.storage.onChanged.removeListener(listener);
+ setTimeout(callbackCompleted, 500);
+ }
+ }, {id: "/data"});
+ },
+
]);

Powered by Google App Engine
This is Rietveld 408576698