describe("Ext.data.amf.XmlEncoder", function() {
describe("clear", function() {
it("should reset body when called", function() {
var encoder = Ext.create('Ext.data.amf.XmlEncoder');
encoder.writeObject(1);
expect(encoder.getBody().length).not.toEqual(0);
encoder.clear();
expect(encoder.getBody().length).toEqual(0);
});
});
describe("AMFX", function() {
var encoder = Ext.create('Ext.data.amf.XmlEncoder');
var secondEncoder = Ext.create('Ext.data.amf.XmlEncoder');
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.getBody()).toEqual("");
});
});
describe("null", function() {
it("should encode null", function() {
encoder.writeObject(null);
expect(encoder.getBody()).toEqual("");
});
});
describe("false", function() {
it("should encode false", function() {
encoder.writeObject(false);
expect(encoder.getBody()).toEqual("");
});
});
describe("true", function() {
it("should encode true", function() {
encoder.writeObject(true);
expect(encoder.getBody()).toEqual("");
});
});
describe("integer", function() {
it("should encode 0", function() {
encoder.writeObject(0);
expect(encoder.getBody()).toEqual("0");
});
it("should encode 2^29-1 (the largest possible unsigned 29-bit int)", function() {
encoder.writeObject(Math.pow(2, 29) - 1);
expect(encoder.getBody()).toEqual("536870911");
});
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.getBody()).toEqual(secondEncoder.getBody());
}
});
});
describe("double", function() {
it("should encode 10.333", function() {
encoder.writeObject(10.333);
expect(encoder.getBody()).toEqual("10.333");
});
it("should encode 1.7976931348623157e+308 (largest positive number)", function() {
encoder.writeObject(Number.MAX_VALUE);
expect(encoder.getBody()).toEqual("1.7976931348623157e+308");
});
it("should encode -1.7976931348623157e+308 (largest negative number)", function() {
encoder.writeObject(-Number.MAX_VALUE);
expect(encoder.getBody()).toEqual("-1.7976931348623157e+308");
});
it("should encode 5e-324 (smallest positive number)", function() {
encoder.writeObject(Number.MIN_VALUE);
expect(encoder.getBody()).toEqual("5e-324");
});
it("should encode -5e-324 (smallest negative number)", function() {
encoder.writeObject(-Number.MIN_VALUE);
expect(encoder.getBody()).toEqual("-5e-324");
});
it("should encode subnormal 2.2250738585072014E-308", function() {
encoder.writeObject(2.2250738585072014E-308);
expect(encoder.getBody()).toEqual("2.2250738585072014e-308");
});
it("should encode NaN", function() {
encoder.writeObject(NaN);
expect(encoder.getBody()).toEqual("NaN");
});
it("should encode positive infinity", function() {
encoder.writeObject(Infinity);
expect(encoder.getBody()).toEqual("Infinity");
});
it("should encode negative infinity", function() {
encoder.writeObject(-Infinity);
expect(encoder.getBody()).toEqual("-Infinity");
});
});
describe("string", function() {
it("should encode an empty string", function() {
var str = '';
encoder.writeObject(str);
expect(encoder.getBody()).toEqual("");
});
// 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ær med fløde, mens " +
"cirkusklovnen Wolther spillede på xylofon";
encoder.writeObject(str);
expect(encoder.getBody()).toEqual("Quizdeltagerne spiste jordbær med fløde, mens cirkusklovnen Wolther spillede på xylofon");
});
it("should encode Hebrew", function() {
var str = "דג סקרן שט בים מאוכזב ולפתע מצא לו חברה איך הקליטה";
encoder.writeObject(str);
expect(encoder.getBody()).toEqual("דג סקרן שט בים מאוכזב ולפתע מצא לו חברה איך הקליטה");
});
});
describe("xml document", function() {
it("should encode an XMLDocument", function() {
var strippedBody;
var xml = 'foo';
var data = [
// chrome version
'foo]]>',
// IE 7-8 version
'foo]]>',
// IE9 version
'foo]]>',
// Opera version
'foo]]>'
];
// 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);
strippedBody = encoder.getBody().replace(/[\r\n]/g, ""); // remove any newlines - IE likes to add those in
expect(data).toContain(strippedBody); // 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.getBody()).toEqual("1343164970869");
});
it("should encode 7/24/1912 (100 years before previous test's date)", function() {
encoder.writeObject(new Date(-1812595029131));
expect(encoder.getBody()).toEqual("-1812595029131");
});
it("should encode the UNIX epoch", function() {
encoder.writeObject(new Date(0));
expect(encoder.getBody()).toEqual("0");
});
});
describe("array", function() {
it("should encode an empty array", function() {
encoder.writeObject([]);
expect(encoder.getBody()).toEqual('');
});
it("should encode an array", function() {
encoder.writeObject(['a','b','c']);
expect(encoder.getBody()).toEqual('abc');
});
it("should encode an array with associative data", function() {
var arr = ['a'];
arr.b = 1;
encoder.writeObject(arr);
expect(encoder.getBody()).toEqual('a- 1
');
});
});
describe("object", function() {
it("should encode an empty anonymous object", function() {
encoder.writeObject({});
expect(encoder.getBody()).toEqual("");
});
it("should encode an anonymous object with data items", function() {
encoder.writeObject({1: 1, "str":"string"});
expect(encoder.getBody()).toEqual('');
});
});
describe("byte-array", function() {
it("should encode a byte array", function() {
encoder.writeByteArray([0, 1,2,3, 0xff]);
expect(encoder.getBody()).toEqual("00010203FF");
});
});
});
describe("AMFX messages", function() {
it("should write an AMFX message", function() {
var m = Ext.create('Ext.data.amf.RemotingMessage', {
body: 1,
clientId: "2",
destination: "3",
headers: {
header: "value"
},
messageId:"id",
operation: "method",
timestamp: 0,
timeToLive: 0
});
encoder.writeAmfxRemotingPacket(m);
expect(encoder.getBody()).toEqual('');
});
});
});
});