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('a1'); }); }); 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('1str1string'); }); }); 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('bodyclientIddestinationheadersmessageIdoperationsourcetimestamptimeToLive123headervalueidmethod00'); }); }); }); });