diff options
Diffstat (limited to 'dom/system/tests/test_system_update_enabled.html')
-rw-r--r-- | dom/system/tests/test_system_update_enabled.html | 175 |
1 files changed, 175 insertions, 0 deletions
diff --git a/dom/system/tests/test_system_update_enabled.html b/dom/system/tests/test_system_update_enabled.html new file mode 100644 index 000000000..1d820d37d --- /dev/null +++ b/dom/system/tests/test_system_update_enabled.html @@ -0,0 +1,175 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=1037329 +--> +<head> + <meta charset="utf-8"> + <title>System Update API Test</title> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> +</head> +<body> +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1037329">Test System Update API</a> +<script type="application/javascript;version=1.8"> + +'use strict'; + +SimpleTest.waitForExplicitFinish(); + +function setup() { + window.gUrl = SimpleTest.getTestFileURL('preload-SystemUpdateManager-jsm.js'); + window.gScript = SpecialPowers.loadChromeScript(gUrl); + return Promise.resolve(); +} + +function testGetProviders() { + return new Promise(function(resolve, reject) { + navigator.updateManager.getProviders().then(function(providerInfos) { + info('num of providers: ' + providerInfos.length); + for (let providerInfo of providerInfos) { + info('provider info: ' + JSON.stringify(providerInfo)); + } + resolve(providerInfos); + }); + }); +} + +function testSetActiveProvider(providerInfos) { + return new Promise(function(resolve, reject) { + //Find the mock provider for our testing provider instead. + //Set the mock provider as active provider. + let targetProvider = providerInfos[0]; + for(let provider of providerInfos) { + if(provider.uuid == "{17a84227-28f4-453d-9b80-9ae75a5682e0}") { + info('target provider uuid: ' + provider.uuid); + targetProvider = provider; + break; + } + } + is("{17a84227-28f4-453d-9b80-9ae75a5682e0}", targetProvider.uuid, 'get the dynamically added provider'); + navigator.updateManager.setActiveProvider(targetProvider.uuid).then(function(activeProvider) { + info('active provider info: ' + JSON.stringify(activeProvider.info)); + is(activeProvider.name, targetProvider.name, 'expected name of active provider'); + is(activeProvider.uuid, targetProvider.uuid, 'expected uuid of active provider'); + resolve({name : activeProvider.name, uuid : activeProvider.uuid}); + }); + }); +} + +function testGetActiveProvider(providerInfo) { + info('test GetActiveProvider'); + return new Promise(function(resolve, reject) { + navigator.updateManager.getActiveProvider().then(function(activeProvider) { + is(activeProvider.name, providerInfo.name, 'expected name of active provider'); + is(activeProvider.uuid, providerInfo.uuid, 'expected uuid of active provider'); + resolve(activeProvider); + }); + }); +} + +function testCheckForUpdate(provider) { + info('test CheckForUpdate'); + return new Promise(function(resolve, reject) { + provider.addEventListener('updateavailable', function(event) { + ok(true, 'receive updateavailable event'); + info('event: ' + JSON.stringify(event.detail)); + resolve(provider); + }); + provider.checkForUpdate(); + }); +} + +function testStartDownload(provider) { + info('test StartDownload'); + return new Promise(function(resolve, reject) { + provider.addEventListener('progress', function(event) { + ok(true, 'receive progress event'); + is(event.loaded, 10, 'expected loaded'); + is(event.total, 100, 'expected total'); + resolve(provider); + }); + provider.startDownload(); + }); +} +function testStopDownload(provider) { + info('test StopDownload'); + return new Promise(function(resolve, reject) { + provider.stopDownload(); + resolve(provider); + }); +} +function testApplyUpdate(provider) { + info('test ApplyUpdate'); + return new Promise(function(resolve, reject) { + provider.applyUpdate(); + resolve(provider); + }); +} +function testGetParameter(provider) { + info('test GetParameter'); + return new Promise(function(resolve, reject) { + let dummy = provider.getParameter('dummy'); + is(dummy, 'dummy-value', 'expected parameter'); + resolve(provider); + }); +} +function testSetParameter(provider) { + info('test SetParameter'); + return new Promise(function(resolve, reject) { + provider.setParameter('dummy', 'dummy-value'); + resolve(); + }); +} +function testSetActiveProviderError() { + info('test setActiveProvider error'); + return new Promise(function(resolve, reject) { + navigator.updateManager.setActiveProvider('something not exsited').then(function(provider) { + ok(false, 'should not success'); + resolve(); + }, function(reason) { + info('error message: ' + reason); + ok(true, 'expected error while setActiveProvider'); + resolve(); + }); + }); +} + + +function runTest() { + ok(navigator.updateManager, 'should have navigator.updateManager'); + + setup() + .then(testGetProviders) + .then(testSetActiveProvider) + .then(testGetActiveProvider) + .then(testCheckForUpdate) + .then(testStartDownload) + .then(testStopDownload) + .then(testApplyUpdate) + .then(testGetParameter) + .then(testSetParameter) + .then(testSetActiveProviderError) + .then(function() { + info('test finished'); + gScript.destroy(); + SimpleTest.finish(); + }); +} + +SpecialPowers.pushPermissions([ + {type: 'system-update', allow: true, context: document}, + ], function() { + SpecialPowers.pushPrefEnv({ + 'set': [ + ['dom.system_update.enabled', true], + ['dom.system_update.debug', true], + ['dom.system_update.active', '@mozilla.org/test-update-provider;1'], + ] + }, runTest); + } +); +</script> +</pre> +</body> +</html> |