From 5b66d4b637e5cf9b74a4a1c3d2b3aded44d6644c Mon Sep 17 00:00:00 2001 From: Daniel Espinosa Date: Thu, 7 May 2015 13:00:11 -0500 Subject: [PATCH] Fixes on SerializableDualKeyMap * Supports node lowercase nodes' name * Replaces test-large.xml.in by test-large.xml * Added Unit Test for SerializableArrayList and SerializableDualKeyMap for lowercase node's name --- configure.ac | 1 - gxml/SerializableGeeArrayList.vala | 4 +- gxml/SerializableGeeDualKeyMap.vala | 14 ++++++- test/Makefile.am | 1 + test/SerializableGeeArrayListTest.vala | 29 ++++++++++++++ test/SerializableGeeDualKeyMapTest.vala | 30 ++++++++++++++ test/gxml-performance.vala | 22 ++++++++++- test/test-collection.xml | 46 ++++++++++++++++++++++ test/{test-large.xml.in => test-large.xml} | 0 9 files changed, 141 insertions(+), 6 deletions(-) create mode 100644 test/test-collection.xml rename test/{test-large.xml.in => test-large.xml} (100%) diff --git a/configure.ac b/configure.ac index cb5f720d..5cd8bdea 100644 --- a/configure.ac +++ b/configure.ac @@ -282,7 +282,6 @@ gxml/gxml-0.6.pc gxml/Makefile test/Makefile test/test.xml -test/test-large.xml test/test_invalid.xml test/test_out_path_expected.xml test/test_out_stream_expected.xml diff --git a/gxml/SerializableGeeArrayList.vala b/gxml/SerializableGeeArrayList.vala index c02d34f0..35c527d3 100644 --- a/gxml/SerializableGeeArrayList.vala +++ b/gxml/SerializableGeeArrayList.vala @@ -135,12 +135,12 @@ public class GXml.SerializableArrayList : Gee.ArrayList, Serializable, Ser #endif var obj = (Serializable) Object.new (element_type); #if DEBUG - GLib.message (@"Creating a new Object to add: '$(obj.node_name ())' to Node: '$(node.name)'"); + GLib.message (@"Creating a new Object to add: '$(obj.node_name ())' from Node: '$(node.name)'"); #endif if (n.name.down () == ((Serializable) obj).node_name ().down ()) { obj.deserialize (n); #if DEBUG - GLib.message (@"SerializableArrayList: Adding object: '$(obj.node_name ())' to Node: '$(node.name)'"); + GLib.message (@"SerializableArrayList: Adding object: '$(obj.node_name ())' from Node: '$(node.name)'"); #endif add (obj); } diff --git a/gxml/SerializableGeeDualKeyMap.vala b/gxml/SerializableGeeDualKeyMap.vala index 68ec52cb..f6306c82 100644 --- a/gxml/SerializableGeeDualKeyMap.vala +++ b/gxml/SerializableGeeDualKeyMap.vala @@ -200,6 +200,9 @@ public class GXml.SerializableDualKeyMap : Object, Serializable, Serializ throws GLib.Error requires (node is Element) { +#if DEBUG + GLib.message (@"Deserializing DualKeyMap on Element: $(node.name)"); +#endif if (!(value_type.is_a (typeof (GXml.Serializable)) && value_type.is_a (typeof (SerializableMapDualKey)))) { throw new SerializableError.UNSUPPORTED_TYPE_ERROR ("%s: Value type '%s' is unsupported", @@ -208,9 +211,18 @@ public class GXml.SerializableDualKeyMap : Object, Serializable, Serializ foreach (GXml.Node n in node.childs) { if (n is Element) { var obj = (SerializableMapDualKey) Object.new (value_type); - if (n.name == ((Serializable) obj).node_name ()) { +#if DEBUG + GLib.message (@"Creating a new Object to add: '$(((Serializable)obj).node_name ())' from Node: '$(node.name)'"); +#endif + if (n.name.down () == ((Serializable) obj).node_name ().down ()) { ((Serializable) obj).deserialize (n); +#if DEBUG + GLib.message (@"SerializableDualKeyMap: Setting object: '$(((Serializable)obj).node_name ())' from Node: '$(node.name)'"); +#endif @set (obj.get_map_primary_key (), obj.get_map_secondary_key (), obj); +#if DEBUG + GLib.message (@"SerializableDualKeyMap: Size = '$(this.size)'"); +#endif } } } diff --git a/test/Makefile.am b/test/Makefile.am index 1501996a..07a4362a 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -106,6 +106,7 @@ DISTCLEANFILES = _serialization_test_*.xml EXTRA_DIST += \ $(sources) \ + test-large.xml \ test_invalid.xml \ test_with_ns.xml \ test_out_path_expected.xml \ diff --git a/test/SerializableGeeArrayListTest.vala b/test/SerializableGeeArrayListTest.vala index b93e20b7..6cdde4ab 100644 --- a/test/SerializableGeeArrayListTest.vala +++ b/test/SerializableGeeArrayListTest.vala @@ -174,5 +174,34 @@ class SerializableGeeArrayListTest : GXmlTest assert_not_reached (); } }); + Test.add_func ("/gxml/serializable/serializable_array_list/deserialize-node-names", + () => { + try { + var d = new xDocument.from_path (GXmlTestConfig.TEST_DIR + "/test-collection.xml"); + var bs = new BookStore (); + bs.deserialize (d); + assert (bs.name == "The Great Book"); + assert (bs.books.size == 3); + var b = bs.books.first (); + assert (b != null); + assert (b.name != null); + assert (b.name.get_name () == "Book1"); + assert (b.year == "2015"); + assert (b.authors != null); + assert (b.authors.array != null); + assert (b.authors.array.size == 2); + var a = b.authors.array.first (); + assert (a != null); + assert (a.name != null); + assert (a.name.get_name () == "Fred"); + assert (a.email != null); + assert (a.email.get_mail () == "fweasley@hogwarts.co.uk"); + } catch (GLib.Error e) { +#if DEBUG + GLib.message ("ERROR: "+e.message); +#endif + assert_not_reached (); + } + }); } } diff --git a/test/SerializableGeeDualKeyMapTest.vala b/test/SerializableGeeDualKeyMapTest.vala index 0baf80d8..e62d2d4d 100644 --- a/test/SerializableGeeDualKeyMapTest.vala +++ b/test/SerializableGeeDualKeyMapTest.vala @@ -267,5 +267,35 @@ class SerializableGeeDualKeyMapTest : GXmlTest assert_not_reached (); } }); + Test.add_func ("/gxml/serializable/serializable_dual_key_map/deserialize-node-names", + () => { + try { + var d = new xDocument.from_path (GXmlTestConfig.TEST_DIR + "/test-collection.xml"); + var bs = new BookStore (); + bs.deserialize (d); + assert (bs.name == "The Great Book"); + assert (bs.books.size == 3); + var b = bs.books.first (); + assert (b != null); + assert (b.name != null); + assert (b.name.get_name () == "Book1"); + assert (b.year == "2015"); + assert (b.authors != null); + assert (b.authors.array != null); + assert (b.authors.array.size == 2); + assert (b.inventory_registers != null); + assert (b.inventory_registers.size == 4); + var ir = b.inventory_registers.get (1,"K001"); + assert (ir != null); + assert (ir.number == 1); + assert (ir.inventory == "K001"); + assert (ir.row == 5); + } catch (GLib.Error e) { +#if DEBUG + GLib.message ("ERROR: "+e.message); +#endif + assert_not_reached (); + } + }); } } diff --git a/test/gxml-performance.vala b/test/gxml-performance.vala index a30f39d8..722bedf7 100644 --- a/test/gxml-performance.vala +++ b/test/gxml-performance.vala @@ -54,13 +54,30 @@ class Authors : SerializableContainer public override string to_string () { return @"$(get_type ().name ())"; } } -class Book : SerializableObjectModel +class Inventory : SerializableObjectModel, SerializableMapDualKey +{ + public int number { get; set; } + public int row { get; set; } + public string inventory { get; set; } + public int get_map_primary_key () { return number; } + public string get_map_secondary_key () { return inventory; } + public override string to_string () { return @"||$(number.to_string ())|$(row.to_string ())|$(inventory)||"; } + public class DualKeyMap : SerializableDualKeyMap {} +} + +class Book : SerializableContainer { public string year { get; set; } public string isbn { get; set; } public Name name { get; set; } public Authors authors { get; set; } + public Inventory.DualKeyMap inventory_registers { get; set; } public override string to_string () { return @"$(name.get_name ()), $(year)"; } + public override void init_containers () + { + if (inventory_registers == null) + inventory_registers = new Inventory.DualKeyMap (); + } public class Array : SerializableArrayList {} } @@ -146,7 +163,8 @@ public class Performance #endif assert_not_reached (); } - });Test.add_func ("/gxml/performance/tw-serialize", + }); + Test.add_func ("/gxml/performance/tw-serialize", () => { try { double time; diff --git a/test/test-collection.xml b/test/test-collection.xml new file mode 100644 index 00000000..5e16b21d --- /dev/null +++ b/test/test-collection.xml @@ -0,0 +1,46 @@ + + + + Book1 + + + Fred + fweasley@hogwarts.co.uk + + + George + gweasley@hogwarts.co.uk + + + + + + + + + Book2 + + + Fred + fweasley@hogwarts.co.uk + + + George + gweasley@hogwarts.co.uk + + + + + Book3 + + + Fred + fweasley@hogwarts.co.uk + + + George + gweasley@hogwarts.co.uk + + + + diff --git a/test/test-large.xml.in b/test/test-large.xml similarity index 100% rename from test/test-large.xml.in rename to test/test-large.xml -- GitLab