[gxml] Fixed make check for API changes on DOM4 implementation



commit e718616a073e1b1fc8b75c14113718ac3646a417
Author: Daniel Espinosa <esodan gmail com>
Date:   Mon Jul 18 13:42:07 2016 -0500

    Fixed make check for API changes on DOM4 implementation

 gxml/Attribute.vala     |    2 +-
 gxml/DomNode.vala       |    1 +
 gxml/GXmlAttribute.vala |   17 +++++++++++++++--
 gxml/GXmlDocument.vala  |    6 ++----
 gxml/GXmlNode.vala      |   42 +++++++++++++++++++++++++++++++++++++++---
 gxml/Node.vala          |    1 -
 gxml/TAttribute.vala    |    8 ++++++--
 gxml/TElement.vala      |   13 ++++++++-----
 gxml/libxml-Attr.vala   |    4 +++-
 po/POTFILES.in          |    6 ++++++
 po/POTFILES.skip        |   12 ++++++++++++
 test/TElementTest.vala  |   12 ++++++++++--
 12 files changed, 103 insertions(+), 21 deletions(-)
---
diff --git a/gxml/Attribute.vala b/gxml/Attribute.vala
index 5d29fe1..e988fea 100644
--- a/gxml/Attribute.vala
+++ b/gxml/Attribute.vala
@@ -31,7 +31,7 @@ using Gee;
  * should be get from {@link GXml.Node.value} property.
  */
 public interface GXml.Attribute : Object, GXml.Node {
-  public abstract Namespace @namespace { owned get; set; }
+  public abstract GXml.Namespace? @namespace { owned get; set; }
   public abstract string? prefix { owned get; }
 }
 
diff --git a/gxml/DomNode.vala b/gxml/DomNode.vala
index f14b0f2..cc612b6 100644
--- a/gxml/DomNode.vala
+++ b/gxml/DomNode.vala
@@ -22,6 +22,7 @@
 
 public interface GXml.DomNode : GLib.Object, GXml.DomEventTarget {
        public enum NodeType {
+               INVALID = 0,
                ELEMENT_NODE = 1,
                ATTRIBUTE_NODE, // historical
                TEXT_NODE,
diff --git a/gxml/GXmlAttribute.vala b/gxml/GXmlAttribute.vala
index a3308a8..6872458 100644
--- a/gxml/GXmlAttribute.vala
+++ b/gxml/GXmlAttribute.vala
@@ -41,14 +41,27 @@ public class GXml.GAttribute : GXml.GNode, GXml.Attribute, GXml.DomAttr
       return l;
     }
   }
-  public Namespace @namespace {
+  public Namespace? @namespace {
     owned get {
       if (_attr == null) return null;
       if (_attr->ns == null) return null;
       return new GNamespace (_attr->ns);
     }
     set {
-      
+      if (_attr == null) return;
+      string n = _attr->name;
+      string v = null;
+      if (_attr->ns == null) {
+        v = _node->get_prop (_attr->name);
+        _node->set_prop (_attr->name, null);
+      } else {
+        v = _node->get_ns_prop (_attr->name, _attr->ns->href);
+      }
+      var ns = _node->doc->search_ns (_node, value.prefix);
+      if (ns == null) {
+        ns = _node->new_ns (value.uri, value.prefix);
+      }
+      _attr = _node->set_ns_prop (ns, n, v);
     }
   }
   public override string name {
diff --git a/gxml/GXmlDocument.vala b/gxml/GXmlDocument.vala
index 612d633..d6ab235 100644
--- a/gxml/GXmlDocument.vala
+++ b/gxml/GXmlDocument.vala
@@ -304,10 +304,8 @@ public class GXml.GDocument : GXml.GNode,
   }
   // DomNonElementParentNode
   public DomElement? get_element_by_id (string element_id) throws GLib.Error {
-    foreach (DomElement n in children) {
-      if (!(n is DomElement)) continue;
-      if ((n as DomElement).get_attribute ("id") == element_id) return (DomElement) n;
-    }
+    var l = this.get_elements_by_property_value ("id", element_id);
+    if (l.size > 0) return (DomElement) l[0];
     return null;
   }
 }
diff --git a/gxml/GXmlNode.vala b/gxml/GXmlNode.vala
index faf1004..45ddd01 100644
--- a/gxml/GXmlNode.vala
+++ b/gxml/GXmlNode.vala
@@ -25,12 +25,17 @@ using Gee;
 /**
  * Base interface providing basic functionalities to all GXml interfaces.
  */
