| 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"});
|
| + },
|
| +
|
| ]);
|
|
|