driver.cxx 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. // file : tests/serializer/driver.cxx
  2. // copyright : Copyright (c) 2013-2014 Code Synthesis Tools CC
  3. // license : MIT; see accompanying LICENSE file
  4. #ifdef NDEBUG
  5. # error tests require enabled assert(); un-define the NDEBUG macro
  6. #endif
  7. #include <string>
  8. #include <cassert>
  9. #include <iostream>
  10. #include <sstream>
  11. #include <xml/serializer>
  12. using namespace std;
  13. using namespace xml;
  14. int
  15. main ()
  16. {
  17. // Test error handling.
  18. //
  19. try
  20. {
  21. ostringstream os;
  22. serializer s (os, "test");
  23. s.attribute ("foo", "bar");
  24. assert (false);
  25. }
  26. catch (const xml::exception&)
  27. {
  28. // cerr << e.what () << endl;
  29. }
  30. try
  31. {
  32. ostringstream os;
  33. os.exceptions (ios_base::badbit | ios_base::failbit);
  34. serializer s (os, "test");
  35. s.start_element ("root");
  36. s.characters ("one");
  37. os.setstate (ios_base::badbit);
  38. s.characters ("two");
  39. assert (false);
  40. }
  41. catch (const ios_base::failure&)
  42. {
  43. }
  44. // Test value serialization.
  45. //
  46. {
  47. ostringstream os;
  48. serializer s (os, "test", 0);
  49. s.start_element ("root");
  50. s.attribute ("version", 123);
  51. s.characters (true);
  52. s.end_element ();
  53. assert (os.str () == "<root version=\"123\">true</root>\n");
  54. }
  55. // Test helpers for serializing elements with simple content.
  56. //
  57. {
  58. ostringstream os;
  59. serializer s (os, "element", 0);
  60. s.start_element ("root");
  61. s.start_element ("nested");
  62. s.element ("X");
  63. s.start_element ("nested");
  64. s.element (123);
  65. s.element ("nested", "X");
  66. s.element ("nested", 123);
  67. s.element ("test", "nested", "X");
  68. s.element ("test", "nested", 123);
  69. s.element (qname ("test", "nested"), "X");
  70. s.element (qname ("test", "nested"), 123);
  71. s.end_element (); // root
  72. assert (os.str () ==
  73. "<root>"
  74. "<nested>X</nested>"
  75. "<nested>123</nested>"
  76. "<nested>X</nested>"
  77. "<nested>123</nested>"
  78. "<g1:nested xmlns:g1=\"test\">X</g1:nested>"
  79. "<g1:nested xmlns:g1=\"test\">123</g1:nested>"
  80. "<g1:nested xmlns:g1=\"test\">X</g1:nested>"
  81. "<g1:nested xmlns:g1=\"test\">123</g1:nested>"
  82. "</root>\n");
  83. }
  84. }