mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-07 20:17:37 +00:00
3fd091d44a
--HG-- rename : dom/sms/interfaces/nsIDOMMozSmsEvent.idl => dom/mobilemessage/interfaces/nsIDOMMozSmsEvent.idl rename : dom/sms/interfaces/nsIDOMMozSmsMessage.idl => dom/mobilemessage/interfaces/nsIDOMMozSmsMessage.idl rename : dom/sms/interfaces/nsIDOMNavigatorSms.idl => dom/mobilemessage/interfaces/nsIDOMNavigatorSms.idl rename : dom/sms/interfaces/nsIDOMSmsCursor.idl => dom/mobilemessage/interfaces/nsIDOMSmsCursor.idl rename : dom/sms/interfaces/nsIDOMSmsFilter.idl => dom/mobilemessage/interfaces/nsIDOMSmsFilter.idl rename : dom/sms/interfaces/nsIDOMSmsManager.idl => dom/mobilemessage/interfaces/nsIDOMSmsManager.idl rename : dom/sms/interfaces/nsIDOMSmsRequest.idl => dom/mobilemessage/interfaces/nsIDOMSmsRequest.idl rename : dom/sms/interfaces/nsIDOMSmsSegmentInfo.idl => dom/mobilemessage/interfaces/nsIDOMSmsSegmentInfo.idl rename : dom/sms/interfaces/nsISmsRequest.idl => dom/mobilemessage/interfaces/nsISmsRequest.idl rename : dom/sms/interfaces/nsISmsService.idl => dom/mobilemessage/interfaces/nsISmsService.idl rename : dom/sms/src/Constants.cpp => dom/mobilemessage/src/Constants.cpp rename : dom/sms/src/Constants.h => dom/mobilemessage/src/Constants.h rename : dom/sms/src/SmsCursor.cpp => dom/mobilemessage/src/SmsCursor.cpp rename : dom/sms/src/SmsCursor.h => dom/mobilemessage/src/SmsCursor.h rename : dom/sms/src/SmsFilter.cpp => dom/mobilemessage/src/SmsFilter.cpp rename : dom/sms/src/SmsFilter.h => dom/mobilemessage/src/SmsFilter.h rename : dom/sms/src/SmsManager.cpp => dom/mobilemessage/src/SmsManager.cpp rename : dom/sms/src/SmsManager.h => dom/mobilemessage/src/SmsManager.h rename : dom/sms/src/SmsMessage.cpp => dom/mobilemessage/src/SmsMessage.cpp rename : dom/sms/src/SmsMessage.h => dom/mobilemessage/src/SmsMessage.h rename : dom/sms/src/SmsRequest.cpp => dom/mobilemessage/src/SmsRequest.cpp rename : dom/sms/src/SmsRequest.h => dom/mobilemessage/src/SmsRequest.h rename : dom/sms/src/SmsSegmentInfo.cpp => dom/mobilemessage/src/SmsSegmentInfo.cpp rename : dom/sms/src/SmsSegmentInfo.h => dom/mobilemessage/src/SmsSegmentInfo.h rename : dom/sms/src/SmsServicesFactory.cpp => dom/mobilemessage/src/SmsServicesFactory.cpp rename : dom/sms/src/SmsServicesFactory.h => dom/mobilemessage/src/SmsServicesFactory.h rename : dom/sms/src/Types.h => dom/mobilemessage/src/Types.h rename : dom/sms/src/android/SmsService.cpp => dom/mobilemessage/src/android/SmsService.cpp rename : dom/sms/src/android/SmsService.h => dom/mobilemessage/src/android/SmsService.h rename : dom/sms/src/fallback/SmsService.cpp => dom/mobilemessage/src/fallback/SmsService.cpp rename : dom/sms/src/fallback/SmsService.h => dom/mobilemessage/src/fallback/SmsService.h rename : dom/sms/src/ipc/PSms.ipdl => dom/mobilemessage/src/ipc/PSms.ipdl rename : dom/sms/src/ipc/PSmsRequest.ipdl => dom/mobilemessage/src/ipc/PSmsRequest.ipdl rename : dom/sms/src/ipc/SmsChild.cpp => dom/mobilemessage/src/ipc/SmsChild.cpp rename : dom/sms/src/ipc/SmsChild.h => dom/mobilemessage/src/ipc/SmsChild.h rename : dom/sms/src/ipc/SmsIPCService.cpp => dom/mobilemessage/src/ipc/SmsIPCService.cpp rename : dom/sms/src/ipc/SmsIPCService.h => dom/mobilemessage/src/ipc/SmsIPCService.h rename : dom/sms/src/ipc/SmsParent.cpp => dom/mobilemessage/src/ipc/SmsParent.cpp rename : dom/sms/src/ipc/SmsParent.h => dom/mobilemessage/src/ipc/SmsParent.h rename : dom/sms/src/ipc/SmsTypes.ipdlh => dom/mobilemessage/src/ipc/SmsTypes.ipdlh rename : dom/sms/src/ipc/ipdl.mk => dom/mobilemessage/src/ipc/ipdl.mk rename : dom/sms/src/ril/SmsService.cpp => dom/mobilemessage/src/ril/SmsService.cpp rename : dom/sms/src/ril/SmsService.h => dom/mobilemessage/src/ril/SmsService.h rename : dom/sms/tests/Makefile.in => dom/mobilemessage/tests/Makefile.in rename : dom/sms/tests/marionette/manifest.ini => dom/mobilemessage/tests/marionette/manifest.ini rename : dom/sms/tests/marionette/test_between_emulators.py => dom/mobilemessage/tests/marionette/test_between_emulators.py rename : dom/sms/tests/marionette/test_bug814761.js => dom/mobilemessage/tests/marionette/test_bug814761.js rename : dom/sms/tests/marionette/test_emulator_loopback.js => dom/mobilemessage/tests/marionette/test_emulator_loopback.js rename : dom/sms/tests/marionette/test_filter_date.js => dom/mobilemessage/tests/marionette/test_filter_date.js rename : dom/sms/tests/marionette/test_filter_date_notfound.js => dom/mobilemessage/tests/marionette/test_filter_date_notfound.js rename : dom/sms/tests/marionette/test_filter_mixed.js => dom/mobilemessage/tests/marionette/test_filter_mixed.js rename : dom/sms/tests/marionette/test_filter_number_multiple.js => dom/mobilemessage/tests/marionette/test_filter_number_multiple.js rename : dom/sms/tests/marionette/test_filter_number_single.js => dom/mobilemessage/tests/marionette/test_filter_number_single.js rename : dom/sms/tests/marionette/test_filter_read.js => dom/mobilemessage/tests/marionette/test_filter_read.js rename : dom/sms/tests/marionette/test_filter_received.js => dom/mobilemessage/tests/marionette/test_filter_received.js rename : dom/sms/tests/marionette/test_filter_sent.js => dom/mobilemessage/tests/marionette/test_filter_sent.js rename : dom/sms/tests/marionette/test_filter_unread.js => dom/mobilemessage/tests/marionette/test_filter_unread.js rename : dom/sms/tests/marionette/test_getmessage.js => dom/mobilemessage/tests/marionette/test_getmessage.js rename : dom/sms/tests/marionette/test_getmessage_notfound.js => dom/mobilemessage/tests/marionette/test_getmessage_notfound.js rename : dom/sms/tests/marionette/test_getmessages.js => dom/mobilemessage/tests/marionette/test_getmessages.js rename : dom/sms/tests/marionette/test_incoming.js => dom/mobilemessage/tests/marionette/test_incoming.js rename : dom/sms/tests/marionette/test_incoming_delete.js => dom/mobilemessage/tests/marionette/test_incoming_delete.js rename : dom/sms/tests/marionette/test_incoming_max_segments.js => dom/mobilemessage/tests/marionette/test_incoming_max_segments.js rename : dom/sms/tests/marionette/test_incoming_multipart.js => dom/mobilemessage/tests/marionette/test_incoming_multipart.js rename : dom/sms/tests/marionette/test_mark_msg_read.js => dom/mobilemessage/tests/marionette/test_mark_msg_read.js rename : dom/sms/tests/marionette/test_mark_msg_read_error.js => dom/mobilemessage/tests/marionette/test_mark_msg_read_error.js rename : dom/sms/tests/marionette/test_message_classes.js => dom/mobilemessage/tests/marionette/test_message_classes.js rename : dom/sms/tests/marionette/test_outgoing.js => dom/mobilemessage/tests/marionette/test_outgoing.js rename : dom/sms/tests/marionette/test_outgoing_delete.js => dom/mobilemessage/tests/marionette/test_outgoing_delete.js rename : dom/sms/tests/marionette/test_outgoing_max_segments.js => dom/mobilemessage/tests/marionette/test_outgoing_max_segments.js rename : dom/sms/tests/marionette/test_segment_info.js => dom/mobilemessage/tests/marionette/test_segment_info.js rename : dom/sms/tests/marionette/test_strict_7bit_encoding.js => dom/mobilemessage/tests/marionette/test_strict_7bit_encoding.js rename : dom/sms/tests/moz.build => dom/mobilemessage/tests/moz.build rename : dom/sms/tests/test_sms_basics.html => dom/mobilemessage/tests/test_sms_basics.html rename : dom/sms/tests/test_smsdatabaseservice.xul => dom/mobilemessage/tests/test_smsdatabaseservice.xul rename : dom/sms/tests/test_smsfilter.html => dom/mobilemessage/tests/test_smsfilter.html rename : dom/sms/tests/test_smsservice_createsmsmessage.js => dom/mobilemessage/tests/test_smsservice_createsmsmessage.js rename : dom/sms/tests/xpcshell.ini => dom/mobilemessage/tests/xpcshell.ini
129 lines
5.2 KiB
JavaScript
129 lines
5.2 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
MARIONETTE_TIMEOUT = 10000;
|
|
|
|
const LEN_7BIT = 160;
|
|
const LEN_7BIT_WITH_8BIT_REF = 153;
|
|
const LEN_7BIT_WITH_16BIT_REF = 152;
|
|
const LEN_UCS2 = 70;
|
|
const LEN_UCS2_WITH_8BIT_REF = 67;
|
|
const LEN_UCS2_WITH_16BIT_REF = 66;
|
|
|
|
SpecialPowers.setBoolPref("dom.sms.enabled", true);
|
|
let currentStrict7BitEncoding = false;
|
|
SpecialPowers.setBoolPref("dom.sms.strict7BitEncoding", currentStrict7BitEncoding);
|
|
SpecialPowers.addPermission("sms", true, document);
|
|
|
|
let sms = window.navigator.mozSms;
|
|
ok(sms instanceof MozSmsManager);
|
|
|
|
function times(str, n) {
|
|
return (new Array(n + 1)).join(str);
|
|
}
|
|
|
|
function doTest(text, strict7BitEncoding, expected) {
|
|
if (strict7BitEncoding != currentStrict7BitEncoding) {
|
|
currentStrict7BitEncoding = strict7BitEncoding;
|
|
SpecialPowers.setBoolPref("dom.sms.strict7BitEncoding", currentStrict7BitEncoding);
|
|
}
|
|
|
|
let result = sms.getSegmentInfoForText(text);
|
|
ok(result, "result of GetSegmentInfoForText is valid");
|
|
is(result.segments, expected[0], "segments");
|
|
is(result.charsPerSegment, expected[1], "charsPerSegment");
|
|
is(result.charsAvailableInLastSegment, expected[2], "charsAvailableInLastSegment");
|
|
}
|
|
|
|
function cleanUp() {
|
|
SpecialPowers.removePermission("sms", document);
|
|
SpecialPowers.clearUserPref("dom.sms.enabled");
|
|
SpecialPowers.clearUserPref("dom.sms.strict7BitEncoding");
|
|
finish();
|
|
}
|
|
|
|
// GSM 7Bit Alphabets:
|
|
//
|
|
// 'a' is in GSM default locking shift table, so it takes 1 septet.
|
|
doTest("a", false, [1, LEN_7BIT, LEN_7BIT - 1]);
|
|
// '\u20ac' is in GSM default single shift table, so it takes 2 septets.
|
|
doTest("\u20ac", false, [1, LEN_7BIT, LEN_7BIT - 2]);
|
|
// SP is defined in both locking shift and single shift tables.
|
|
doTest(" ", false, [1, LEN_7BIT, LEN_7BIT - 1]);
|
|
// Some combinations.
|
|
doTest("a\u20ac", false, [1, LEN_7BIT, LEN_7BIT - 3]);
|
|
doTest("a ", false, [1, LEN_7BIT, LEN_7BIT - 2]);
|
|
doTest("\u20aca", false, [1, LEN_7BIT, LEN_7BIT - 3]);
|
|
doTest("\u20ac ", false, [1, LEN_7BIT, LEN_7BIT - 3]);
|
|
doTest(" \u20ac", false, [1, LEN_7BIT, LEN_7BIT - 3]);
|
|
doTest(" a", false, [1, LEN_7BIT, LEN_7BIT - 2]);
|
|
|
|
// GSM 7Bit Alphabets (multipart):
|
|
//
|
|
// Exactly 160 locking shift table chararacters.
|
|
doTest(times("a", LEN_7BIT), false, [1, LEN_7BIT, 0]);
|
|
// 161 locking shift table chararacters. We'll have |161 - 153 = 8| septets in
|
|
// the 2nd segment.
|
|
doTest(times("a", LEN_7BIT + 1), false,
|
|
[2, LEN_7BIT_WITH_8BIT_REF, LEN_7BIT_WITH_8BIT_REF - 8]);
|
|
// |LEN_7BIT_WITH_8BIT_REF * 2| locking shift table chararacters.
|
|
doTest(times("a", LEN_7BIT_WITH_8BIT_REF * 2), false,
|
|
[2, LEN_7BIT_WITH_8BIT_REF, 0]);
|
|
// |LEN_7BIT_WITH_8BIT_REF * 2 + 1| locking shift table chararacters.
|
|
doTest(times("a", LEN_7BIT_WITH_8BIT_REF * 2 + 1), false,
|
|
[3, LEN_7BIT_WITH_8BIT_REF, LEN_7BIT_WITH_8BIT_REF - 1]);
|
|
// Exactly 80 single shift table chararacters.
|
|
doTest(times("\u20ac", LEN_7BIT / 2), false, [1, LEN_7BIT, 0]);
|
|
// 81 single shift table chararacters. Because |Math.floor(153 / 2) = 76|, it
|
|
// should left 5 septets in the 2nd segment.
|
|
doTest(times("\u20ac", LEN_7BIT / 2 + 1), false,
|
|
[2, LEN_7BIT_WITH_8BIT_REF, LEN_7BIT_WITH_8BIT_REF - 10]);
|
|
// |1 + 2 * 76| single shift table chararacters. We have only |153 - 76 * 2 = 1|
|
|
// space left, but each single shift table character takes 2, so it will be
|
|
// filled in the 3rd segment.
|
|
doTest(times("\u20ac", 1 + 2 * Math.floor(LEN_7BIT_WITH_8BIT_REF / 2)), false,
|
|
[3, LEN_7BIT_WITH_8BIT_REF, LEN_7BIT_WITH_8BIT_REF - 2]);
|
|
// |2 * 76| single shift table chararacters + 1 locking shift table chararacter.
|
|
doTest("a" + times("\u20ac", 2 * Math.floor(LEN_7BIT_WITH_8BIT_REF / 2)), false,
|
|
[2, LEN_7BIT_WITH_8BIT_REF, 1]);
|
|
doTest(times("\u20ac", 2 * Math.floor(LEN_7BIT_WITH_8BIT_REF / 2)) + "a", false,
|
|
[2, LEN_7BIT_WITH_8BIT_REF, 0]);
|
|
|
|
// UCS2:
|
|
//
|
|
// '\u6afb' should be encoded as UCS2.
|
|
doTest("\u6afb", false, [1, LEN_UCS2, LEN_UCS2 - 1]);
|
|
// Combination of GSM 7bit alphabets.
|
|
doTest("\u6afba", false, [1, LEN_UCS2, LEN_UCS2 - 2]);
|
|
doTest("\u6afb\u20ac", false, [1, LEN_UCS2, LEN_UCS2 - 2]);
|
|
doTest("\u6afb ", false, [1, LEN_UCS2, LEN_UCS2 - 2]);
|
|
|
|
// UCS2 (multipart):
|
|
//
|
|
// Exactly 70 UCS2 chararacters.
|
|
doTest(times("\u6afb", LEN_UCS2), false, [1, LEN_UCS2, 0]);
|
|
// 71 UCS2 chararacters. We'll have |71 - 67 = 4| chararacters in the 2nd
|
|
// segment.
|
|
doTest(times("\u6afb", LEN_UCS2 + 1), false,
|
|
[2, LEN_UCS2_WITH_8BIT_REF, LEN_UCS2_WITH_8BIT_REF - 4]);
|
|
// |LEN_UCS2_WITH_8BIT_REF * 2| ucs2 chararacters.
|
|
doTest(times("\u6afb", LEN_UCS2_WITH_8BIT_REF * 2), false,
|
|
[2, LEN_UCS2_WITH_8BIT_REF, 0]);
|
|
// |LEN_7BIT_WITH_8BIT_REF * 2 + 1| ucs2 chararacters.
|
|
doTest(times("\u6afb", LEN_UCS2_WITH_8BIT_REF * 2 + 1), false,
|
|
[3, LEN_UCS2_WITH_8BIT_REF, LEN_UCS2_WITH_8BIT_REF - 1]);
|
|
|
|
// Strict 7-Bit Encoding:
|
|
//
|
|
// Should have no effect on GSM default alphabet characters.
|
|
doTest("\u0041", true, [1, LEN_7BIT, LEN_7BIT - 1]);
|
|
// "\u00c0"(À) should be mapped to "\u0041"(A).
|
|
doTest("\u00c0", true, [1, LEN_7BIT, LEN_7BIT - 1]);
|
|
// Mixing mapped characters with unmapped ones.
|
|
doTest("\u00c0\u0041", true, [1, LEN_7BIT, LEN_7BIT - 2]);
|
|
doTest("\u0041\u00c0", true, [1, LEN_7BIT, LEN_7BIT - 2]);
|
|
// UCS2 characters should be mapped to '*'.
|
|
doTest("\u1234", true, [1, LEN_7BIT, LEN_7BIT - 1]);
|
|
|
|
cleanUp();
|