[gxml] Element: added new parse_buffer()
- From: Daniel Espinosa Ortiz <despinosa src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gxml] Element: added new parse_buffer()
- Date: Tue, 23 Jul 2019 22:26:28 +0000 (UTC)
commit 9a77bd4697cb82be0bca9bdb84e90569e25b20d8
Author: Daniel Espinosa <esodan gmail com>
Date: Tue Jul 23 14:20:07 2019 -0500
Element: added new parse_buffer()
Async method to read async all unparsed child nodes
gxml/Element.vala | 23 +++++++++++++++++------
test/StreamReaderTest.vala | 26 ++++++++++++++++++++++++++
test/meson.build | 15 ++++++++++++++-
3 files changed, 57 insertions(+), 7 deletions(-)
---
diff --git a/gxml/Element.vala b/gxml/Element.vala
index 75bc133..3f74d21 100644
--- a/gxml/Element.vala
+++ b/gxml/Element.vala
@@ -790,21 +790,32 @@ public class GXml.Element : GXml.Node,
* Once it finish, sets {@link unparsed} to null.
*/
public void read_unparsed () throws GLib.Error {
- var parser = new XParser (this);
if (unparsed != null) {
+ var parser = new XParser (this);
parser.read_child_nodes_string (unparsed);
unparsed = null;
}
- if (read_buffer != null) {
- parser.read_child_nodes_string ((string) read_buffer.data);
- read_buffer = null;
- }
}
/**
- * On memory {@link MemoryOutputStream} with the unparsed
+ * On memory {@link GLib.MemoryOutputStream} with the unparsed
* string of the element
*/
public MemoryOutputStream read_buffer { get; set; }
+ /**
+ * Asynchronically parse {@link read_buffer}
+ */
+ public async void parse_buffer () throws GLib.Error {
+ if (read_buffer == null) {
+ return;
+ }
+ read_from_string ((string) read_buffer.data);
+ read_buffer = null;
+ foreach (DomNode n in child_nodes) {
+ if (n is GXml.Element) {
+ ((GXml.Element) n).parse_buffer.begin ();
+ }
+ }
+ }
}
diff --git a/test/StreamReaderTest.vala b/test/StreamReaderTest.vala
index 4520867..e04a17e 100644
--- a/test/StreamReaderTest.vala
+++ b/test/StreamReaderTest.vala
@@ -93,6 +93,32 @@ class GXmlTest {
warning ("Error: %s", e.message);
}
});
+ Test.add_func ("/gxml/stream-reader/child-multiple/read-unparsed", () => {
+ var loop = new GLib.MainLoop (null);
+ Idle.add (()=>{
+ string str = """<root p1="a" p2="b" ><child k="p" y="9"><code/><code
u="3">TestC</code><Tek/><Tex y="456"/></child></root>""";
+ var istream = new MemoryInputStream.from_data (str.data, null);
+ var sr = new StreamReader (istream);
+ try {
+ var doc = sr.read ();
+ (doc.document_element as GXml.Element).parse_buffer.begin ((obj,
res)=>{
+ try {
+ (doc.document_element as
GXml.Element).parse_buffer.end (res);
+ message (doc.write_string ());
+ assert ((doc.document_element as
GXml.Element).read_buffer == null);
+ assert
((doc.document_element.child_nodes.item (0) as GXml.Element).read_buffer == null);
+ loop.quit ();
+ } catch (GLib.Error e) {
+ warning ("Error: %s", e.message);
+ }
+ });
+ } catch (GLib.Error e) {
+ warning ("Error while reading stream: %s", e.message);
+ }
+ return Source.REMOVE;
+ });
+ loop.run ();
+ });
Test.run ();
return 0;
diff --git a/test/meson.build b/test/meson.build
index 88b14ff..be2d0b7 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -128,4 +128,17 @@ stream_reader_performance_iterate = executable('stream-reader-performance-iterat
)
benchmark ('stream-reader-performance-iterate', stream_reader_performance_iterate)
-
+
+
+files_stream_reader_performance_iterate_read = files ([
+ 'StreamReaderPerformanceIterateReadUnparsedTest.vala'
+ ])
+
+stream_reader_performance_iterate = executable('stream-reader-performance-iterate-read-unparsed',
files_stream_reader_performance_iterate_read + configvapi + configtestvapi,
+ vala_args : [],
+ dependencies : [ libgxml_deps, inc_libh_dep, testdirs_dep, inc_rooth_dep],
+ link_with: libgxml
+)
+
+benchmark ('stream-reader-performance-iterate-read-unparsed', stream_reader_performance_iterate)
+
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]