mirror of
https://github.com/classilla/tenfourfox.git
synced 2024-11-20 10:33:36 +00:00
222 lines
6.4 KiB
JavaScript
222 lines
6.4 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
var WSP = {};
|
|
subscriptLoader.loadSubScript("resource://gre/modules/WspPduHelper.jsm", WSP);
|
|
WSP.debug = do_print;
|
|
|
|
function run_test() {
|
|
run_next_test();
|
|
}
|
|
|
|
//
|
|
// Test target: ensureHeader
|
|
//
|
|
|
|
add_test(function test_ensureHeader() {
|
|
do_check_throws(function() {
|
|
WSP.ensureHeader({}, "no-such-property");
|
|
}, "FatalCodeError"
|
|
);
|
|
|
|
run_next_test();
|
|
});
|
|
|
|
//
|
|
// Test target: Header
|
|
//
|
|
|
|
//// Header.decode ////
|
|
|
|
add_test(function test_Header_decode() {
|
|
wsp_decode_test(WSP.Header, [0x34 | 0x80, 0x80], {name: "push-flag", value: 0});
|
|
wsp_decode_test(WSP.Header, [65, 0, 66, 0], {name: "a", value: "B"});
|
|
|
|
run_next_test();
|
|
});
|
|
|
|
//
|
|
// Test target: WellKnownHeader
|
|
//
|
|
|
|
//// WellKnownHeader.decode ////
|
|
|
|
add_test(function test_WellKnownHeader_decode() {
|
|
wsp_decode_test(WSP.WellKnownHeader, [0xFF], null, "NotWellKnownEncodingError");
|
|
let entry = WSP.WSP_HEADER_FIELDS["push-flag"];
|
|
|
|
// Test for Short-Integer
|
|
wsp_decode_test(WSP.WellKnownHeader, [entry.number | 0x80, 0x80],
|
|
{name: entry.name, value: 0});
|
|
// Test for NoValue
|
|
wsp_decode_test(WSP.WellKnownHeader, [entry.number | 0x80, 0],
|
|
{name: entry.name, value: null});
|
|
// Test for TokenText
|
|
wsp_decode_test(WSP.WellKnownHeader, [entry.number | 0x80, 65, 0],
|
|
{name: entry.name, value: "A"});
|
|
// Test for QuotedString
|
|
wsp_decode_test(WSP.WellKnownHeader, [entry.number | 0x80, 34, 128, 0],
|
|
{name: entry.name, value: String.fromCharCode(128)});
|
|
// Test for skipValue
|
|
wsp_decode_test(WSP.WellKnownHeader, [entry.number | 0x80, 2, 0, 0], null);
|
|
|
|
run_next_test();
|
|
});
|
|
|
|
//
|
|
// Test target: ApplicationHeader
|
|
//
|
|
|
|
//// ApplicationHeader.decode ////
|
|
|
|
add_test(function test_ApplicationHeader_decode() {
|
|
wsp_decode_test(WSP.ApplicationHeader, [5, 0, 66, 0], null, "CodeError");
|
|
wsp_decode_test(WSP.ApplicationHeader, [65, 0, 66, 0], {name: "a", value: "B"});
|
|
// Test for skipValue
|
|
wsp_decode_test(WSP.ApplicationHeader, [65, 0, 2, 0, 0], null);
|
|
|
|
run_next_test();
|
|
});
|
|
|
|
//// ApplicationHeader.encode ////
|
|
|
|
add_test(function test_ApplicationHeader_encode() {
|
|
// Test invalid header name string:
|
|
wsp_encode_test(WSP.ApplicationHeader, {name: undefined, value: "asdf"}, null, "CodeError");
|
|
wsp_encode_test(WSP.ApplicationHeader, {name: null, value: "asdf"}, null, "CodeError");
|
|
wsp_encode_test(WSP.ApplicationHeader, {name: "", value: "asdf"}, null, "CodeError");
|
|
wsp_encode_test(WSP.ApplicationHeader, {name: "a b", value: "asdf"}, null, "CodeError");
|
|
// Test value string:
|
|
wsp_encode_test(WSP.ApplicationHeader, {name: "asdf", value: undefined},
|
|
strToCharCodeArray("asdf").concat([0]));
|
|
wsp_encode_test(WSP.ApplicationHeader, {name: "asdf", value: null},
|
|
strToCharCodeArray("asdf").concat([0]));
|
|
wsp_encode_test(WSP.ApplicationHeader, {name: "asdf", value: ""},
|
|
strToCharCodeArray("asdf").concat([0]));
|
|
wsp_encode_test(WSP.ApplicationHeader, {name: "asdf", value: "fdsa"},
|
|
strToCharCodeArray("asdf").concat(strToCharCodeArray("fdsa")));
|
|
|
|
run_next_test();
|
|
});
|
|
|
|
//
|
|
// Test target: FieldName
|
|
//
|
|
|
|
//// FieldName.decode ////
|
|
|
|
add_test(function test_FieldName_decode() {
|
|
wsp_decode_test(WSP.FieldName, [0], "");
|
|
wsp_decode_test(WSP.FieldName, [65, 0], "a");
|
|
wsp_decode_test(WSP.FieldName, [97, 0], "a");
|
|
let entry = WSP.WSP_HEADER_FIELDS["content-length"];
|
|
wsp_decode_test(WSP.FieldName, [entry.number | 0x80], entry.name);
|
|
wsp_decode_test(WSP.FieldName, [0xFF], null, "NotWellKnownEncodingError");
|
|
|
|
run_next_test();
|
|
});
|
|
|
|
//// FieldName.encode ////
|
|
|
|
add_test(function test_FieldName_encode() {
|
|
wsp_encode_test(WSP.FieldName, "", [0]);
|
|
wsp_encode_test(WSP.FieldName, "date", [0x92]);
|
|
|
|
run_next_test();
|
|
});
|
|
|
|
//
|
|
// Test target: PduHelper
|
|
//
|
|
|
|
//// PduHelper.parseHeaders ////
|
|
|
|
add_test(function test_PduHelper_parseHeaders() {
|
|
wsp_decode_test_ex(function(data) {
|
|
return WSP.PduHelper.parseHeaders(data, data.array.length);
|
|
}, [0x80 | 0x05, 2, 0x23, 0x28, 0x80 | 0x2F, 0x80 | 0x04],
|
|
{"age": 9000, "x-wap-application-id": "x-wap-application:mms.ua"}
|
|
);
|
|
|
|
run_next_test();
|
|
});
|
|
|
|
//// PduHelper.decodeStringContent ////
|
|
|
|
add_test(function StringContent_decode() {
|
|
//Test for utf-8
|
|
let entry = WSP.WSP_WELL_KNOWN_CHARSETS["utf-8"];
|
|
|
|
// "Mozilla" in full width.
|
|
let str = "\uff2d\uff4f\uff5a\uff49\uff4c\uff4c\uff41";
|
|
|
|
let conv = Cc["@mozilla.org/intl/scriptableunicodeconverter"]
|
|
.createInstance(Ci.nsIScriptableUnicodeConverter);
|
|
conv.charset = entry.converter;
|
|
|
|
let raw = conv.convertToByteArray(str);
|
|
let data = {array: raw, offset: 0};
|
|
let octetArray = WSP.Octet.decodeMultiple(data, data.array.length);
|
|
wsp_decode_test_ex(function(data) {
|
|
return WSP.PduHelper.decodeStringContent(data.array, "utf-8");
|
|
}, octetArray, str);
|
|
|
|
entry = WSP.WSP_WELL_KNOWN_CHARSETS["utf-16"];
|
|
// "Mozilla" in full width.
|
|
str = "\u004d\u006F\u007A\u0069\u006C\u006C\u0061";
|
|
|
|
conv = Cc["@mozilla.org/intl/scriptableunicodeconverter"]
|
|
.createInstance(Ci.nsIScriptableUnicodeConverter);
|
|
conv.charset = entry.converter;
|
|
|
|
raw = conv.convertToByteArray(str);
|
|
data = {array: raw, offset: 0};
|
|
octetArray = WSP.Octet.decodeMultiple(data, data.array.length);
|
|
wsp_decode_test_ex(function(data) {
|
|
return WSP.PduHelper.decodeStringContent(data.array, "utf-16");
|
|
}, raw, str);
|
|
|
|
run_next_test();
|
|
});
|
|
|
|
//// PduHelper.composeMultiPart ////
|
|
|
|
add_test(function test_PduHelper_composeMultiPart() {
|
|
let multiStream = Components.classes["@mozilla.org/io/multiplex-input-stream;1"]
|
|
.createInstance(Ci.nsIMultiplexInputStream);
|
|
let uint8Array = new Uint8Array(5);
|
|
uint8Array[0] = 0x00;
|
|
uint8Array[1] = 0x01;
|
|
uint8Array[2] = 0x02;
|
|
uint8Array[3] = 0x03;
|
|
uint8Array[4] = 0x04;
|
|
|
|
let parts = [
|
|
{
|
|
content: "content",
|
|
headers: {
|
|
"content-type": {
|
|
media: "text/plain",
|
|
params: {}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
content: uint8Array,
|
|
headers: {
|
|
"content-type": {
|
|
media: "text/plain",
|
|
params: {}
|
|
}
|
|
}
|
|
}
|
|
];
|
|
|
|
let beforeCompose = JSON.stringify(parts);
|
|
WSP.PduHelper.composeMultiPart(multiStream, parts);
|
|
let afterCompose = JSON.stringify(parts);
|
|
|
|
do_check_eq(beforeCompose, afterCompose);
|
|
run_next_test();
|
|
});
|