macoslinuxwindowsinboxwhatsappicloudtweetdeckhipchattelegramhangoutsslackgmailskypefacebook-workplaceoutlookemailmicrosoft-teamsdiscordmessengercustom-services
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
9 years ago
|
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
|
||
|
]);
|
||
|
});
|
||
|
|
||
|
});
|
||
|
|
||
|
});
|
||
|
});
|
||
|
|
||
|
});
|