[gxml] Fixed SerializableDualKeyMap for post-deseralization
- From: Daniel Espinosa Ortiz <despinosa src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gxml] Fixed SerializableDualKeyMap for post-deseralization
- Date: Fri, 26 Feb 2016 22:08:19 +0000 (UTC)
commit a1f5ae57acd220535dff841a30af41baf0867052
Author: Daniel Espinosa <esodan gmail com>
Date: Fri Feb 26 16:06:29 2016 -0600
Fixed SerializableDualKeyMap for post-deseralization
gxml/SerializableGeeDualKeyMap.vala | 12 ++-
test/SerializableGeeDualKeyMapTest.vala | 134 +++++++++++++++++++++++++++++-
test/SerializableGeeTreeMapTest.vala | 4 +-
3 files changed, 139 insertions(+), 11 deletions(-)
---
diff --git a/gxml/SerializableGeeDualKeyMap.vala b/gxml/SerializableGeeDualKeyMap.vala
index 93896d7..eee2291 100644
--- a/gxml/SerializableGeeDualKeyMap.vala
+++ b/gxml/SerializableGeeDualKeyMap.vala
@@ -36,7 +36,7 @@ public class GXml.SerializableDualKeyMap<P,S,V> : Object, Gee.Traversable <V>, S
// SerializableCollection interface
public virtual bool deserialize_proceed () { return true; }
- public virtual bool deserialized () { return true; }
+ public virtual bool deserialized () { return _deserialized; }
public virtual bool deserialize_node (GXml.Node node) throws GLib.Error {
if (!(value_type.is_a (typeof (GXml.Serializable)) &&
value_type.is_a (typeof (SerializableMapDualKey)))) {
@@ -46,8 +46,12 @@ public class GXml.SerializableDualKeyMap<P,S,V> : Object, Gee.Traversable <V>, S
if (node is Element) {
var obj = (SerializableMapDualKey<P,S>) Object.new (value_type);
if (node.name.down () == ((Serializable) obj).node_name ().down ()) {
- ((Serializable) obj).deserialize (node);
- @set (obj.get_map_primary_key (), obj.get_map_secondary_key (), obj);
+ if (obj is SerializableCollection)
+ (obj as SerializableCollection).deserialize_children ();
+ else {
+ ((Serializable) obj).deserialize (node);
+ @set (obj.get_map_primary_key (), obj.get_map_secondary_key (), obj);
+ }
}
}
return true;
@@ -238,7 +242,7 @@ public class GXml.SerializableDualKeyMap<P,S,V> : Object, Gee.Traversable <V>, S
public bool default_deserialize_property (GXml.Node property_node)
throws GLib.Error
{
- return true;
+ return deserialize_node (property_node);
}
// Traversable
public new bool @foreach (Gee.ForallFunc<V> f) {
diff --git a/test/SerializableGeeDualKeyMapTest.vala b/test/SerializableGeeDualKeyMapTest.vala
index 0d71b97..4122538 100644
--- a/test/SerializableGeeDualKeyMapTest.vala
+++ b/test/SerializableGeeDualKeyMapTest.vala
@@ -42,9 +42,55 @@ class Spaces : SerializableObjectModel, SerializableMapDualKey<string,string>
class SerializableGeeDualKeyMapTest : GXmlTest
{
+
+ class BallFill : SerializableObjectModel
+ {
+ public string name { get; set; default = "Fill"; }
+ public void set_text (string txt) { serialized_xml_node_value = txt; }
+ public override string to_string () { return name; }
+ public override string node_name () { return "BallFill"; }
+ public override bool serialize_use_xml_node_value () { return true; }
+ }
+
+ class Ball : SerializableObjectModel, SerializableMapDualKey<string,string>
+ {
+ public string name { get; set; default = "Ball"; }
+ public string size { get; set; default = "medium"; }
+ public BallFill ballfill { get; set; }
+ public override string to_string () { return name; }
+ public override string node_name () { return "Ball"; }
+ public string get_map_primary_key () { return size; }
+ public string get_map_secondary_key () { return name; }
+ public class DualMap : SerializableDualKeyMap<string,string,Ball> {
+ public override bool deserialize_proceed () { return false; }
+ }
+ }
+
+ class SmallBag : SerializableObjectModel, SerializableMapDualKey<string,string>
+ {
+ public string name { get; set; default = "SmallBag"; }
+ public string cash { get; set; default = "money"; }
+ public Ball.DualMap balls { get; set; default = new Ball.DualMap (); }
+ public override string to_string () { return name; }
+ public override string node_name () { return "SmallBag"; }
+ public string get_map_primary_key () { return cash; }
+ public string get_map_secondary_key () { return name; }
+ public class DualMap : SerializableDualKeyMap<string,string,SmallBag> {
+ public override bool deserialize_proceed () { return false; }
+ }
+ }
+
+ class BigBag : SerializableObjectModel
+ {
+ public string name { get; set; default = "ball"; }
+ public SmallBag.DualMap bags { get; set; default = new SmallBag.DualMap (); }
+ public override string to_string () { return name; }
+ public override string node_name () { return "BigBag"; }
+ }
+
public static void add_tests ()
{
- Test.add_func ("/gxml/serializable/serializable_dual_key_map/api",
+ Test.add_func ("/gxml/serializable/dualkeymap/api",
() => {
var c = new SerializableDualKeyMap<string,string,Spaces> ();
var o1 = new Spaces.full ("Floor", "Big");
@@ -121,7 +167,7 @@ class SerializableGeeDualKeyMapTest : GXmlTest
assert_not_reached ();
}
});
- Test.add_func ("/gxml/serializable/serializable_dual_key_map/serialize",
+ Test.add_func ("/gxml/serializable/dualkeymap/serialize",
() => {
try {
var c = new SerializableDualKeyMap<string,string,Spaces> ();
@@ -189,7 +235,7 @@ class SerializableGeeDualKeyMapTest : GXmlTest
assert_not_reached ();
}
});
- Test.add_func ("/gxml/serializable/serializable_dual_key_map/deserialize",
+ Test.add_func ("/gxml/serializable/dualkeymap/deserialize",
() => {
try {
var doc = new GDocument.from_string ("""<?xml version="1.0"?>
@@ -232,7 +278,7 @@ class SerializableGeeDualKeyMapTest : GXmlTest
assert_not_reached ();
}
});
- Test.add_func ("/gxml/serializable/serializable_dual_key_map/de-se-deserialize",
+ Test.add_func ("/gxml/serializable/dualkeymap/de-se-deserialize",
() => {
try {
var idoc = new GDocument.from_string ("""<?xml version="1.0"?>
@@ -258,7 +304,7 @@ class SerializableGeeDualKeyMapTest : GXmlTest
assert_not_reached ();
}
});
- Test.add_func ("/gxml/serializable/serializable_dual_key_map/deserialize-node-names",
+ Test.add_func ("/gxml/serializable/dualkeymap/deserialize-node-names",
() => {
try {
var d = new GDocument.from_path (GXmlTestConfig.TEST_DIR + "/test-collection.xml");
@@ -288,5 +334,83 @@ class SerializableGeeDualKeyMapTest : GXmlTest
assert_not_reached ();
}
});
+ Test.add_func ("/gxml/serializable/dualkeymap/post-deserialization/serialize/contents",
+ () => {
+ try {
+ // Construct Bag contents
+ var bag = new BigBag ();
+ assert (bag.bags != null);
+ for (int i = 0; i < 2; i++) {
+ var sbag = new SmallBag ();
+ sbag.name = "SmallBag"+i.to_string ();
+ assert (sbag.balls != null);
+ for (int j = 0; j < 2; j++) {
+ var b = new Ball ();
+ b.name = "Ball"+j.to_string ();
+ b.ballfill = new BallFill ();
+ b.ballfill.set_text ("golden dust");
+ sbag.balls.set (b.size, b.name,b);
+ }
+ assert (sbag.balls.size == 2);
+ bag.bags.set (sbag.cash, sbag.name, sbag);
+ }
+ assert (bag.bags.size == 2);
+ // Construct XML
+ var d = new GDocument ();
+ bag.serialize (d);
+ assert (d.root != null);
+ assert (d.root.name == "BigBag");
+ assert (d.root.children.size == 2);
+ assert (d.root.children[0].name == "SmallBag");
+ assert (d.root.children[0].children.size == 2);
+ assert (d.root.children[0].children[0].name == "Ball");
+ assert (d.root.children[0].children[0].children.size == 1);
+ assert (d.root.children[0].children[0].children[0].name == "BallFill");
+ assert (d.root.children[0].children[0].children[0].children.size == 1);
+ assert (d.root.children[0].children[0].children[0].children[0] is Text);
+ assert (d.root.children[0].children[0].children[0].children[0].value == "golden dust");
+ //GLib.message (d.to_string ());
+ // Deserialize
+ var bagt = new BigBag ();
+ bagt.deserialize (d);
+ assert (bagt.bags.size == 0);
+ assert (bagt.bags.deserialize_children ());
+ assert (bagt.bags.size == 2);
+ assert (bagt.bags.get("money","SmallBag1").balls.deserialize_children ());
+ assert (bagt.bags.get("money","SmallBag1").balls.size == 2);
+ assert (bagt.bags.get("money","SmallBag1").balls.get("medium","Ball1").name == "Ball1");
+ assert (bagt.bags.get("money","SmallBag1").balls.get("medium","Ball1").ballfill !=null);
+ assert
(bagt.bags.get("money","SmallBag1").balls.get("medium","Ball1").ballfill.serialized_xml_node_value !=null);
+ assert
(bagt.bags.get("money","SmallBag1").balls.get("medium","Ball1").ballfill.serialized_xml_node_value =="golden
dust");
+ var bag3 = new BigBag ();
+ bag3.deserialize (d);
+ assert (bag3.bags.size == 0);
+ assert (bag3.bags.deserialize_children ());
+ assert (bag3.bags.size == 2);
+ bag3.deserialize (d);
+ assert (!bag3.bags.deserialized ());
+ // Serialize
+ var bag2 = new BigBag ();
+ bag2.deserialize (d);
+ assert (!bag2.bags.deserialized ());
+ var d2 = new GDocument ();
+ bag2.serialize (d2);
+ //GLib.message ("SECOND:"+d2.to_string ());
+ assert (d2.root != null);
+ assert (d2.root.name == "BigBag");
+ assert (d2.root.children.size == 2);
+ assert (d2.root.children[0].name == "SmallBag");
+ assert (d2.root.children[0].children.size == 2);
+ assert (d2.root.children[0].children[0].name == "Ball");
+ assert (d2.root.children[0].children[0].children.size == 1);
+ assert (d2.root.children[0].children[0].children[0].name == "BallFill");
+ assert (d2.root.children[0].children[0].children[0].children.size == 1);
+ assert (d2.root.children[0].children[0].children[0].children[0] is GXml.Text);
+ assert (d2.root.children[0].children[0].children[0].children[0].value == "golden dust");
+ } catch (GLib.Error e) {
+ GLib.message ("ERROR: "+e.message);
+ assert_not_reached ();
+ }
+ });
}
}
diff --git a/test/SerializableGeeTreeMapTest.vala b/test/SerializableGeeTreeMapTest.vala
index e6c587d..f4fcf28 100644
--- a/test/SerializableGeeTreeMapTest.vala
+++ b/test/SerializableGeeTreeMapTest.vala
@@ -349,7 +349,7 @@ class SerializableGeeTreeMapTest : GXmlTest
assert (d.root.children[0].children[0].children[0].children.size == 1);
assert (d.root.children[0].children[0].children[0].children[0] is Text);
assert (d.root.children[0].children[0].children[0].children[0].value == "golden dust");
- GLib.message (d.to_string ());
+ //GLib.message (d.to_string ());
// Deserialize
var bagt = new BigBag ();
bagt.deserialize (d);
@@ -375,7 +375,7 @@ class SerializableGeeTreeMapTest : GXmlTest
assert (!bag2.bags.deserialized ());
var d2 = new GDocument ();
bag2.serialize (d2);
- GLib.message ("SECOND:"+d2.to_string ());
+ //GLib.message ("SECOND:"+d2.to_string ());
assert (d2.root != null);
assert (d2.root.name == "BigBag");
assert (d2.root.children.size == 2);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]