facebook-workplaceoutlookemailmicrosoft-teamsdiscordmessengercustom-servicesmacoslinuxwindowsinboxwhatsappicloudtweetdeckhipchattelegramhangoutsslackgmailskype
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.
1158 lines
59 KiB
1158 lines
59 KiB
describe("Ext.data.amf.Encoder", function() { |
|
|
|
|
|
describe("clear", function() { |
|
it("should reset byte array when called", function() { |
|
var encoder = Ext.create('Ext.data.amf.Encoder'); |
|
encoder.writeObject(1); |
|
expect(encoder.getBytes().length).not.toEqual(0); |
|
encoder.clear(); |
|
expect(encoder.getBytes().length).toEqual(0); |
|
}); |
|
|
|
it("should generate a new distinct array and not clear the old one", function() { |
|
var encoder = Ext.create('Ext.data.amf.Encoder'); |
|
encoder.writeObject(1); |
|
expect(encoder.getBytes().length).not.toEqual(0); |
|
var oldBytes = encoder.getBytes(), |
|
oldLen = oldBytes.length; |
|
|
|
encoder.clear(); |
|
expect(encoder.getBytes()).not.toBe(oldBytes); |
|
expect(oldBytes.length).toEqual(oldLen); |
|
}); |
|
}); |
|
|
|
describe("AMF3", function() { |
|
|
|
var encoder = Ext.create('Ext.data.amf.Encoder'); |
|
var secondEncoder = Ext.create('Ext.data.amf.Encoder'); |
|
|
|
|
|
beforeEach(function() { |
|
encoder.clear(); // reset encoder |
|
secondEncoder.clear(); |
|
|
|
/* |
|
// define a matcher that compares two arrays, returning true if their |
|
// sizes are the same and each member has an equivalent numberic value |
|
// as its counterpart in the other array. |
|
this.addMatchers( { |
|
toMatchArray: function(expected) { |
|
var a = this.actual, |
|
b = expected, |
|
notText = this.isNot ? " not" : ""; |
|
// first test array length |
|
this.message = function() { |
|
return "Expected " + a + notText + " to be the same length as " + b; |
|
}; |
|
if (a.length != b.length) { |
|
return false; |
|
} |
|
// now test array item equality |
|
this.message = function() { |
|
return "Expected " + a + notText + " to have the same elements as " + b; |
|
}; |
|
for (var i in a) { |
|
if (a[i] != b[i]) { |
|
return false; |
|
} |
|
} |
|
return true; |
|
} |
|
}); |
|
*/ |
|
|
|
}); |
|
|
|
describe("data types", function() { |
|
|
|
describe("undefined", function() { |
|
it("should encode undefined", function() { |
|
encoder.writeObject(undefined); |
|
expect(encoder.getBytes()).toEqual([0x00]); |
|
}); |
|
}); |
|
|
|
describe("null", function() { |
|
it("should encode null", function() { |
|
encoder.writeObject(null); |
|
expect(encoder.getBytes()).toEqual([0x01]); |
|
}); |
|
}); |
|
|
|
describe("false", function() { |
|
it("should encode false", function() { |
|
encoder.writeObject(false); |
|
expect(encoder.getBytes()).toEqual([0x02]); |
|
}); |
|
}); |
|
|
|
describe("true", function() { |
|
it("should encode true", function() { |
|
encoder.writeObject(true); |
|
expect(encoder.getBytes()).toEqual([0x03]); |
|
}); |
|
}); |
|
|
|
describe("integer", function() { |
|
it("should encode 0", function() { |
|
encoder.writeObject(0); |
|
expect(encoder.getBytes()).toEqual([0x04, 0x00]); |
|
}); |
|
|
|
it("should encode 127", function() { |
|
encoder.writeObject(127); |
|
expect(encoder.getBytes()).toEqual([4,127]); |
|
}); |
|
|
|
it("should encode 128", function() { |
|
encoder.writeObject(128); |
|
expect(encoder.getBytes()).toEqual([4,129,0]); |
|
}); |
|
|
|
it("should encode 137", function() { |
|
encoder.writeObject(137); |
|
expect(encoder.getBytes()).toEqual([4,129,9]); |
|
}); |
|
|
|
it("should encode 8256", function() { |
|
encoder.writeObject(8256); |
|
expect(encoder.getBytes()).toEqual([4,192,64]); |
|
}); |
|
|
|
it("should encode 16320", function() { |
|
encoder.writeObject(16320); |
|
expect(encoder.getBytes()).toEqual([4,255,64]); |
|
}); |
|
|
|
it("should encode 16512", function() { |
|
encoder.writeObject(16512); |
|
expect(encoder.getBytes()).toEqual([4,129,129,0]); |
|
}); |
|
|
|
it("should encode 16576", function() { |
|
encoder.writeObject(16576); |
|
expect(encoder.getBytes()).toEqual([4,129,129,64]); |
|
}); |
|
|
|
it("should encode 32704", function() { |
|
encoder.writeObject(32704); |
|
expect(encoder.getBytes()).toEqual([4,129,255,64]); |
|
}); |
|
|
|
it("should encode 2097088", function() { |
|
encoder.writeObject(2097088); |
|
expect(encoder.getBytes()).toEqual([4,255,255,64]); |
|
}); |
|
|
|
it("should encode 4227328", function() { |
|
encoder.writeObject(4227328); |
|
expect(encoder.getBytes()).toEqual([4,129,129,129,0]); |
|
}); |
|
|
|
it("should decode 270532928", function() { |
|
encoder.writeObject(270532928); |
|
expect(encoder.getBytes()).toEqual([4,192,192,129,64]); |
|
}); |
|
|
|
it("should encode 2^29-1 (the largest possible unsigned 29-bit int)", function() { |
|
encoder.writeObject(Math.pow(2, 29) - 1); |
|
expect(encoder.getBytes()).toEqual([4,255,255,255,255]); |
|
}); |
|
|
|
it("should treat Number with integer value as integer", function() { |
|
var values = [0, 127, 128, 137, 8526, 16320, 16512, 16576, 32704, 2097088, 4227328, 270532928, Math.pow(2, 29) - 1]; |
|
for (var i in values) { |
|
encoder.clear(); |
|
secondEncoder.clear(); |
|
var n = new Number(values[i]); |
|
encoder.writeObject(values[i]); |
|
secondEncoder.writeObject(n); |
|
expect(encoder.getBytes()).toEqual(secondEncoder.getBytes()); |
|
} |
|
}); |
|
}); |
|
|
|
describe("double", function() { |
|
it("should encode 10.333", function() { |
|
encoder.writeObject(10.333); |
|
expect(encoder.getBytes()).toEqual([5,64,36,170,126,249,219,34,209]); |
|
}); |
|
|
|
it("should encode 1.7976931348623157e+308 (largest positive number)", function() { |
|
encoder.writeObject(Number.MAX_VALUE); |
|
expect(encoder.getBytes()).toEqual([5,127,239,255,255,255,255,255,255]); |
|
}); |
|
|
|
it("should encode -1.7976931348623157e+308 (largest negative number)", function() { |
|
encoder.writeObject(-Number.MAX_VALUE); |
|
expect(encoder.getBytes()).toEqual([5,255,239,255,255,255,255,255,255]); |
|
}); |
|
|
|
it("should encode 5e-324 (smallest positive number)", function() { |
|
encoder.writeObject(Number.MIN_VALUE); |
|
expect(encoder.getBytes()).toEqual([5,0,0,0,0,0,0,0,1]); |
|
}); |
|
|
|
it("should encode -5e-324 (smallest negative number)", function() { |
|
encoder.writeObject(-Number.MIN_VALUE); |
|
expect(encoder.getBytes()).toEqual([5,128,0,0,0,0,0,0,1]); |
|
}); |
|
|
|
it("should encode subnormal 2.2250738585072014E-308", function() { |
|
encoder.writeObject(2.2250738585072014E-308); |
|
expect(encoder.getBytes()).toEqual([5,0,16,0,0,0,0,0,0]); |
|
}); |
|
|
|
it("should encode NaN", function() { |
|
encoder.writeObject(NaN); |
|
expect(encoder.getBytes()).toEqual([5,255,248,0,0,0,0,0,0]); |
|
}); |
|
|
|
it("should encode positive infinity", function() { |
|
encoder.writeObject(Infinity); |
|
expect(encoder.getBytes()).toEqual([5,127,240,0,0,0,0,0,0]); |
|
}); |
|
|
|
it("should encode negative infinity", function() { |
|
encoder.writeObject(-Infinity); |
|
expect(encoder.getBytes()).toEqual([5,255,240,0,0,0,0,0,0]); |
|
}); |
|
}); |
|
|
|
describe("string", function() { |
|
it("should encode an empty string", function() { |
|
var str = ''; |
|
encoder.writeObject(str); |
|
expect(encoder.getBytes()).toEqual([6,1]); |
|
}); |
|
|
|
// 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 encode Danish", function() { |
|
var str = "Quizdeltagerne spiste jordb\u00E6r med fl\u00F8de, mens " + |
|
"cirkusklovnen Wolther spillede p\u00E5 xylofon"; |
|
encoder.writeObject(str); |
|
expect(encoder.getBytes()).toEqual([ |
|
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 |
|
]); |
|
}); |
|
|
|
it("should encode German", function() { |
|
var str = "Falsches \u00DCben von Xylophonmusik qu\u00E4lt jeden gr\u00F6\u00DFeren Zwerg"; |
|
encoder.writeObject(str); |
|
expect(encoder.getBytes()).toEqual([ |
|
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 |
|
]); |
|
}); |
|
|
|
it("should encode Greek", function() { |
|
var str = "\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"; |
|
encoder.writeObject(str); |
|
expect(encoder.getBytes()).toEqual([ |
|
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 |
|
]); |
|
}); |
|
|
|
it("should encode English", function() { |
|
var str = "The quick brown fox jumps over the lazy dog"; |
|
encoder.writeObject(str); |
|
expect(encoder.getBytes()).toEqual([ |
|
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 |
|
]); |
|
}); |
|
|
|
it("should encode Spanish", function() { |
|
var str = "El ping\u00FCino Wenceslao hizo kil\u00F3metros bajo exhaustiva " + |
|
"lluvia y"; |
|
encoder.writeObject(str); |
|
expect(encoder.getBytes()).toEqual([ |
|
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 |
|
]); |
|
}); |
|
|
|
it("should encode French", function() { |
|
var str = "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"; |
|
encoder.writeObject(str); |
|
expect(encoder.getBytes()).toEqual([ |
|
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 |
|
]); |
|
}); |
|
|
|
it("should encode Irish Gaelic", function() { |
|
var str = "D'fhuascail \u00CDosa, \u00DArmhac na h\u00D3ighe Beannaithe, p\u00F3r " + |
|
"\u00C9ava agus \u00C1dhaimh"; |
|
encoder.writeObject(str); |
|
expect(encoder.getBytes()).toEqual([ |
|
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 |
|
]); |
|
}); |
|
|
|
it("should decode Hungarian", function() { |
|
var str = "\u00C1rv\u00EDzt\u0171r\u0151 t\u00FCk\u00F6rf\u00FAr\u00F3g\u00E9p"; |
|
encoder.writeObject(str); |
|
expect(encoder.getBytes()).toEqual([ |
|
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 |
|
]); |
|
}); |
|
|
|
it("should encode Icelandic", function() { |
|
var str = "K\u00E6mi n\u00FD \u00F6xi h\u00E9r ykist \u00FEj\u00F3fum n\u00FA b\u00E6\u00F0i v\u00EDl og " + |
|
"\u00E1drepa"; |
|
encoder.writeObject(str); |
|
expect(encoder.getBytes()).toEqual([ |
|
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 |
|
]); |
|
}); |
|
|
|
it("should encode Japanese (Hiragana)", function() { |
|
var str = "\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"; |
|
encoder.writeObject(str); |
|
expect(encoder.getBytes()).toEqual([ |
|
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 |
|
]); |
|
}); |
|
|
|
it("should encode Japanese (Katakana)", function() { |
|
var str = "\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"; |
|
encoder.writeObject(str); |
|
expect(encoder.getBytes()).toEqual([ |
|
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 |
|
]); |
|
|
|
}); |
|
|
|
it("should encode Hebrew", function() { |
|
var str = "\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"; |
|
encoder.writeObject(str); |
|
expect(encoder.getBytes()).toEqual([ |
|
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 |
|
]); |
|
}); |
|
|
|
it("should decode Polish", function() { |
|
var str = "Pchn\u0105\u0107 w t\u0119 \u0142\u00F3d\u017A je\u017Ca lub o\u015Bm skrzy\u0144 fig"; |
|
encoder.writeObject(str); |
|
expect(encoder.getBytes()).toEqual([ |
|
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 |
|
]); |
|
}); |
|
|
|
it("should decode Russian", function() { |
|
var str = "\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!"; |
|
encoder.writeObject(str); |
|
expect(encoder.getBytes()).toEqual([ |
|
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 |
|
]); |
|
}); |
|
|
|
/* // it does NOT support string references |
|
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 encode an XMLDocument", function() { |
|
var xml = '<root><parent><child id="c1">foo</child><child id="c2"><bar/></child></parent></root>'; |
|
var data = [ |
|
// chrome version is clean |
|
[ |
|
7,129,43,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,60,98,97,114, |
|
47,62,60,47,99,104,105,108,100,62,60,47,112,97,114,101, |
|
110,116,62,60,47,114,111,111,116,62 |
|
], |
|
[ // IE version |
|
7,129,47,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,60,98,97,114, |
|
47,62,60,47,99,104,105,108,100,62,60,47,112,97,114,101, |
|
110,116,62,60,47,114,111,111,116,62, |
|
13, 10 |
|
], |
|
[ // IE 9 version |
|
7, 129, 45, 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, 60, 98, 97, 114, |
|
32, 47, 62, 60, 47, 99, 104, 105, 108, 100, 62, 60, 47, |
|
112, 97, 114, 101, 110, 116, 62, 60, 47, 114, 111, 111, |
|
116, 62 |
|
], |
|
[ // opera version: <?xml version="1.0"?><root><parent><child id="c1">foo</child><child id="c2"><bar/></child></parent></root> |
|
7, 129, 85, 60, 63, 120, 109, 108, 32, 118, 101, 114, |
|
115, 105, 111, 110, 61, 34, 49, 46, 48, 34, 63, 62, |
|
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, 60, 98, |
|
97, 114, 47, 62, 60, 47, 99, 104, 105, 108, 100, 62, |
|
60, 47, 112, 97, 114, 101, 110, 116, 62, 60, 47, 114, |
|
111, 111, 116, 62 |
|
] |
|
]; |
|
|
|
// generate a document out of the text |
|
var doc; |
|
if (window.DOMParser) { |
|
doc = (new DOMParser()).parseFromString(xml, "text/xml"); |
|
} else { |
|
doc = new ActiveXObject("Microsoft.XMLDOM"); |
|
doc.loadXML(xml); |
|
} |
|
|
|
encoder.write3XmlDocument(doc); |
|
expect(data).toContain(encoder.getBytes()); // note reverseal of expect / contain data to use toContain |
|
}); |
|
}); |
|
|
|
describe("xml", function() { |
|
it("should encode an XML object", function() { |
|
var xml = '<root><parent><child id="c1">foo</child><child id="c2"><bar/></child></parent></root>'; |
|
var data = [ |
|
// Chrome version is clean |
|
[ |
|
11,129,43,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,60,98,97,114, |
|
47,62,60,47,99,104,105,108,100,62,60,47,112,97,114,101, |
|
110,116,62,60,47,114,111,111,116,62 |
|
], |
|
// IE7 version might contain new lines |
|
[ |
|
11,129,47,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,60,98,97,114, |
|
47,62,60,47,99,104,105,108,100,62,60,47,112,97,114,101, |
|
110,116,62,60,47,114,111,111,116,62, |
|
13,10 |
|
], |
|
[ // IE 9 |
|
11, 129, 45, 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, 60, 98, 97, 114, |
|
32, 47, 62, 60, 47, 99, 104, 105, 108, 100, 62, 60, 47, |
|
112, 97, 114, 101, 110, 116, 62, 60, 47, 114, 111, 111, |
|
116, 62 |
|
], |
|
[ // opera version: <?xml version="1.0"?><root><parent><child id="c1">foo</child><child id="c2"><bar/></child></parent></root> |
|
11, 129, 85, 60, 63, 120, 109, 108, 32, 118, 101, 114, |
|
115, 105, 111, 110, 61, 34, 49, 46, 48, 34, 63, 62, 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, 60, 98, 97, 114, 47, 62, 60, 47, 99, |
|
104, 105, 108, 100, 62, 60, 47, 112, 97, 114, 101, 110, |
|
116, 62, 60, 47, 114, 111, 111, 116, 62 |
|
] |
|
]; |
|
|
|
// generate a document out of the text |
|
var doc; |
|
if (window.DOMParser) { |
|
doc = (new DOMParser()).parseFromString(xml, "text/xml"); |
|
} else { |
|
doc = new ActiveXObject("Microsoft.XMLDOM"); |
|
doc.loadXML(xml); |
|
} |
|
|
|
encoder.writeObject(doc); |
|
expect(data).toContain(encoder.getBytes()); // note reverseal of expect / contain data to use toContain |
|
}); |
|
}); |
|
|
|
describe("date", function() { |
|
it("should encode 7/24/2012", function() { |
|
encoder.writeObject(new Date(1343164970869)); |
|
expect(encoder.getBytes()).toEqual([ |
|
8,1,66,115,139,173,239,119,80,0 |
|
]); |
|
}); |
|
|
|
it("should encode 7/24/1912 (100 years before previous test's date)", function() { |
|
encoder.writeObject(new Date(-1812595029131)); |
|
expect(encoder.getBytes()).toEqual([ |
|
8,1,194,122,96,113,83,72,176,0 |
|
]); |
|
}); |
|
|
|
it("should encode 7/24/2112 (100 years after previous test's date)", function() { |
|
encoder.writeObject(new Date(4498838570869)); |
|
expect(encoder.getBytes()).toEqual([ |
|
8,1,66,144,93,222,179,29,212,0 |
|
]); |
|
}); |
|
|
|
it("should encode the UNIX epoch", function() { |
|
encoder.writeObject(new Date(0)); |
|
expect(encoder.getBytes()).toEqual([ |
|
8,1,0,0,0,0,0,0,0,0 |
|
]); |
|
}); |
|
|
|
it("should encode 9/12/275760 (the largest future javascript date)", function() { |
|
encoder.writeObject(new Date(8640000000000000)); |
|
expect(encoder.getBytes()).toEqual([ |
|
8,1,67,62,178,8,194,220,0,0 |
|
]); |
|
}); |
|
|
|
it("should encode 4/19/-271821 (the largest past javascript date)", function() { |
|
encoder.writeObject(new Date(-8640000000000000)); |
|
expect(encoder.getBytes()).toEqual([ |
|
8,1,195,62,178,8,194,220,0,0 |
|
]); |
|
}); |
|
|
|
}); |
|
|
|
|
|
describe("array", function() { |
|
it("should encode an empty array", function() { |
|
encoder.writeObject([]); |
|
expect(encoder.getBytes()).toEqual([ |
|
9,1,1 |
|
]); |
|
}); |
|
it("should encode an array", function() { |
|
encoder.writeObject(['a','b','c']); |
|
expect(encoder.getBytes()).toEqual([ |
|
9,7,1,6,3,97,6,3,98,6,3,99 |
|
]); |
|
}); |
|
|
|
}); |
|
|
|
describe("object", function() { |
|
it("should encode an empty anonymous object", function() { |
|
encoder.writeObject({}); |
|
expect(encoder.getBytes()).toEqual([ |
|
10,11,1,1 |
|
]); |
|
}); |
|
it("should encode an anonymous object with multiple data types", function() { |
|
encoder.writeObject({1: 1, "str":"string", "array": [], "date": new Date(0)}); |
|
expect(encoder.getBytes()).toEqual([ |
|
// Note: when serializing from Flash, the order of objects might be different. |
|
10,11,1,3,49,4,1,7,115,116,114,6,13,115,116,114,105,110, |
|
103,11,97,114,114,97,121,9,1,1,9,100,97,116,101,8,1,0,0, |
|
0,0,0,0,0,0,1 |
|
]); |
|
}); |
|
|
|
}); |
|
|
|
describe("byte-array", function() { |
|
it("should encode a byte array", function() { |
|
encoder.write3ByteArray([0, 1,2,3]); |
|
expect(encoder.getBytes()).toEqual([12,9,0,1,2,3]); |
|
}); |
|
|
|
}); |
|
}); |
|
}); |
|
|
|
describe("AMF0", function() { |
|
|
|
var encoder = Ext.create('Ext.data.amf.Encoder', {format:0}); |
|
var secondEncoder = Ext.create('Ext.data.amf.Encoder', {format:0}); |
|
|
|
|
|
beforeEach(function() { |
|
encoder.clear(); // reset encoder |
|
secondEncoder.clear(); |
|
}); |
|
|
|
describe("data types", function() { |
|
|
|
describe("undefined", function() { |
|
it("should encode undefined", function() { |
|
encoder.writeObject(undefined); |
|
expect(encoder.getBytes()).toEqual([0x06]); |
|
}); |
|
}); |
|
|
|
describe("null", function() { |
|
it("should encode null", function() { |
|
encoder.writeObject(null); |
|
expect(encoder.getBytes()).toEqual([0x05]); |
|
}); |
|
}); |
|
|
|
describe("false", function() { |
|
it("should encode false", function() { |
|
encoder.writeObject(false); |
|
expect(encoder.getBytes()).toEqual([0x01, 0x00]); |
|
}); |
|
}); |
|
|
|
describe("true", function() { |
|
it("should encode true", function() { |
|
encoder.writeObject(true); |
|
expect(encoder.getBytes()).toEqual([0x01, 0x01]); |
|
}); |
|
}); |
|
|
|
describe("number", function() { |
|
it("should encode 10.333", function() { |
|
encoder.writeObject(10.333); |
|
expect(encoder.getBytes()).toEqual([0,64,36,170,126,249,219,34,209]); |
|
}); |
|
|
|
it("should encode 1.7976931348623157e+308 (largest positive number)", function() { |
|
encoder.writeObject(Number.MAX_VALUE); |
|
expect(encoder.getBytes()).toEqual([0,127,239,255,255,255,255,255,255]); |
|
}); |
|
|
|
it("should encode -1.7976931348623157e+308 (largest negative number)", function() { |
|
encoder.writeObject(-Number.MAX_VALUE); |
|
expect(encoder.getBytes()).toEqual([0,255,239,255,255,255,255,255,255]); |
|
}); |
|
|
|
it("should encode 5e-324 (smallest positive number)", function() { |
|
encoder.writeObject(Number.MIN_VALUE); |
|
expect(encoder.getBytes()).toEqual([0,0,0,0,0,0,0,0,1]); |
|
}); |
|
|
|
it("should encode -5e-324 (smallest negative number)", function() { |
|
encoder.writeObject(-Number.MIN_VALUE); |
|
expect(encoder.getBytes()).toEqual([0,128,0,0,0,0,0,0,1]); |
|
}); |
|
|
|
it("should encode subnormal 2.2250738585072014E-308", function() { |
|
encoder.writeObject(2.2250738585072014E-308); |
|
expect(encoder.getBytes()).toEqual([0,0,16,0,0,0,0,0,0]); |
|
}); |
|
|
|
it("should encode NaN", function() { |
|
encoder.writeObject(NaN); |
|
expect(encoder.getBytes()).toEqual([0,255,248,0,0,0,0,0,0]); |
|
}); |
|
|
|
it("should encode positive infinity", function() { |
|
encoder.writeObject(Infinity); |
|
expect(encoder.getBytes()).toEqual([0,127,240,0,0,0,0,0,0]); |
|
}); |
|
|
|
it("should encode negative infinity", function() { |
|
encoder.writeObject(-Infinity); |
|
expect(encoder.getBytes()).toEqual([0,255,240,0,0,0,0,0,0]); |
|
}); |
|
}); |
|
|
|
describe("string", function() { |
|
it("should encode an empty string", function() { |
|
var str = ''; |
|
encoder.writeObject(str); |
|
expect(encoder.getBytes()).toEqual([0x02, 0x00, 0x00]); |
|
}); |
|
|
|
it("should encode a long string", function() { |
|
var str = "a"; |
|
while (str.length <= 0xffff) { |
|
str = str + str; // yes. bad. But should be done in 16 iterations |
|
} |
|
encoder.writeObject(str); |
|
expect(encoder.getBytes()[encoder.getBytes().length-1]).toEqual(str.charCodeAt(0)); |
|
var expected = [0x0C]; // construct header of array |
|
expected.push.apply(expected, encoder.encodeXInt(str.length, 4)); |
|
expected.push(str.charCodeAt(0)); |
|
expect(encoder.getBytes().slice(0, 6)).toEqual(expected); |
|
}); |
|
|
|
// 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 encode Danish", function() { |
|
var str = "Quizdeltagerne spiste jordb\u00E6r med fl\u00F8de, mens " + |
|
"cirkusklovnen Wolther spillede p\u00E5 xylofon"; |
|
encoder.writeObject(str); |
|
expect(encoder.getBytes()).toEqual([ |
|
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 |
|
]); |
|
}); |
|
|
|
it("should encode German", function() { |
|
var str = "Falsches \u00DCben von Xylophonmusik qu\u00E4lt jeden gr\u00F6\u00DFeren Zwerg"; |
|
encoder.writeObject(str); |
|
expect(encoder.getBytes()).toEqual([ |
|
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 |
|
]); |
|
}); |
|
|
|
it("should encode Greek", function() { |
|
var str = "\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"; |
|
encoder.writeObject(str); |
|
expect(encoder.getBytes()).toEqual([ |
|
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 |
|
]); |
|
}); |
|
|
|
it("should encode English", function() { |
|
var str = "The quick brown fox jumps over the lazy dog"; |
|
encoder.writeObject(str); |
|
expect(encoder.getBytes()).toEqual([ |
|
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 |
|
]); |
|
}); |
|
|
|
it("should encode Spanish", function() { |
|
var str = "El ping\u00FCino Wenceslao hizo kil\u00F3metros bajo exhaustiva " + |
|
"lluvia y"; |
|
encoder.writeObject(str); |
|
expect(encoder.getBytes()).toEqual([ |
|
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 |
|
]); |
|
}); |
|
|
|
it("should encode French", function() { |
|
var str = "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"; |
|
encoder.writeObject(str); |
|
expect(encoder.getBytes()).toEqual([ |
|
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 |
|
]); |
|
}); |
|
|
|
it("should encode Irish Gaelic", function() { |
|
var str = "D'fhuascail \u00CDosa, \u00DArmhac na h\u00D3ighe Beannaithe, p\u00F3r " + |
|
"\u00C9ava agus \u00C1dhaimh"; |
|
encoder.writeObject(str); |
|
expect(encoder.getBytes()).toEqual([ |
|
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 |
|
]); |
|
}); |
|
|
|
it("should decode Hungarian", function() { |
|
var str = "\u00C1rv\u00EDzt\u0171r\u0151 t\u00FCk\u00F6rf\u00FAr\u00F3g\u00E9p"; |
|
encoder.writeObject(str); |
|
expect(encoder.getBytes()).toEqual([ |
|
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 |
|
]); |
|
}); |
|
|
|
it("should encode Icelandic", function() { |
|
var str = "K\u00E6mi n\u00FD \u00F6xi h\u00E9r ykist \u00FEj\u00F3fum n\u00FA b\u00E6\u00F0i " + |
|
"v\u00EDl og \u00E1drepa"; |
|
encoder.writeObject(str); |
|
expect(encoder.getBytes()).toEqual([ |
|
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 |
|
]); |
|
}); |
|
|
|
it("should encode Japanese (Hiragana)", function() { |
|
var str = "\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"; |
|
encoder.writeObject(str); |
|
expect(encoder.getBytes()).toEqual([ |
|
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 |
|
]); |
|
}); |
|
|
|
it("should encode Japanese (Katakana)", function() { |
|
var str = "\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"; |
|
encoder.writeObject(str); |
|
expect(encoder.getBytes()).toEqual([ |
|
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 |
|
]); |
|
|
|
}); |
|
|
|
it("should encode Hebrew", function() { |
|
var str = "\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"; |
|
encoder.writeObject(str); |
|
expect(encoder.getBytes()).toEqual([ |
|
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 |
|
]); |
|
}); |
|
|
|
it("should decode Polish", function() { |
|
var str = "Pchn\u0105\u0107 w t\u0119 \u0142\u00F3d\u017A je\u017Ca lub o\u015Bm skrzy\u0144 fig"; |
|
encoder.writeObject(str); |
|
expect(encoder.getBytes()).toEqual([ |
|
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 |
|
]); |
|
}); |
|
|
|
it("should decode Russian", function() { |
|
var str = "\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!"; |
|
encoder.writeObject(str); |
|
expect(encoder.getBytes()).toEqual([ |
|
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 |
|
]); |
|
}); |
|
|
|
}); |
|
|
|
describe("xml", function() { |
|
it("should encode an XML object", function() { |
|
var xml = '<root><parent><child id="c1">foo</child><child id="c2"><bar/></child></parent></root>'; |
|
var data = [ |
|
// Chrome version is clean |
|
[ |
|
15,0,0,0,85,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,60,98,97,114, |
|
47,62,60,47,99,104,105,108,100,62,60,47,112,97,114,101, |
|
110,116,62,60,47,114,111,111,116,62 |
|
], |
|
// IE7 version might have a crlf at the end |
|
[ |
|
15,0,0,0,87,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,60,98,97,114, |
|
47,62,60,47,99,104,105,108,100,62,60,47,112,97,114,101, |
|
110,116,62,60,47,114,111,111,116,62, |
|
13, 10 |
|
], |
|
[ // IE9 |
|
15, 0, 0, 0, 86, 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, 60, 98, 97, 114, |
|
32, 47, 62, 60, 47, 99, 104, 105, 108, 100, 62, 60, 47, |
|
112, 97, 114, 101, 110, 116, 62, 60, 47, 114, 111, 111, |
|
116, 62 |
|
], |
|
[ // Opera version: <?xml version="1.0"?><root><parent><child id="c1">foo</child><child id="c2"><bar/></child></parent></root> |
|
15, 0, 0, 0, 106, 60, 63, 120, 109, 108, 32, 118, 101, |
|
114, 115, 105, 111, 110, 61, 34, 49, 46, 48, 34, 63, 62, |
|
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, 60, 98, 97, 114, 47, 62, 60, 47, |
|
99, 104, 105, 108, 100, 62, 60, 47, 112, 97, 114, 101, |
|
110, 116, 62, 60, 47, 114, 111, 111, 116, 62 |
|
] |
|
]; |
|
|
|
// generate a document out of the text |
|
var doc; |
|
if (window.DOMParser) { |
|
doc = (new DOMParser()).parseFromString(xml, "text/xml"); |
|
} else { |
|
doc = new ActiveXObject("Microsoft.XMLDOM"); |
|
doc.loadXML(xml); |
|
} |
|
|
|
encoder.writeObject(doc); |
|
expect(data).toContain(encoder.getBytes()); // note reverseal of expect / contain data to use toContain |
|
}); |
|
}); |
|
|
|
describe("date", function() { |
|
it("should encode 7/24/2012", function() { |
|
encoder.writeObject(new Date(1343164970869)); |
|
expect(encoder.getBytes()).toEqual([ |
|
11,66,115,139,173,239,119,80,0, 0,0 |
|
]); |
|
}); |
|
|
|
it("should encode 7/24/1912 (100 years before previous test's date)", function() { |
|
encoder.writeObject(new Date(-1812595029131)); |
|
expect(encoder.getBytes()).toEqual([ |
|
11,194,122,96,113,83,72,176,0, 0,0 |
|
]); |
|
}); |
|
|
|
it("should encode 7/24/2112 (100 years after previous test's date)", function() { |
|
encoder.writeObject(new Date(4498838570869)); |
|
expect(encoder.getBytes()).toEqual([ |
|
11,66,144,93,222,179,29,212,0, 0,0 |
|
]); |
|
}); |
|
|
|
it("should encode the UNIX epoch", function() { |
|
encoder.writeObject(new Date(0)); |
|
expect(encoder.getBytes()).toEqual([ |
|
11,0,0,0,0,0,0,0,0, 0,0 |
|
]); |
|
}); |
|
|
|
it("should encode 9/12/275760 (the largest future javascript date)", function() { |
|
encoder.writeObject(new Date(8640000000000000)); |
|
expect(encoder.getBytes()).toEqual([ |
|
11,67,62,178,8,194,220,0,0, 0,0 |
|
]); |
|
}); |
|
|
|
it("should encode 4/19/-271821 (the largest past javascript date)", function() { |
|
encoder.writeObject(new Date(-8640000000000000)); |
|
expect(encoder.getBytes()).toEqual([ |
|
11,195,62,178,8,194,220,0,0, 0,0 |
|
]); |
|
}); |
|
|
|
}); |
|
|
|
|
|
describe("array", function() { |
|
it("should encode an empty associative array", function() { |
|
encoder.writeObject([]); |
|
expect(encoder.getBytes()).toEqual([ |
|
8,0,0,0,0,0,0,9 |
|
]); |
|
}); |
|
it("should encode an associative array", function() { |
|
encoder.writeObject(['a','b','c']); |
|
expect(encoder.getBytes()).toEqual([ |
|
8,0,0,0,3,0,1,48,2,0,1,97,0,1,49,2,0,1,98,0,1,50,2,0,1,99,0,0,9 |
|
]); |
|
}); |
|
it("should encode an empty strict array", function() { |
|
encoder.write0StrictArray([]); |
|
expect(encoder.getBytes()).toEqual([ |
|
10,0,0,0,0 |
|
]); |
|
}); |
|
it("should encode an strict array", function() { |
|
encoder.write0StrictArray(['a','b','c']); |
|
expect(encoder.getBytes()).toEqual([ |
|
10,0,0,0,3,2,0,1,97,2,0,1,98,2,0,1,99 |
|
]); |
|
}); |
|
|
|
}); |
|
|
|
describe("object", function() { |
|
it("should encode an empty anonymous object", function() { |
|
encoder.writeObject({}); |
|
expect(encoder.getBytes()).toEqual([ |
|
3,0,0,9 |
|
]); |
|
}); |
|
it("should encode an anonymous object with multiple data types", function() { |
|
encoder.writeObject({1: 1, "str":"string", "array": [], "date": new Date(0)}); |
|
expect(encoder.getBytes()).toEqual([ |
|
// Note: when serializing from Flash, the order of objects might be different. timezone marker on date will definitly be different |
|
3,0,1,49,0,63,240,0,0,0,0,0,0,0,3,115,116,114, |
|
2,0,6,115,116,114,105,110,103,0,5,97,114,114, |
|
97,121,8,0,0,0,0,0,0,9,0,4,100,97,116,101,11, |
|
0,0,0,0,0,0,0,0,0,0,0,0,9 |
|
]); |
|
}); |
|
it("should encode a typed object with multiple data types", function() { |
|
encoder.writeObject({$flexType:"type", 1: 1, "str":"string", "array": [], "date": new Date(0)}); |
|
expect(encoder.getBytes()).toEqual([ |
|
// Note: when serializing from Flash, the order of objects might be different. timezone marker on date will definitly be different |
|
16, 0, 4, 116, 121, 112, 101, |
|
0,1,49,0,63,240,0,0,0,0,0,0,0,3,115,116,114, |
|
2,0,6,115,116,114,105,110,103,0,5,97,114,114, |
|
97,121,8,0,0,0,0,0,0,9,0,4,100,97,116,101,11, |
|
0,0,0,0,0,0,0,0,0,0,0,0,9 |
|
]); |
|
}); |
|
|
|
}); |
|
|
|
}); |
|
}); |
|
|
|
}); |