[gxml] Fixed TwDocument write attribute with namespace already declared



commit b1f3075f31352379daa0507585dc51574e513e35
Author: Daniel Espinosa <esodan gmail com>
Date:   Wed May 13 17:13:21 2015 -0500

    Fixed TwDocument write attribute with namespace already declared

 gxml/TwAttribute.vala                     |    1 -
 gxml/TwDocument.vala                      |   10 +++++++++-
 test/SerializableGeeDualKeyMapTest.vala   |    2 +-
 test/SerializableGeeTreeMapTest.vala      |    2 +-
 test/SerializableObjectModel-Tw-Test.vala |    2 --
 test/TwElementTest.vala                   |   25 +++++++++++++++++++++++++
 6 files changed, 36 insertions(+), 6 deletions(-)
---
diff --git a/gxml/TwAttribute.vala b/gxml/TwAttribute.vala
index 991a234..bffebce 100644
--- a/gxml/TwAttribute.vala
+++ b/gxml/TwAttribute.vala
@@ -27,7 +27,6 @@ public class GXml.TwAttribute : GXml.TwNode, GXml.Attribute
     requires (d is TwDocument)
   {
     _doc = d;
-    ((TwDocument) document).tw = ((TwDocument) d).tw;
     _name = name;
     _value = value;
   }
diff --git a/gxml/TwDocument.vala b/gxml/TwDocument.vala
index 11cf037..9f3ec64 100644
--- a/gxml/TwDocument.vala
+++ b/gxml/TwDocument.vala
@@ -229,7 +229,15 @@ public class GXml.TwDocument : GXml.TwNode, GXml.Document
 #if DEBUG
     GLib.message (@"Starting Element '$(node.name)': write attribute '$(attr.name)' with NS");
 #endif
-          size += tw.write_attribute_ns (attr.ns_prefix (), attr.name, attr.ns_uri (), attr.value);
+          if (!declared_ns.contains (attr.ns_uri ())) {
+            size += tw.write_attribute_ns (attr.ns_prefix (), attr.name, attr.ns_uri (), attr.value);
+            declared_ns.add (attr.ns_uri ());
+#if DEBUG
+              GLib.message (@"Declared NS: $(attr.ns_uri ()) Total declared = $(declared_ns.size.to_string 
())");
+#endif
+          }
+          else
+            size += tw.write_attribute_ns (attr.ns_prefix (), attr.name, null, attr.value);
         }
         else {
 #if DEBUG
diff --git a/test/SerializableGeeDualKeyMapTest.vala b/test/SerializableGeeDualKeyMapTest.vala
index f1fcd1a..c02e948 100644
--- a/test/SerializableGeeDualKeyMapTest.vala
+++ b/test/SerializableGeeDualKeyMapTest.vala
@@ -145,7 +145,7 @@ class SerializableGeeDualKeyMapTest : GXmlTest
         var doc = new TwDocument ();
         var root = doc.create_element ("root");
         doc.childs.add (root);
-        c.serialize ( (xNode) root);
+        c.serialize (root);
         assert (root.childs.size == 4);
         bool found1 = false;
         bool found2 = false;
diff --git a/test/SerializableGeeTreeMapTest.vala b/test/SerializableGeeTreeMapTest.vala
index 839eae7..196b025 100644
--- a/test/SerializableGeeTreeMapTest.vala
+++ b/test/SerializableGeeTreeMapTest.vala
@@ -104,7 +104,7 @@ class SerializableGeeTreeMapTest : GXmlTest
         var doc = new TwDocument ();
         var root = doc.create_element ("root");
         doc.childs.add (root);
-        c.serialize ((xNode) root);
+        c.serialize (root);
         assert (root.childs.size == 2);
         bool found1 = false;
         bool found2 = false;
diff --git a/test/SerializableObjectModel-Tw-Test.vala b/test/SerializableObjectModel-Tw-Test.vala
index 8538579..5912d7f 100644
--- a/test/SerializableObjectModel-Tw-Test.vala
+++ b/test/SerializableObjectModel-Tw-Test.vala
@@ -60,9 +60,7 @@ class SerializableObjectModelTwTest : GXmlTest
        assert (manual.pages == 3);
        assert (manual.get_contents () == "TEXT INTO THE MANUAL DOCUMENT");
        try {
-         GLib.message ("Before Serialize...");
          manual.serialize (doc);
-         GLib.message ("After Serialize...");
          Element element = (Element) doc.root;
        } catch (GLib.Error e) {
          stdout.printf (@"$(e.message)");
diff --git a/test/TwElementTest.vala b/test/TwElementTest.vala
index fad0b82..d3134d7 100644
--- a/test/TwElementTest.vala
+++ b/test/TwElementTest.vala
@@ -497,5 +497,30 @@ class TwElementTest : GXmlTest {
                        assert ("</gxml:nons>" in str);
                        assert ("</gxml:child>" in str);
                });
+               Test.add_func ("/gxml/tw-element/attr-namespace", () => {
+                       var d = new TwDocument ();
+                       var r = d.create_element ("root");
+                       d.childs.add (r);
+                       // Default NS
+                       d.set_namespace ("http://git.gnome.org/browse/gxml";, "gxml");
+                       var c = (Element) d.create_element ("child");
+                       r.childs.add (c);
+                       c.set_attr ("at","val");
+                       var a = c.get_attr ("at");
+                       assert (a != null);
+#if DEBUG
+                       GLib.message (@"$d");
+#endif
+                       a.set_namespace ("http://git.gnome.org/browse/gxml";, "gxml");
+                       assert (a.namespaces.size == 1);
+                       assert (d.namespaces.size == 1);
+                       string str = d.to_string ();
+#if DEBUG
+                       GLib.message (@"$d");
+#endif
+                       assert ("<root xmlns:gxml=\"http://git.gnome.org/browse/gxml\";>" in str);
+                       assert ("<child gxml:at=\"val\"/>" in str);
+                       assert ("</root>" in str);
+               });
        }
 }


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