blob: e9ef3f5fc3ca6d7832a91542743fdc2b1c862976 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
// file : tests/cxx/parser/polymorphism/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 substitution groups and xsi:type support.
//
#include <iostream>
#include "test-pskel.hxx"
using namespace std;
using namespace test;
struct base_pimpl: base_pskel
{
virtual void
a (int i)
{
cout << "a: " << i << endl;
}
};
struct interm_pimpl: interm_pskel
{
interm_pimpl ()
: interm_pskel (&base_impl_)
{
}
virtual void
b (int i)
{
cout << "b: " << i << endl;
}
base_pimpl base_impl_;
};
struct derived_pimpl: derived_pskel
{
derived_pimpl ()
: derived_pskel (&base_impl_)
{
}
virtual void
c (int i)
{
cout << "c: " << i << endl;
}
interm_pimpl base_impl_;
};
struct type_pimpl: type_pskel
{
};
int
main (int argc, char* argv[])
{
if (argc != 2)
{
cerr << "usage: " << argv[0] << " test.xml" << endl;
return 1;
}
#ifdef XSDE_EXCEPTIONS
try
{
#endif
xml_schema::int_pimpl int_p;
base_pimpl base_p;
interm_pimpl interm_p;
derived_pimpl derived_p;
xml_schema::parser_map_impl map (5);
type_pimpl type_p;
base_p.parsers (int_p);
interm_p.parsers (int_p, int_p);
derived_p.parsers (int_p, int_p, int_p);
map.insert (base_p);
map.insert (interm_p);
map.insert (derived_p);
type_p.base_parser (map);
xml_schema::document_pimpl doc_p (type_p, "test", "root", true);
type_p.pre ();
doc_p.parse (argv[1]);
#ifndef XSDE_EXCEPTIONS
if (doc_p._error ())
{
cerr << "error" << endl;
return 1;
}
#endif
type_p.post_type ();
// Test parser resetting.
//
doc_p.reset ();
#ifdef XSDE_EXCEPTIONS
}
catch (xml_schema::parser_exception const& e)
{
cerr << e << endl;
return 1;
}
catch (std::ios_base::failure const&)
{
cerr << "io failure" << endl;
return 1;
}
#endif
}
|