summaryrefslogtreecommitdiff
path: root/test/std/input.output/iostream.format/quoted.manip/quoted.pass.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/std/input.output/iostream.format/quoted.manip/quoted.pass.cpp')
-rw-r--r--test/std/input.output/iostream.format/quoted.manip/quoted.pass.cpp165
1 files changed, 63 insertions, 102 deletions
diff --git a/test/std/input.output/iostream.format/quoted.manip/quoted.pass.cpp b/test/std/input.output/iostream.format/quoted.manip/quoted.pass.cpp
index d09b3cae4f66e..ee9aabcb6ac8e 100644
--- a/test/std/input.output/iostream.format/quoted.manip/quoted.pass.cpp
+++ b/test/std/input.output/iostream.format/quoted.manip/quoted.pass.cpp
@@ -16,79 +16,95 @@
#include <string>
#include <cassert>
-#if _LIBCPP_STD_VER > 11
-
-bool is_skipws ( const std::istream *is ) {
- return ( is->flags() & std::ios_base::skipws ) != 0;
- }
+#include "test_macros.h"
+#if TEST_STD_VER > 11
-bool is_skipws ( const std::wistream *is ) {
- return ( is->flags() & std::ios_base::skipws ) != 0;
+template <class CharT, class Traits>
+bool is_skipws ( const std::basic_istream<CharT, Traits>& is ) {
+ return ( is.flags() & std::ios_base::skipws ) != 0;
}
-void both_ways ( const char *p ) {
- std::string str(p);
+template <class CharT, class Traits = std::char_traits<CharT>>
+void both_ways ( const CharT *p ) {
+ std::basic_string<CharT, Traits> str(p);
auto q = std::quoted(str);
- std::stringstream ss;
- bool skippingws = is_skipws ( &ss );
+ std::basic_stringstream<CharT, Traits> ss;
+ bool skippingws = is_skipws ( ss );
ss << q;
ss >> q;
}
-void round_trip ( const char *p ) {
- std::stringstream ss;
- bool skippingws = is_skipws ( &ss );
+template <class CharT, class Traits = std::char_traits<CharT>>
+void round_trip ( const CharT *p ) {
+ std::basic_stringstream<CharT, Traits> ss;
+ bool skippingws = is_skipws ( ss );
+
ss << std::quoted(p);
- std::string s;
+ std::basic_string<CharT, Traits> s;
ss >> std::quoted(s);
assert ( s == p );
- assert ( skippingws == is_skipws ( &ss ));
+ assert ( skippingws == is_skipws ( ss ));
}
-void round_trip_ws ( const char *p ) {
- std::stringstream ss;
+
+template <class CharT, class Traits = std::char_traits<CharT>>
+void round_trip_ws ( const CharT *p ) {
+ std::basic_stringstream<CharT, Traits> ss;
std::noskipws ( ss );
- bool skippingws = is_skipws ( &ss );
+ bool skippingws = is_skipws ( ss );
+
ss << std::quoted(p);
- std::string s;
+ std::basic_string<CharT, Traits> s;
ss >> std::quoted(s);
assert ( s == p );
- assert ( skippingws == is_skipws ( &ss ));
+ assert ( skippingws == is_skipws ( ss ));
}
-void round_trip_d ( const char *p, char delim ) {
- std::stringstream ss;
- ss << std::quoted(p, delim);
- std::string s;
- ss >> std::quoted(s, delim);
+template <class CharT, class Traits = std::char_traits<CharT>>
+void round_trip_d ( const CharT *p, char delim ) {
+ std::basic_stringstream<CharT, Traits> ss;
+ CharT d(delim);
+
+ ss << std::quoted(p, d);
+ std::basic_string<CharT, Traits> s;
+ ss >> std::quoted(s, d);
assert ( s == p );
}
-void round_trip_e ( const char *p, char escape ) {
- std::stringstream ss;
- ss << std::quoted(p, '"', escape );
- std::string s;
- ss >> std::quoted(s, '"', escape );
+template <class CharT, class Traits = std::char_traits<CharT>>
+void round_trip_e ( const CharT *p, char escape ) {
+ std::basic_stringstream<CharT, Traits> ss;
+ CharT e(escape);
+
+ ss << std::quoted(p, CharT('"'), e );
+ std::basic_string<CharT, Traits> s;
+ ss >> std::quoted(s, CharT('"'), e );
assert ( s == p );
}
-
-std::string quote ( const char *p, char delim='"', char escape='\\' ) {
- std::stringstream ss;
- ss << std::quoted(p, delim, escape);
- std::string s;
+template <class CharT, class Traits = std::char_traits<CharT>>
+std::basic_string<CharT, Traits> quote ( const CharT *p, char delim='"', char escape='\\' ) {
+ std::basic_stringstream<CharT, Traits> ss;
+ CharT d(delim);
+ CharT e(escape);
+ ss << std::quoted(p, d, e);
+ std::basic_string<CharT, Traits> s;
ss >> s; // no quote
return s;
}
-std::string unquote ( const char *p, char delim='"', char escape='\\' ) {
- std::stringstream ss;
+template <class CharT, class Traits = std::char_traits<CharT>>
+std::basic_string<CharT, Traits> unquote ( const CharT *p, char delim='"', char escape='\\' ) {
+ std::basic_stringstream<CharT, Traits> ss;
ss << p;
- std::string s;
- ss >> std::quoted(s, delim, escape);
+
+ CharT d(delim);
+ CharT e(escape);
+ std::basic_string<CharT, Traits> s;
+ ss >> std::quoted(s, d, e);
return s;
}
@@ -98,7 +114,7 @@ void test_padding () {
ss << std::left << std::setw(10) << std::setfill('!') << std::quoted("abc", '`');
assert ( ss.str() == "`abc`!!!!!" );
}
-
+
{
std::stringstream ss;
ss << std::right << std::setw(10) << std::setfill('!') << std::quoted("abc", '`');
@@ -107,61 +123,6 @@ void test_padding () {
}
-void round_trip ( const wchar_t *p ) {
- std::wstringstream ss;
- bool skippingws = is_skipws ( &ss );
- ss << std::quoted(p);
- std::wstring s;
- ss >> std::quoted(s);
- assert ( s == p );
- assert ( skippingws == is_skipws ( &ss ));
- }
-
-
-void round_trip_ws ( const wchar_t *p ) {
- std::wstringstream ss;
- std::noskipws ( ss );
- bool skippingws = is_skipws ( &ss );
- ss << std::quoted(p);
- std::wstring s;
- ss >> std::quoted(s);
- assert ( s == p );
- assert ( skippingws == is_skipws ( &ss ));
- }
-
-void round_trip_d ( const wchar_t *p, wchar_t delim ) {
- std::wstringstream ss;
- ss << std::quoted(p, delim);
- std::wstring s;
- ss >> std::quoted(s, delim);
- assert ( s == p );
- }
-
-void round_trip_e ( const wchar_t *p, wchar_t escape ) {
- std::wstringstream ss;
- ss << std::quoted(p, wchar_t('"'), escape );
- std::wstring s;
- ss >> std::quoted(s, wchar_t('"'), escape );
- assert ( s == p );
- }
-
-
-std::wstring quote ( const wchar_t *p, wchar_t delim='"', wchar_t escape='\\' ) {
- std::wstringstream ss;
- ss << std::quoted(p, delim, escape);
- std::wstring s;
- ss >> s; // no quote
- return s;
-}
-
-std::wstring unquote ( const wchar_t *p, wchar_t delim='"', wchar_t escape='\\' ) {
- std::wstringstream ss;
- ss << p;
- std::wstring s;
- ss >> std::quoted(s, delim, escape);
- return s;
-}
-
int main()
{
both_ways ( "" ); // This is a compilation check
@@ -170,31 +131,31 @@ int main()
round_trip_ws ( "" );
round_trip_d ( "", 'q' );
round_trip_e ( "", 'q' );
-
+
round_trip ( L"" );
round_trip_ws ( L"" );
round_trip_d ( L"", 'q' );
round_trip_e ( L"", 'q' );
-
+
round_trip ( "Hi" );
round_trip_ws ( "Hi" );
round_trip_d ( "Hi", '!' );
round_trip_e ( "Hi", '!' );
assert ( quote ( "Hi", '!' ) == "!Hi!" );
assert ( quote ( "Hi!", '!' ) == R"(!Hi\!!)" );
-
+
round_trip ( L"Hi" );
round_trip_ws ( L"Hi" );
round_trip_d ( L"Hi", '!' );
round_trip_e ( L"Hi", '!' );
assert ( quote ( L"Hi", '!' ) == L"!Hi!" );
assert ( quote ( L"Hi!", '!' ) == LR"(!Hi\!!)" );
-
+
round_trip ( "Hi Mom" );
round_trip_ws ( "Hi Mom" );
round_trip ( L"Hi Mom" );
round_trip_ws ( L"Hi Mom" );
-
+
assert ( quote ( "" ) == "\"\"" );
assert ( quote ( L"" ) == L"\"\"" );
assert ( quote ( "a" ) == "\"a\"" );
@@ -203,7 +164,7 @@ int main()
// missing end quote - must not hang
assert ( unquote ( "\"abc" ) == "abc" );
assert ( unquote ( L"\"abc" ) == L"abc" );
-
+
assert ( unquote ( "abc" ) == "abc" ); // no delimiter
assert ( unquote ( L"abc" ) == L"abc" ); // no delimiter
assert ( unquote ( "abc def" ) == "abc" ); // no delimiter