mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 824717 - Part 7: Modify and Add test cases to check the message id and message content when failed to send SMS/MMS message. r=vyang
This commit is contained in:
parent
677f8b33d8
commit
dfb1936723
@ -70,6 +70,33 @@ function waitForManagerEvent(aEventName) {
|
||||
return deferred.promise;
|
||||
}
|
||||
|
||||
/**
|
||||
* Wrap DOMRequest onsuccess/onerror events to Promise resolve/reject.
|
||||
*
|
||||
* Fulfill params: A DOMEvent.
|
||||
* Reject params: A DOMEvent.
|
||||
*
|
||||
* @param aRequest
|
||||
* A DOMRequest instance.
|
||||
*
|
||||
* @return A deferred promise.
|
||||
*/
|
||||
function wrapDomRequestAsPromise(aRequest) {
|
||||
let deferred = Promise.defer();
|
||||
|
||||
ok(aRequest instanceof DOMRequest,
|
||||
"aRequest is instanceof " + aRequest.constructor);
|
||||
|
||||
aRequest.addEventListener("success", function(aEvent) {
|
||||
deferred.resolve(aEvent);
|
||||
});
|
||||
aRequest.addEventListener("error", function(aEvent) {
|
||||
deferred.reject(aEvent);
|
||||
});
|
||||
|
||||
return deferred.promise;
|
||||
}
|
||||
|
||||
/**
|
||||
* Send a SMS message to a single receiver. Resolve if it succeeds, reject
|
||||
* otherwise.
|
||||
@ -86,17 +113,42 @@ function waitForManagerEvent(aEventName) {
|
||||
* @return A deferred promise.
|
||||
*/
|
||||
function sendSmsWithSuccess(aReceiver, aText) {
|
||||
let deferred = Promise.defer();
|
||||
let request = manager.send(aReceiver, aText);
|
||||
return wrapDomRequestAsPromise(request)
|
||||
.then((aEvent) => { return aEvent.target.result; },
|
||||
(aEvent) => { throw aEvent.target.error; });
|
||||
}
|
||||
|
||||
/**
|
||||
* Send a SMS message to a single receiver.
|
||||
* Resolve if it fails, reject otherwise.
|
||||
*
|
||||
* Fulfill params:
|
||||
* {
|
||||
* message, -- the failed MmsMessage
|
||||
* error, -- error of the send request
|
||||
* }
|
||||
*
|
||||
* Reject params: (none)
|
||||
*
|
||||
* @param aReceiver the address of the receiver.
|
||||
* @param aText the text body of the message.
|
||||
*
|
||||
* @return A deferred promise.
|
||||
*/
|
||||
function sendSmsWithFailure(aReceiver, aText) {
|
||||
let promises = [];
|
||||
promises.push(waitForManagerEvent("failed")
|
||||
.then((aEvent) => { return aEvent.message; }));
|
||||
|
||||
let request = manager.send(aReceiver, aText);
|
||||
request.onsuccess = function(event) {
|
||||
deferred.resolve(event.target.result);
|
||||
};
|
||||
request.onerror = function(event) {
|
||||
deferred.reject(event.target.error);
|
||||
};
|
||||
promises.push(wrapDomRequestAsPromise(request)
|
||||
.then((aEvent) => { throw aEvent; },
|
||||
(aEvent) => { return aEvent.target.error; }));
|
||||
|
||||
return deferred.promise;
|
||||
return Promise.all(promises)
|
||||
.then((aResults) => { return { message: aResults[0],
|
||||
error: aResults[1] }; });
|
||||
}
|
||||
|
||||
/**
|
||||
@ -118,30 +170,18 @@ function sendSmsWithSuccess(aReceiver, aText) {
|
||||
* @return A deferred promise.
|
||||
*/
|
||||
function sendMmsWithFailure(aMmsParameters, aSendParameters) {
|
||||
let deferred = Promise.defer();
|
||||
|
||||
let result = { message: null, error: null };
|
||||
function got(which, value) {
|
||||
result[which] = value;
|
||||
if (result.message != null && result.error != null) {
|
||||
deferred.resolve(result);
|
||||
}
|
||||
}
|
||||
|
||||
manager.addEventListener("failed", function onfailed(event) {
|
||||
manager.removeEventListener("failed", onfailed);
|
||||
got("message", event.message);
|
||||
});
|
||||
let promises = [];
|
||||
promises.push(waitForManagerEvent("failed")
|
||||
.then((aEvent) => { return aEvent.message; }));
|
||||
|
||||
let request = manager.sendMMS(aMmsParameters, aSendParameters);
|
||||
request.onsuccess = function(event) {
|
||||
deferred.reject();
|
||||
};
|
||||
request.onerror = function(event) {
|
||||
got("error", event.target.error);
|
||||
}
|
||||
promises.push(wrapDomRequestAsPromise(request)
|
||||
.then((aEvent) => { throw aEvent; },
|
||||
(aEvent) => { return aEvent.target.error; }));
|
||||
|
||||
return deferred.promise;
|
||||
return Promise.all(promises)
|
||||
.then((aResults) => { return { message: aResults[0],
|
||||
error: aResults[1] }; });
|
||||
}
|
||||
|
||||
/**
|
||||
@ -272,15 +312,9 @@ function deleteMessagesById(aMessageIds) {
|
||||
return [];
|
||||
}
|
||||
|
||||
let deferred = Promise.defer();
|
||||
|
||||
let request = manager.delete(aMessageIds);
|
||||
request.onsuccess = function(event) {
|
||||
deferred.resolve(event.target.result);
|
||||
};
|
||||
request.onerror = deferred.reject.bind(deferred);
|
||||
|
||||
return deferred.promise;
|
||||
return wrapDomRequestAsPromise(request)
|
||||
.then((aEvent) => { return aEvent.target.result; });
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -49,3 +49,4 @@ qemu = true
|
||||
[test_mt_sms_concatenation.js]
|
||||
[test_error_of_mms_manual_retrieval.js]
|
||||
[test_error_of_mms_send.js]
|
||||
[test_error_of_sms_send.js]
|
||||
|
@ -14,13 +14,31 @@ function testSendFailed(aCause, aServiceId) {
|
||||
sendParameters = { serviceId: aServiceId };
|
||||
}
|
||||
|
||||
let mmsParameters = { subject: "Test",
|
||||
receivers: ["+0987654321"],
|
||||
let testSubject = "Test";
|
||||
let testReceivers = ["+0987654321"];
|
||||
|
||||
let mmsParameters = { subject: testSubject,
|
||||
receivers: testReceivers,
|
||||
attachments: [] };
|
||||
|
||||
return sendMmsWithFailure(mmsParameters, sendParameters)
|
||||
.then((result) => {
|
||||
is(result.error.name, aCause, "Checking failure cause.");
|
||||
|
||||
let domMessage = result.error.data;
|
||||
is(domMessage.id, result.message.id, "Checking message id.");
|
||||
is(domMessage.subject, testSubject, "Checking subject.");
|
||||
is(domMessage.receivers.length, testReceivers.length, "Checking no. of receivers.");
|
||||
for (let i = 0; i < testReceivers.length; i++) {
|
||||
is(domMessage.receivers[i], testReceivers[i], "Checking receiver address.");
|
||||
}
|
||||
|
||||
let deliveryInfo = domMessage.deliveryInfo;
|
||||
is(deliveryInfo.length, testReceivers.length, "Checking no. of deliveryInfo.");
|
||||
for (let i = 0; i < deliveryInfo.length; i++) {
|
||||
is(deliveryInfo[i].receiver, testReceivers[i], "Checking receiver address.");
|
||||
is(deliveryInfo[i].deliveryStatus, "error", "Checking deliveryStatus.");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
105
dom/mobilemessage/tests/marionette/test_error_of_sms_send.js
Normal file
105
dom/mobilemessage/tests/marionette/test_error_of_sms_send.js
Normal file
@ -0,0 +1,105 @@
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
MARIONETTE_TIMEOUT = 60000;
|
||||
MARIONETTE_HEAD_JS = 'head.js';
|
||||
|
||||
const kPrefRilRadioDisabled = "ril.radio.disabled";
|
||||
|
||||
let connection;
|
||||
function ensureMobileConnection() {
|
||||
let deferred = Promise.defer();
|
||||
|
||||
let permissions = [{
|
||||
"type": "mobileconnection",
|
||||
"allow": true,
|
||||
"context": document,
|
||||
}];
|
||||
SpecialPowers.pushPermissions(permissions, function() {
|
||||
ok(true, "permissions pushed: " + JSON.stringify(permissions));
|
||||
|
||||
connection = window.navigator.mozMobileConnections[0];
|
||||
if (connection) {
|
||||
log("navigator.mozMobileConnections[0] is instance of " + connection.constructor);
|
||||
} else {
|
||||
log("navigator.mozMobileConnections[0] is undefined.");
|
||||
}
|
||||
|
||||
if (connection instanceof MozMobileConnection) {
|
||||
deferred.resolve(connection);
|
||||
} else {
|
||||
deferred.reject();
|
||||
}
|
||||
});
|
||||
|
||||
return deferred.promise;
|
||||
}
|
||||
|
||||
function waitRadioState(state) {
|
||||
let deferred = Promise.defer();
|
||||
|
||||
waitFor(function() {
|
||||
deferred.resolve();
|
||||
}, function() {
|
||||
return connection.radioState == state;
|
||||
});
|
||||
|
||||
return deferred.promise;
|
||||
}
|
||||
|
||||
function setRadioEnabled(enabled) {
|
||||
log("setRadioEnabled to " + enabled);
|
||||
|
||||
let deferred = Promise.defer();
|
||||
|
||||
let finalState = (enabled) ? "enabled" : "disabled";
|
||||
connection.onradiostatechange = function() {
|
||||
let state = connection.radioState;
|
||||
log("Received 'radiostatechange' event, radioState: " + state);
|
||||
|
||||
if (state == finalState) {
|
||||
deferred.resolve();
|
||||
connection.onradiostatechange = null;
|
||||
}
|
||||
};
|
||||
|
||||
let req = connection.setRadioEnabled(enabled);
|
||||
|
||||
req.onsuccess = function() {
|
||||
log("setRadioEnabled success");
|
||||
};
|
||||
|
||||
req.onerror = function() {
|
||||
ok(false, "setRadioEnabled should not fail");
|
||||
deferred.reject();
|
||||
};
|
||||
|
||||
return deferred.promise;
|
||||
}
|
||||
|
||||
function testSendFailed(aCause) {
|
||||
log("testSendFailed, aCause: " + aCause);
|
||||
|
||||
let testReceiver = "+0987654321";
|
||||
let testMessage = "quick fox jump over the lazy dog";
|
||||
|
||||
return sendSmsWithFailure(testReceiver, testMessage)
|
||||
.then((result) => {
|
||||
is(result.error.name, aCause, "Checking failure cause.");
|
||||
|
||||
let domMessage = result.error.data;
|
||||
is(domMessage.id, result.message.id, "Checking message id.");
|
||||
is(domMessage.receiver, testReceiver, "Checking receiver address.");
|
||||
is(domMessage.body, testMessage, "Checking message body.");
|
||||
is(domMessage.delivery, "error", "Checking delivery.");
|
||||
is(domMessage.deliveryStatus, "error", "Checking deliveryStatus.");
|
||||
});
|
||||
}
|
||||
|
||||
startTestCommon(function testCaseMain() {
|
||||
return ensureMobileConnection()
|
||||
.then(() => waitRadioState("enabled"))
|
||||
.then(() => setRadioEnabled(false))
|
||||
.then(() => testSendFailed("RadioDisabledError"))
|
||||
.then(() => setRadioEnabled(true));
|
||||
});
|
Loading…
Reference in New Issue
Block a user