[gxml] Fixed make check for API changes on DOM4 implementation
- From: Daniel Espinosa Ortiz <despinosa src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gxml] Fixed make check for API changes on DOM4 implementation
- Date: Mon, 18 Jul 2016 18:45:39 +0000 (UTC)
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]