aboutsummaryrefslogtreecommitdiff
path: root/tests/cxx/serializer/built-in
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2009-02-24 15:16:26 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2009-02-24 15:16:26 +0200
commit707cc94fe52463870a9c6c8e2e66eaaa389e601d (patch)
tree13e10ff28bf4455d915f9d59b401bdbb62a393cb /tests/cxx/serializer/built-in
Start tracking XSD/e with git after version 3.0.03.0.0
Diffstat (limited to 'tests/cxx/serializer/built-in')
-rw-r--r--tests/cxx/serializer/built-in/driver.cxx1304
-rw-r--r--tests/cxx/serializer/built-in/makefile79
-rw-r--r--tests/cxx/serializer/built-in/output-long13
-rw-r--r--tests/cxx/serializer/built-in/output-long-long13
-rw-r--r--tests/cxx/serializer/built-in/test.xsd64
5 files changed, 1473 insertions, 0 deletions
diff --git a/tests/cxx/serializer/built-in/driver.cxx b/tests/cxx/serializer/built-in/driver.cxx
new file mode 100644
index 0000000..f1d17a1
--- /dev/null
+++ b/tests/cxx/serializer/built-in/driver.cxx
@@ -0,0 +1,1304 @@
+// file : tests/cxx/serializer/built-in/driver.cxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2006-2009 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+// Test built-in type serialization.
+//
+
+#include <stdlib.h> // strtof, strtod
+#include <string.h> // memcpy
+#include <iostream>
+
+#include "test-sskel.hxx"
+
+using namespace std;
+using namespace test;
+
+struct any_type_simpl: xml_schema::any_type_simpl
+{
+ virtual void
+ _serialize_attributes ()
+ {
+ _attribute ("foo", "one");
+ _attribute ("test", "foo", "two");
+ }
+
+ virtual void
+ _serialize_content ()
+ {
+ _start_element ("test", "inner");
+ _characters ("hello");
+ _end_element ();
+ }
+};
+
+struct any_simple_type_simpl: xml_schema::any_simple_type_simpl
+{
+ virtual void
+ _serialize_content ()
+ {
+ _characters ("hello");
+ }
+};
+
+struct root_simpl: root_sskel
+{
+ virtual void
+ pre ()
+ {
+ boolean_ = 0;
+ byte_ = 0;
+ unsigned_byte_ = 0;
+ short__ = 0;
+ unsigned_short_ = 0;
+ int__ = 0;
+ unsigned_int_ = 0;
+ long__ = 0;
+ unsigned_long_ = 0;
+
+ integer_ = 0;
+ negative_integer_ = 0;
+ non_positive_integer_ = 0;
+ positive_integer_ = 0;
+ non_negative_integer_ = 0;
+
+ float__ = 0;
+ double__ = 0;
+ decimal_ = 0;
+
+ string_ = 0;
+ normalized_string_ = 0;
+ token_ = 0;
+ name_ = 0;
+ nmtoken_ = 0;
+ nmtokens_ = 0;
+ ncname_ = 0;
+ id_ = 0;
+ idref_ = 0;
+ idrefs_ = 0;
+ language_ = 0;
+ uri_ = 0;
+ qname_ = 0;
+
+ base64_binary_ = 0;
+ hex_binary_ = 0;
+
+ gday_ = 0;
+ gmonth_ = 0;
+ gyear_ = 0;
+ gmonth_day_ = 0;
+ gyear_month_ = 0;
+ date_ = 0;
+ time_ = 0;
+ date_time_ = 0;
+ duration_ = 0;
+ }
+
+ virtual bool
+ boolean_next ()
+ {
+ return boolean_ < 2;
+ }
+
+ virtual bool
+ boolean ()
+ {
+ static const bool v[] = {true, false};
+ return v[boolean_++];
+ }
+
+ virtual bool
+ byte_next ()
+ {
+ return byte_ < 4;
+ }
+
+ virtual signed char
+ byte ()
+ {
+ static const signed char v[] = {-128, -123, 0, 127};
+ return v[byte_++];
+ }
+
+ virtual bool
+ unsigned_byte_next ()
+ {
+ return unsigned_byte_ < 3;
+ }
+
+ virtual unsigned char
+ unsigned_byte ()
+ {
+ static const unsigned char v[] = {0, 123, 255};
+ return v[unsigned_byte_++];
+ }
+
+ virtual bool
+ short__next ()
+ {
+ return short__ < 4;
+ }
+
+ virtual short
+ short_ ()
+ {
+ static const short v[] = {-32768, -12345, 0, 32767};
+ return v[short__++];
+ }
+
+ virtual bool
+ unsigned_short_next ()
+ {
+ return unsigned_short_ < 3;
+ }
+
+ virtual unsigned short
+ unsigned_short ()
+ {
+ static const unsigned short v[] = {0, 12345, 65535};
+ return v[unsigned_short_++];
+ }
+
+ virtual bool
+ int__next ()
+ {
+ return int__ < 4;
+ }
+
+ virtual int
+ int_ ()
+ {
+ static const int v[] = {-2147483648, -1234567890, 0, 2147483647};
+ return v[int__++];
+ }
+
+ virtual bool
+ unsigned_int_next ()
+ {
+ return unsigned_int_ < 3;
+ }
+
+ virtual unsigned int
+ unsigned_int ()
+ {
+ static const unsigned int v[] = {0, 1234567890, 4294967295};
+ return v[unsigned_int_++];
+ }
+
+ virtual bool
+ long__next ()
+ {
+ return long__ < 4;
+ }
+
+ virtual bool
+ unsigned_long_next ()
+ {
+ return unsigned_long_ < 3;
+ }
+
+#ifdef XSDE_LONGLONG
+ virtual long long
+ long_ ()
+ {
+ static const long long v[] =
+ {
+ -9223372036854775807LL, -1234567890123456789LL,
+ 0LL, 9223372036854775807LL
+ };
+
+ return long__ == 0 ? (v[long__++] - 1) : v[long__++];
+ }
+
+ virtual unsigned long long
+ unsigned_long ()
+ {
+ static const unsigned long long v[] =
+ {
+ 0ULL, 12345678901234567890ULL, 18446744073709551615ULL
+ };
+
+ return v[unsigned_long_++];
+ }
+#else
+ virtual long
+ long_ ()
+ {
+ static const long v[] = {-2147483647L, -1234567890L, 0L, 2147483647L};
+ return long__ == 0 ? (v[long__++] - 1) : v[long__++];
+ }
+
+ virtual unsigned long
+ unsigned_long ()
+ {
+ static const unsigned long v[] = {0UL, 1234567890UL, 4294967295UL};
+ return v[unsigned_long_++];
+ }
+#endif
+
+ //
+ //
+ virtual bool
+ integer_next ()
+ {
+ return integer_ < 4;
+ }
+
+ virtual long
+ integer ()
+ {
+ static const long v[] = {-2147483647L, -1234567890L, 0L, 2147483647L};
+ return integer_ == 0 ? (v[integer_++] - 1) : v[integer_++];
+ }
+
+ virtual bool
+ negative_integer_next ()
+ {
+ return negative_integer_ < 2;
+ }
+
+ virtual long
+ negative_integer ()
+ {
+ static const long v[] = {-2147483647L, -1234567890L};
+ return negative_integer_ == 0
+ ? (v[negative_integer_++] - 1)
+ : v[negative_integer_++];
+ }
+
+ virtual bool
+ non_positive_integer_next ()
+ {
+ return non_positive_integer_ < 3;
+ }
+
+ virtual long
+ non_positive_integer ()
+ {
+ static const long v[] = {-2147483647L, -1234567890L, 0L};
+ return non_positive_integer_ == 0
+ ? (v[non_positive_integer_++] - 1)
+ : v[non_positive_integer_++];
+ }
+
+ virtual bool
+ positive_integer_next ()
+ {
+ return positive_integer_ < 2;
+ }
+
+ virtual unsigned long
+ positive_integer ()
+ {
+ static const unsigned long v[] = {1234567890UL, 4294967295UL};
+ return v[positive_integer_++];
+ }
+
+ virtual bool
+ non_negative_integer_next ()
+ {
+ return non_negative_integer_ < 3;
+ }
+
+ virtual unsigned long
+ non_negative_integer ()
+ {
+ static const unsigned long v[] = {0UL, 1234567890UL, 4294967295UL};
+ return v[non_negative_integer_++];
+ }
+
+ //
+ //
+ virtual bool
+ float__next ()
+ {
+ return float__ < 9;
+ }
+
+ virtual float
+ float_ ()
+ {
+ static const float v[] = {0.0, 0.0, 0.0, 0.0, 1.0, -1.0,
+ 123.567, -123.567e5, -0.45e-5};
+
+ switch (float__)
+ {
+ case 0:
+ {
+ float__++;
+ return strtof ("INF", 0);
+ }
+ case 1:
+ {
+ float__++;
+ return strtof ("-INF", 0);
+ }
+ case 2:
+ {
+ float__++;
+ return strtof ("NAN", 0);
+ }
+ default:
+ {
+ return v[float__++];
+ }
+ }
+ }
+
+ virtual bool
+ double__next ()
+ {
+ return double__ < 9;
+ }
+
+ virtual double
+ double_ ()
+ {
+ static const double v[] = {0.0, 0.0, 0.0, 0.0, 1.0, -1.0,
+ 123.56789, -123.56789e8, -0.45E-5};
+
+ switch (double__)
+ {
+ case 0:
+ {
+ double__++;
+ return strtod ("INF", 0);
+ }
+ case 1:
+ {
+ double__++;
+ return strtod ("-INF", 0);
+ }
+ case 2:
+ {
+ double__++;
+ return strtod ("NAN", 0);
+ }
+ default:
+ {
+ return v[double__++];
+ }
+ }
+ }
+
+ virtual bool
+ decimal_next ()
+ {
+ return decimal_ < 5;
+ }
+
+ virtual double
+ decimal ()
+ {
+ static const double v[] = {0.0, 1.0, -1.0, 123.56789, -123.56789};
+ return v[decimal_++];
+ }
+
+ //
+ //
+
+#ifdef XSDE_STL
+
+ virtual bool
+ string_next ()
+ {
+ return string_++ < 1;
+ }
+
+ virtual std::string
+ string ()
+ {
+ return " test \n string ";
+ }
+
+ virtual bool
+ normalized_string_next ()
+ {
+ return normalized_string_++ < 1;
+ }
+
+ virtual std::string
+ normalized_string ()
+ {
+ return "test normalized string";
+ }
+
+ virtual bool
+ token_next ()
+ {
+ return token_++ < 1;
+ }
+
+ virtual std::string
+ token ()
+ {
+ return "test token";
+ }
+
+ virtual bool
+ name_next ()
+ {
+ return name_++ < 1;
+ }
+
+ virtual std::string
+ name ()
+ {
+ return "as123:345-.abs";
+ }
+
+ virtual bool
+ nmtoken_next ()
+ {
+ return nmtoken_++ < 1;
+ }
+
+ virtual std::string
+ nmtoken ()
+ {
+ return "1as123:345-.abs";
+ }
+
+ virtual bool
+ nmtokens_next ()
+ {
+ return nmtokens_ < 2;
+ }
+
+ virtual xml_schema::string_sequence*
+ nmtokens ()
+ {
+ using xml_schema::string_sequence;
+
+ switch (nmtokens_++)
+ {
+ case 0:
+ {
+ string_sequence* r = new string_sequence;
+ r->push_back ("one");
+ return r;
+ }
+ case 1:
+ {
+ string_sequence* r = new string_sequence;
+ r->push_back ("one");
+ r->push_back ("two");
+ r->push_back ("three");
+ return r;
+ }
+ default:
+ return 0;
+ }
+ }
+
+ virtual bool
+ ncname_next ()
+ {
+ return ncname_++ < 1;
+ }
+
+ virtual std::string
+ ncname ()
+ {
+ return "as123_345-.abs";
+ }
+
+ virtual bool
+ id_next ()
+ {
+ return id_ < 4;
+ }
+
+ virtual std::string
+ id ()
+ {
+ static const char* v[] = {"as123_345-.abs", "one", "two", "three"};
+ return v[id_++];
+ }
+
+ virtual bool
+ idref_next ()
+ {
+ return idref_++ < 1;
+ }
+
+ virtual std::string
+ idref ()
+ {
+ return "as123_345-.abs";
+ }
+
+ virtual bool
+ idrefs_next ()
+ {
+ return idrefs_ < 2;
+ }
+
+ virtual xml_schema::string_sequence*
+ idrefs ()
+ {
+ using xml_schema::string_sequence;
+
+ switch (idrefs_++)
+ {
+ case 0:
+ {
+ string_sequence* r = new string_sequence;
+ r->push_back ("one");
+ return r;
+ }
+ case 1:
+ {
+ string_sequence* r = new string_sequence;
+ r->push_back ("two");
+ r->push_back ("three");
+ return r;
+ }
+ default:
+ return 0;
+ }
+ }
+
+ virtual bool
+ language_next ()
+ {
+ return language_++ < 1;
+ }
+
+ virtual std::string
+ language ()
+ {
+ return "en-us";
+ }
+
+ virtual bool
+ uri_next ()
+ {
+ return uri_++ < 1;
+ }
+
+ virtual std::string
+ uri ()
+ {
+ return "http://www.example.com/foo#bar";
+ }
+
+ virtual bool
+ qname_next ()
+ {
+ return qname_ < 2;
+ }
+
+ virtual xml_schema::qname
+ qname ()
+ {
+ using xml_schema::qname;
+
+ switch (qname_++)
+ {
+ case 0:
+ {
+ qname r ("g1", "qname");
+ return r;
+ }
+ case 1:
+ {
+ qname r ("qname");
+ return r;
+ }
+ default:
+ return qname ("bad");
+ }
+ }
+
+#else
+
+ virtual bool
+ string_next ()
+ {
+ return string_++ < 1;
+ }
+
+ virtual const char*
+ string ()
+ {
+ return " test \n string ";
+ }
+
+ virtual bool
+ normalized_string_next ()
+ {
+ return normalized_string_++ < 1;
+ }
+
+ virtual const char*
+ normalized_string ()
+ {
+ return "test normalized string";
+ }
+
+ virtual bool
+ token_next ()
+ {
+ return token_++ < 1;
+ }
+
+ virtual const char*
+ token ()
+ {
+ return "test token";
+ }
+
+ virtual bool
+ name_next ()
+ {
+ return name_++ < 1;
+ }
+
+ virtual const char*
+ name ()
+ {
+ return "as123:345-.abs";
+ }
+
+ virtual bool
+ nmtoken_next ()
+ {
+ return nmtoken_++ < 1;
+ }
+
+ virtual const char*
+ nmtoken ()
+ {
+ return "1as123:345-.abs";
+ }
+
+ virtual bool
+ nmtokens_next ()
+ {
+ return nmtokens_ < 2;
+ }
+
+ virtual const xml_schema::string_sequence*
+ nmtokens ()
+ {
+ using xml_schema::string_sequence;
+
+ switch (nmtokens_++)
+ {
+ case 0:
+ {
+ string_sequence* r = new string_sequence ();
+ r->push_back_copy ("one");
+ return r;
+ }
+ case 1:
+ {
+ string_sequence* r = new string_sequence ();
+ r->push_back_copy ("one");
+ r->push_back_copy ("two");
+ r->push_back_copy ("three");
+ return r;
+ }
+ default:
+ return 0;
+ }
+ }
+
+ virtual bool
+ ncname_next ()
+ {
+ return ncname_++ < 1;
+ }
+
+ virtual const char*
+ ncname ()
+ {
+ return "as123_345-.abs";
+ }
+
+ virtual bool
+ id_next ()
+ {
+ return id_ < 4;
+ }
+
+ virtual const char*
+ id ()
+ {
+ static const char* v[] = {"as123_345-.abs", "one", "two", "three"};
+ return v[id_++];
+ }
+
+ virtual bool
+ idref_next ()
+ {
+ return idref_++ < 1;
+ }
+
+ virtual const char*
+ idref ()
+ {
+ return "as123_345-.abs";
+ }
+
+ virtual bool
+ idrefs_next ()
+ {
+ return idrefs_ < 2;
+ }
+
+ virtual const xml_schema::string_sequence*
+ idrefs ()
+ {
+ using xml_schema::string_sequence;
+
+ switch (idrefs_++)
+ {
+ case 0:
+ {
+ string_sequence* r = new string_sequence ();
+ r->push_back_copy ("one");
+ return r;
+ }
+ case 1:
+ {
+ string_sequence* r = new string_sequence ();
+ r->push_back_copy ("two");
+ r->push_back_copy ("three");
+ return r;
+ }
+ default:
+ return 0;
+ }
+ }
+
+ virtual bool
+ language_next ()
+ {
+ return language_++ < 1;
+ }
+
+ virtual const char*
+ language ()
+ {
+ return "en-us";
+ }
+
+ virtual bool
+ uri_next ()
+ {
+ return uri_++ < 1;
+ }
+
+ virtual const char*
+ uri ()
+ {
+ return "http://www.example.com/foo#bar";
+ }
+
+ virtual bool
+ qname_next ()
+ {
+ return qname_ < 2;
+ }
+
+ virtual const xml_schema::qname*
+ qname ()
+ {
+ using xml_schema::qname;
+
+ switch (qname_++)
+ {
+ case 0:
+ {
+ qname* r = new qname ();
+ r->prefix_copy ("g1");
+ r->name_copy ("qname");
+ return r;
+ }
+ case 1:
+ {
+ qname* r = new qname ();
+ r->name_copy ("qname");
+ return r;
+ }
+ default:
+ return 0;
+ }
+ }
+#endif
+
+ //
+ //
+ virtual bool
+ base64_binary_next ()
+ {
+ return base64_binary_ < 6;
+ }
+
+ virtual const xml_schema::buffer*
+ base64_binary ()
+ {
+ xml_schema::buffer* r = new xml_schema::buffer ();
+
+ switch (base64_binary_++)
+ {
+ case 0:
+ {
+ // Empty buffer.
+ //
+ break;
+ }
+ case 1:
+ {
+ const char data[] = "12345abcjk";
+ const size_t size = sizeof (data) - 1;
+ r->size (size);
+ memcpy (r->data (), data, size);
+ break;
+ }
+ case 2:
+ {
+ const char data[] = "a";
+ const size_t size = sizeof (data) - 1;
+ r->size (size);
+ memcpy (r->data (), data, size);
+ break;
+ }
+ case 3:
+ {
+ const char data[] = "ab";
+ const size_t size = sizeof (data) -1;
+ r->size (size);
+ memcpy (r->data (), data, size);
+ break;
+ }
+ case 4:
+ {
+ const char data[] = "abc";
+ const size_t size = sizeof (data) - 1;
+ r->size (size);
+ memcpy (r->data (), data, size);
+ break;
+ }
+ case 5:
+ {
+ const size_t size = 345;
+
+ r->size (size);
+ unsigned char v = 0;
+
+ for (size_t i = 0; i < size; ++i)
+ {
+ r->data ()[i] = static_cast<char> (v++);
+ }
+
+ break;
+ }
+ }
+
+ return r;
+ }
+
+ virtual bool
+ hex_binary_next ()
+ {
+ return hex_binary_ < 3;
+ }
+
+ virtual const xml_schema::buffer*
+ hex_binary ()
+ {
+ xml_schema::buffer* r = new xml_schema::buffer ();
+
+ switch (hex_binary_++)
+ {
+ case 0:
+ {
+ // Empty buffer.
+ //
+ break;
+ }
+ case 1:
+ {
+ const char data[] = "12345abcjk";
+ const size_t size = sizeof (data) - 1;
+ r->size (size);
+ memcpy (r->data (), data, size);
+ break;
+ }
+ case 2:
+ {
+ const size_t size = 345;
+
+ r->size (size);
+ unsigned char v = 0;
+
+ for (size_t i = 0; i < size; ++i)
+ {
+ r->data ()[i] = static_cast<char> (v++);
+ }
+
+ break;
+ }
+ }
+
+ return r;
+ }
+
+ virtual bool
+ gday_next ()
+ {
+ return gday_ < 3;
+ }
+
+ virtual xml_schema::gday
+ gday ()
+ {
+ using xml_schema::gday;
+
+ switch (gday_++)
+ {
+ case 0:
+ return gday (23);
+ case 1:
+ return gday (31, 2, 30);
+ case 2:
+ return gday (15, 0, 0);
+ }
+ }
+
+ virtual bool
+ gmonth_next ()
+ {
+ return gmonth_ < 2;
+ }
+
+ virtual ::xml_schema::gmonth
+ gmonth ()
+ {
+ using xml_schema::gmonth;
+
+ switch (gmonth_++)
+ {
+ case 0:
+ return gmonth (6);
+ case 1:
+ return gmonth (12, 2, 30);
+ }
+ }
+
+ virtual bool
+ gyear_next ()
+ {
+ return gyear_ < 2;
+ }
+
+ virtual ::xml_schema::gyear
+ gyear ()
+ {
+ using xml_schema::gyear;
+
+ switch (gyear_++)
+ {
+ case 0:
+ return gyear (2007);
+ case 1:
+ return gyear (-2007, -2, -30);
+ }
+ }
+
+ virtual bool
+ gmonth_day_next ()
+ {
+ return gmonth_day_ < 2;
+ }
+
+ virtual ::xml_schema::gmonth_day
+ gmonth_day ()
+ {
+ using xml_schema::gmonth_day;
+
+ switch (gmonth_day_++)
+ {
+ case 0:
+ return gmonth_day (6, 15);
+ case 1:
+ return gmonth_day (12, 31, 2, 30);
+ }
+ }
+
+ virtual bool
+ gyear_month_next ()
+ {
+ return gyear_month_ < 2;
+ }
+
+ virtual ::xml_schema::gyear_month
+ gyear_month ()
+ {
+ using xml_schema::gyear_month;
+
+ switch (gyear_month_++)
+ {
+ case 0:
+ return gyear_month (2007, 10);
+ case 1:
+ return gyear_month (-2007, 12, -2, -30);
+ }
+ }
+
+ virtual bool
+ date_next ()
+ {
+ return date_ < 2;
+ }
+
+ virtual ::xml_schema::date
+ date ()
+ {
+ using xml_schema::date;
+
+ switch (date_++)
+ {
+ case 0:
+ return date (2007, 6, 15);
+ case 1:
+ return date (-2007, 12, 31, -2, -30);
+ }
+ }
+
+ virtual bool
+ time_next ()
+ {
+ return time_ < 2;
+ }
+
+ virtual ::xml_schema::time
+ time ()
+ {
+ using xml_schema::time;
+
+ switch (time_++)
+ {
+ case 0:
+ return time (12, 30, 30.0);
+ case 1:
+ return time (23, 59, 59.55, 2, 30);
+ }
+ }
+
+ virtual bool
+ date_time_next ()
+ {
+ return date_time_ < 2;
+ }
+
+ virtual ::xml_schema::date_time
+ date_time ()
+ {
+ using xml_schema::date_time;
+
+ switch (date_time_++)
+ {
+ case 0:
+ return date_time (2007, 6, 15, 12, 30, 30.0);
+ case 1:
+ return date_time (-2007, 12, 31, 23, 59, 59.55, -2, -30);
+ }
+ }
+
+ virtual bool
+ duration_next ()
+ {
+ return duration_ < 7;
+ }
+
+ virtual ::xml_schema::duration
+ duration ()
+ {
+ using xml_schema::duration;
+
+ switch (duration_++)
+ {
+ case 0:
+ return duration (false, 1, 0, 0, 0, 0, 0.0);
+ case 1:
+ return duration (true, 0, 1, 0, 0, 0, 0.0);
+ case 2:
+ return duration (false, 0, 0, 1, 0, 0, 0.0);
+ case 3:
+ return duration (true, 0, 0, 0, 1, 0, 0.0);
+ case 4:
+ return duration (false, 0, 0, 0, 0, 1, 0.0);
+ case 5:
+ return duration (true, 0, 0, 0, 0, 0, 1.1);
+ case 6:
+ return duration (false, 1, 2, 3, 4, 5, 6.7);
+ }
+ }
+
+private:
+ int boolean_;
+ int byte_;
+ int unsigned_byte_;
+ int short__;
+ int unsigned_short_;
+ int int__;
+ int unsigned_int_;
+ int long__;
+ int unsigned_long_;
+
+ int integer_;
+ int negative_integer_;
+ int non_positive_integer_;
+ int positive_integer_;
+ int non_negative_integer_;
+
+ int float__;
+ int double__;
+ int decimal_;
+
+ int string_;
+ int normalized_string_;
+ int token_;
+ int name_;
+ int nmtoken_;
+ int nmtokens_;
+ int ncname_;
+ int id_;
+ int idref_;
+ int idrefs_;
+ int language_;
+ int uri_;
+ int qname_;
+
+ int base64_binary_;
+ int hex_binary_;
+
+ int gday_;
+ int gmonth_;
+ int gyear_;
+ int gmonth_day_;
+ int gyear_month_;
+ int date_;
+ int time_;
+ int date_time_;
+ int duration_;
+};
+
+int
+main ()
+{
+ any_type_simpl any_type_s;
+ any_simple_type_simpl any_simple_type_s;
+
+ xml_schema::boolean_simpl boolean_s;
+
+ xml_schema::byte_simpl byte_s;
+ xml_schema::unsigned_byte_simpl unsigned_byte_s;
+ xml_schema::short_simpl short_s;
+ xml_schema::unsigned_short_simpl unsigned_short_s;
+ xml_schema::int_simpl int_s;
+ xml_schema::unsigned_int_simpl unsigned_int_s;
+ xml_schema::long_simpl long_s;
+ xml_schema::unsigned_long_simpl unsigned_long_s;
+
+ xml_schema::integer_simpl integer_s;
+ xml_schema::negative_integer_simpl negative_integer_s;
+ xml_schema::non_positive_integer_simpl non_sositive_integer_s;
+ xml_schema::positive_integer_simpl positive_integer_s;
+ xml_schema::non_negative_integer_simpl non_negative_integer_s;
+
+ xml_schema::float_simpl float_s;
+ xml_schema::double_simpl double_s;
+ xml_schema::decimal_simpl decimal_s;
+
+ xml_schema::string_simpl string_s;
+ xml_schema::normalized_string_simpl normalized_string_s;
+ xml_schema::token_simpl token_s;
+ xml_schema::name_simpl name_s;
+ xml_schema::nmtoken_simpl nmtoken_s;
+ xml_schema::ncname_simpl ncname_s;
+ xml_schema::id_simpl id_s;
+ xml_schema::idref_simpl idref_s;
+
+ xml_schema::language_simpl language_s;
+ xml_schema::uri_simpl uri_s;
+
+#ifdef XSDE_STL
+ xml_schema::qname_simpl qname_s;
+#else
+ xml_schema::qname_simpl qname_s (true);
+#endif
+
+ xml_schema::idrefs_simpl idrefs_s (true);
+ xml_schema::nmtokens_simpl nmtokens_s (true);
+
+ xml_schema::base64_binary_simpl base64_binary_s (true);
+ xml_schema::hex_binary_simpl hex_binary_s (true);
+
+ xml_schema::gday_simpl gday_s;
+ xml_schema::gmonth_simpl gmonth_s;
+ xml_schema::gyear_simpl gyear_s;
+ xml_schema::gmonth_day_simpl gmonth_day_s;
+ xml_schema::gyear_month_simpl gyear_month_s;
+ xml_schema::date_simpl date_s;
+ xml_schema::time_simpl time_s;
+ xml_schema::date_time_simpl date_time_s;
+ xml_schema::duration_simpl duration_s;
+
+ root_simpl root_s;
+
+ root_s.serializers (any_type_s,
+ any_simple_type_s,
+ boolean_s,
+ byte_s,
+ unsigned_byte_s,
+ short_s,
+ unsigned_short_s,
+ int_s,
+ unsigned_int_s,
+ long_s,
+ unsigned_long_s,
+ integer_s,
+ negative_integer_s,
+ non_sositive_integer_s,
+ positive_integer_s,
+ non_negative_integer_s,
+ float_s,
+ double_s,
+ decimal_s,
+ string_s,
+ normalized_string_s,
+ token_s,
+ name_s,
+ nmtoken_s,
+ nmtokens_s,
+ ncname_s,
+ id_s,
+ idref_s,
+ idrefs_s,
+ language_s,
+ uri_s,
+ qname_s,
+ base64_binary_s,
+ hex_binary_s,
+ gday_s,
+ gmonth_s,
+ gyear_s,
+ gmonth_day_s,
+ gyear_month_s,
+ date_s,
+ time_s,
+ date_time_s,
+ duration_s);
+
+ xml_schema::document_simpl doc_s (root_s, "test", "root");
+
+ root_s.pre ();
+ doc_s.serialize (cout);
+ root_s.post ();
+}
diff --git a/tests/cxx/serializer/built-in/makefile b/tests/cxx/serializer/built-in/makefile
new file mode 100644
index 0000000..78a2055
--- /dev/null
+++ b/tests/cxx/serializer/built-in/makefile
@@ -0,0 +1,79 @@
+# file : tests/cxx/serializer/built-in/makefile
+# author : Boris Kolpackov <boris@codesynthesis.com>
+# copyright : Copyright (c) 2006-2009 Code Synthesis Tools CC
+# license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make
+
+xsd := test.xsd
+cxx := driver.cxx
+
+obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=-sskel.o))
+dep := $(obj:.o=.o.d)
+
+xsde.l := $(out_root)/libxsde/xsde/xsde.l
+xsde.l.cpp-options := $(out_root)/libxsde/xsde/xsde.l.cpp-options
+
+driver := $(out_base)/driver
+test := $(out_base)/.test
+clean := $(out_base)/.clean
+
+
+# Build.
+#
+$(driver): $(obj) $(xsde.l)
+
+$(obj) $(dep): $(xsde.l.cpp-options)
+
+skel := $(out_base)/$(xsd:.xsd=-sskel.hxx) \
+ $(out_base)/$(xsd:.xsd=-sskel.ixx) \
+ $(out_base)/$(xsd:.xsd=-sskel.cxx)
+
+$(skel): xsde := $(out_root)/xsde/xsde
+$(skel): $(out_root)/xsde/xsde
+
+$(call include-dep,$(dep))
+
+# Convenience alias for default target.
+#
+.PHONY: $(out_base)/
+$(out_base)/: $(driver)
+
+
+# Test.
+#
+.PHONY: $(test)
+
+$(test): driver := $(driver)
+
+ifeq ($(xsde_longlong),y)
+$(test): $(driver) $(src_base)/output-long-long
+ $(call message,test $$1,$$1 | diff -u $(src_base)/output-long-long -,$(driver))
+else
+$(test): $(driver) $(src_base)/output-long
+ $(call message,test $$1,$$1 | diff -u $(src_base)/output-long -,$(driver))
+endif
+
+
+# Clean.
+#
+.PHONY: $(clean)
+
+$(clean): $(driver).o.clean \
+ $(addsuffix .cxx.clean,$(obj)) \
+ $(addsuffix .cxx.clean,$(dep)) \
+ $(addprefix $(out_base)/,$(xsd:.xsd=-sskel.cxx.xsd.clean))
+
+
+# How to.
+#
+$(call include,$(bld_root)/cxx/o-e.make)
+$(call include,$(bld_root)/cxx/cxx-o.make)
+$(call include,$(bld_root)/cxx/cxx-d.make)
+$(call include,$(scf_root)/xsde/serializer/xsd-cxx.make)
+
+
+# Dependencies.
+#
+$(call import,$(src_root)/xsde/makefile)
+$(call import,$(src_root)/libxsde/xsde/makefile)
diff --git a/tests/cxx/serializer/built-in/output-long b/tests/cxx/serializer/built-in/output-long
new file mode 100644
index 0000000..7333c2d
--- /dev/null
+++ b/tests/cxx/serializer/built-in/output-long
@@ -0,0 +1,13 @@
+<g1:root xmlns:g1="test"><any-type foo="one" g1:foo="two"><g1:inner>hello</g1:inner></any-type><any-simple-type>hello</any-simple-type><boolean>true</boolean><boolean>false</boolean><byte>-128</byte><byte>-123</byte><byte>0</byte><byte>127</byte><unsigned-byte>0</unsigned-byte><unsigned-byte>123</unsigned-byte><unsigned-byte>255</unsigned-byte><short>-32768</short><short>-12345</short><short>0</short><short>32767</short><unsigned-short>0</unsigned-short><unsigned-short>12345</unsigned-short><unsigned-short>65535</unsigned-short><int>-2147483648</int><int>-1234567890</int><int>0</int><int>2147483647</int><unsigned-int>0</unsigned-int><unsigned-int>1234567890</unsigned-int><unsigned-int>4294967295</unsigned-int><long>-2147483648</long><long>-1234567890</long><long>0</long><long>2147483647</long><unsigned-long>0</unsigned-long><unsigned-long>1234567890</unsigned-long><unsigned-long>4294967295</unsigned-long><integer>-2147483648</integer><integer>-1234567890</integer><integer>0</integer><integer>2147483647</integer><negative-integer>-2147483648</negative-integer><negative-integer>-1234567890</negative-integer><non-positive-integer>-2147483648</non-positive-integer><non-positive-integer>-1234567890</non-positive-integer><non-positive-integer>0</non-positive-integer><positive-integer>1234567890</positive-integer><positive-integer>4294967295</positive-integer><non-negative-integer>0</non-negative-integer><non-negative-integer>1234567890</non-negative-integer><non-negative-integer>4294967295</non-negative-integer><float>INF</float><float>-INF</float><float>NaN</float><float>0</float><float>1</float><float>-1</float><float>123.567</float><float>-1.23567e+07</float><float>-4.5e-06</float><double>INF</double><double>-INF</double><double>NaN</double><double>0</double><double>1</double><double>-1</double><double>123.56789</double><double>-12356789000</double><double>-4.5e-06</double><decimal>0</decimal><decimal>1</decimal><decimal>-1</decimal><decimal>123.567890000000006</decimal><decimal>-123.567890000000006</decimal><string> test
+ string </string><normalized-string>test normalized string</normalized-string><token>test token</token><name>as123:345-.abs</name><nmtoken>1as123:345-.abs</nmtoken><nmtokens>one</nmtokens><nmtokens>one two three</nmtokens><ncname>as123_345-.abs</ncname><id>as123_345-.abs</id><id>one</id><id>two</id><id>three</id><idref>as123_345-.abs</idref><idrefs>one</idrefs><idrefs>two three</idrefs><language>en-us</language><uri>http://www.example.com/foo#bar</uri><qname>g1:qname</qname><qname>qname</qname><base64_binary></base64_binary><base64_binary>MTIzNDVhYmNqaw==
+</base64_binary><base64_binary>YQ==
+</base64_binary><base64_binary>YWI=
+</base64_binary><base64_binary>YWJj
+</base64_binary><base64_binary>AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4
+OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3Bx
+cnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmq
+q6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj
+5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/wABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhsc
+HR4fICEiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RV
+VldY
+</base64_binary><hex_binary></hex_binary><hex_binary>31323334356162636A6B</hex_binary><hex_binary>000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758</hex_binary><gday>---23</gday><gday>---31+02:30</gday><gday>---15Z</gday><gmonth>--06</gmonth><gmonth>--12+02:30</gmonth><gyear>2007</gyear><gyear>-2007-02:30</gyear><gmonth_day>--06-15</gmonth_day><gmonth_day>--12-31+02:30</gmonth_day><gyear_month>2007-10</gyear_month><gyear_month>-2007-12-02:30</gyear_month><date>2007-06-15</date><date>-2007-12-31-02:30</date><time>12:30:30</time><time>23:59:59.55+02:30</time><date_time>2007-06-15T12:30:30</date_time><date_time>-2007-12-31T23:59:59.55-02:30</date_time><duration>P1Y</duration><duration>-P1M</duration><duration>P1D</duration><duration>-PT1H</duration><duration>PT1M</duration><duration>-PT1.1S</duration><duration>P1Y2M3DT4H5M6.7S</duration></g1:root> \ No newline at end of file
diff --git a/tests/cxx/serializer/built-in/output-long-long b/tests/cxx/serializer/built-in/output-long-long
new file mode 100644
index 0000000..b0f36cc
--- /dev/null
+++ b/tests/cxx/serializer/built-in/output-long-long
@@ -0,0 +1,13 @@
+<g1:root xmlns:g1="test"><any-type foo="one" g1:foo="two"><g1:inner>hello</g1:inner></any-type><any-simple-type>hello</any-simple-type><boolean>true</boolean><boolean>false</boolean><byte>-128</byte><byte>-123</byte><byte>0</byte><byte>127</byte><unsigned-byte>0</unsigned-byte><unsigned-byte>123</unsigned-byte><unsigned-byte>255</unsigned-byte><short>-32768</short><short>-12345</short><short>0</short><short>32767</short><unsigned-short>0</unsigned-short><unsigned-short>12345</unsigned-short><unsigned-short>65535</unsigned-short><int>-2147483648</int><int>-1234567890</int><int>0</int><int>2147483647</int><unsigned-int>0</unsigned-int><unsigned-int>1234567890</unsigned-int><unsigned-int>4294967295</unsigned-int><long>-9223372036854775808</long><long>-1234567890123456789</long><long>0</long><long>9223372036854775807</long><unsigned-long>0</unsigned-long><unsigned-long>12345678901234567890</unsigned-long><unsigned-long>18446744073709551615</unsigned-long><integer>-2147483648</integer><integer>-1234567890</integer><integer>0</integer><integer>2147483647</integer><negative-integer>-2147483648</negative-integer><negative-integer>-1234567890</negative-integer><non-positive-integer>-2147483648</non-positive-integer><non-positive-integer>-1234567890</non-positive-integer><non-positive-integer>0</non-positive-integer><positive-integer>1234567890</positive-integer><positive-integer>4294967295</positive-integer><non-negative-integer>0</non-negative-integer><non-negative-integer>1234567890</non-negative-integer><non-negative-integer>4294967295</non-negative-integer><float>INF</float><float>-INF</float><float>NaN</float><float>0</float><float>1</float><float>-1</float><float>123.567</float><float>-1.23567e+07</float><float>-4.5e-06</float><double>INF</double><double>-INF</double><double>NaN</double><double>0</double><double>1</double><double>-1</double><double>123.56789</double><double>-12356789000</double><double>-4.5e-06</double><decimal>0</decimal><decimal>1</decimal><decimal>-1</decimal><decimal>123.567890000000006</decimal><decimal>-123.567890000000006</decimal><string> test
+ string </string><normalized-string>test normalized string</normalized-string><token>test token</token><name>as123:345-.abs</name><nmtoken>1as123:345-.abs</nmtoken><nmtokens>one</nmtokens><nmtokens>one two three</nmtokens><ncname>as123_345-.abs</ncname><id>as123_345-.abs</id><id>one</id><id>two</id><id>three</id><idref>as123_345-.abs</idref><idrefs>one</idrefs><idrefs>two three</idrefs><language>en-us</language><uri>http://www.example.com/foo#bar</uri><qname>g1:qname</qname><qname>qname</qname><base64_binary></base64_binary><base64_binary>MTIzNDVhYmNqaw==
+</base64_binary><base64_binary>YQ==
+</base64_binary><base64_binary>YWI=
+</base64_binary><base64_binary>YWJj
+</base64_binary><base64_binary>AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4
+OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3Bx
+cnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmq
+q6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj
+5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/wABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhsc
+HR4fICEiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RV
+VldY
+</base64_binary><hex_binary></hex_binary><hex_binary>31323334356162636A6B</hex_binary><hex_binary>000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758</hex_binary><gday>---23</gday><gday>---31+02:30</gday><gday>---15Z</gday><gmonth>--06</gmonth><gmonth>--12+02:30</gmonth><gyear>2007</gyear><gyear>-2007-02:30</gyear><gmonth_day>--06-15</gmonth_day><gmonth_day>--12-31+02:30</gmonth_day><gyear_month>2007-10</gyear_month><gyear_month>-2007-12-02:30</gyear_month><date>2007-06-15</date><date>-2007-12-31-02:30</date><time>12:30:30</time><time>23:59:59.55+02:30</time><date_time>2007-06-15T12:30:30</date_time><date_time>-2007-12-31T23:59:59.55-02:30</date_time><duration>P1Y</duration><duration>-P1M</duration><duration>P1D</duration><duration>-PT1H</duration><duration>PT1M</duration><duration>-PT1.1S</duration><duration>P1Y2M3DT4H5M6.7S</duration></g1:root> \ No newline at end of file
diff --git a/tests/cxx/serializer/built-in/test.xsd b/tests/cxx/serializer/built-in/test.xsd
new file mode 100644
index 0000000..070e62d
--- /dev/null
+++ b/tests/cxx/serializer/built-in/test.xsd
@@ -0,0 +1,64 @@
+<?xml version="1.0"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test">
+
+ <complexType name="root">
+ <sequence>
+ <element name="any-type" type="anyType"/>
+ <element name="any-simple-type" type="anySimpleType"/>
+
+ <element name="boolean" type="boolean" maxOccurs="unbounded"/>
+ <element name="byte" type="byte" maxOccurs="unbounded"/>
+ <element name="unsigned-byte" type="unsignedByte" maxOccurs="unbounded"/>
+ <element name="short" type="short" maxOccurs="unbounded"/>
+ <element name="unsigned-short" type="unsignedShort" maxOccurs="unbounded"/>
+ <element name="int" type="int" maxOccurs="unbounded"/>
+ <element name="unsigned-int" type="unsignedInt" maxOccurs="unbounded"/>
+
+ <element name="long" type="long" maxOccurs="unbounded"/>
+ <element name="unsigned-long" type="unsignedLong" maxOccurs="unbounded"/>
+
+
+ <element name="integer" type="integer" maxOccurs="unbounded"/>
+ <element name="negative-integer" type="negativeInteger" maxOccurs="unbounded"/>
+ <element name="non-positive-integer" type="nonPositiveInteger" maxOccurs="unbounded"/>
+ <element name="positive-integer" type="positiveInteger" maxOccurs="unbounded"/>
+ <element name="non-negative-integer" type="nonNegativeInteger" maxOccurs="unbounded"/>
+
+ <element name="float" type="float" maxOccurs="unbounded"/>
+ <element name="double" type="double" maxOccurs="unbounded"/>
+ <element name="decimal" type="decimal" maxOccurs="unbounded"/>
+
+ <element name="string" type="string" maxOccurs="unbounded"/>
+ <element name="normalized-string" type="normalizedString" maxOccurs="unbounded"/>
+ <element name="token" type="token" maxOccurs="unbounded"/>
+ <element name="name" type="Name" maxOccurs="unbounded"/>
+ <element name="nmtoken" type="NMTOKEN" maxOccurs="unbounded"/>
+ <element name="nmtokens" type="NMTOKENS" maxOccurs="unbounded"/>
+ <element name="ncname" type="NCName" maxOccurs="unbounded"/>
+ <element name="id" type="ID" maxOccurs="unbounded"/>
+ <element name="idref" type="IDREF" maxOccurs="unbounded"/>
+ <element name="idrefs" type="IDREFS" maxOccurs="unbounded"/>
+
+ <element name="language" type="language" maxOccurs="unbounded"/>
+ <element name="uri" type="anyURI" maxOccurs="unbounded"/>
+ <element name="qname" type="QName" maxOccurs="unbounded"/>
+
+ <element name="base64_binary" type="base64Binary" maxOccurs="unbounded"/>
+ <element name="hex_binary" type="hexBinary" maxOccurs="unbounded"/>
+
+ <element name="gday" type="gDay" maxOccurs="unbounded"/>
+ <element name="gmonth" type="gMonth" maxOccurs="unbounded"/>
+ <element name="gyear" type="gYear" maxOccurs="unbounded"/>
+ <element name="gmonth_day" type="gMonthDay" maxOccurs="unbounded"/>
+ <element name="gyear_month" type="gYearMonth" maxOccurs="unbounded"/>
+ <element name="date" type="date" maxOccurs="unbounded"/>
+ <element name="time" type="time" maxOccurs="unbounded"/>
+ <element name="date_time" type="dateTime" maxOccurs="unbounded"/>
+ <element name="duration" type="duration" maxOccurs="unbounded"/>
+
+ </sequence>
+ </complexType>
+
+ <element name="root" type="t:root"/>
+
+</schema>