[gxml] Fixed GXml.TwDocument writer to use default NS prefix when enable
- From: Daniel Espinosa Ortiz <despinosa src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gxml] Fixed GXml.TwDocument writer to use default NS prefix when enable
- Date: Wed, 13 May 2015 20:50:37 +0000 (UTC)
commit 2966a5a196dd831aa189ba4ab7da3ab1bd09362f
Author: Daniel Espinosa <esodan gmail com>
Date: Wed May 13 13:09:02 2015 -0500
Fixed GXml.TwDocument writer to use default NS prefix when enable
* Set GXml.Document.prefix_default_ns to true makes all children
nodes, including root, adds default document's namespace's prefix
gxml/TwDocument.vala | 20 +++++--
test/TwElementTest.vala | 125 +++++++++++++++++++++++++++++++++++++++++++++--
2 files changed, 135 insertions(+), 10 deletions(-)
---
diff --git a/gxml/TwDocument.vala b/gxml/TwDocument.vala
index 6c2119c..7f6bdcc 100644
--- a/gxml/TwDocument.vala
+++ b/gxml/TwDocument.vala
@@ -164,17 +164,25 @@ public class GXml.TwDocument : GXml.TwNode, GXml.Document
#if DEBUG
GLib.message ("Starting Element: start with NS");
#endif
- if (node.document.namespaces.first ().uri == node.ns_uri () && !node.document.prefix_default_ns) {
- // Don't prefix. Using default namespace and prefix_default_ns = false
- tw.start_element (node.name);
+ if (node.document.namespaces.first ().uri == node.ns_uri ()) {
+ if (node.document.prefix_default_ns) // Default NS at root element
+ tw.start_element_ns (node.ns_prefix (), node.name, null);
+ else // Don't prefix. Using default namespace and prefix_default_ns = false
+ tw.start_element (node.name);
}
else
- tw.start_element_ns (node.ns_prefix (), node.name, node.ns_uri ());
+ if (node.document.ns_top)
+ tw.start_element_ns (node.ns_prefix (), node.name, null);
+ else
+ tw.start_element_ns (node.ns_prefix (), node.name, node.ns_uri ());
} else {
#if DEBUG
- GLib.message ("Starting Element: start no NS");
+ GLib.message ("Starting Element: start no NS: Check for default prefix_default_ns enabled");
#endif
- tw.start_element (node.name);
+ if (node.document.prefix_default_ns)
+ tw.start_element_ns (node.document.ns_prefix (), node.name, null);
+ else
+ tw.start_element (node.name);
}
}
#if DEBUG
diff --git a/test/TwElementTest.vala b/test/TwElementTest.vala
index 4cf4c86..48cf64a 100644
--- a/test/TwElementTest.vala
+++ b/test/TwElementTest.vala
@@ -228,7 +228,86 @@ class TwElementTest : GXmlTest {
assert ("<childrenons/>" in str);
assert ("</ns:nons>" in str);
assert ("</dg:child>" in str);
- });/*
+ });
+ Test.add_func ("/gxml/tw-element/multiple-namespaces/enable-prefix_default_ns", () => {
+ var d = new TwDocument ();
+ var r = d.create_element ("root");
+ d.childs.add (r);
+ d.prefix_default_ns = true;
+ d.set_namespace ("http://git.gnome.org/browse/gxml", "gxml");
+ r.set_namespace ("http://git.gnome.org/browse/gxml", "gxml");
+ var e = d.create_element ("child");
+ r.childs.add (e);
+ assert (r.namespaces.size == 1);
+ assert (d.namespaces.size == 1);
+ e.set_namespace ("http://developer.gnome.org/", "dg");
+ assert (e.namespaces.size == 1);
+ assert (r.namespaces.size == 1);
+ assert (d.namespaces.size == 2);
+ var e2 = d.create_element ("nons");
+ e.childs.add (e2);
+ e2.set_namespace ("http://www.gnome.org/", "ns");
+ assert (e.namespaces.size == 1);
+ assert (r.namespaces.size == 1);
+ assert (e2.namespaces.size == 1);
+ assert (d.namespaces.size == 3);
+ var e22 = d.create_element ("nonsd");
+ e2.childs.add (e22);
+ string str = d.to_string ();
+#if DEBUG
+ GLib.message (@"$d");
+#endif
+ assert ("<gxml:root xmlns:gxml=\"http://git.gnome.org/browse/gxml\">" in str);
+ assert ("</gxml:root>" in str);
+ assert ("<dg:child xmlns:dg=\"http://developer.gnome.org/\">" in str);
+ assert ("<ns:nons xmlns:ns=\"http://www.gnome.org/\">" in str);
+ assert ("</ns:nons>" in str);
+ assert ("<gxml:nonsd/>" in str);
+ });
+ Test.add_func ("/gxml/tw-element/multiple-namespaces/default", () => {
+ 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", null);
+ var e = d.create_element ("child");
+ r.childs.add (e);
+ assert (d.namespaces.size == 1);
+ e.set_namespace ("http://developer.gnome.org/", "dg");
+ assert (e.namespaces.size == 1);
+ assert (d.namespaces.size == 2);
+ var e2 = d.create_element ("children");
+ e.childs.add (e2);
+ assert (e.namespaces.size == 1);
+ assert (e2.namespaces.size == 0);
+ assert (d.namespaces.size == 2);
+ var e3 = d.create_element ("nons");
+ e.childs.add (e3);
+ e3.set_namespace ("http://www.gnome.org/", "ns");
+ assert (e.namespaces.size == 1);
+ assert (e2.namespaces.size == 0);
+ assert (e3.namespaces.size == 1);
+ assert (d.namespaces.size == 3);
+ var e4 = d.create_element ("childrenons");
+ e3.childs.add (e4);
+ assert (e.namespaces.size == 1);
+ assert (e2.namespaces.size == 0);
+ assert (e3.namespaces.size == 1);
+ assert (e4.namespaces.size == 0);
+ assert (d.namespaces.size == 3);
+ string str = d.to_string ();
+#if DEBUG
+ GLib.message (@"$d");
+#endif
+ assert ("<root xmlns=\"http://git.gnome.org/browse/gxml\">" in str);
+ assert ("</root>" in str);
+ assert ("<dg:child xmlns:dg=\"http://developer.gnome.org/\">" in str);
+ assert ("<children/>" in str);
+ assert ("<ns:nons xmlns:ns=\"http://www.gnome.org/\">" in str);
+ assert ("<childrenons/>" in str);
+ assert ("</ns:nons>" in str);
+ assert ("</dg:child>" in str);
+ });
Test.add_func ("/gxml/tw-element/multiple-namespaces/default/enable-ns_top", () => {
var d = new TwDocument ();
var r = d.create_element ("root");
@@ -262,19 +341,57 @@ class TwElementTest : GXmlTest {
assert (e3.namespaces.size == 1);
assert (e4.namespaces.size == 0);
assert (d.namespaces.size == 3);
+ var c2 = d.create_element ("soup");
+ d.root.childs.add (c2);
+ // apply default namespace, should avoid prefix
+ c2.set_namespace ("http://git.gnome.org/browse/gxml", null);
string str = d.to_string ();
#if DEBUG
GLib.message (@"$d");
#endif
- assert_not_reached ();
assert ("<root xmlns=\"http://git.gnome.org/browse/gxml\"
xmlns:dg=\"http://developer.gnome.org/\" xmlns:ns=\"http://www.gnome.org/\">" in str);
+ assert ("<soup/>" in str);
assert ("</root>" in str);
assert ("<dg:child>" in str);
assert ("<children/>" in str);
- assert ("<ns:nons >" in str);
+ assert ("<ns:nons>" in str);
assert ("<childrenons/>" in str);
assert ("</ns:nons>" in str);
assert ("</dg:child>" in str);
- });*/
+ });
+ Test.add_func ("/gxml/tw-element/multiple-namespaces/default/enable-prefix_default_ns", () =>
{
+ 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");
+ // All namespaces declaration should be on root node
+ d.prefix_default_ns = true;
+ var e = d.create_element ("child");
+ r.childs.add (e);
+ assert (d.namespaces.size == 1);
+ var e2 = d.create_element ("children");
+ e.childs.add (e2);
+ var e3 = d.create_element ("nons");
+ e.childs.add (e3);
+ var e4 = d.create_element ("childrenons");
+ e3.childs.add (e4);
+ var c2 = d.create_element ("soup");
+ d.root.childs.add (c2);
+ c2.set_namespace ("http://git.gnome.org/browse/gxml", "gxml");
+ string str = d.to_string ();
+#if DEBUG
+ GLib.message (@"$d");
+#endif
+ assert ("<gxml:root xmlns:gxml=\"http://git.gnome.org/browse/gxml\">" in str);
+ assert ("<gxml:soup/>" in str);
+ assert ("</gxml:root>" in str);
+ assert ("<gxml:child>" in str);
+ assert ("<gxml:children/>" in str);
+ assert ("<gxml:nons>" in str);
+ assert ("<gxml:childrenons/>" in str);
+ assert ("</gxml:nons>" in str);
+ assert ("</gxml:child>" in str);
+ });
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]