[gxml] Fixed parent implementation for TwNode
- From: Daniel Espinosa Ortiz <despinosa src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gxml] Fixed parent implementation for TwNode
- Date: Sat, 20 Feb 2016 17:36:11 +0000 (UTC)
commit 98b8bc137106b02eeb19a5a182228456cd744fcd
Author: Daniel Espinosa <esodan gmail com>
Date: Fri Feb 19 09:52:06 2016 -0600
Fixed parent implementation for TwNode
gxml/TwNode.vala | 36 ++++++++++++++++++++++++++++++------
test/TwDocumentTest.vala | 4 ++++
test/TwElementTest.vala | 29 +++++++++++++++++++++++++++++
3 files changed, 63 insertions(+), 6 deletions(-)
---
diff --git a/gxml/TwNode.vala b/gxml/TwNode.vala
index 0bd0ef3..6bce9a2 100644
--- a/gxml/TwNode.vala
+++ b/gxml/TwNode.vala
@@ -59,17 +59,41 @@ public abstract class GXml.TwNode : Object, GXml.Node
public virtual Gee.List<GXml.Namespace> namespaces { owned get { return new Gee.ArrayList<GXml.Node> (); }
}
public virtual GXml.NodeType type_node { get { return GXml.NodeType.DOCUMENT; } }
public virtual string value { owned get { return _value.dup (); } set { _value = value; } }
- public virtual GXml.Node parent { owned get { return _parent; } }
+ public virtual GXml.Node parent {
+ owned get {
+ if (_parent == null) return null;
+ return (GXml.Node) _parent.ref ();
+ }
+ }
public virtual void set_parent (GXml.Node node) { _parent = node; }
- protected class TwChildrenList : Gee.ArrayList<GXml.Node> {
- GXml.Node _parent;
+ protected class TwChildrenList : AbstractBidirList<GXml.Node> {
+ private GXml.Node _parent;
+ private Gee.ArrayList<GXml.Node> list = new Gee.ArrayList<GXml.Node> ();
+
protected TwChildrenList (GXml.Node e) {
_parent = e;
}
- protected new bool add (GXml.Node node) {
- (node as GXml.TwNode).set_parent (_parent);
- return base.add (node);
+
+ public inline override Gee.BidirListIterator<GXml.Node> bidir_list_iterator () { return
list.bidir_list_iterator (); }
+
+ public inline override new GXml.Node @get (int index) { return list.get (index); }
+ public inline override int index_of (GXml.Node item) { return list.index_of (item); }
+ public inline override void insert (int index, GXml.Node item) { list.insert (index, item); }
+ public inline override Gee.ListIterator<GXml.Node> list_iterator () { return list.list_iterator (); }
+ public inline override GXml.Node remove_at (int index) { return list.remove_at (index); }
+ public inline override new void @set (int index, GXml.Node item) { list.set (index, item); }
+ public inline override Gee.List<GXml.Node>? slice (int start, int stop) { return list.slice (start,
stop); }
+
+ public override bool add (GXml.Node item) {
+ (item as GXml.TwNode).set_parent (_parent);
+ return list.add (item);
}
+ public inline override void clear () { list.clear (); }
+ public inline override bool contains (GXml.Node item) { return list.contains (item); }
+ public inline override Gee.Iterator<GXml.Node> iterator () { return list.iterator (); }
+ public inline override bool remove (GXml.Node item) { return list.remove (item); }
+ public inline override bool read_only { get { return list.read_only; } }
+ public inline override int size { get { return list.size; } }
}
}
diff --git a/test/TwDocumentTest.vala b/test/TwDocumentTest.vala
index 4628198..f64674d 100644
--- a/test/TwDocumentTest.vala
+++ b/test/TwDocumentTest.vala
@@ -422,5 +422,9 @@ class TwDocumentTest : GXmlTest {
assert_not_reached ();
}
});
+ Test.add_func ("/gxml/tw-document/parent", () => {
+ var doc = new TwDocument ();
+ assert (doc.parent == null);
+ });
}
}
diff --git a/test/TwElementTest.vala b/test/TwElementTest.vala
index 0a5f69c..3f1d0e0 100644
--- a/test/TwElementTest.vala
+++ b/test/TwElementTest.vala
@@ -555,5 +555,34 @@ class TwElementTest : GXmlTest {
assert ("</root>" in str);
} catch { assert_not_reached (); }
});
+ Test.add_func ("/gxml/tw-element/parent", () => {
+ var doc = new TwDocument ();
+ var e = doc.create_element ("root");
+ doc.children.add (e);
+ var c = doc.create_element ("child");
+ e.children.add (c);
+ assert (e.children.size == 1);
+ assert (e.children[0] != null);
+ assert (e.children[0].name == "child");
+ assert (c.parent != null);
+ assert (doc.root != null);
+ assert (doc.root.children[0] != null);
+ assert (doc.root.children[0].name == "child");
+ assert (doc.root.children[0].parent != null);
+ assert (doc.root.children[0].parent.name == "root");
+ assert (doc.root.parent == null);
+ });
+ Test.add_func ("/gxml/tw-element/attribute/parent", () => {
+ var doc = new TwDocument ();
+ var e = doc.create_element ("root");
+ doc.children.add (e);
+ var c = doc.create_element ("child");
+ e.children.add (c);
+ (e as GXml.Element).set_attr ("attr", "val");
+ assert (doc.root != null);
+ assert (doc.root.attrs["attr"] != null);
+ assert (doc.root.attrs["attr"].parent != null);
+ assert (doc.root.attrs["attr"].parent.name == "root");
+ });
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]