-public abstract class GXml.GNode : Object, GXml.Node, GXml.DomNode, GXml.DomEventTarget
+public abstract class GXml.GNode : Object,
+                      GXml.DomEventTarget,
+                      GXml.DomNode,
+                      GXml.Node
 {
   protected GXml.GDocument _doc;
   protected Xml.Node *_node;
 
-  construct { Init.init (); }
+  construct {
+    Init.init ();
+  }
 
   // GXml.Node
   public virtual bool set_namespace (string uri, string? prefix)
@@ -105,7 +110,38 @@ public abstract class GXml.GNode : Object, GXml.Node, GXml.DomNode, GXml.DomEven
     return null;
   }
   // DomNode Implementation
-  public DomNode.NodeType node_type { get { return (DomNode.NodeType) type_node; } } // FIXME:
+  public DomNode.NodeType node_type {
+    get {
+      if (_node == null) return DomNode.NodeType.INVALID;
+      switch (_node->type) {
+        case Xml.ElementType.ELEMENT_NODE:
+          return DomNode.NodeType.ELEMENT_NODE;
+        case Xml.ElementType.ATTRIBUTE_NODE:
+          return DomNode.NodeType.ATTRIBUTE_NODE; // historica
+        case Xml.ElementType.TEXT_NODE:
+          return DomNode.NodeType.TEXT_NODE;
+        case Xml.ElementType.CDATA_SECTION_NODE:
+          return DomNode.NodeType.CDATA_SECTION_NODE; // historical
+        case Xml.ElementType.ENTITY_REF_NODE:
+          return DomNode.NodeType.ENTITY_REFERENCE_NODE; // historical
+        case Xml.ElementType.ENTITY_NODE:
+          return DomNode.NodeType.ENTITY_NODE; // historical
+        case Xml.ElementType.PI_NODE:
+          return DomNode.NodeType.PROCESSING_INSTRUCTION_NODE;
+        case Xml.ElementType.COMMENT_NODE:
+          return DomNode.NodeType.COMMENT_NODE;
+        case Xml.ElementType.DOCUMENT_NODE:
+          return DomNode.NodeType.DOCUMENT_NODE;
+        case Xml.ElementType.DOCUMENT_TYPE_NODE:
+          return DomNode.NodeType.DOCUMENT_TYPE_NODE;
+        case Xml.ElementType.DOCUMENT_FRAG_NODE:
+          return DomNode.NodeType.DOCUMENT_FRAGMENT_NODE;
+        case Xml.ElementType.NOTATION_NODE:
+          return DomNode.NodeType.NOTATION_NODE;
+      }
+      return DomNode.NodeType.INVALID;
+    }
+  }
   public string node_name { owned get { return name; } }
 
   protected string _base_uri = null;
