Chris@16
|
1 // (C) Copyright Gennadiy Rozental 2004-2008.
|
Chris@16
|
2 // Distributed under the Boost Software License, Version 1.0.
|
Chris@16
|
3 // (See accompanying file LICENSE_1_0.txt or copy at
|
Chris@16
|
4 // http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
5
|
Chris@16
|
6 // See http://www.boost.org/libs/test for the library home page.
|
Chris@16
|
7 //
|
Chris@16
|
8 // File : $RCSfile$
|
Chris@16
|
9 //
|
Chris@101
|
10 // Version : $Revision$
|
Chris@16
|
11 //
|
Chris@16
|
12 // Description : common code used by any agent serving as XML printer
|
Chris@16
|
13 // ***************************************************************************
|
Chris@16
|
14
|
Chris@16
|
15 #ifndef BOOST_TEST_XML_PRINTER_HPP_071894GER
|
Chris@16
|
16 #define BOOST_TEST_XML_PRINTER_HPP_071894GER
|
Chris@16
|
17
|
Chris@16
|
18 // Boost.Test
|
Chris@16
|
19 #include <boost/test/utils/basic_cstring/basic_cstring.hpp>
|
Chris@16
|
20 #include <boost/test/utils/fixed_mapping.hpp>
|
Chris@16
|
21 #include <boost/test/utils/custom_manip.hpp>
|
Chris@16
|
22 #include <boost/test/utils/foreach.hpp>
|
Chris@16
|
23 #include <boost/test/utils/basic_cstring/io.hpp>
|
Chris@16
|
24
|
Chris@16
|
25 // Boost
|
Chris@16
|
26 #include <boost/config.hpp>
|
Chris@16
|
27
|
Chris@16
|
28 // STL
|
Chris@16
|
29 #include <iostream>
|
Chris@16
|
30
|
Chris@16
|
31 #include <boost/test/detail/suppress_warnings.hpp>
|
Chris@16
|
32
|
Chris@16
|
33 //____________________________________________________________________________//
|
Chris@16
|
34
|
Chris@16
|
35 namespace boost {
|
Chris@16
|
36
|
Chris@16
|
37 namespace unit_test {
|
Chris@16
|
38
|
Chris@16
|
39 // ************************************************************************** //
|
Chris@16
|
40 // ************** xml print helpers ************** //
|
Chris@16
|
41 // ************************************************************************** //
|
Chris@16
|
42
|
Chris@16
|
43 inline void
|
Chris@16
|
44 print_escaped( std::ostream& where_to, const_string value )
|
Chris@16
|
45 {
|
Chris@16
|
46 static fixed_mapping<char,char const*> char_type(
|
Chris@16
|
47 '<' , "lt",
|
Chris@16
|
48 '>' , "gt",
|
Chris@16
|
49 '&' , "amp",
|
Chris@16
|
50 '\'', "apos" ,
|
Chris@16
|
51 '"' , "quot",
|
Chris@16
|
52
|
Chris@16
|
53 0
|
Chris@16
|
54 );
|
Chris@16
|
55
|
Chris@16
|
56 BOOST_TEST_FOREACH( char, c, value ) {
|
Chris@16
|
57 char const* ref = char_type[c];
|
Chris@16
|
58
|
Chris@16
|
59 if( ref )
|
Chris@16
|
60 where_to << '&' << ref << ';';
|
Chris@16
|
61 else
|
Chris@16
|
62 where_to << c;
|
Chris@16
|
63 }
|
Chris@16
|
64 }
|
Chris@16
|
65
|
Chris@16
|
66 //____________________________________________________________________________//
|
Chris@16
|
67
|
Chris@16
|
68 inline void
|
Chris@16
|
69 print_escaped( std::ostream& where_to, std::string const& value )
|
Chris@16
|
70 {
|
Chris@16
|
71 print_escaped( where_to, const_string( value ) );
|
Chris@16
|
72 }
|
Chris@16
|
73
|
Chris@16
|
74 //____________________________________________________________________________//
|
Chris@16
|
75
|
Chris@16
|
76 template<typename T>
|
Chris@16
|
77 inline void
|
Chris@16
|
78 print_escaped( std::ostream& where_to, T const& value )
|
Chris@16
|
79 {
|
Chris@16
|
80 where_to << value;
|
Chris@16
|
81 }
|
Chris@16
|
82
|
Chris@16
|
83 //____________________________________________________________________________//
|
Chris@16
|
84
|
Chris@16
|
85 typedef custom_manip<struct attr_value_t> attr_value;
|
Chris@16
|
86
|
Chris@16
|
87 template<typename T>
|
Chris@16
|
88 inline std::ostream&
|
Chris@16
|
89 operator<<( custom_printer<attr_value> const& p, T const& value )
|
Chris@16
|
90 {
|
Chris@16
|
91 *p << "=\"";
|
Chris@16
|
92 print_escaped( *p, value );
|
Chris@16
|
93 *p << '"';
|
Chris@16
|
94
|
Chris@16
|
95 return *p;
|
Chris@16
|
96 }
|
Chris@16
|
97
|
Chris@16
|
98 //____________________________________________________________________________//
|
Chris@16
|
99
|
Chris@16
|
100 typedef custom_manip<struct cdata_t> cdata;
|
Chris@16
|
101
|
Chris@16
|
102 inline std::ostream&
|
Chris@16
|
103 operator<<( custom_printer<cdata> const& p, const_string value )
|
Chris@16
|
104 {
|
Chris@16
|
105 return *p << BOOST_TEST_L( "<![CDATA[" ) << value << BOOST_TEST_L( "]]>" );
|
Chris@16
|
106 }
|
Chris@16
|
107
|
Chris@16
|
108 //____________________________________________________________________________//
|
Chris@16
|
109
|
Chris@16
|
110 } // namespace unit_test
|
Chris@16
|
111
|
Chris@16
|
112 } // namespace boost
|
Chris@16
|
113
|
Chris@16
|
114 //____________________________________________________________________________//
|
Chris@16
|
115
|
Chris@16
|
116 #include <boost/test/detail/enable_warnings.hpp>
|
Chris@16
|
117
|
Chris@16
|
118 #endif // BOOST_TEST_XML_PRINTER_HPP_071894GER
|