$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r55952 - branches/sredl_2009_05_proptree_update/libs/property_tree/test
From: sebastian.redl_at_[hidden]
Date: 2009-09-01 06:30:21
Author: cornedbee
Date: 2009-09-01 06:30:20 EDT (Tue, 01 Sep 2009)
New Revision: 55952
URL: http://svn.boost.org/trac/boost/changeset/55952
Log:
Add UTF-8 test case and get it to run.
Text files modified: 
   branches/sredl_2009_05_proptree_update/libs/property_tree/test/test_utils.hpp               |    15 +++++----------                         
   branches/sredl_2009_05_proptree_update/libs/property_tree/test/test_xml_parser_common.hpp   |    11 +++++++++++                             
   branches/sredl_2009_05_proptree_update/libs/property_tree/test/test_xml_parser_rapidxml.cpp |    10 ++++++++++                              
   branches/sredl_2009_05_proptree_update/libs/property_tree/test/xml_parser_test_data.hpp     |     9 +++++++++                               
   4 files changed, 35 insertions(+), 10 deletions(-)
Modified: branches/sredl_2009_05_proptree_update/libs/property_tree/test/test_utils.hpp
==============================================================================
--- branches/sredl_2009_05_proptree_update/libs/property_tree/test/test_utils.hpp	(original)
+++ branches/sredl_2009_05_proptree_update/libs/property_tree/test/test_utils.hpp	2009-09-01 06:30:20 EDT (Tue, 01 Sep 2009)
@@ -52,7 +52,6 @@
     return size;
 }
 
-template<class Ch>
 class test_file
 {
 public:
@@ -61,12 +60,8 @@
         if (test_data && filename)
         {
             name = filename;
-            std::basic_ofstream<Ch> stream(name.c_str());
-            while (*test_data)
-            {
-                stream << Ch(*test_data);
-                ++test_data;
-            }
+            std::ofstream stream(name.c_str());
+            stream.write(test_data, strlen(test_data));
             BOOST_CHECK(stream.good());
         }
     }
@@ -109,9 +104,9 @@
     typedef typename Ptree::key_type::value_type Ch;
 
     // Create test files
-    test_file<Ch> file_1(test_data_1, filename_1);
-    test_file<Ch> file_2(test_data_2, filename_2);
-    test_file<Ch> file_out("", filename_out);
+    test_file file_1(test_data_1, filename_1);
+    test_file file_2(test_data_2, filename_2);
+    test_file file_out("", filename_out);
 
     rf(filename_1, pt);        // Read file
     wf(filename_out, pt);      // Write file
Modified: branches/sredl_2009_05_proptree_update/libs/property_tree/test/test_xml_parser_common.hpp
==============================================================================
--- branches/sredl_2009_05_proptree_update/libs/property_tree/test/test_xml_parser_common.hpp	(original)
+++ branches/sredl_2009_05_proptree_update/libs/property_tree/test/test_xml_parser_common.hpp	2009-09-01 06:30:20 EDT (Tue, 01 Sep 2009)
@@ -32,6 +32,10 @@
     }
 };
 
+template <typename Ch> int umlautsize();
+template <> inline int umlautsize<char>() { return 2; }
+template <> inline int umlautsize<wchar_t>() { return 1; }
+
 template<class Ptree>
 void test_xml_parser()
 {
@@ -62,6 +66,13 @@
         "testok4.xml", NULL, "testok4out.xml", 5, 2, 20
     );
 
+    generic_parser_test_ok<Ptree, ReadFunc, WriteFunc>
+    (
+        ReadFunc(), WriteFunc(), ok_data_5, NULL, 
+        "testok5.xml", NULL, "testok5out.xml",
+        2, umlautsize<typename Ptree::data_type::value_type>(), 3
+    );
+
     generic_parser_test_error<Ptree, ReadFunc, WriteFunc, xml_parser_error>
     (
         ReadFunc(), WriteFunc(), error_data_1, NULL,
Modified: branches/sredl_2009_05_proptree_update/libs/property_tree/test/test_xml_parser_rapidxml.cpp
==============================================================================
--- branches/sredl_2009_05_proptree_update/libs/property_tree/test/test_xml_parser_rapidxml.cpp	(original)
+++ branches/sredl_2009_05_proptree_update/libs/property_tree/test/test_xml_parser_rapidxml.cpp	2009-09-01 06:30:20 EDT (Tue, 01 Sep 2009)
@@ -9,13 +9,23 @@
 // ----------------------------------------------------------------------------
 
 #include "test_xml_parser_common.hpp"
+#include <locale>
+#define BOOST_UTF8_BEGIN_NAMESPACE namespace boost { namespace property_tree {
+#define BOOST_UTF8_END_NAMESPACE }}
+#define BOOST_UTF8_DECL
+#include <boost/detail/utf8_codecvt_facet.hpp>
+#include "../../detail/utf8_codecvt_facet.cpp"
 
 int test_main(int argc, char *argv[])
 {
     using namespace boost::property_tree;
+    using std::locale;
     test_xml_parser<ptree>();
     test_xml_parser<iptree>();
 #ifndef BOOST_NO_CWCHAR
+    // We need a UTF-8-aware global locale now.
+    locale loc(locale(), new utf8_codecvt_facet);
+    locale::global(loc);
     test_xml_parser<wptree>();
     test_xml_parser<wiptree>();
 #endif
Modified: branches/sredl_2009_05_proptree_update/libs/property_tree/test/xml_parser_test_data.hpp
==============================================================================
--- branches/sredl_2009_05_proptree_update/libs/property_tree/test/xml_parser_test_data.hpp	(original)
+++ branches/sredl_2009_05_proptree_update/libs/property_tree/test/xml_parser_test_data.hpp	2009-09-01 06:30:20 EDT (Tue, 01 Sep 2009)
@@ -731,6 +731,15 @@
     "</channel>\n"
     "</rss>\n";
 
+// Correct, with UTF-8 data
+const char ok_data_5[] = {
+  '<', '?', 'x', 'm', 'l', ' ', 'v', 'e', 'r', 's', 'i', 'o', 'n', '=', '"',
+  '1', '.', '0', '"', ' ', 'e', 'n', 'c', 'o', 'd', 'i', 'n', 'g', '=', '"',
+  'u', 't', 'f', '-', '8', '"', '?', '>', '\n', /*39 chars*/
+  '<', 'd', 'o', 'c', '>', 0xC3, 0xA4, '<', '/', 'd', 'o', 'c', '>',
+  0
+};
+
 // Erroneous
 const char *error_data_1 = 
     "a";      // bogus character