1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/b2g/chrome/content/test/mochitest/RecordingStatusHelper.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,82 @@ 1.4 +'use strict'; 1.5 + 1.6 +// resolve multiple promise in parallel 1.7 +function expectAll(aValue) { 1.8 + let deferred = new Promise(function(resolve, reject) { 1.9 + let countdown = aValue.length; 1.10 + let resolutionValues = new Array(countdown); 1.11 + 1.12 + for (let i = 0; i < aValue.length; i++) { 1.13 + let index = i; 1.14 + aValue[i].then(function(val) { 1.15 + resolutionValues[index] = val; 1.16 + if (--countdown === 0) { 1.17 + resolve(resolutionValues); 1.18 + } 1.19 + }, reject); 1.20 + } 1.21 + }); 1.22 + 1.23 + return deferred; 1.24 +} 1.25 + 1.26 +function TestInit() { 1.27 + let url = SimpleTest.getTestFileURL("RecordingStatusChromeScript.js") 1.28 + let script = SpecialPowers.loadChromeScript(url); 1.29 + 1.30 + let helper = { 1.31 + finish: function () { 1.32 + script.destroy(); 1.33 + }, 1.34 + fakeShutdown: function () { 1.35 + script.sendAsyncMessage('fake-content-shutdown', {}); 1.36 + } 1.37 + }; 1.38 + 1.39 + script.addMessageListener('chrome-event', function (message) { 1.40 + if (helper.hasOwnProperty('onEvent')) { 1.41 + helper.onEvent(message); 1.42 + } else { 1.43 + ok(false, 'unexpected message: ' + JSON.stringify(message)); 1.44 + } 1.45 + }); 1.46 + 1.47 + script.sendAsyncMessage("init-chrome-event", { 1.48 + type: 'recording-status' 1.49 + }); 1.50 + 1.51 + return Promise.resolve(helper); 1.52 +} 1.53 + 1.54 +function expectEvent(expected, eventHelper) { 1.55 + return new Promise(function(resolve, reject) { 1.56 + eventHelper.onEvent = function(message) { 1.57 + delete eventHelper.onEvent; 1.58 + ok(message, JSON.stringify(message)); 1.59 + is(message.type, 'recording-status', 'event type: ' + message.type); 1.60 + is(message.active, expected.active, 'recording active: ' + message.active); 1.61 + is(message.isAudio, expected.isAudio, 'audio recording active: ' + message.isAudio); 1.62 + is(message.isVideo, expected.isVideo, 'video recording active: ' + message.isVideo); 1.63 + resolve(eventHelper); 1.64 + }; 1.65 + info('waiting for recording-status'); 1.66 + }); 1.67 +} 1.68 + 1.69 +function expectStream(params, callback) { 1.70 + return new Promise(function(resolve, reject) { 1.71 + var req = navigator.mozGetUserMedia( 1.72 + params, 1.73 + function(stream) { 1.74 + ok(true, 'create media stream'); 1.75 + callback(stream); 1.76 + resolve(); 1.77 + }, 1.78 + function(err) { 1.79 + ok(false, 'fail to create media stream'); 1.80 + reject(err); 1.81 + } 1.82 + ); 1.83 + info('waiting for gUM result'); 1.84 + }); 1.85 +}