outlookemailmicrosoft-teamsdiscordmessengercustom-servicesmacoslinuxwindowsinboxwhatsappicloudtweetdeckhipchattelegramhangoutsslackgmailskypefacebook-workplace
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1396 lines
66 KiB
1396 lines
66 KiB
9 years ago
|
describe("Ext.data.amf.Packet", function() {
|
||
|
|
||
|
describe("AMF0", function() {
|
||
|
describe("data types", function() {
|
||
|
// this function creates an AMF0 packet with 0 headers and 1 message
|
||
|
// and appends "bytes" as the message body, then decodes and returns
|
||
|
// the value of the packet's message body
|
||
|
function decodeValue(bytes) {
|
||
|
return (new Ext.data.amf.Packet()).decode(
|
||
|
[0,0,0,0,0,1,0,1,97,0,1,98,0,0,0,0].concat(bytes)
|
||
|
).getMessages()[0].body;
|
||
|
}
|
||
|
|
||
|
describe("number", function() {
|
||
|
it("should decode 0", function() {
|
||
|
expect(decodeValue([0,0,0,0,0,0,0,0,0])).toBe(0);
|
||
|
});
|
||
|
|
||
|
it("should decode 10.333", function() {
|
||
|
expect(decodeValue([0,64,36,170,126,249,219,34,209])).toBe(10.333);
|
||
|
});
|
||
|
|
||
|
it("should decode 1.7976931348623157e+308 (largest positive number)", function() {
|
||
|
expect(decodeValue([0,127,239,255,255,255,255,255,255])).toBe(Number.MAX_VALUE);
|
||
|
});
|
||
|
|
||
|
it("should decode -1.7976931348623157e+308 (largest negative number)", function() {
|
||
|
expect(decodeValue([0,255,239,255,255,255,255,255,255])).toBe(-Number.MAX_VALUE);
|
||
|
});
|
||
|
|
||
|
it("should decode 5e-324 (smallest positive number)", function() {
|
||
|
expect(decodeValue([0,0,0,0,0,0,0,0,1])).toBe(Number.MIN_VALUE);
|
||
|
});
|
||
|
|
||
|
it("should decode -5e-324 (smallest negative number)", function() {
|
||
|
expect(decodeValue([0,128,0,0,0,0,0,0,1])).toBe(-Number.MIN_VALUE);
|
||
|
});
|
||
|
|
||
|
it("should decode NaN", function() {
|
||
|
expect(isNaN(decodeValue([0,127,248,0,0,0,0,0,0]))).toBe(true);
|
||
|
});
|
||
|
|
||
|
it("should decode positive infinity", function() {
|
||
|
expect(decodeValue([0,127,240,0,0,0,0,0,0])).toBe(Infinity);
|
||
|
});
|
||
|
|
||
|
it("should decode negative infinity", function() {
|
||
|
expect(decodeValue([0,255,240,0,0,0,0,0,0])).toBe(-Infinity);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe("boolean", function() {
|
||
|
it("should decode true", function() {
|
||
|
expect(decodeValue([1,1])).toBe(true);
|
||
|
});
|
||
|
|
||
|
it("should decode true when the value is a non-zero value other than 1", function() {
|
||
|
expect(decodeValue([1,42])).toBe(true);
|
||
|
});
|
||
|
|
||
|
it("should decode false", function() {
|
||
|
expect(decodeValue([1,0])).toBe(false);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe("string (utf-8)", function() {
|
||
|
it("should decode an empty string", function() {
|
||
|
expect(decodeValue([2,0,0])).toBe('');
|
||
|
});
|
||
|
|
||
|
// Special thanks to Markus Kuhn's "quickbrown.txt" for the
|
||
|
// following awesome pangrams.
|
||
|
// http://www.cl.cam.ac.uk/~mgk25/ucs/examples/quickbrown.txt
|
||
|
it("should decode Danish", function() {
|
||
|
expect(decodeValue([
|
||
|
2,0,90,81,117,105,122,100,101,108,116,97,103,101,114,110,
|
||
|
101,32,115,112,105,115,116,101,32,106,111,114,100,98,195,
|
||
|
166,114,32,109,101,100,32,102,108,195,184,100,101,44,32,
|
||
|
109,101,110,115,32,99,105,114,107,117,115,107,108,111,118,
|
||
|
110,101,110,32,87,111,108,116,104,101,114,32,115,112,105,
|
||
|
108,108,101,100,101,32,112,195,165,32,120,121,108,111,102,
|
||
|
111,110
|
||
|
])).toBe(
|
||
|
"Quizdeltagerne spiste jordb\u00E6r med fl\u00F8de, mens " +
|
||
|
"cirkusklovnen Wolther spillede p\u00E5 xylofon"
|
||
|
);
|
||
|
});
|
||
|
|
||
|
it("should decode German", function() {
|
||
|
expect(decodeValue([
|
||
|
2,0,62,70,97,108,115,99,104,101,115,32,195,156,98,101,110,
|
||
|
32,118,111,110,32,88,121,108,111,112,104,111,110,109,117,
|
||
|
115,105,107,32,113,117,195,164,108,116,32,106,101,100,101,
|
||
|
110,32,103,114,195,182,195,159,101,114,101,110,32,90,119,
|
||
|
101,114,103
|
||
|
])).toBe(
|
||
|
"Falsches \u00DCben von Xylophonmusik qu\u00E4lt jeden gr\u00F6\u00DFeren Zwerg"
|
||
|
);
|
||
|
});
|
||
|
|
||
|
it("should decode Greek", function() {
|
||
|
expect(decodeValue([
|
||
|
2,0,103,206,147,206,177,206,182,206,173,206,181,207,130,
|
||
|
32,206,186,206,177,225,189,182,32,206,188,207,133,207,129,
|
||
|
207,132,206,185,225,189,178,207,130,32,206,180,225,189,
|
||
|
178,206,189,32,206,184,225,189,176,32,206,178,207,129,225,
|
||
|
191,182,32,207,128,206,185,225,189,176,32,207,131,207,132,
|
||
|
225,189,184,32,207,135,207,129,207,133,207,131,206,177,
|
||
|
207,134,225,189,182,32,206,190,206,173,207,134,207,137,
|
||
|
207,132,206,191
|
||
|
])).toBe(
|
||
|
"\u0393\u03B1\u03B6\u03AD\u03B5\u03C2 \u03BA\u03B1\u1F76 " +
|
||
|
"\u03BC\u03C5\u03C1\u03C4\u03B9\u1F72\u03C2 \u03B4\u1F72\u03BD " +
|
||
|
"\u03B8\u1F70 \u03B2\u03C1\u1FF6 \u03C0\u03B9\u1F70 \u03C3\u03C4\u1F78 " +
|
||
|
"\u03C7\u03C1\u03C5\u03C3\u03B1\u03C6\u1F76 \u03BE\u03AD\u03C6\u03C9\u03C4\u03BF"
|
||
|
);
|
||
|
});
|
||
|
|
||
|
it("should decode English", function() {
|
||
|
expect(decodeValue([
|
||
|
2,0,43,84,104,101,32,113,117,105,99,107,32,98,114,111,119,
|
||
|
110,32,102,111,120,32,106,117,109,112,115,32,111,118,101,
|
||
|
114,32,116,104,101,32,108,97,122,121,32,100,111,103
|
||
|
])).toBe(
|
||
|
"The quick brown fox jumps over the lazy dog"
|
||
|
);
|
||
|
});
|
||
|
|
||
|
it("should decode Spanish", function() {
|
||
|
expect(decodeValue([
|
||
|
2,0,64,69,108,32,112,105,110,103,195,188,105,110,111,32,
|
||
|
87,101,110,99,101,115,108,97,111,32,104,105,122,111,32,
|
||
|
107,105,108,195,179,109,101,116,114,111,115,32,98,97,106,
|
||
|
111,32,101,120,104,97,117,115,116,105,118,97,32,108,108,
|
||
|
117,118,105,97,32,121
|
||
|
])).toBe(
|
||
|
"El ping\u00FCino Wenceslao hizo kil\u00F3metros bajo exhaustiva " +
|
||
|
"lluvia y"
|
||
|
);
|
||
|
});
|
||
|
|
||
|
it("should decode French", function() {
|
||
|
expect(decodeValue([
|
||
|
2,0,106,108,39,195,174,108,101,32,101,120,105,103,117,195,
|
||
|
171,32,79,195,185,32,108,39,111,98,195,168,115,101,32,106,
|
||
|
117,114,121,32,109,195,187,114,32,70,195,170,116,101,32,
|
||
|
108,39,104,97,195,175,32,118,111,108,97,112,195,188,107,
|
||
|
44,32,195,130,110,101,32,101,120,32,97,195,169,113,117,
|
||
|
111,32,97,117,32,119,104,105,115,116,44,32,195,148,116,
|
||
|
101,122,32,99,101,32,118,197,147,117,32,100,195,169,195,
|
||
|
167,117
|
||
|
])).toBe(
|
||
|
"l'\u00EEle exigu\u00EB O\u00F9 l'ob\u00E8se jury m\u00FBr F\u00EAte l'ha\u00EF volap\u00FCk, " +
|
||
|
"\u00C2ne ex a\u00E9quo au whist, \u00D4tez ce v\u0153u d\u00E9\u00E7u"
|
||
|
);
|
||
|
});
|
||
|
|
||
|
it("should decode Irish Gaelic", function() {
|
||
|
expect(decodeValue([
|
||
|
2,0,74,68,39,102,104,117,97,115,99,97,105,108,32,195,141,
|
||
|
111,115,97,44,32,195,154,114,109,104,97,99,32,110,97,32,
|
||
|
104,195,147,105,103,104,101,32,66,101,97,110,110,97,105,
|
||
|
116,104,101,44,32,112,195,179,114,32,195,137,97,118,97,32,
|
||
|
97,103,117,115,32,195,129,100,104,97,105,109,104
|
||
|
])).toBe(
|
||
|
"D'fhuascail \u00CDosa, \u00DArmhac na h\u00D3ighe Beannaithe, p\u00F3r " +
|
||
|
"\u00C9ava agus \u00C1dhaimh"
|
||
|
);
|
||
|
});
|
||
|
|
||
|
it("should decode Hungarian", function() {
|
||
|
expect(decodeValue([
|
||
|
2,0,31,195,129,114,118,195,173,122,116,197,177,114,197,
|
||
|
145,32,116,195,188,107,195,182,114,102,195,186,114,195,
|
||
|
179,103,195,169,112
|
||
|
])).toBe(
|
||
|
"\u00C1rv\u00EDzt\u0171r\u0151 t\u00FCk\u00F6rf\u00FAr\u00F3g\u00E9p"
|
||
|
);
|
||
|
});
|
||
|
|
||
|
it("should decode Icelandic", function() {
|
||
|
expect(decodeValue([
|
||
|
2,0,61,75,195,166,109,105,32,110,195,189,32,195,182,120,
|
||
|
105,32,104,195,169,114,32,121,107,105,115,116,32,195,190,
|
||
|
106,195,179,102,117,109,32,110,195,186,32,98,195,166,195,
|
||
|
176,105,32,118,195,173,108,32,111,103,32,195,161,100,114,
|
||
|
101,112,97
|
||
|
])).toBe(
|
||
|
"K\u00E6mi n\u00FD \u00F6xi h\u00E9r ykist \u00FEj\u00F3fum n\u00FA b\u00E6\u00F0i v\u00EDl og " +
|
||
|
"\u00E1drepa"
|
||
|
);
|
||
|
});
|
||
|
|
||
|
it("should decode Japanese (Hiragana)", function() {
|
||
|
expect(decodeValue([
|
||
|
2,0,141,227,129,132,227,130,141,227,129,175,227,129,171,
|
||
|
227,129,187,227,129,184,227,129,168,227,129,161,227,130,
|
||
|
138,227,129,172,227,130,139,227,130,146,227,130,143,227,
|
||
|
129,139,227,130,136,227,129,159,227,130,140,227,129,157,
|
||
|
227,129,164,227,129,173,227,129,170,227,130,137,227,130,
|
||
|
128,227,129,134,227,130,144,227,129,174,227,129,138,227,
|
||
|
129,143,227,130,132,227,129,190,227,129,145,227,129,181,
|
||
|
227,129,147,227,129,136,227,129,166,227,129,130,227,129,
|
||
|
149,227,129,141,227,130,134,227,130,129,227,129,191,227,
|
||
|
129,151,227,130,145,227,129,178,227,130,130,227,129,155,
|
||
|
227,129,153
|
||
|
])).toBe(
|
||
|
"\u3044\u308D\u306F\u306B\u307B\u3078\u3068\u3061\u308A\u306C\u308B\u3092\u308F\u304B\u3088" +
|
||
|
"\u305F\u308C\u305D\u3064\u306D\u306A\u3089\u3080\u3046\u3090\u306E\u304A\u304F\u3084" +
|
||
|
"\u307E\u3051\u3075" +
|
||
|
"\u3053\u3048\u3066\u3042\u3055\u304D\u3086\u3081\u307F\u3057\u3091\u3072\u3082\u305B\u3059"
|
||
|
);
|
||
|
});
|
||
|
|
||
|
it("should decode Japanese (Katakana)", function() {
|
||
|
expect(decodeValue([
|
||
|
2,0,151,227,130,164,227,131,173,227,131,143,227,131,139,
|
||
|
227,131,155,227,131,152,227,131,136,32,227,131,129,227,
|
||
|
131,170,227,131,140,227,131,171,227,131,178,32,227,131,
|
||
|
175,227,130,171,227,131,168,227,130,191,227,131,172,227,
|
||
|
130,189,32,227,131,132,227,131,141,227,131,138,227,131,
|
||
|
169,227,131,160,32,227,130,166,227,131,176,227,131,142,
|
||
|
227,130,170,227,130,175,227,131,164,227,131,158,32,227,
|
||
|
130,177,227,131,149,227,130,179,227,130,168,227,131,134,
|
||
|
32,227,130,162,227,130,181,227,130,173,227,131,166,227,
|
||
|
131,161,227,131,159,227,130,183,32,227,131,177,227,131,
|
||
|
146,227,131,162,227,130,187,227,130,185,227,131,179
|
||
|
])).toBe(
|
||
|
"\u30A4\u30ED\u30CF\u30CB\u30DB\u30D8\u30C8 \u30C1\u30EA\u30CC\u30EB\u30F2 " +
|
||
|
"\u30EF\u30AB\u30E8\u30BF\u30EC\u30BD \u30C4\u30CD\u30CA\u30E9\u30E0 " +
|
||
|
"\u30A6\u30F0\u30CE\u30AA\u30AF\u30E4\u30DE " +
|
||
|
"\u30B1\u30D5\u30B3\u30A8\u30C6 \u30A2\u30B5\u30AD\u30E6\u30E1\u30DF\u30B7 " +
|
||
|
"\u30F1\u30D2\u30E2\u30BB\u30B9\u30F3"
|
||
|
);
|
||
|
});
|
||
|
|
||
|
it("should decode Hebrew", function() {
|
||
|
expect(decodeValue([
|
||
|
2,0,90,215,147,215,146,32,215,161,215,167,215,168,215,159,
|
||
|
32,215,169,215,152,32,215,145,215,153,215,157,32,215,158,
|
||
|
215,144,215,149,215,155,215,150,215,145,32,215,149,215,
|
||
|
156,215,164,215,170,215,162,32,215,158,215,166,215,144,32,
|
||
|
215,156,215,149,32,215,151,215,145,215,168,215,148,32,215,
|
||
|
144,215,153,215,154,32,215,148,215,167,215,156,215,153,
|
||
|
215,152,215,148
|
||
|
])).toBe(
|
||
|
"\u05D3\u05D2 \u05E1\u05E7\u05E8\u05DF \u05E9\u05D8 \u05D1\u05D9\u05DD " +
|
||
|
"\u05DE\u05D0\u05D5\u05DB\u05D6\u05D1 \u05D5\u05DC\u05E4\u05EA\u05E2 \u05DE\u05E6\u05D0 " +
|
||
|
"\u05DC\u05D5 \u05D7\u05D1\u05E8\u05D4 \u05D0\u05D9\u05DA \u05D4\u05E7\u05DC\u05D9\u05D8\u05D4");
|
||
|
});
|
||
|
|
||
|
it("should decode Polish", function() {
|
||
|
expect(decodeValue([
|
||
|
2,0,49,80,99,104,110,196,133,196,135,32,119,32,116,196,
|
||
|
153,32,197,130,195,179,100,197,186,32,106,101,197,188,97,
|
||
|
32,108,117,98,32,111,197,155,109,32,115,107,114,122,121,
|
||
|
197,132,32,102,105,103
|
||
|
])).toBe(
|
||
|
"Pchn\u0105\u0107 w t\u0119 \u0142\u00F3d\u017A je\u017Ca lub o\u015Bm skrzy\u0144 fig"
|
||
|
);
|
||
|
});
|
||
|
|
||
|
it("should decode Russian", function() {
|
||
|
expect(decodeValue([
|
||
|
2,0,96,208,146,32,209,135,208,176,209,137,208,176,209,133,
|
||
|
32,209,142,208,179,208,176,32,208,182,208,184,208,187,32,
|
||
|
208,177,209,139,32,209,134,208,184,209,130,209,128,209,
|
||
|
131,209,129,63,32,208,148,208,176,44,32,208,189,208,190,
|
||
|
32,209,132,208,176,208,187,209,140,209,136,208,184,208,
|
||
|
178,209,139,208,185,32,209,141,208,186,208,183,208,181,
|
||
|
208,188,208,191,208,187,209,143,209,128,33
|
||
|
])).toBe(
|
||
|
"\u0412 \u0447\u0430\u0449\u0430\u0445 \u044E\u0433\u0430 \u0436\u0438\u043B" +
|
||
|
" \u0431\u044B \u0446\u0438\u0442\u0440\u0443\u0441? \u0414\u0430, \u043D\u043E" +
|
||
|
" \u0444\u0430\u043B\u044C\u0448\u0438\u0432\u044B\u0439" +
|
||
|
" \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440!"
|
||
|
);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe("object", function() {
|
||
|
it("should decode an object", function() {
|
||
|
expect(decodeValue([
|
||
|
3,0,3,102,111,111,2,0,3,98,97,114,0,3,98,97,122,2,0,3,98,
|
||
|
117,122,0,0,9
|
||
|
])).toEqual({
|
||
|
foo: 'bar',
|
||
|
baz: 'buz'
|
||
|
});
|
||
|
});
|
||
|
|
||
|
it("should decode nested objects", function() {
|
||
|
expect(decodeValue([
|
||
|
3,0,4,122,111,114,107,2,0,4,103,111,114,107,0,3,102,111,
|
||
|
111,2,0,3,98,97,114,0,3,98,97,122,3,0,4,116,104,117,100,
|
||
|
2,0,5,103,114,117,110,116,0,5,111,111,103,108,101,2,0,6,
|
||
|
102,111,111,103,108,101,0,0,9,0,0,9
|
||
|
])).toEqual({
|
||
|
foo: 'bar',
|
||
|
baz: {
|
||
|
thud: 'grunt',
|
||
|
oogle: 'foogle'
|
||
|
},
|
||
|
zork: 'gork'
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe("null", function() {
|
||
|
it("should decode null", function() {
|
||
|
expect(decodeValue([5])).toBe(null);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe("undefined", function() {
|
||
|
it("should decode undefined", function() {
|
||
|
expect(decodeValue([6])).toBe(undefined);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe("reference", function() {
|
||
|
it("should decode anonymous object references", function() {
|
||
|
var obj = decodeValue([
|
||
|
// this byte array represents an object that looks like
|
||
|
// obj3 below:
|
||
|
//
|
||
|
// obj1 = {foo: 'bar'};
|
||
|
// obj2 = {baz: 'buz'};
|
||
|
// obj3 = {
|
||
|
// homer: obj1,
|
||
|
// marge: obj2,
|
||
|
// bart: obj1,
|
||
|
// lisa: obj2
|
||
|
// };
|
||
|
3,0,5,104,111,109,101,114,3,0,3,102,111,111,2,0,3,98,97,
|
||
|
114,0,0,9,0,4,108,105,115,97,3,0,3,98,97,122,2,0,3,98,
|
||
|
117,122,0,0,9,0,5,109,97,114,103,101,7,0,2,0,4,98,97,114,
|
||
|
116,7,0,1,0,0,9
|
||
|
]);
|
||
|
|
||
|
expect(obj.homer).toEqual({foo: 'bar'});
|
||
|
expect(obj.marge).toEqual({baz: 'buz'});
|
||
|
// homer and bart should refer to the same object
|
||
|
expect(obj.homer).toBe(obj.bart);
|
||
|
// marge and lisa should refer to the same object
|
||
|
expect(obj.marge).toBe(obj.lisa);
|
||
|
});
|
||
|
|
||
|
it("should decode ecma array references", function() {
|
||
|
// TODO
|
||
|
});
|
||
|
|
||
|
it("should decode strict array references", function() {
|
||
|
// TODO
|
||
|
});
|
||
|
|
||
|
it("should decode typed object references", function() {
|
||
|
// TODO
|
||
|
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe("ecma array", function() {
|
||
|
it("should decode an ecma array", function() {
|
||
|
expect(decodeValue([
|
||
|
8,0,0,0,3,0,1,97,2,0,1,49,0,1,99,2,0,1,51,0,1,98,2,0,1,50,
|
||
|
0,0,9
|
||
|
])).toEqual({
|
||
|
a: '1',
|
||
|
b: '2',
|
||
|
c: '3'
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe("strict array", function() {
|
||
|
it("should decode a strict array", function() {
|
||
|
expect(decodeValue([
|
||
|
10,0,0,0,3,2,0,1,120,2,0,1,121,2,0,1,122
|
||
|
])).toEqual(['x','y','z']);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe("date", function() {
|
||
|
it("should decode 7/24/2012 (the day this test was written)", function() {
|
||
|
expect(decodeValue([
|
||
|
11,66,115,139,173,239,119,80,0,0,0
|
||
|
]).getTime()).toBe(1343164970869);
|
||
|
});
|
||
|
|
||
|
it("should decode 7/24/1912 (100 years before the day this test was written)", function() {
|
||
|
expect(decodeValue([
|
||
|
11,194,122,96,113,83,72,176,0,0,0
|
||
|
]).getTime()).toBe(-1812595029131);
|
||
|
});
|
||
|
|
||
|
it("should decode 7/24/2112 (100 years after the day this test was written)", function() {
|
||
|
expect(decodeValue([
|
||
|
11,66,144,93,222,179,29,212,0,0,0
|
||
|
]).getTime()).toBe(4498838570869);
|
||
|
});
|
||
|
|
||
|
it("should decode the UNIX epoch", function() {
|
||
|
expect(decodeValue([
|
||
|
11,0,0,0,0,0,0,0,0,0,0
|
||
|
]).getTime()).toBe(0);
|
||
|
});
|
||
|
|
||
|
it("should decode 9/12/275760 (the largest future javascript date)", function() {
|
||
|
expect(decodeValue([
|
||
|
11,67,62,178,8,194,220,0,0,0,0
|
||
|
]).getTime()).toBe(8640000000000000);
|
||
|
});
|
||
|
|
||
|
it("should decode 4/19/-271821 (the largest past javascript date)", function() {
|
||
|
expect(decodeValue([
|
||
|
11,195,62,178,8,194,220,0,0,0,0
|
||
|
]).getTime()).toBe(-8640000000000000);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe("long string", function() {
|
||
|
it("should decode a long string", function() {
|
||
|
// since the max length of a regular string is 65,535, lets
|
||
|
// make sure we can decode a long string at least 3 times
|
||
|
// that size. Testing the maximum long string would require
|
||
|
// us to construct a string that is Math.pow(256,4)
|
||
|
// characters in length, which would crash most browsers.
|
||
|
var len = 65535 * 3,
|
||
|
i = 0,
|
||
|
byteArray = [
|
||
|
12, // long string type marker
|
||
|
0,2,255,253 // 32 bit byte-length header (the binary
|
||
|
// representation of 65,535 * 3, or 196,605
|
||
|
// tells the decoder how many bytes to read
|
||
|
],
|
||
|
stringArray = [],
|
||
|
charCode;
|
||
|
|
||
|
for(; i < len; i++) {
|
||
|
charCode = 97 + (i % 7); // repeat characters a-g
|
||
|
byteArray.push(charCode);
|
||
|
stringArray.push(String.fromCharCode(charCode));
|
||
|
}
|
||
|
|
||
|
expect(decodeValue(byteArray)).toBe(stringArray.join(''));
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe("unsupported", function() {
|
||
|
it("should decode an unsupported marker", function() {
|
||
|
expect(decodeValue([13])).toBe(undefined);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe("xml document", function() {
|
||
|
it("should decode an xml document", function() {
|
||
|
var doc = decodeValue([
|
||
|
15,0,0,0,82,60,114,111,111,116,62,60,112,97,114,101,110,
|
||
|
116,62,60,99,104,105,108,100,32,105,100,61,34,99,49,34,
|
||
|
62,102,111,111,60,47,99,104,105,108,100,62,60,99,104,105,
|
||
|
108,100,32,105,100,61,34,99,50,34,62,98,97,114,60,47,99,
|
||
|
104,105,108,100,62,60,47,112,97,114,101,110,116,62,60,47,
|
||
|
114,111,111,116,62
|
||
|
]);
|
||
|
|
||
|
expect(Ext.DomQuery.isXml(doc)).toBe(true);
|
||
|
|
||
|
expect(doc.firstChild.tagName).toBe('root');
|
||
|
expect(doc.firstChild.firstChild.tagName).toBe('parent');
|
||
|
expect(doc.firstChild.firstChild.firstChild.tagName).toBe('child');
|
||
|
expect(doc.firstChild.firstChild.firstChild.firstChild.nodeValue).toBe('foo');
|
||
|
expect(doc.firstChild.firstChild.firstChild.getAttribute('id')).toBe('c1');
|
||
|
expect(doc.firstChild.firstChild.childNodes[1].tagName).toBe('child');
|
||
|
expect(doc.firstChild.firstChild.childNodes[1].firstChild.nodeValue).toBe('bar');
|
||
|
expect(doc.firstChild.firstChild.childNodes[1].getAttribute('id')).toBe('c2');
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe("typed object", function() {
|
||
|
it("should decode a typed object by alias", function() {
|
||
|
Ext.define('Ext.Foo', {
|
||
|
alias: 'amf.Foo'
|
||
|
});
|
||
|
var obj = decodeValue([
|
||
|
16,0,3,70,111,111,0,3,98,97,114,2,0,3,98,97,122,0,0,9
|
||
|
]),
|
||
|
foo = new Ext.Foo();
|
||
|
|
||
|
foo.bar = 'baz';
|
||
|
|
||
|
expect(obj).toEqual(foo);
|
||
|
//Ext.undefine('Ext.Foo');
|
||
|
//Ext.Foo = nil;
|
||
|
delete Ext.Foo;
|
||
|
});
|
||
|
|
||
|
it("should decode a typed object as an anonymous object with a $className field if no class is found by alias", function() {
|
||
|
var obj = decodeValue([
|
||
|
16,0,3,70,111,117,0,3,98,97,114,2,0,3,98,97,122,0,0,9
|
||
|
]);
|
||
|
|
||
|
expect(obj).toEqual({
|
||
|
$className: 'Fou', // use Fou instead of Foo since that's already defined in a different test and lingers around
|
||
|
bar: 'baz'
|
||
|
});
|
||
|
});
|
||
|
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe("AMF3", function() {
|
||
|
describe("data types", function() {
|
||
|
// this function creates an AMF3 packet with 0 headers and 1 message
|
||
|
// and appends "bytes" as the message body, then decodes and returns
|
||
|
// the value of the packet's message body
|
||
|
function decodeValue(bytes) {
|
||
|
return (new Ext.data.amf.Packet()).decode(
|
||
|
[0,3,0,0,0,1,0,1,97,0,1,98,0,0,0,0].concat(bytes)
|
||
|
).getMessages()[0].body;
|
||
|
}
|
||
|
|
||
|
describe("undefined", function() {
|
||
|
it("should decode undefined", function() {
|
||
|
expect(decodeValue([0])).toBeUndefined();
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe("null", function() {
|
||
|
it("should decode null", function() {
|
||
|
expect(decodeValue([1])).toBe(null);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe("false", function() {
|
||
|
it("should decode false", function() {
|
||
|
expect(decodeValue([2])).toBe(false);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe("true", function() {
|
||
|
it("should decode true", function() {
|
||
|
expect(decodeValue([3])).toBe(true);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe("integer", function() {
|
||
|
it("should decode 0", function() {
|
||
|
expect(decodeValue([4,0])).toBe(0);
|
||
|
});
|
||
|
|
||
|
it("should decode a 127", function() {
|
||
|
expect(decodeValue([4,127])).toBe(127);
|
||
|
});
|
||
|
|
||
|
it("should decode 128", function() {
|
||
|
expect(decodeValue([4,129,0])).toBe(128);
|
||
|
});
|
||
|
|
||
|
it("should decode 137", function() {
|
||
|
expect(decodeValue([4,129,9])).toBe(137);
|
||
|
});
|
||
|
|
||
|
it("should decode 8256", function() {
|
||
|
expect(decodeValue([4,192,64])).toBe(8256);
|
||
|
});
|
||
|
|
||
|
it("should decode 16320", function() {
|
||
|
expect(decodeValue([4,255,64])).toBe(16320);
|
||
|
});
|
||
|
|
||
|
it("should decode 16512", function() {
|
||
|
expect(decodeValue([4,129,129,0])).toBe(16512);
|
||
|
});
|
||
|
|
||
|
it("should decode 16576", function() {
|
||
|
expect(decodeValue([4,129,129,64])).toBe(16576);
|
||
|
});
|
||
|
|
||
|
it("should decode 32704", function() {
|
||
|
expect(decodeValue([4,129,255,64])).toBe(32704);
|
||
|
});
|
||
|
|
||
|
it("should decode 2097088", function() {
|
||
|
expect(decodeValue([4,255,255,64])).toBe(2097088);
|
||
|
});
|
||
|
|
||
|
it("should decode 4227328", function() {
|
||
|
expect(decodeValue([4,129,129,129,0])).toBe(4227328);
|
||
|
});
|
||
|
|
||
|
it("should decode 270532928", function() {
|
||
|
expect(decodeValue([4,192,192,129,64])).toBe(270532928);
|
||
|
});
|
||
|
|
||
|
it("should decode 2^29-1 (the largest possible unsigned 29-bit int)", function() {
|
||
|
expect(decodeValue([4,255,255,255,255])).toBe(Math.pow(2,29) - 1);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe("double", function() {
|
||
|
it("should decode 0", function() {
|
||
|
expect(decodeValue([5,0,0,0,0,0,0,0,0])).toBe(0);
|
||
|
});
|
||
|
|
||
|
it("should decode 10.333", function() {
|
||
|
expect(decodeValue([5,64,36,170,126,249,219,34,209])).toBe(10.333);
|
||
|
});
|
||
|
|
||
|
it("should decode 1.7976931348623157e+308 (largest positive number)", function() {
|
||
|
expect(decodeValue([5,127,239,255,255,255,255,255,255])).toBe(Number.MAX_VALUE);
|
||
|
});
|
||
|
|
||
|
it("should decode -1.7976931348623157e+308 (largest negative number)", function() {
|
||
|
expect(decodeValue([5,255,239,255,255,255,255,255,255])).toBe(-Number.MAX_VALUE);
|
||
|
});
|
||
|
|
||
|
it("should decode 5e-324 (smallest positive number)", function() {
|
||
|
expect(decodeValue([5,0,0,0,0,0,0,0,1])).toBe(Number.MIN_VALUE);
|
||
|
});
|
||
|
|
||
|
it("should decode -5e-324 (smallest negative number)", function() {
|
||
|
expect(decodeValue([5,128,0,0,0,0,0,0,1])).toBe(-Number.MIN_VALUE);
|
||
|
});
|
||
|
|
||
|
it("should decode NaN", function() {
|
||
|
expect(isNaN(decodeValue([5,127,248,0,0,0,0,0,0]))).toBe(true);
|
||
|
});
|
||
|
|
||
|
it("should decode positive infinity", function() {
|
||
|
expect(decodeValue([5,127,240,0,0,0,0,0,0])).toBe(Infinity);
|
||
|
});
|
||
|
|
||
|
it("should decode negative infinity", function() {
|
||
|
expect(decodeValue([5,255,240,0,0,0,0,0,0])).toBe(-Infinity);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe("string", function() {
|
||
|
it("should decode an empty string", function() {
|
||
|
expect(decodeValue([6,1])).toBe('');
|
||
|
});
|
||
|
|
||
|
// Special thanks to Markus Kuhn's "quickbrown.txt" for the
|
||
|
// following awesome pangrams.
|
||
|
// http://www.cl.cam.ac.uk/~mgk25/ucs/examples/quickbrown.txt
|
||
|
it("should decode Danish", function() {
|
||
|
expect(decodeValue([
|
||
|
6,129,53,81,117,105,122,100,101,108,116,97,103,101,114,110,
|
||
|
101,32,115,112,105,115,116,101,32,106,111,114,100,98,195,
|
||
|
166,114,32,109,101,100,32,102,108,195,184,100,101,44,32,
|
||
|
109,101,110,115,32,99,105,114,107,117,115,107,108,111,118,
|
||
|
110,101,110,32,87,111,108,116,104,101,114,32,115,112,105,
|
||
|
108,108,101,100,101,32,112,195,165,32,120,121,108,111,102,
|
||
|
111,110
|
||
|
])).toBe(
|
||
|
"Quizdeltagerne spiste jordb\u00E6r med fl\u00F8de, mens " +
|
||
|
"cirkusklovnen Wolther spillede p\u00E5 xylofon"
|
||
|
);
|
||
|
});
|
||
|
|
||
|
it("should decode German", function() {
|
||
|
expect(decodeValue([
|
||
|
6,125,70,97,108,115,99,104,101,115,32,195,156,98,101,110,
|
||
|
32,118,111,110,32,88,121,108,111,112,104,111,110,109,117,
|
||
|
115,105,107,32,113,117,195,164,108,116,32,106,101,100,101,
|
||
|
110,32,103,114,195,182,195,159,101,114,101,110,32,90,119,
|
||
|
101,114,103
|
||
|
])).toBe(
|
||
|
"Falsches \u00DCben von Xylophonmusik qu\u00E4lt jeden gr\u00F6\u00DFeren Zwerg"
|
||
|
);
|
||
|
});
|
||
|
|
||
|
it("should decode Greek", function() {
|
||
|
expect(decodeValue([
|
||
|
6,129,79,206,147,206,177,206,182,206,173,206,181,207,130,
|
||
|
32,206,186,206,177,225,189,182,32,206,188,207,133,207,129,
|
||
|
207,132,206,185,225,189,178,207,130,32,206,180,225,189,
|
||
|
178,206,189,32,206,184,225,189,176,32,206,178,207,129,225,
|
||
|
191,182,32,207,128,206,185,225,189,176,32,207,131,207,132,
|
||
|
225,189,184,32,207,135,207,129,207,133,207,131,206,177,
|
||
|
207,134,225,189,182,32,206,190,206,173,207,134,207,137,
|
||
|
207,132,206,191
|
||
|
])).toBe(
|
||
|
"\u0393\u03B1\u03B6\u03AD\u03B5\u03C2 \u03BA\u03B1\u1F76 " +
|
||
|
"\u03BC\u03C5\u03C1\u03C4\u03B9\u1F72\u03C2 \u03B4\u1F72\u03BD \u03B8\u1F70 " +
|
||
|
"\u03B2\u03C1\u1FF6 \u03C0\u03B9\u1F70 \u03C3\u03C4\u1F78 " +
|
||
|
"\u03C7\u03C1\u03C5\u03C3\u03B1\u03C6\u1F76 \u03BE\u03AD\u03C6\u03C9\u03C4\u03BF"
|
||
|
);
|
||
|
});
|
||
|
|
||
|
it("should decode English", function() {
|
||
|
expect(decodeValue([
|
||
|
6,87,84,104,101,32,113,117,105,99,107,32,98,114,111,119,
|
||
|
110,32,102,111,120,32,106,117,109,112,115,32,111,118,101,
|
||
|
114,32,116,104,101,32,108,97,122,121,32,100,111,103
|
||
|
])).toBe(
|
||
|
"The quick brown fox jumps over the lazy dog"
|
||
|
);
|
||
|
});
|
||
|
|
||
|
it("should decode Spanish", function() {
|
||
|
expect(decodeValue([
|
||
|
6,129,1,69,108,32,112,105,110,103,195,188,105,110,111,32,
|
||
|
87,101,110,99,101,115,108,97,111,32,104,105,122,111,32,
|
||
|
107,105,108,195,179,109,101,116,114,111,115,32,98,97,106,
|
||
|
111,32,101,120,104,97,117,115,116,105,118,97,32,108,108,
|
||
|
117,118,105,97,32,121
|
||
|
])).toBe(
|
||
|
"El ping\u00FCino Wenceslao hizo kil\u00F3metros bajo exhaustiva " +
|
||
|
"lluvia y"
|
||
|
);
|
||
|
});
|
||
|
|
||
|
it("should decode French", function() {
|
||
|
expect(decodeValue([
|
||
|
6,129,85,108,39,195,174,108,101,32,101,120,105,103,117,195,
|
||
|
171,32,79,195,185,32,108,39,111,98,195,168,115,101,32,106,
|
||
|
117,114,121,32,109,195,187,114,32,70,195,170,116,101,32,
|
||
|
108,39,104,97,195,175,32,118,111,108,97,112,195,188,107,
|
||
|
44,32,195,130,110,101,32,101,120,32,97,195,169,113,117,
|
||
|
111,32,97,117,32,119,104,105,115,116,44,32,195,148,116,
|
||
|
101,122,32,99,101,32,118,197,147,117,32,100,195,169,195,
|
||
|
167,117
|
||
|
])).toBe(
|
||
|
"l'\u00EEle exigu\u00EB O\u00F9 l'ob\u00E8se jury m\u00FBr F\u00EAte l'ha\u00EF volap\u00FCk, " +
|
||
|
"\u00C2ne ex a\u00E9quo au whist, \u00D4tez ce v\u0153u d\u00E9\u00E7u"
|
||
|
);
|
||
|
});
|
||
|
|
||
|
it("should decode Irish Gaelic", function() {
|
||
|
expect(decodeValue([
|
||
|
6,129,21,68,39,102,104,117,97,115,99,97,105,108,32,195,141,
|
||
|
111,115,97,44,32,195,154,114,109,104,97,99,32,110,97,32,
|
||
|
104,195,147,105,103,104,101,32,66,101,97,110,110,97,105,
|
||
|
116,104,101,44,32,112,195,179,114,32,195,137,97,118,97,32,
|
||
|
97,103,117,115,32,195,129,100,104,97,105,109,104
|
||
|
])).toBe(
|
||
|
"D'fhuascail \u00CDosa, \u00DArmhac na h\u00D3ighe Beannaithe, p\u00F3r " +
|
||
|
"\u00C9ava agus \u00C1dhaimh"
|
||
|
);
|
||
|
});
|
||
|
|
||
|
it("should decode Hungarian", function() {
|
||
|
expect(decodeValue([
|
||
|
6,63,195,129,114,118,195,173,122,116,197,177,114,197,
|
||
|
145,32,116,195,188,107,195,182,114,102,195,186,114,195,
|
||
|
179,103,195,169,112
|
||
|
])).toBe(
|
||
|
"\u00C1rv\u00EDzt\u0171r\u0151 t\u00FCk\u00F6rf\u00FAr\u00F3g\u00E9p"
|
||
|
);
|
||
|
});
|
||
|
|
||
|
it("should decode Icelandic", function() {
|
||
|
expect(decodeValue([
|
||
|
6,123,75,195,166,109,105,32,110,195,189,32,195,182,120,
|
||
|
105,32,104,195,169,114,32,121,107,105,115,116,32,195,190,
|
||
|
106,195,179,102,117,109,32,110,195,186,32,98,195,166,195,
|
||
|
176,105,32,118,195,173,108,32,111,103,32,195,161,100,114,
|
||
|
101,112,97
|
||
|
])).toBe(
|
||
|
"K\u00E6mi n\u00FD \u00F6xi h\u00E9r ykist \u00FEj\u00F3fum n\u00FA b\u00E6\u00F0i " +
|
||
|
"v\u00EDl og \u00E1drepa"
|
||
|
);
|
||
|
});
|
||
|
|
||
|
it("should decode Japanese (Hiragana)", function() {
|
||
|
expect(decodeValue([
|
||
|
6,130,27,227,129,132,227,130,141,227,129,175,227,129,171,
|
||
|
227,129,187,227,129,184,227,129,168,227,129,161,227,130,
|
||
|
138,227,129,172,227,130,139,227,130,146,227,130,143,227,
|
||
|
129,139,227,130,136,227,129,159,227,130,140,227,129,157,
|
||
|
227,129,164,227,129,173,227,129,170,227,130,137,227,130,
|
||
|
128,227,129,134,227,130,144,227,129,174,227,129,138,227,
|
||
|
129,143,227,130,132,227,129,190,227,129,145,227,129,181,
|
||
|
227,129,147,227,129,136,227,129,166,227,129,130,227,129,
|
||
|
149,227,129,141,227,130,134,227,130,129,227,129,191,227,
|
||
|
129,151,227,130,145,227,129,178,227,130,130,227,129,155,
|
||
|
227,129,153
|
||
|
])).toBe(
|
||
|
"\u3044\u308D\u306F\u306B\u307B\u3078\u3068\u3061\u308A\u306C\u308B\u3092\u308F\u304B\u3088" +
|
||
|
"\u305F\u308C\u305D\u3064\u306D\u306A\u3089\u3080\u3046\u3090\u306E\u304A\u304F\u3084" +
|
||
|
"\u307E\u3051\u3075" +
|
||
|
"\u3053\u3048\u3066\u3042\u3055\u304D\u3086\u3081\u307F\u3057\u3091\u3072\u3082\u305B\u3059"
|
||
|
);
|
||
|
});
|
||
|
|
||
|
it("should decode Japanese (Katakana)", function() {
|
||
|
expect(decodeValue([
|
||
|
6,130,47,227,130,164,227,131,173,227,131,143,227,131,139,
|
||
|
227,131,155,227,131,152,227,131,136,32,227,131,129,227,
|
||
|
131,170,227,131,140,227,131,171,227,131,178,32,227,131,
|
||
|
175,227,130,171,227,131,168,227,130,191,227,131,172,227,
|
||
|
130,189,32,227,131,132,227,131,141,227,131,138,227,131,
|
||
|
169,227,131,160,32,227,130,166,227,131,176,227,131,142,
|
||
|
227,130,170,227,130,175,227,131,164,227,131,158,32,227,
|
||
|
130,177,227,131,149,227,130,179,227,130,168,227,131,134,
|
||
|
32,227,130,162,227,130,181,227,130,173,227,131,166,227,
|
||
|
131,161,227,131,159,227,130,183,32,227,131,177,227,131,
|
||
|
146,227,131,162,227,130,187,227,130,185,227,131,179
|
||
|
])).toBe(
|
||
|
"\u30A4\u30ED\u30CF\u30CB\u30DB\u30D8\u30C8 \u30C1\u30EA\u30CC\u30EB\u30F2 " +
|
||
|
"\u30EF\u30AB\u30E8\u30BF\u30EC\u30BD \u30C4\u30CD\u30CA\u30E9\u30E0 " +
|
||
|
"\u30A6\u30F0\u30CE\u30AA\u30AF\u30E4\u30DE " +
|
||
|
"\u30B1\u30D5\u30B3\u30A8\u30C6 \u30A2\u30B5\u30AD\u30E6\u30E1\u30DF\u30B7 " +
|
||
|
"\u30F1\u30D2\u30E2\u30BB\u30B9\u30F3"
|
||
|
);
|
||
|
});
|
||
|
|
||
|
it("should decode Hebrew", function() {
|
||
|
expect(decodeValue([
|
||
|
6,129,53,215,147,215,146,32,215,161,215,167,215,168,215,159,
|
||
|
32,215,169,215,152,32,215,145,215,153,215,157,32,215,158,
|
||
|
215,144,215,149,215,155,215,150,215,145,32,215,149,215,
|
||
|
156,215,164,215,170,215,162,32,215,158,215,166,215,144,32,
|
||
|
215,156,215,149,32,215,151,215,145,215,168,215,148,32,215,
|
||
|
144,215,153,215,154,32,215,148,215,167,215,156,215,153,
|
||
|
215,152,215,148
|
||
|
])).toBe("\u05D3\u05D2 \u05E1\u05E7\u05E8\u05DF \u05E9\u05D8 \u05D1\u05D9\u05DD " +
|
||
|
"\u05DE\u05D0\u05D5\u05DB\u05D6\u05D1 \u05D5\u05DC\u05E4\u05EA\u05E2 \u05DE\u05E6\u05D0 " +
|
||
|
"\u05DC\u05D5 \u05D7\u05D1\u05E8\u05D4 \u05D0\u05D9\u05DA \u05D4\u05E7\u05DC\u05D9\u05D8\u05D4");
|
||
|
});
|
||
|
|
||
|
it("should decode Polish", function() {
|
||
|
expect(decodeValue([
|
||
|
6,99,80,99,104,110,196,133,196,135,32,119,32,116,196,
|
||
|
153,32,197,130,195,179,100,197,186,32,106,101,197,188,97,
|
||
|
32,108,117,98,32,111,197,155,109,32,115,107,114,122,121,
|
||
|
197,132,32,102,105,103
|
||
|
])).toBe(
|
||
|
"Pchn\u0105\u0107 w t\u0119 \u0142\u00F3d\u017A je\u017Ca lub o\u015Bm skrzy\u0144 fig"
|
||
|
);
|
||
|
});
|
||
|
|
||
|
it("should decode Russian", function() {
|
||
|
expect(decodeValue([
|
||
|
6,129,65,208,146,32,209,135,208,176,209,137,208,176,209,133,
|
||
|
32,209,142,208,179,208,176,32,208,182,208,184,208,187,32,
|
||
|
208,177,209,139,32,209,134,208,184,209,130,209,128,209,
|
||
|
131,209,129,63,32,208,148,208,176,44,32,208,189,208,190,
|
||
|
32,209,132,208,176,208,187,209,140,209,136,208,184,208,
|
||
|
178,209,139,208,185,32,209,141,208,186,208,183,208,181,
|
||
|
208,188,208,191,208,187,209,143,209,128,33
|
||
|
])).toBe(
|
||
|
"\u0412 \u0447\u0430\u0449\u0430\u0445 \u044E\u0433\u0430 \u0436\u0438\u043B \u0431\u044B " +
|
||
|
"\u0446\u0438\u0442\u0440\u0443\u0441? \u0414\u0430, \u043D\u043E " +
|
||
|
"\u0444\u0430\u043B\u044C\u0448\u0438\u0432\u044B\u0439 " +
|
||
|
"\u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440!"
|
||
|
);
|
||
|
});
|
||
|
|
||
|
it("should decode string references", function() {
|
||
|
expect(decodeValue([
|
||
|
10,11,1,9,102,111,117,114,6,7,98,97,114,11,116,104,114,
|
||
|
101,101,6,7,102,111,111,7,116,119,111,6,2,7,111,110,101,
|
||
|
6,6,1
|
||
|
])).toEqual({
|
||
|
one: 'foo',
|
||
|
two: 'bar',
|
||
|
three: 'foo',
|
||
|
four: 'bar'
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe("xml-doc", function() {
|
||
|
it("should decode an XMLDocument", function() {
|
||
|
var doc = decodeValue([
|
||
|
7,129,37,60,114,111,111,116,62,60,112,97,114,101,110,
|
||
|
116,62,60,99,104,105,108,100,32,105,100,61,34,99,49,34,
|
||
|
62,102,111,111,60,47,99,104,105,108,100,62,60,99,104,
|
||
|
105,108,100,32,105,100,61,34,99,50,34,62,98,97,114,60,
|
||
|
47,99,104,105,108,100,62,60,47,112,97,114,101,110,116,
|
||
|
62,60,47,114,111,111,116,62
|
||
|
]);
|
||
|
|
||
|
expect(Ext.DomQuery.isXml(doc)).toBe(true);
|
||
|
|
||
|
expect(doc.firstChild.tagName).toBe('root');
|
||
|
expect(doc.firstChild.firstChild.tagName).toBe('parent');
|
||
|
expect(doc.firstChild.firstChild.firstChild.tagName).toBe('child');
|
||
|
expect(doc.firstChild.firstChild.firstChild.firstChild.nodeValue).toBe('foo');
|
||
|
expect(doc.firstChild.firstChild.firstChild.getAttribute('id')).toBe('c1');
|
||
|
expect(doc.firstChild.firstChild.childNodes[1].tagName).toBe('child');
|
||
|
expect(doc.firstChild.firstChild.childNodes[1].firstChild.nodeValue).toBe('bar');
|
||
|
expect(doc.firstChild.firstChild.childNodes[1].getAttribute('id')).toBe('c2');
|
||
|
});
|
||
|
|
||
|
it("should decode XMLDocuments by reference", function() {
|
||
|
var xmlDocuments = decodeValue([
|
||
|
10,11,1,9,102,111,117,114,7,11,60,98,32,47,62,11,116,
|
||
|
104,114,101,101,7,11,60,97,32,47,62,7,116,119,111,7,2,
|
||
|
7,111,110,101,7,4,1
|
||
|
]),
|
||
|
doc1 = xmlDocuments.one,
|
||
|
doc2 = xmlDocuments.two,
|
||
|
doc3 = xmlDocuments.three,
|
||
|
doc4 = xmlDocuments.four;
|
||
|
|
||
|
expect(Ext.DomQuery.isXml(doc1)).toBe(true);
|
||
|
expect(Ext.DomQuery.isXml(doc2)).toBe(true);
|
||
|
expect(Ext.DomQuery.isXml(doc3)).toBe(true);
|
||
|
expect(Ext.DomQuery.isXml(doc4)).toBe(true);
|
||
|
// doc1 and doc3 should be the same instance
|
||
|
expect(doc1).toBe(doc3);
|
||
|
// doc2 and doc4 should be the same instance
|
||
|
expect(doc2).toBe(doc4);
|
||
|
expect(doc1).not.toBe(doc2);
|
||
|
expect(doc3).not.toBe(doc4);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe("date", function() {
|
||
|
it("should decode 7/24/2012 (the day this test was written)", function() {
|
||
|
expect(decodeValue([
|
||
|
8,1,66,115,139,173,239,119,80,0
|
||
|
]).getTime()).toBe(1343164970869);
|
||
|
});
|
||
|
|
||
|
it("should decode 7/24/1912 (100 years before the day this test was written)", function() {
|
||
|
expect(decodeValue([
|
||
|
8,1,194,122,96,113,83,72,176,0
|
||
|
]).getTime()).toBe(-1812595029131);
|
||
|
});
|
||
|
|
||
|
it("should decode 7/24/2112 (100 years after the day this test was written)", function() {
|
||
|
expect(decodeValue([
|
||
|
8,1,66,144,93,222,179,29,212,0
|
||
|
]).getTime()).toBe(4498838570869);
|
||
|
});
|
||
|
|
||
|
it("should decode the UNIX epoch", function() {
|
||
|
expect(decodeValue([
|
||
|
8,1,0,0,0,0,0,0,0,0
|
||
|
]).getTime()).toBe(0);
|
||
|
});
|
||
|
|
||
|
it("should decode 9/12/275760 (the largest future javascript date)", function() {
|
||
|
expect(decodeValue([
|
||
|
8,1,67,62,178,8,194,220,0,0
|
||
|
]).getTime()).toBe(8640000000000000);
|
||
|
});
|
||
|
|
||
|
it("should decode 4/19/-271821 (the largest past javascript date)", function() {
|
||
|
expect(decodeValue([
|
||
|
8,1,195,62,178,8,194,220,0,0
|
||
|
]).getTime()).toBe(-8640000000000000);
|
||
|
});
|
||
|
|
||
|
it("should decode dates by reference", function() {
|
||
|
var dates = decodeValue([
|
||
|
9,9,1,8,1,66,115,140,29,236,176,0,0,8,1,66,115,140,112,
|
||
|
82,112,0,0,8,2,8,4
|
||
|
]);
|
||
|
|
||
|
expect(dates.length).toBe(4);
|
||
|
expect(dates[0].getTime()).toEqual(1343282400000);
|
||
|
expect(dates[1].getTime()).toEqual(1343368800000);
|
||
|
|
||
|
// dates 0 and 2 should be the same instance
|
||
|
expect(dates[0]).toBe(dates[2]);
|
||
|
// dates 1 and 3 should be the same instance
|
||
|
expect(dates[1]).toBe(dates[3]);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe("array", function() {
|
||
|
it("should decode an array", function() {
|
||
|
expect(decodeValue([
|
||
|
9,7,1,6,3,97,6,3,98,6,3,99
|
||
|
])).toEqual(['a','b','c']);
|
||
|
});
|
||
|
|
||
|
it("should decode an ECMA (associative) array", function() {
|
||
|
expect(decodeValue([
|
||
|
9,1,3,97,6,3,98,3,99,6,3,100,1
|
||
|
])).toEqual({
|
||
|
a: 'b',
|
||
|
c: 'd'
|
||
|
});
|
||
|
});
|
||
|
|
||
|
it("should decode an array containing both string and ordinal indices", function() {
|
||
|
expect(decodeValue([
|
||
|
9,7,3,97,6,3,98,3,99,6,3,100,1,6,3,120,6,3,121,6,3,122
|
||
|
])).toEqual({
|
||
|
a: 'b',
|
||
|
c: 'd',
|
||
|
0: 'x',
|
||
|
1: 'y',
|
||
|
2: 'z'
|
||
|
});
|
||
|
});
|
||
|
|
||
|
it("should decode arrays by reference", function() {
|
||
|
var result = decodeValue([
|
||
|
9,9,1,9,7,1,6,3,97,6,3,98,6,3,99,9,7,1,6,3,120,6,3,121,
|
||
|
6,3,122,9,2,9,4
|
||
|
]);
|
||
|
|
||
|
expect(result.length).toBe(4);
|
||
|
expect(result[0]).toEqual(['a','b','c']);
|
||
|
expect(result[1]).toEqual(['x','y','z']);
|
||
|
// 0 and 1 should be the same instance
|
||
|
expect(result[0]).toBe(result[2]);
|
||
|
// 1 and 3 should be the same instance
|
||
|
expect(result[1]).toBe(result[3]);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe("object", function() {
|
||
|
beforeEach(function() {
|
||
|
Ext.define('Ext.Foo', {
|
||
|
alias: 'amf.Foo'
|
||
|
});
|
||
|
});
|
||
|
|
||
|
afterEach(function() {
|
||
|
//Ext.undefine('Ext.Foo');
|
||
|
//Ext.Foo = nil;
|
||
|
delete Ext.Foo;
|
||
|
});
|
||
|
|
||
|
it("should decode an anonymous object", function() {
|
||
|
expect(decodeValue([
|
||
|
10,11,1,7,102,111,111,6,7,98,97,114,7,98,97,122,6,7,98,117,122,1
|
||
|
])).toEqual({
|
||
|
foo: 'bar',
|
||
|
baz: 'buz'
|
||
|
});
|
||
|
});
|
||
|
|
||
|
it("should decode a typed object with sealed members", function() {
|
||
|
var foo = new Ext.Foo();
|
||
|
|
||
|
foo.foo = 'bar';
|
||
|
foo.baz = 'qux';
|
||
|
|
||
|
expect(decodeValue([
|
||
|
10,35,7,70,111,111,7,102,111,111,7,98,97,122,6,7,98,97,
|
||
|
114,6,7,113,117,120
|
||
|
])).toEqual(foo);
|
||
|
});
|
||
|
|
||
|
it("should decode a typed object with the dynamic trait and only sealed members", function() {
|
||
|
var foo = new Ext.Foo();
|
||
|
|
||
|
foo.foo = 'bar';
|
||
|
foo.baz = 'qux';
|
||
|
|
||
|
expect(decodeValue([
|
||
|
10,43,7,70,111,111,7,102,111,111,7,98,97,122,6,7,98,97,
|
||
|
114,6,7,113,117,120,1
|
||
|
])).toEqual(foo);
|
||
|
});
|
||
|
|
||
|
it("should decode a typed object with the dynamic trait and only dynamic members", function() {
|
||
|
var foo = new Ext.Foo();
|
||
|
|
||
|
foo.fred = 'flob';
|
||
|
foo.plugh = 'xyzzy';
|
||
|
|
||
|
expect(decodeValue([
|
||
|
10,11,7,70,111,111,11,112,108,117,103,104,6,11,120,121,
|
||
|
122,122,121,9,102,114,101,100,6,9,102,108,111,98,1
|
||
|
])).toEqual(foo);
|
||
|
});
|
||
|
|
||
|
it("should decode a typed object with the dynamic trait and both sealed and dynamic members", function() {
|
||
|
var foo = new Ext.Foo();
|
||
|
|
||
|
foo.foo = 'bar';
|
||
|
foo.baz = 'qux';
|
||
|
foo.fred = 'flob';
|
||
|
foo.plugh = 'xyzzy';
|
||
|
|
||
|
expect(decodeValue([
|
||
|
10,43,7,70,111,111,7,102,111,111,7,98,97,122,6,7,98,97,
|
||
|
114,6,7,113,117,120,11,112,108,117,103,104,6,11,120,121,
|
||
|
122,122,121,9,102,114,101,100,6,9,102,108,111,98,1
|
||
|
])).toEqual(foo);
|
||
|
});
|
||
|
|
||
|
it("should decode an anonymous object with no memebers", function() {
|
||
|
expect(decodeValue([10,11,1,1])).toEqual({});
|
||
|
});
|
||
|
|
||
|
it("should decode a typed object with no members", function() {
|
||
|
var foo = new Ext.Foo();
|
||
|
expect(decodeValue([10,3,7,70,111,111])).toEqual(foo);
|
||
|
});
|
||
|
|
||
|
it("should decode a typed object with the dynamic trait and no members", function() {
|
||
|
var foo = new Ext.Foo();
|
||
|
expect(decodeValue([10,11,7,70,111,111,1])).toEqual(foo);
|
||
|
});
|
||
|
|
||
|
it("should decode multiple objects of the same class using trait references", function() {
|
||
|
var foo1 = new Ext.Foo(),
|
||
|
foo2 = new Ext.Foo(),
|
||
|
foo3 = new Ext.Foo();
|
||
|
|
||
|
foo1.foo = 'bar';
|
||
|
foo1.baz = 'qux';
|
||
|
foo2.foo = 'fubar';
|
||
|
foo2.baz = 'snafu';
|
||
|
foo3.foo = 'tarfu';
|
||
|
foo3.baz = 'susfu';
|
||
|
expect(decodeValue([
|
||
|
10,11,1,11,116,104,114,101,101,10,35,7,70,111,111,7,102,
|
||
|
111,111,7,98,97,122,6,11,116,97,114,102,117,6,11,115,117,
|
||
|
115,102,117,7,116,119,111,10,5,6,11,102,117,98,97,114,6,
|
||
|
11,115,110,97,102,117,7,111,110,101,10,5,6,7,98,97,114,
|
||
|
6,7,113,117,120,1
|
||
|
])).toEqual({
|
||
|
one: foo1,
|
||
|
two: foo2,
|
||
|
three: foo3
|
||
|
});
|
||
|
});
|
||
|
|
||
|
it("should decode multiple objects of two different classes using trait references", function() {
|
||
|
Ext.define('Ext.Baz', {
|
||
|
alias: 'amf.Baz'
|
||
|
});
|
||
|
|
||
|
var foo1 = new Ext.Foo(),
|
||
|
baz1 = new Ext.Baz(),
|
||
|
foo2 = new Ext.Foo(),
|
||
|
baz2 = new Ext.Baz();
|
||
|
|
||
|
foo1.bar = 'baz';
|
||
|
foo2.bar = 'qux';
|
||
|
baz1.qux = 'foo';
|
||
|
baz2.qux = 'bar';
|
||
|
|
||
|
expect(decodeValue([
|
||
|
10,11,1,9,102,111,117,114,10,19,7,66,97,122,7,113,117,
|
||
|
120,6,7,98,97,114,11,116,104,114,101,101,10,19,7,70,111,
|
||
|
111,6,6,4,7,116,119,111,10,5,6,7,102,111,111,7,111,110,
|
||
|
101,10,9,6,7,98,97,122,1
|
||
|
])).toEqual({
|
||
|
one: foo1,
|
||
|
two: baz1,
|
||
|
three: foo2,
|
||
|
four: baz2
|
||
|
});
|
||
|
|
||
|
//Ext.undefine('Ext.Baz');
|
||
|
//Ext.Baz = nil;
|
||
|
delete Ext.Baz;
|
||
|
});
|
||
|
|
||
|
it("should decode objects by reference", function() {
|
||
|
var obj = decodeValue([
|
||
|
// this byte array represents an object that looks like
|
||
|
// obj3 below:
|
||
|
//
|
||
|
// obj1 = {foo: 'bar'};
|
||
|
// obj2 = {baz: 'buz'};
|
||
|
// obj3 = {
|
||
|
// homer: obj1,
|
||
|
// marge: obj2,
|
||
|
// bart: obj1,
|
||
|
// lisa: obj2
|
||
|
// };
|
||
|
10,11,1,11,104,111,109,101,114,10,1,7,102,111,111,6,7,98,
|
||
|
97,114,1,9,108,105,115,97,10,1,7,98,97,122,6,7,98,117,
|
||
|
122,1,11,109,97,114,103,101,10,4,9,98,97,114,116,10,2,1
|
||
|
]);
|
||
|
|
||
|
expect(obj.homer).toEqual({foo: 'bar'});
|
||
|
expect(obj.marge).toEqual({baz: 'buz'});
|
||
|
// homer and bart should refer to the same object
|
||
|
expect(obj.homer).toBe(obj.bart);
|
||
|
// marge and lisa should refer to the same object
|
||
|
expect(obj.marge).toBe(obj.lisa);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe("xml", function() {
|
||
|
it("should decode XML", function() {
|
||
|
var doc = decodeValue([
|
||
|
11,129,37,60,114,111,111,116,62,60,112,97,114,101,110,
|
||
|
116,62,60,99,104,105,108,100,32,105,100,61,34,99,49,34,
|
||
|
62,102,111,111,60,47,99,104,105,108,100,62,60,99,104,
|
||
|
105,108,100,32,105,100,61,34,99,50,34,62,98,97,114,60,
|
||
|
47,99,104,105,108,100,62,60,47,112,97,114,101,110,116,
|
||
|
62,60,47,114,111,111,116,62
|
||
|
]);
|
||
|
|
||
|
expect(Ext.DomQuery.isXml(doc)).toBe(true);
|
||
|
|
||
|
expect(doc.firstChild.tagName).toBe('root');
|
||
|
expect(doc.firstChild.firstChild.tagName).toBe('parent');
|
||
|
expect(doc.firstChild.firstChild.firstChild.tagName).toBe('child');
|
||
|
expect(doc.firstChild.firstChild.firstChild.firstChild.nodeValue).toBe('foo');
|
||
|
expect(doc.firstChild.firstChild.firstChild.getAttribute('id')).toBe('c1');
|
||
|
expect(doc.firstChild.firstChild.childNodes[1].tagName).toBe('child');
|
||
|
expect(doc.firstChild.firstChild.childNodes[1].firstChild.nodeValue).toBe('bar');
|
||
|
expect(doc.firstChild.firstChild.childNodes[1].getAttribute('id')).toBe('c2');
|
||
|
});
|
||
|
|
||
|
it("should decode XML by reference", function() {
|
||
|
var xmlDocuments = decodeValue([
|
||
|
10,11,1,9,102,111,117,114,11,11,60,98,32,47,62,11,116,
|
||
|
104,114,101,101,11,11,60,97,32,47,62,7,116,119,111,11,2,
|
||
|
7,111,110,101,11,4,1
|
||
|
]),
|
||
|
doc1 = xmlDocuments.one,
|
||
|
doc2 = xmlDocuments.two,
|
||
|
doc3 = xmlDocuments.three,
|
||
|
doc4 = xmlDocuments.four;
|
||
|
|
||
|
expect(Ext.DomQuery.isXml(doc1)).toBe(true);
|
||
|
expect(Ext.DomQuery.isXml(doc2)).toBe(true);
|
||
|
expect(Ext.DomQuery.isXml(doc3)).toBe(true);
|
||
|
expect(Ext.DomQuery.isXml(doc4)).toBe(true);
|
||
|
// doc1 and doc3 should be the same instance
|
||
|
expect(doc1).toBe(doc3);
|
||
|
// doc2 and doc4 should be the same instance
|
||
|
expect(doc2).toBe(doc4);
|
||
|
expect(doc1).not.toBe(doc2);
|
||
|
expect(doc3).not.toBe(doc4);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe("byte-array", function() {
|
||
|
it("should decode a byte array", function() {
|
||
|
expect(decodeValue([
|
||
|
12,7,1,2,3
|
||
|
])).toEqual([1,2,3])
|
||
|
});
|
||
|
|
||
|
it("should decode byte arrays by reference", function() {
|
||
|
var arrays = decodeValue([
|
||
|
9,9,1,12,7,1,2,3,12,7,4,5,6,12,2,12,4
|
||
|
]);
|
||
|
|
||
|
expect(arrays[0]).toEqual([1,2,3]);
|
||
|
expect(arrays[1]).toEqual([4,5,6]);
|
||
|
expect(arrays[0]).toBe(arrays[2]);
|
||
|
expect(arrays[1]).toBe(arrays[3]);
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
|
||
|
it("should decode an AMF0 packet", function() {
|
||
|
var packet = new Ext.data.amf.Packet(),
|
||
|
foo, message0, body0, message1;
|
||
|
|
||
|
Ext.define('Ext.Foo', {
|
||
|
alias: 'amf.Foo'
|
||
|
});
|
||
|
|
||
|
foo = new Ext.Foo();
|
||
|
foo.bar = 'baz';
|
||
|
|
||
|
packet.decode([
|
||
|
0,0,0,3,0,1,97,0,0,0,0,0,2,0,1,98,0,1,99,0,0,0,0,0,2,0,1,100,0,1,
|
||
|
101,0,0,0,0,0,2,0,1,102,0,2,0,13,109,115,103,49,47,111,110,82,101,
|
||
|
115,117,108,116,0,4,110,117,108,108,0,0,0,0,3,0,3,100,98,108,0,64,
|
||
|
86,128,163,215,10,61,113,0,11,116,121,112,101,100,79,98,106,101,99,
|
||
|
116,16,0,3,70,111,111,0,3,98,97,114,2,0,3,98,97,122,0,0,9,0,9,101,
|
||
|
99,109,97,65,114,114,97,121,8,0,0,0,0,0,1,97,2,0,1,49,0,1,99,2,0,1,
|
||
|
51,0,1,98,2,0,1,50,0,0,9,0,4,100,97,116,101,11,66,115,190,228,31,
|
||
|
192,0,0,0,0,0,7,105,110,116,101,103,101,114,0,64,69,0,0,0,0,0,0,0,4,
|
||
|
110,111,110,101,5,0,5,117,110,100,101,102,6,0,3,111,98,106,3,0,1,97,
|
||
|
0,63,240,0,0,0,0,0,0,0,1,98,0,64,0,0,0,0,0,0,0,0,0,9,0,3,102,108,
|
||
|
115,1,0,0,11,120,109,108,68,111,99,117,109,101,110,116,15,0,0,0,82,
|
||
|
60,114,111,111,116,62,60,112,97,114,101,110,116,62,60,99,104,105,
|
||
|
108,100,32,105,100,61,34,99,49,34,62,102,111,111,60,47,99,104,105,
|
||
|
108,100,62,60,99,104,105,108,100,32,105,100,61,34,99,50,34,62,98,97,
|
||
|
114,60,47,99,104,105,108,100,62,60,47,112,97,114,101,110,116,62,60,
|
||
|
47,114,111,111,116,62,0,3,115,116,114,2,0,6,115,101,110,99,104,97,0,
|
||
|
11,115,116,114,105,99,116,65,114,114,97,121,10,0,0,0,3,0,63,240,0,0,
|
||
|
0,0,0,0,0,64,0,0,0,0,0,0,0,0,64,8,0,0,0,0,0,0,0,3,116,114,117,1,1,0,
|
||
|
0,9,0,13,109,115,103,50,47,111,110,82,101,115,117,108,116,0,4,110,
|
||
|
117,108,108,0,0,0,0,3,0,4,116,101,120,116,2,0,5,104,101,108,108,111,
|
||
|
0,0,9
|
||
|
]);
|
||
|
|
||
|
message0 = packet.getMessages()[0];
|
||
|
body0 = message0.body;
|
||
|
message1 = packet.getMessages()[1];
|
||
|
|
||
|
expect(packet.getVersion()).toBe(0);
|
||
|
|
||
|
|
||
|
expect(packet.getHeaders().length).toBe(3);
|
||
|
expect(packet.getHeaders()[0].name).toBe('a');
|
||
|
expect(packet.getHeaders()[0].value).toBe('b');
|
||
|
expect(packet.getHeaders()[1].name).toBe('c');
|
||
|
expect(packet.getHeaders()[1].value).toBe('d');
|
||
|
expect(packet.getHeaders()[2].name).toBe('e');
|
||
|
expect(packet.getHeaders()[2].value).toBe('f');
|
||
|
|
||
|
expect(packet.getMessages().length).toBe(2);
|
||
|
expect(body0.integer).toBe(42);
|
||
|
expect(body0.dbl).toBe(90.01);
|
||
|
expect(body0.tru).toBe(true);
|
||
|
expect(body0.fls).toBe(false);
|
||
|
expect(body0.str).toBe('sencha');
|
||
|
expect(body0.obj).toEqual({a: 1, b: 2});
|
||
|
expect(body0.none).toBe(null);
|
||
|
expect('undef' in message0.body).toBe(true);
|
||
|
expect(body0.undef).toBeUndefined();
|
||
|
expect(body0.ecmaArray).toEqual({ a: '1', b: '2', c: '3' });
|
||
|
expect(body0.strictArray).toEqual([1, 2, 3]);
|
||
|
expect(body0.date.getTime()).toEqual(1356912000000);
|
||
|
expect(Ext.DomQuery.isXml(body0.xmlDocument)).toBe(true);
|
||
|
expect(body0.xmlDocument.firstChild.tagName).toBe('root');
|
||
|
expect(body0.typedObject).toEqual(foo);
|
||
|
|
||
|
expect(message1.body).toEqual({
|
||
|
text: 'hello'
|
||
|
});
|
||
|
|
||
|
//Ext.undefine('Ext.Foo');
|
||
|
//Ext.Foo = nil;
|
||
|
delete Ext.Foo;
|
||
|
});
|
||
|
|
||
|
it("should decode an AMF3 packet", function() {
|
||
|
var packet = new Ext.data.amf.Packet(),
|
||
|
foo, message0, body0, message1;
|
||
|
|
||
|
Ext.define('Ext.Foo', {
|
||
|
alias: 'amf.Foo'
|
||
|
});
|
||
|
|
||
|
foo = new Ext.Foo();
|
||
|
foo.bar = 'baz';
|
||
|
|
||
|
packet.decode([
|
||
|
0,3,0,3,0,1,97,0,0,0,0,0,17,6,3,98,0,1,99,0,0,0,0,0,17,6,3,100,0,1,
|
||
|
101,0,0,0,0,0,17,6,3,102,0,2,0,17,109,101,115,115,97,103,101,48,47,
|
||
|
111,110,82,101,115,117,108,116,0,4,110,117,108,108,0,0,0,0,17,10,11,
|
||
|
1,7,100,98,108,5,64,86,128,163,215,10,61,113,9,100,97,116,101,8,1,
|
||
|
66,115,190,228,31,192,0,0,15,105,110,116,101,103,101,114,4,42,11,97,
|
||
|
114,114,97,121,9,7,1,4,1,4,2,4,3,7,120,109,108,11,129,37,60,114,111,
|
||
|
111,116,62,60,112,97,114,101,110,116,62,60,99,104,105,108,100,32,
|
||
|
105,100,61,34,99,49,34,62,102,111,111,60,47,99,104,105,108,100,62,
|
||
|
60,99,104,105,108,100,32,105,100,61,34,99,50,34,62,98,97,114,60,47,
|
||
|
99,104,105,108,100,62,60,47,112,97,114,101,110,116,62,60,47,114,111,
|
||
|
111,116,62,9,110,111,110,101,1,11,117,110,100,101,102,0,7,111,98,
|
||
|
106,10,1,3,97,4,1,3,98,4,2,1,7,102,108,115,2,23,120,109,108,68,111,
|
||
|
99,117,109,101,110,116,11,6,7,115,116,114,6,13,115,101,110,99,104,
|
||
|
97,7,116,114,117,3,1,0,17,109,101,115,115,97,103,101,49,47,111,110,
|
||
|
82,101,115,117,108,116,0,4,110,117,108,108,0,0,0,0,17,10,11,1,9,116,
|
||
|
101,120,116,6,11,104,101,108,108,111,1
|
||
|
]);
|
||
|
|
||
|
message0 = packet.getMessages()[0];
|
||
|
body0 = message0.body;
|
||
|
message1 = packet.getMessages()[1];
|
||
|
|
||
|
expect(packet.getVersion()).toBe(3);
|
||
|
|
||
|
expect(packet.getHeaders().length).toBe(3);
|
||
|
expect(packet.getHeaders()[0].name).toBe('a');
|
||
|
expect(packet.getHeaders()[0].value).toBe('b');
|
||
|
expect(packet.getHeaders()[1].name).toBe('c');
|
||
|
expect(packet.getHeaders()[1].value).toBe('d');
|
||
|
expect(packet.getHeaders()[2].name).toBe('e');
|
||
|
expect(packet.getHeaders()[2].value).toBe('f');
|
||
|
|
||
|
expect(packet.getMessages().length).toBe(2);
|
||
|
expect('undef' in message0.body).toBe(true);
|
||
|
expect(body0.undef).toBeUndefined();
|
||
|
expect(body0.none).toBe(null);
|
||
|
expect(body0.fls).toBe(false);
|
||
|
expect(body0.tru).toBe(true);
|
||
|
expect(body0.integer).toBe(42);
|
||
|
expect(body0.dbl).toBe(90.01);
|
||
|
expect(body0.str).toBe('sencha');
|
||
|
expect(Ext.DomQuery.isXml(body0.xmlDocument)).toBe(true);
|
||
|
expect(body0.xmlDocument.firstChild.tagName).toBe('root');
|
||
|
expect(body0.date.getTime()).toEqual(1356912000000);
|
||
|
expect(body0.array).toEqual([1, 2, 3]);
|
||
|
expect(body0.obj).toEqual({a: 1, b: 2});
|
||
|
expect(Ext.DomQuery.isXml(body0.xml)).toBe(true);
|
||
|
expect(body0.xml.firstChild.tagName).toBe('root');
|
||
|
|
||
|
expect(message1.body).toEqual({
|
||
|
text: 'hello'
|
||
|
});
|
||
|
|
||
|
//Ext.undefine('Ext.Foo');
|
||
|
//Ext.Foo = nil;
|
||
|
delete Ext.Foo;
|
||
|
});
|
||
|
|
||
|
});
|