[gxml] Implemented TwDocument.to_string(). Added Unit Test



commit d555388d765da4dca42bf370eda7102c40a4edb6
Author: Daniel Espinosa <esodan gmail com>
Date:   Fri May 8 22:45:34 2015 -0500

    Implemented TwDocument.to_string(). Added Unit Test

 gxml/SerializableObjectModel.vala         |    2 +-
 gxml/TwDocument.vala                      |   31 +++++++++++++---------------
 gxml/xlibxml.c                            |    5 ++++
 gxml/xlibxml.h                            |    1 +
 test/SerializableObjectModel-Tw-Test.vala |    4 +-
 test/TwDocumentTest.vala                  |   13 ++++++++++++
 vapi/xlibxml-1.0.vapi                     |    2 +
 7 files changed, 38 insertions(+), 20 deletions(-)
---
diff --git a/gxml/SerializableObjectModel.vala b/gxml/SerializableObjectModel.vala
index fa2648d..5ae1aff 100644
--- a/gxml/SerializableObjectModel.vala
+++ b/gxml/SerializableObjectModel.vala
@@ -183,7 +183,7 @@ public abstract class GXml.SerializableObjectModel : Object, Serializable
       string t = "";
       if (serialized_xml_node_value != null)
         t = serialized_xml_node_value;
-      var tn = element.content  = t;
+      element.content  = t;
 #if DEBUG
       stdout.printf (@"SET CONTENT FOR: $(get_type ().name ()): $(element.name): content '$t'\n");
 #endif
diff --git a/gxml/TwDocument.vala b/gxml/TwDocument.vala
index 3f114fc..fd03105 100644
--- a/gxml/TwDocument.vala
+++ b/gxml/TwDocument.vala
@@ -86,12 +86,16 @@ public class GXml.TwDocument : GXml.TwNode, GXml.Document
   public bool save_to (GLib.File f, GLib.Cancellable? cancellable = null)
   {
     var tw = new Xml.TextWriter.filename (f.get_path ());
+    write_document (tw);
+    return true;
+  }
+  public virtual void write_document (Xml.TextWriter tw)
+  {
     tw.start_document ();
     tw.set_indent (indent);
     // Root
     if (root == null) {
       tw.end_document ();
-      return true;
     }
 #if DEBUG
     GLib.message ("Starting writting Document Root node");
@@ -110,9 +114,8 @@ public class GXml.TwDocument : GXml.TwNode, GXml.Document
 #endif
     tw.end_document ();
     tw.flush ();
-    return true;
   }
-  public void start_node (Xml.TextWriter tw, GXml.Node node)
+  public virtual void start_node (Xml.TextWriter tw, GXml.Node node)
   {
     int size = 0;
 #if DEBUG
@@ -184,21 +187,15 @@ public class GXml.TwDocument : GXml.TwNode, GXml.Document
   }
   public override string to_string ()
   {
-    GLib.message ("TwDocument: to_string ()");
-    try {
-      var f = GLib.File.new_tmp (null, null);
-      save_to (f);
-      uint8 buffer[10000];
-      var istream = f.read ();
-      istream.read (buffer);
-      istream.close ();
-      f.delete ();
-      return (string) buffer;
-    } catch (GLib.Error e) {
 #if DEBUG
-      GLib.message ("Error on stringify this TwDocuent: "+e.message);
+    GLib.message ("TwDocument: to_string ()");
 #endif
-    }
-    return "";
+    Xml.Doc doc = new Xml.Doc ();
+    Xml.TextWriter* tw = Xmlx.new_text_writer_doc (ref doc);
+    write_document (tw);
+    string str;
+    int size;
+    doc.dump_memory (out str, out size);
+    return str;
   }
 }
diff --git a/gxml/xlibxml.c b/gxml/xlibxml.c
index c9371a4..7c1ecdc 100644
--- a/gxml/xlibxml.c
+++ b/gxml/xlibxml.c
@@ -45,3 +45,8 @@ xmlNsPtr* gxml_doc_get_ns_list (xmlDoc* doc, xmlNode* node)
 {
   return xmlGetNsList (doc, node);
 }
+
+xmlTextWriterPtr gxml_new_text_writer_doc (xmlDoc** doc)
+{
+  return xmlNewTextWriterDoc (doc, 0);
+}
diff --git a/gxml/xlibxml.h b/gxml/xlibxml.h
index da25682..82daed1 100644
--- a/gxml/xlibxml.h
+++ b/gxml/xlibxml.h
@@ -23,6 +23,7 @@
 
 #include <libxml/tree.h>
 #include <libxml/parser.h>
+#include <libxml/xmlwriter.h>
 
 void*       gxml_doc_get_intsubset_entities    (xmlDoc *doc);
 int         gxml_validate_name                 (xmlChar* name, int space);
diff --git a/test/SerializableObjectModel-Tw-Test.vala b/test/SerializableObjectModel-Tw-Test.vala
index 361b98a..d7bcf29 100644
--- a/test/SerializableObjectModel-Tw-Test.vala
+++ b/test/SerializableObjectModel-Tw-Test.vala
@@ -285,9 +285,9 @@ class SerializableObjectModelTwTest : GXmlTest
     Test.add_func ("/gxml/tw/serializable/object_model/set_namespace", () => {
       try {
         var ns = new NameSpace ();
-        var doc = new xDocument ();
+        var doc = new TwDocument ();
         ns.serialize (doc);
-        assert (doc.document_element.to_string () == "<gxml:namespace 
xmlns:gxml=\"http://www.gnome.org/GXml\"/>");
+        assert (doc.root.to_string () == "<gxml:namespace xmlns:gxml=\"http://www.gnome.org/GXml\"/>");
       } catch (GLib.Error e) {
 #if DEBUG
         GLib.message ("ERROR: "+e.message);
diff --git a/test/TwDocumentTest.vala b/test/TwDocumentTest.vala
index 5ba7ebb..a9bfa4a 100644
--- a/test/TwDocumentTest.vala
+++ b/test/TwDocumentTest.vala
@@ -302,5 +302,18 @@ class TwDocumentTest : GXmlTest {
                                assert_not_reached ();
                        }
                });
+               
+               Test.add_func ("/gxml/tw-document/to_string", () => {
+                       var doc = new TwDocument ();
+                       var r = doc.create_element ("root");
+                       doc.childs.add (r);
+#if DEBUG
+                       GLib.message (@"$(doc)");
+#endif
+                       GLib.message (@"\n$(doc)");
+                       string str = doc.to_string ();
+                       assert ("<?xml version=\"1.0\"?>" in str);
+                       assert ("<root/>" in str);
+               });
        }
 }
diff --git a/vapi/xlibxml-1.0.vapi b/vapi/xlibxml-1.0.vapi
index c524a76..a5a7801 100644
--- a/vapi/xlibxml-1.0.vapi
+++ b/vapi/xlibxml-1.0.vapi
@@ -36,4 +36,6 @@ namespace Xmlx {
   public static Xml.Error* get_last_error ();
   [CCode (cname = "gxml_doc_get_ns_list", array_null_terminated = true, cheader_filename = "gxml/xlibxml.h")]
   public static Xml.Ns*[] doc_get_ns_list (Xml.Doc* doc, Xml.Node* node);
+  [CCode (cname = "gxml_new_text_writer_doc", cheader_filename = "gxml/xlibxml.h")]
+  public static Xml.TextWriter new_text_writer_doc (ref Xml.Doc doc);
 }


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