// libs/io/test/quote_manip_test.cpp ----------------------------------------------- // // Copyright Beman Dawes 2010 // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // Library home page: http://www.boost.org/libs/io // ---------------------------------------------------------------------------------- // #include #include #include #include using boost::io::quoted; using std::string; using std::wstring; int main() { std::wstringstream wss; string r; // test results const string s0("foo"); { std::stringstream ss; ss << quoted(s0); ss >> r; BOOST_TEST(r == "\"foo\""); } { std::stringstream ss; ss << quoted(s0); ss >> quoted(r); BOOST_TEST(r == "foo"); } const string s0s("foo bar"); { std::stringstream ss; ss << quoted(s0s); ss >> r; BOOST_TEST(r == "\"foo"); } { std::stringstream ss; ss << quoted(s0s); ss >> quoted(r); BOOST_TEST(r == "foo bar"); } const string s1("foo\\bar, \" *"); { std::stringstream ss; ss << quoted(s1); ss >> r; BOOST_TEST(r == "\"foo\\\\bar,"); } { std::stringstream ss; ss << quoted("foo\\bar, \" *"); ss >> r; BOOST_TEST(r == "\"foo\\\\bar,"); } { std::stringstream ss; ss << quoted(s1); ss >> quoted(r); BOOST_TEST(r == s1); } { std::stringstream ss; ss << quoted(s1.c_str()); ss >> quoted(r); BOOST_TEST(r == s1); } string s2("'Jack & Jill'"); { std::stringstream ss; ss << quoted(s2, '&', '\''); ss >> quoted(r, '&', '\''); BOOST_TEST(r == s2); } wstring ws1(L"foo$bar, \" *"); wstring wr; // test results { std::wstringstream wss; wss << quoted(ws1, L'$'); wss >> quoted(wr, L'$'); BOOST_TEST(wr == ws1); } const string s3("const string"); { std::stringstream ss; ss << quoted(s3); ss >> quoted(r); BOOST_TEST(r == s3); } { // missing end delimiter test std::stringstream ss; ss << "\"abc"; // load ss with faulty quoting ss >> quoted(r); // this loops if istream error/eof not detected BOOST_TEST(r == "abc"); } { // no initial delmiter test std::stringstream ss; ss << "abc"; ss >> quoted(r); BOOST_TEST(r == "abc"); } { // no initial delmiter, space in ss std::stringstream ss; ss << "abc def"; ss >> quoted(r); BOOST_TEST(r == "abc"); } // these should fail to compile because the arguments are const: // ss >> quoted(s1); // ss >> quoted("foo"); return boost::report_errors(); }