aboutsummaryrefslogtreecommitdiff
path: root/tests/cxx/serializer/recursive/driver.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'tests/cxx/serializer/recursive/driver.cxx')
-rw-r--r--tests/cxx/serializer/recursive/driver.cxx135
1 files changed, 135 insertions, 0 deletions
diff --git a/tests/cxx/serializer/recursive/driver.cxx b/tests/cxx/serializer/recursive/driver.cxx
new file mode 100644
index 0000000..c474191
--- /dev/null
+++ b/tests/cxx/serializer/recursive/driver.cxx
@@ -0,0 +1,135 @@
+// file : tests/cxx/serializer/recursive/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 recursive type serialization.
+//
+
+#include <iostream>
+
+#include "test-sskel.hxx"
+
+using namespace std;
+
+struct sub_type_simpl: virtual sub_type_sskel
+{
+ sub_type_simpl ()
+ : n_ (0)
+ {
+ }
+
+ virtual void
+ pre ()
+ {
+ n_++;
+ }
+
+ // Attributes.
+ //
+ virtual bool
+ name_present ()
+ {
+ return true;
+ }
+
+ virtual int
+ name ()
+ {
+ return n_;
+ }
+
+ // Elements.
+ //
+ virtual bool
+ sub_present ()
+ {
+ return n_ == 1;
+ }
+
+ virtual bool
+ indir_present ()
+ {
+ return n_ == 1;
+ }
+
+ virtual bool
+ sub2_present ()
+ {
+ return n_ == 1;
+ }
+
+ virtual void
+ post ()
+ {
+ n_--;
+ }
+
+private:
+ int n_;
+};
+
+struct indir_type_simpl: virtual indir_type_sskel
+{
+ // Attributes.
+ //
+ virtual bool
+ name_present ()
+ {
+ return true;
+ }
+
+ virtual int
+ name ()
+ {
+ return 123;
+ }
+
+ // Elements.
+ //
+ virtual bool
+ sub_present ()
+ {
+ return true;
+ }
+};
+
+struct test_type_simpl: virtual test_type_sskel
+{
+ // Attributes.
+ //
+ virtual bool
+ name_present ()
+ {
+ return true;
+ }
+
+ virtual int
+ name ()
+ {
+ return 234;
+ }
+};
+
+int
+main ()
+{
+ xml_schema::int_simpl int_s;
+ sub_type_simpl sub_s;
+ indir_type_simpl indir_s;
+ test_type_simpl test_s;
+
+ sub_s.serializers (int_s, sub_s, indir_s, sub_s);
+ indir_s.serializers (int_s, sub_s);
+ test_s.serializers (int_s, sub_s);
+
+ xml_schema::document_simpl doc_s (test_s, "test", "root");
+
+ test_s.pre ();
+ doc_s.serialize (cout);
+ test_s.post ();
+
+ // Test serializer resetting.
+ //
+ doc_s.reset ();
+}