diff --git a/gxml/Node.vala b/gxml/Node.vala
index 12a5f23..d8b7ddc 100644
--- a/gxml/Node.vala
+++ b/gxml/Node.vala
@@ -79,7 +79,6 @@ public interface GXml.Node : Object
    get_elements_by_property_value (string property, string value)
   {
     var list = new GXml.ElementList ();
-    if (!(this is GXml.Element)) return list;
     foreach (var child in children_nodes) {
       if (child is GXml.Element) {
         list.add_all (child.get_elements_by_property_value (property, value));
diff --git a/gxml/TAttribute.vala b/gxml/TAttribute.vala
index f333b1a..e86d651 100644
--- a/gxml/TAttribute.vala
+++ b/gxml/TAttribute.vala
@@ -42,9 +42,13 @@ public class GXml.TAttribute : GXml.TNode, GXml.Attribute
     }
   }
   // Attribute
-  public Namespace @namespace {
+  public Namespace? @namespace {
     owned get {
-      if (_namespaces == null) _namespaces = new Gee.ArrayList<GXml.Node> ();
+      if (_namespaces == null) {
+        _namespaces = new Gee.ArrayList<GXml.Node> ();
+        return null;
+      }
+      if (_namespaces.size == 0) return null;
       return (Namespace) namespaces.get (0).ref ();
     }
     set {
diff --git a/gxml/TElement.vala b/gxml/TElement.vala
index 4f90e47..2c97e7c 100644
--- a/gxml/TElement.vala
+++ b/gxml/TElement.vala
@@ -73,10 +73,12 @@ public class GXml.TElement : GXml.TNode, GXml.Element
   }
   public GXml.Node get_attr (string name) { return attrs.get (name); }
   public GXml.Node get_ns_attr (string name, string uri) {
-    foreach (GXml.Node a in attrs.values) {
-      if (a.name == name)
-        if (((Attribute) a).namespace != null)
-          if (((Attribute) a).namespace.uri == uri) return (GXml.Node) a;
+    foreach (string k in attrs.keys) {
+      if (!(":" in k)) continue;
+      var a = attrs.get (k);
+      if (a.name != name) continue;
+      if (((Attribute) a).namespace == null) continue;
+      if (((Attribute) a).namespace.uri == uri) return (GXml.Node) a;
     }
     return null;
   }
@@ -87,7 +89,8 @@ public class GXml.TElement : GXml.TNode, GXml.Element
     if (":" in ns) {
       string[] s = ns.split (":");
       prefix = s[0];
-      uri = s[1];
+      if (s.length != 3) return;
+      uri = s[1]+":"+s[2];
     } else
       uri = ns;
     att.set_namespace (uri, prefix);
diff --git a/gxml/libxml-Attr.vala b/gxml/libxml-Attr.vala
index e9cda6a..6a5a394 100644
--- a/gxml/libxml-Attr.vala
+++ b/gxml/libxml-Attr.vala
@@ -244,8 +244,10 @@ namespace GXml {
                                return node->ns->prefix.dup ();
                        }
                }
-               public Namespace @namespace {
+               public Namespace? @namespace {
                        owned get {
+                               if (node == null) return null;
+                               if (node->ns == null) return null;
                                return new NamespaceAttr (node->ns, this.owner_document);
                        }
                        set {
diff --git a/po/POTFILES.in b/po/POTFILES.in
index cff4796..f68e704 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -24,3 +24,9 @@ gxml/SerializableObjectModel.vala
 gxml/SerializableProperty.vala
 gxml/Serializable.vala
 gxml/TDocument.vala
+gxml/DomCharacter.vala
+gxml/GXmlDomCollections.vala
+gxml/GXmlDomRange.vala
+gxml/GXmlElement.vala
+gxml/GXmlHashMapAttr.vala
+gxml/GXmlText.vala
diff --git a/po/POTFILES.skip b/po/POTFILES.skip
index 67a0f48..91592c8 100644
--- a/po/POTFILES.skip
+++ b/po/POTFILES.skip
@@ -24,6 +24,12 @@ gxml/SerializableGeeTreeMap.c
 gxml/SerializableObjectModel.c
 gxml/SerializableProperty.c
 gxml/TDocument.c
+gxml/DomCharacter.c
+gxml/GXmlDomCollections.c
+gxml/GXmlDomRange.c
+gxml/GXmlElement.c
+gxml/GXmlHashMapAttr.c
+gxml/GXmlText.c
 sub/gxml/Document.c
 sub/gxml/DomCharacter.c
 sub/gxml/Enumeration.c
@@ -48,3 +54,9 @@ sub/gxml/SerializableGeeTreeMap.c
 sub/gxml/SerializableObjectModel.c
 sub/gxml/SerializableProperty.c
 sub/gxml/TDocument.c
+sub/gxml/DomCharacter.c
+sub/gxml/GXmlDomCollections.c
+sub/gxml/GXmlDomRange.c
+sub/gxml/GXmlElement.c
+sub/gxml/GXmlHashMapAttr.c
+sub/gxml/GXmlText.c
diff --git a/test/TElementTest.vala b/test/TElementTest.vala
index 56cb50f..ef5d790 100644
--- a/test/TElementTest.vala
+++ b/test/TElementTest.vala
@@ -561,15 +561,23 @@ class TElementTest : GXmlTest {
                        var r = d.create_element ("root");
                        d.children_nodes.add (r);
                        // Default NS
+                       Test.message ("Setting namespace gxml");
                        r.set_namespace ("http://git.gnome.org/browse/gxml";, "gxml");
-                       var ns = new TNamespace (d, "http://books.net";, "book");
-                       r.set_namespace (ns.uri, ns.prefix);
+                       Test.message ("Setting namespace gxml");
+                       r.set_namespace ("http://books.net";, "book");
                        var c = d.create_element ("child") as Element;
                        r.children_nodes.add (c);
                        c.set_attr ("source","http://books.net/sources/1";);
                        assert (c.attrs.size == 1);
+                       Test.message ("Setting attr namespace book");
                        c.set_ns_attr ("book:http://books.net";, "source", "The History 2");
                        assert (c.attrs.size == 2);
+                       assert (c.attrs.get ("book:source") != null);
+                       assert ((c.attrs.get ("book:source") as Attribute).namespace != null);
+                       assert ((c.attrs.get ("book:source") as Attribute).namespace.prefix == "book");
+                       Test.message ((c.attrs.get ("book:source") as Attribute).namespace.uri);
+                       assert ((c.attrs.get ("book:source") as Attribute).namespace.uri == 
"http://books.net";);
+                       Test.message ("Searching attr source with namespace book");
                        var nsa = c.get_ns_attr ("source", "http://books.net";);
                        assert (nsa != null);
                        assert (nsa.value == "The History 2");


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