UNPKG

@qooxdoo/framework

Version:

The JS Framework for Coders

633 lines (528 loc) 16.1 kB
/* ************************************************************************ qooxdoo - the new era of web development http://qooxdoo.org Copyright: 2004-2009 1&1 Internet AG, Germany, http://www.1und1.de License: MIT: https://opensource.org/licenses/MIT See the LICENSE file in the project's top-level directory for details. Authors: * Martin Wittemann (martinwittemann) ************************************************************************ */ /** * @ignore(qx.test.SerializerModel) * @ignore(qx.test.SerializerModelEnc) */ qx.Class.define("qx.test.util.Serializer", { extend: qx.dev.unit.TestCase, construct() { this.__s = qx.util.Serializer; qx.Class.define("qx.test.SerializerModel", { extend: qx.core.Object, properties: { data1: { nullable: true }, data2: { nullable: true }, data3: { nullable: true } } }); }, members: { __model: null, __s: null, setUp() { this.__model = new qx.test.SerializerModel(); }, tearDown() { this.__model.dispose(); }, testUrlString() { this.__model.setData1("a"); this.__model.setData2("b"); this.__model.setData3("c"); this.assertEquals( "data1=a&data2=b&data3=c", this.__s.toUriParameter(this.__model) ); this.__model.setData1("A"); this.__model.setData2("B"); this.__model.setData3("C"); this.assertEquals( "data1=A&data2=B&data3=C", this.__s.toUriParameter(this.__model) ); this.__model.setData1("1"); this.__model.setData2("11"); this.__model.setData3("111"); this.assertEquals( "data1=1&data2=11&data3=111", this.__s.toUriParameter(this.__model) ); }, testUrlStringEncoded() { this.__model.setData1("ä"); this.__model.setData2("ö"); this.__model.setData3("ü"); this.assertEquals( "data1=%C3%A4&data2=%C3%B6&data3=%C3%BC", this.__s.toUriParameter(this.__model) ); this.__model.setData1("–"); this.__model.setData2(" "); this.__model.setData3("ß"); this.assertEquals( "data1=%E2%80%93&data2=%20&data3=%C3%9F", this.__s.toUriParameter(this.__model) ); }, testUrlBoolean() { this.__model.setData1(true); this.__model.setData2(false); this.__model.setData3(null); this.assertEquals( "data1=true&data2=false&data3=null", this.__s.toUriParameter(this.__model) ); }, testUrlNumber() { this.__model.setData1(10); this.__model.setData2(-15.3443); this.__model.setData3(Number.NaN); this.assertEquals( "data1=10&data2=-15.3443&data3=NaN", this.__s.toUriParameter(this.__model) ); }, testUrlKeyEncoded() { qx.Class.define("qx.test.SerializerModelEnc", { extend: qx.core.Object, properties: { äüö: { init: "ÄÜÖ" } } }); var model = new qx.test.SerializerModelEnc(); this.assertEquals( "%C3%A4%C3%BC%C3%B6=%C3%84%C3%9C%C3%96", this.__s.toUriParameter(model) ); model.dispose(); }, testUrlQxSerializer() { var qxSerializer = function (object) { return object.getLabel(); }; var item = new qx.ui.form.ListItem("a"); this.__model.setData1(item); this.__model.setData2("b"); this.__model.setData3("c"); this.assertEquals( "data1=a&data2=b&data3=c", this.__s.toUriParameter(this.__model, qxSerializer) ); item.dispose(); }, testUrlDataArray() { var a1 = new qx.data.Array(["a"]); var a2 = new qx.data.Array(["a", "b"]); var a3 = new qx.data.Array(["a", "b", "c"]); this.__model.setData1(a1); this.__model.setData2(a2); this.__model.setData3(a3); this.assertEquals( "data1=a&data2=a&data2=b&data3=a&data3=b&data3=c", this.__s.toUriParameter(this.__model) ); // get rid of the objects a1.dispose(); a2.dispose(); a3.dispose(); }, testUrlDataArrayNative() { var a1 = ["a"]; var a2 = ["a", "b"]; var a3 = ["a", "b", "c"]; this.__model.setData1(a1); this.__model.setData2(a2); this.__model.setData3(a3); this.assertEquals( "data1=a&data2=a&data2=b&data3=a&data3=b&data3=c", this.__s.toUriParameter(this.__model) ); }, testUrlInherited() { var model = new qx.ui.core.Widget(); var data = this.__s.toUriParameter(model); // property included in widget this.assertTrue(data.indexOf("appearance") != -1); // property included in LayoutItem (Superclass) this.assertTrue(data.indexOf("alignY") != -1); model.dispose(); }, testUrlQxClass() { this.__model.setData1(qx.core.Object); this.__model.setData2(qx.data.IListData); this.__model.setData3(qx.data.MBinding); this.assertEquals( "data1=qx.core.Object&data2=qx.data.IListData&data3=qx.data.MBinding", this.__s.toUriParameter(this.__model) ); }, testJsonFlat() { this.__model.setData1("a"); this.__model.setData2(10.456); this.__model.setData3(true); this.assertEquals( '{"data1":"a","data2":10.456,"data3":true}', this.__s.toJson(this.__model) ); }, testJsonExp() { var date = new Date(1000); this.__model.setData1(date); this.__model.setData2(/[0]/); this.__model.setData3(45e12); this.assertEquals( '{"data1":"' + date + '","data2":"/[0]/","data3":45000000000000}', this.__s.toJson(this.__model) ); }, testJsonDeep2() { var model = new qx.test.SerializerModel(); model.setData1("a"); model.setData2(11); model.setData3(false); this.__model.setData1(model); this.__model.setData3(null); this.assertEquals( '{"data1":{"data1":"a","data2":11,"data3":false},"data2":null,"data3":null}', this.__s.toJson(this.__model) ); model.dispose(); }, testJsonArray() { this.__model.setData1([12, 1]); this.__model.setData2(["a", "b"]); this.__model.setData3([true, false]); this.assertEquals( '{"data1":[12,1],"data2":["a","b"],"data3":[true,false]}', this.__s.toJson(this.__model) ); }, testJsonDataArray() { this.__model.setData1(new qx.data.Array([12, 1])); this.__model.setData2(new qx.data.Array(["a", "b"])); this.__model.setData3(new qx.data.Array([true, false])); this.assertEquals( '{"data1":[12,1],"data2":["a","b"],"data3":[true,false]}', this.__s.toJson(this.__model) ); this.__model.getData1().dispose(); this.__model.getData2().dispose(); this.__model.getData3().dispose(); }, testJsonBig() { var model = new qx.ui.core.Widget(); this.__s.toJson(model); model.dispose(); }, testJsonInherited() { var model = new qx.ui.core.Widget(); var data = this.__s.toJson(model); // property included in widget this.assertTrue(data.indexOf("appearance") != -1); // property included in LayoutItem (Superclass) this.assertTrue(data.indexOf("alignY") != -1); model.dispose(); }, testJsonEmpty() { this.__model.setData1(new qx.data.Array()); this.__model.setData2([]); this.__model.setData3({}); this.assertEquals( '{"data1":[],"data2":[],"data3":{}}', this.__s.toJson(this.__model) ); this.__model.getData1().dispose(); }, testJsonEscape() { this.__model.setData1("''"); this.__model.setData2('""'); this.__model.setData3("\b\t\n\f\r\\"); this.assertEquals( '{"data1":"\'\'","data2":"\\"\\"","data3":"\\b\\t\\n\\f\\r\\\\"}', this.__s.toJson(this.__model) ); }, testJsonQxSerializer() { var qxSerializer = function (object) { if (object instanceof qx.ui.form.ListItem) { return object.getLabel(); } }; var item = new qx.ui.form.ListItem("a"); this.__model.setData1(item); this.__model.setData2(10.456); this.__model.setData3(true); this.assertEquals( '{"data1":"a","data2":10.456,"data3":true}', this.__s.toJson(this.__model, qxSerializer) ); item.dispose(); }, testJsonWithMarshaler() { this.__model.setData1("a"); this.__model.setData2(["b"]); this.__model.setData3("c"); var json = this.__s.toJson(this.__model); var model = qx.data.marshal.Json.createModel(qx.lang.Json.parse(json)); this.assertEquals(this.__model.getData1(), model.getData1()); this.assertEquals( this.__model.getData2()[0], model.getData2().getItem(0) ); this.assertEquals(this.__model.getData3(), model.getData3()); model.dispose(); }, testJsonLateObjectSet() { var data = { foo: "foo", bar: "bar", goo: {} }; var model = qx.data.marshal.Json.createModel(data); model.setGoo({ mi: "moo", la: "lili" }); this.assertEquals( '{"foo":"foo","bar":"bar","goo":{"mi":"moo","la":"lili"}}', qx.util.Serializer.toJson(model) ); model.dispose(); }, testJsonQxClass() { this.__model.setData1(qx.core.Object); this.__model.setData2(qx.data.IListData); this.__model.setData3(qx.data.MBinding); this.assertEquals( '{"data1":"qx.core.Object","data2":"qx.data.IListData","data3":"qx.data.MBinding"}', this.__s.toJson(this.__model) ); }, // // toNativeObject tests // testNativeObjectFlat() { this.__model.setData1("a"); this.__model.setData2(10.456); this.__model.setData3(true); this.assertJsonEquals( { data1: "a", data2: 10.456, data3: true }, this.__s.toNativeObject(this.__model) ); }, testNativeObjectExp() { var date = new Date(); this.__model.setData1(date); this.__model.setData2(/[0]/); this.__model.setData3(45e12); this.assertJsonEquals( { data1: date, data2: /[0]/, data3: 45e12 }, this.__s.toNativeObject(this.__model) ); }, testNativeObjectDeep2() { var model = new qx.test.SerializerModel(); model.setData1("a"); model.setData2(11); model.setData3(false); this.__model.setData1(model); this.__model.setData3(null); this.assertJsonEquals( { data1: { data1: "a", data2: 11, data3: false }, data2: null, data3: null }, this.__s.toNativeObject(this.__model) ); model.dispose(); }, testNativeObjectArray() { this.__model.setData1([12, 1]); this.__model.setData2(["a", "b"]); this.__model.setData3([true, false]); this.assertJsonEquals( { data1: [12, 1], data2: ["a", "b"], data3: [true, false] }, this.__s.toNativeObject(this.__model) ); }, testNativeObjectDataArray() { this.__model.setData1(new qx.data.Array([12, 1])); this.__model.setData2(new qx.data.Array(["a", "b"])); this.__model.setData3(new qx.data.Array([true, false])); this.assertJsonEquals( { data1: [12, 1], data2: ["a", "b"], data3: [true, false] }, this.__s.toNativeObject(this.__model) ); this.__model.getData1().dispose(); this.__model.getData2().dispose(); this.__model.getData3().dispose(); }, testNativeObjectBig() { var model = new qx.ui.core.Widget(); this.__s.toNativeObject(model); model.dispose(); }, testNativeObjectEmpty() { this.__model.setData1(new qx.data.Array()); this.__model.setData2([]); this.__model.setData3(new qx.core.Object()); this.assertJsonEquals( { data1: [], data2: [], data3: {} }, this.__s.toNativeObject(this.__model) ); this.__model.getData1().dispose(); this.__model.getData3().dispose(); }, testNativeObjectEscape() { this.__model.setData1("''"); this.__model.setData2('""'); this.__model.setData3("\b\t\n\f\r\\"); this.assertJsonEquals( { data1: "''", data2: '""', data3: "\b\t\n\f\r\\" }, this.__s.toNativeObject(this.__model) ); }, testNativeObjectQxSerializer() { var qxSerializer = function (object) { if (object instanceof qx.ui.form.ListItem) { return object.getLabel(); } }; var item = new qx.ui.form.ListItem("a"); this.__model.setData1(item); this.__model.setData2(10.456); this.__model.setData3(true); this.assertJsonEquals( { data1: "a", data2: 10.456, data3: true }, this.__s.toNativeObject(this.__model, qxSerializer) ); item.dispose(); }, testNativeObjectQxClass() { this.__model.setData1(qx.core.Object); this.__model.setData2(qx.data.IListData); this.__model.setData3(qx.data.MBinding); this.assertJsonEquals( { data1: "qx.core.Object", data2: "qx.data.IListData", data3: "qx.data.MBinding" }, this.__s.toNativeObject(this.__model) ); }, /* ****************************** * DATE FORMATER * **************************** */ __setUpDateModel() { var formater = new qx.util.format.DateFormat("isoUtcDateTime", "en"); var date1 = new Date(0); var date2 = new Date(100000); var date3 = new Date(25168418651); this.__model.setData1(date1); this.__model.setData2(date2); this.__model.setData3(date3); return formater; }, testDateFormaterNative() { var formater = this.__setUpDateModel(); this.assertJsonEquals( { data1: "1970-01-01T00:00:00Z", data2: "1970-01-01T00:01:40Z", data3: "1970-10-19T07:13:38Z" }, this.__s.toNativeObject(this.__model, null, formater) ); formater.dispose(); }, testDateFormaterJson() { var formater = this.__setUpDateModel(); this.assertEquals( '{"data1":"1970-01-01T00:00:00Z","data2":"1970-01-01T00:01:40Z","data3":"1970-10-19T07:13:38Z"}', this.__s.toJson(this.__model, null, formater) ); formater.dispose(); }, testDateFormaterUrl() { var formater = this.__setUpDateModel(); this.assertEquals( "data1=1970-01-01T00%3A00%3A00Z&data2=1970-01-01T00%3A01%3A40Z&data3=1970-10-19T07%3A13%3A38Z", this.__s.toUriParameter(this.__model, null, formater) ); formater.dispose(); }, /* ****************************** * Localized strings * **************************** */ testJsonLocalizedStrings() { this.assertEquals( '"test affe"', qx.util.Serializer.toJson(qx.locale.Manager.tr("test affe")) ); }, testNativeLocalizedStrings() { var ser = qx.util.Serializer.toNativeObject( qx.locale.Manager.tr("test affe") ); this.assertEquals("test affe", ser); // regular strings should not have a translate method this.assertUndefined(ser.translate); }, testUrlLocalizedStrings() { this.__model.setData1(qx.locale.Manager.tr("test affe")); this.assertEquals( "data1=test%20affe&data2=null&data3=null", qx.util.Serializer.toUriParameter(this.__model) ); } } });