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