1f6b12674842bd3f2b58ab354e42813ed71dd8b9
[platform/framework/web/crosswalk.git] / src / third_party / libc++ / trunk / test / input.output / iostream.format / quoted.manip / quoted.pass.cpp
1 //===----------------------------------------------------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 // <iomanip>
11
12 // quoted
13
14 #include <iomanip>
15 #include <sstream>
16 #include <string>
17 #include <cassert>
18
19 #if _LIBCPP_STD_VER > 11
20
21 bool is_skipws ( const std::istream *is ) {
22     return ( is->flags() & std::ios_base::skipws ) != 0;
23     }
24
25
26 bool is_skipws ( const std::wistream *is ) {
27     return ( is->flags() & std::ios_base::skipws ) != 0;
28     }
29
30 void both_ways ( const char *p ) {
31         std::string str(p);
32         auto q = std::quoted(str);
33
34     std::stringstream ss;
35     bool skippingws = is_skipws ( &ss );
36         ss << q;
37         ss >> q;
38     }
39
40 void round_trip ( const char *p ) {
41     std::stringstream ss;
42     bool skippingws = is_skipws ( &ss );
43     ss << std::quoted(p);
44     std::string s;
45     ss >> std::quoted(s);
46     assert ( s == p );
47     assert ( skippingws == is_skipws ( &ss ));
48     }
49
50 void round_trip_ws ( const char *p ) {
51     std::stringstream ss;
52     std::noskipws ( ss );
53     bool skippingws = is_skipws ( &ss );
54     ss << std::quoted(p);
55     std::string s;
56     ss >> std::quoted(s);
57     assert ( s == p );
58     assert ( skippingws == is_skipws ( &ss ));
59     }
60
61 void round_trip_d ( const char *p, char delim ) {
62     std::stringstream ss;
63     ss << std::quoted(p, delim);
64     std::string s;
65     ss >> std::quoted(s, delim);
66     assert ( s == p );
67     }
68
69 void round_trip_e ( const char *p, char escape ) {
70     std::stringstream ss;
71     ss << std::quoted(p, '"', escape );
72     std::string s;
73     ss >> std::quoted(s, '"', escape );
74     assert ( s == p );
75     }
76
77
78
79 std::string quote ( const char *p, char delim='"', char escape='\\' ) {
80     std::stringstream ss;
81     ss << std::quoted(p, delim, escape);
82     std::string s;
83     ss >> s;    // no quote
84     return s;
85 }
86
87 std::string unquote ( const char *p, char delim='"', char escape='\\' ) {
88     std::stringstream ss;
89     ss << p;
90     std::string s;
91     ss >> std::quoted(s, delim, escape);
92     return s;
93 }
94
95
96 void round_trip ( const wchar_t *p ) {
97     std::wstringstream ss;
98     bool skippingws = is_skipws ( &ss );
99     ss << std::quoted(p);
100     std::wstring s;
101     ss >> std::quoted(s);
102     assert ( s == p );
103     assert ( skippingws == is_skipws ( &ss ));
104     }
105     
106
107 void round_trip_ws ( const wchar_t *p ) {
108     std::wstringstream ss;
109     std::noskipws ( ss );
110     bool skippingws = is_skipws ( &ss );
111     ss << std::quoted(p);
112     std::wstring s;
113     ss >> std::quoted(s);
114     assert ( s == p );
115     assert ( skippingws == is_skipws ( &ss ));
116     }
117
118 void round_trip_d ( const wchar_t *p, wchar_t delim ) {
119     std::wstringstream ss;
120     ss << std::quoted(p, delim);
121     std::wstring s;
122     ss >> std::quoted(s, delim);
123     assert ( s == p );
124     }
125
126 void round_trip_e ( const wchar_t *p, wchar_t escape ) {
127     std::wstringstream ss;
128     ss << std::quoted(p, wchar_t('"'), escape );
129     std::wstring s;
130     ss >> std::quoted(s, wchar_t('"'), escape );
131     assert ( s == p );
132     }
133
134
135 std::wstring quote ( const wchar_t *p, wchar_t delim='"', wchar_t escape='\\' ) {
136     std::wstringstream ss;
137     ss << std::quoted(p, delim, escape);
138     std::wstring s;
139     ss >> s;    // no quote
140     return s;
141 }
142
143 std::wstring unquote ( const wchar_t *p, wchar_t delim='"', wchar_t escape='\\' ) {
144     std::wstringstream ss;
145     ss << p;
146     std::wstring s;
147     ss >> std::quoted(s, delim, escape);
148     return s;
149 }
150
151 int main()
152 {
153     both_ways ( "" );   // This is a compilation check
154
155     round_trip    (  "" );
156     round_trip_ws (  "" );
157     round_trip_d  (  "", 'q' );
158     round_trip_e  (  "", 'q' );
159     
160     round_trip    ( L"" );
161     round_trip_ws ( L"" );
162     round_trip_d  ( L"", 'q' );
163     round_trip_e  ( L"", 'q' );
164     
165     round_trip    (  "Hi" );
166     round_trip_ws (  "Hi" );
167     round_trip_d  (  "Hi", '!' );
168     round_trip_e  (  "Hi", '!' );
169     assert ( quote ( "Hi", '!' ) == "!Hi!" );
170     assert ( quote ( "Hi!", '!' ) == R"(!Hi\!!)" );
171     
172     round_trip    ( L"Hi" );
173     round_trip_ws ( L"Hi" );
174     round_trip_d  ( L"Hi", '!' );
175     round_trip_e  ( L"Hi", '!' );
176     assert ( quote ( L"Hi", '!' )  == L"!Hi!" );
177     assert ( quote ( L"Hi!", '!' ) == LR"(!Hi\!!)" );
178     
179     round_trip    (  "Hi Mom" );
180     round_trip_ws (  "Hi Mom" );
181     round_trip    ( L"Hi Mom" );
182     round_trip_ws ( L"Hi Mom" );
183     
184     assert ( quote (  "" )  ==  "\"\"" );
185     assert ( quote ( L"" )  == L"\"\"" );
186     assert ( quote (  "a" ) ==  "\"a\"" );
187     assert ( quote ( L"a" ) == L"\"a\"" );
188
189 //  missing end quote - must not hang
190     assert ( unquote (  "\"abc" ) ==  "abc" );
191     assert ( unquote ( L"\"abc" ) == L"abc" );
192     
193     assert ( unquote (  "abc" ) == "abc" ); // no delimiter
194     assert ( unquote ( L"abc" ) == L"abc" ); // no delimiter
195     assert ( unquote (  "abc def" ) ==  "abc" ); // no delimiter
196     assert ( unquote ( L"abc def" ) == L"abc" ); // no delimiter
197
198     assert ( unquote (  "" ) ==  "" ); // nothing there
199     assert ( unquote ( L"" ) == L"" ); // nothing there
200     }
201
202 #else
203 int main() {}
204 #endif