summaryrefslogtreecommitdiff
path: root/libxsd-tests/cxx/parser/xerces/basic/driver.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'libxsd-tests/cxx/parser/xerces/basic/driver.cxx')
-rw-r--r--libxsd-tests/cxx/parser/xerces/basic/driver.cxx54
1 files changed, 33 insertions, 21 deletions
diff --git a/libxsd-tests/cxx/parser/xerces/basic/driver.cxx b/libxsd-tests/cxx/parser/xerces/basic/driver.cxx
index b7dfd1d..36748a0 100644
--- a/libxsd-tests/cxx/parser/xerces/basic/driver.cxx
+++ b/libxsd-tests/cxx/parser/xerces/basic/driver.cxx
@@ -1,7 +1,7 @@
// file : cxx/parser/xerces/basic/driver.cxx
// copyright : GNU GPL v2 + exceptions; see accompanying LICENSE file
-#include <cassert>
+#include <ios>
#include <iostream>
// Define XSD_CXX11 since we include libxsd headers directly.
@@ -25,6 +25,9 @@
#include <xsd/cxx/parser/non-validating/xml-schema-pskel.hxx>
#include <xsd/cxx/parser/non-validating/xml-schema-pimpl.hxx>
+#undef NDEBUG
+#include <cassert>
+
using namespace std;
using namespace xsd::cxx;
@@ -34,8 +37,8 @@ class hello_pimpl: public parser::non_validating::complex_content<char>
{
public:
hello_pimpl (string_pskel& greeting, string_pskel& name)
- : greeting_parser_ (&greeting),
- name_parser_ (&name) {}
+ : greeting_parser_ (greeting),
+ name_parser_ (name) {}
private:
virtual bool
@@ -46,8 +49,8 @@ private:
virtual bool
_end_element_impl (const ro_string<char>&, const ro_string<char>&);
- string_pskel* greeting_parser_;
- string_pskel* name_parser_;
+ string_pskel& greeting_parser_;
+ string_pskel& name_parser_;
};
bool hello_pimpl::
@@ -62,21 +65,15 @@ _start_element_impl (const ro_string<char>& ns,
if (n == "greeting" && ns.empty ())
{
- context_.top ().parser_ = greeting_parser_;
-
- if (greeting_parser_)
- greeting_parser_->pre ();
-
+ context_.top ().parser_ = &greeting_parser_;
+ greeting_parser_.pre ();
return true;
}
if (n == "name" && ns.empty ())
{
- context_.top ().parser_ = name_parser_;
-
- if (name_parser_)
- name_parser_->pre ();
-
+ context_.top ().parser_ = &name_parser_;
+ name_parser_.pre ();
return true;
}
@@ -91,13 +88,13 @@ _end_element_impl (const ro_string<char>& ns, const ro_string<char>& n)
if (n == "greeting" && ns.empty ())
{
- cout << n << ' ' << greeting_parser_->post_string () << endl;
+ cout << n << ' ' << greeting_parser_.post_string () << endl;
return true;
}
if (n == "name" && ns.empty ())
{
- cout << n << ' ' << name_parser_->post_string () << endl;
+ cout << n << ' ' << name_parser_.post_string () << endl;
return true;
}
@@ -115,10 +112,25 @@ main (int argc, char* argv[])
{
assert (argc == 2);
- parser::non_validating::string_pimpl<char> string_p;
- hello_pimpl hello_p (string_p, string_p);
+ try
+ {
+ parser::non_validating::string_pimpl<char> string_p;
+ hello_pimpl hello_p (string_p, string_p);
+
+ parser::xerces::document<char> doc_p (hello_p, "hello");
- parser::xerces::document<char> doc_p (hello_p, "hello");
+ doc_p.parse (argv[1]);
+ }
+ catch (const parser::exception<char>& e)
+ {
+ cerr << e << endl;
+ return 1;
+ }
+ catch (const ios_base::failure&)
+ {
+ cerr << argv[1] << ": unable to open or read failure" << endl;
+ return 1;
+ }
- doc_p.parse (argv[1]);
+ return 0;
}