[gxml] Fixes on SerializableBool implementation and on SerializableProperty interface



commit 42fff0eb58ff266dc16975543557461f438f45f3
Author: Daniel Espinosa <esodan gmail com>
Date:   Sat Sep 26 17:58:37 2015 -0700

    Fixes on SerializableBool implementation and on SerializableProperty interface

 gxml/SerializableBool.vala             |    9 +++++-
 test/SerializablePropertyBoolTest.vala |   48 ++++++++++++++++++++++++++++++++
 2 files changed, 56 insertions(+), 1 deletions(-)
---
diff --git a/gxml/SerializableBool.vala b/gxml/SerializableBool.vala
index d16dea4..60509e4 100644
--- a/gxml/SerializableBool.vala
+++ b/gxml/SerializableBool.vala
@@ -30,8 +30,15 @@ public class GXml.SerializableBool : SerializableObjectModel, SerializableProper
   private string _val = null;
   private string _name = null;
   public SerializableBool.with_name (string name) { _name = name; }
+  public bool get_value () { return bool.parse (_val); }
+  public void set_value (bool val) { _val = val.to_string (); }
   public string get_serializable_property_value () { return _val; }
-  public void set_serializable_property_value (string val) { _val = (bool.parse (val)).to_string (); }
+  public void set_serializable_property_value (string? val) {
+    if (val == null)
+      _val = val;
+    else
+      _val = (bool.parse (val)).to_string ();
+  }
   public string get_serializable_property_name () { return _name; }
   public void set_serializable_property_name (string name) { _name = name; }
   public override GXml.Node? serialize (GXml.Node node) throws GLib.Error
diff --git a/test/SerializablePropertyBoolTest.vala b/test/SerializablePropertyBoolTest.vala
index e2ca3e1..cc59e1f 100644
--- a/test/SerializablePropertyBoolTest.vala
+++ b/test/SerializablePropertyBoolTest.vala
@@ -40,6 +40,7 @@ class SerializablePropertyBoolTest : GXmlTest {
         var bn = new BoolNode ();
         var doc = new xDocument ();
         bn.serialize (doc);
+        Test.message ("XML:\n"+doc.to_string ());
         var element = doc.document_element;
         var b = element.get_attribute_node ("boolean");
         assert (b == null);
@@ -52,5 +53,52 @@ class SerializablePropertyBoolTest : GXmlTest {
         assert_not_reached ();
       }
     });
+    Test.add_func ("/gxml/serializable/Bool/changes",
+    () => {
+      try {
+        var bn = new BoolNode ();
+        var doc = new xDocument ();
+        bn.boolean = new SerializableBool.with_name ("boolean");
+        bn.serialize (doc);
+        Test.message ("XML:\n"+doc.to_string ());
+        var element = doc.document_element;
+        var b = element.get_attribute_node ("boolean");
+        assert (b == null);
+        var s = element.get_attribute_node ("name");
+        assert (s == null);
+        var i = element.get_attribute_node ("integer");
+        assert (i.value == "0");
+        // Change values
+        // set to TRUE
+        bn.boolean.set_value (true);
+        var doc2 = new xDocument ();
+        bn.serialize (doc2);
+        Test.message ("XML2:\n"+doc2.to_string ());
+        var element2 = doc2.document_element;
+        var b2 = element2.get_attribute_node ("boolean");
+        assert (b2 != null);
+        assert (b2.value == "true");
+        // set to FALSE
+        bn.boolean.set_value (false);
+        var doc3 = new xDocument ();
+        bn.serialize (doc3);
+        Test.message ("XML3:\n"+doc3.to_string ());
+        var element3 = doc3.document_element;
+        var b3 = element3.get_attribute_node ("boolean");
+        assert (b3 != null);
+        assert (b3.value == "false");
+        // set to NULL/IGNORE
+        bn.boolean.set_serializable_property_value (null);
+        var doc4= new xDocument ();
+        bn.serialize (doc4);
+        Test.message ("XML3:\n"+doc4.to_string ());
+        var element4 = doc4.document_element;
+        var b4 = element4.get_attribute_node ("boolean");
+        assert (b4 == null);
+      } catch (GLib.Error e) {
+        Test.message (@"ERROR: $(e.message)");
+        assert_not_reached ();
+      }
+    });
   }
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]