diff --git a/gxml/SerializableObjectModel.vala b/gxml/SerializableObjectModel.vala
index 2b7f2842422b9c0c1ceda6c940c3a8181deb426e..e1cdb974a2b696796ceeeea637fe2be13e6dbc74 100644
--- a/gxml/SerializableObjectModel.vala
+++ b/gxml/SerializableObjectModel.vala
@@ -32,7 +32,7 @@ public abstract class GXml.SerializableObjectModel : Object, Serializable
public SerializableObjectModel ()
{
- serializable_property_use_nick = true;
+ serializable_property_use_nick = false;
serialized_xml_node_value = null;
serializable_node_name = get_type().name().down();
}
@@ -104,7 +104,13 @@ public abstract class GXml.SerializableObjectModel : Object, Serializable
Value rval = Value (typeof (string));
oval.transform (ref rval);
val = rval.dup_string ();
- string attr_name = prop.name.down ();
+ string attr_name;
+ if (serializable_property_use_nick &&
+ prop.get_nick () != null &&
+ prop.get_nick () != "")
+ attr_name = prop.get_nick ();
+ else
+ attr_name = prop.get_name ();
var attr = element.get_attribute_node (attr_name);
if (attr == null) {
//GLib.message (@"New Attr to add... $(attr_name)");
diff --git a/test/SerializableObjectModelTest.vala b/test/SerializableObjectModelTest.vala
index 35532bb6e3a99a807273212797e5cb71fa50558d..b2cffb90fb6af7df10158989b91c223dbda08478 100644
--- a/test/SerializableObjectModelTest.vala
+++ b/test/SerializableObjectModelTest.vala
@@ -21,7 +21,7 @@ const string XML_PACKAGE_FILE =
PrinterPartnerSupport
""";
-const string XML_PACKAGE_UNKNOWN_FILE =
+const string XML_PACKAGE_UNKNOWN_NODES_FILE =
"""
Selling Card Specification
@@ -100,6 +100,7 @@ public class Package : ObjectModel
public Package ()
{
+ serializable_property_use_nick = true;
computer = new Computer ();
manual = new Manual ();
source = "Mexico";
@@ -123,16 +124,13 @@ public class Package : ObjectModel
});
((Serializable) this).deserialize_unknown_property.connect ( (element, prop) => {
//GLib.message (@"Deserializing Unknown Property: $(prop.name) | $(prop.get_nick ())");
- if (prop.get_nick () == "tag")
- {
- try {
- if (element.node_name == "tag") {
- tags.append_val (((Element) element).content);
- }
- } catch (GLib.Error e) {
- GLib.message (e.message);
- assert_not_reached ();
+ try {
+ if (element.node_name == "tag") {
+ tags.append_val (((Element) element).content);
}
+ } catch (GLib.Error e) {
+ GLib.message (e.message);
+ assert_not_reached ();
}
});
//GLib.message ("PACKAGE: Properties.");
@@ -153,6 +151,20 @@ public class Package : ObjectModel
}
}
+public class Monitor : ObjectModel
+{
+ public string resolution { get; set; }
+ [Description (nick="AcPower")]
+ public int ac_power { get; set; }
+ [Description (nick="DcPower")]
+ public int dc_power { get; set; }
+ public Monitor ()
+ {
+ serializable_property_use_nick = true;
+ }
+}
+
+
class SerializableObjectModelTest : GXmlTest
{
public static void add_tests ()
@@ -430,6 +442,59 @@ class SerializableObjectModelTest : GXmlTest
}
}
);
+ Test.add_func ("/gxml/serializable/object_model/serialize_property_nick",
+ () => {
+ var doc = new Document ();
+ var monitor = new Monitor ();
+ try {
+ monitor.resolution = "1204x720";
+ monitor.ac_power = 120;
+ monitor.dc_power = 125;
+ monitor.serialize (doc);
+ //stdout.printf (@"DOC: [$(doc)]");
+ if (doc.document_element == null) {
+ stdout.printf ("ERROR MONITOR: No root Element");
+ assert_not_reached ();
+ }
+ Element element = doc.document_element;
+ if (element.node_name != "monitor") {
+ stdout.printf (@"ERROR MONITOR: root Element $(element.node_name)");
+ assert_not_reached ();
+ }
+ var ac = element.get_attribute_node ("AcPower");
+ if (ac == null) {
+ stdout.printf (@"ERROR MONITOR: attribute AcPower not found");
+ assert_not_reached ();
+ }
+ if (ac.node_value != "120") {
+ stdout.printf (@"ERROR MONITOR: AcPower value $(ac.node_value)");
+ assert_not_reached ();
+ }
+ var dc = element.get_attribute_node ("DcPower");
+ if (dc == null) {
+ stdout.printf (@"ERROR MONITOR: attribute DcPower not found");
+ assert_not_reached ();
+ }
+ if (dc.node_value != "125") {
+ stdout.printf (@"ERROR MONITOR: AcPower value $(dc.node_value)");
+ assert_not_reached ();
+ }
+ var r = element.get_attribute_node ("resolution");
+ if (r == null) {
+ stdout.printf (@"ERROR MONITOR: attribute resolution not found");
+ assert_not_reached ();
+ }
+ if (r.node_value != "1204x720") {
+ stdout.printf (@"ERROR MONITOR: resolution value $(r.node_value)");
+ assert_not_reached ();
+ }
+ }
+ catch (GLib.Error e) {
+ stdout.printf (@"Error: $(e.message)");
+ assert_not_reached ();
+ }
+ }
+ );
}
static void serialize_manual_check (Element element, Manual manual)
{
diff --git a/test/SerializationTest.vala b/test/SerializationTest.vala
index 929db952512a1c3087a5ce746179c472c5f4d5f2..747a774f466f83f79fa4f95bbd588fee0e12f2c1 100644
--- a/test/SerializationTest.vala
+++ b/test/SerializationTest.vala
@@ -371,7 +371,7 @@ class SerializationTest : GXmlTest {
Test.message ("Expected SerializationError.UNKNOWN_PROPERTY to be thrown for property 'badname' in object 'Fruit' :( Did not happen.");
assert_not_reached ();
} catch (GLib.Error e) {
- stdout.printf (@"Cought Error: $(e.message)");
+ //stdout.printf (@"Cought Error: $(e.message)");
if (e is GXml.SerializationError.UNKNOWN_PROPERTY) {
// pass
} else {