// Boost string_algo library find_format_test.cpp file ------------------// // Copyright (c) 2009 Steven Watanabe // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #include #include #include // Include unit test framework #define BOOST_TEST_MAIN #include #include // We're only using const_formatter. template struct formatter_result { typedef boost::iterator_range type; }; template struct checked_formatter { public: checked_formatter(const Formatter& formatter) : formatter_(formatter) {} template< typename T > typename formatter_result::type operator()( const T & s ) const { BOOST_CHECK( !s.empty() ); return formatter_(s); } private: Formatter formatter_; }; template checked_formatter make_checked_formatter(const Formatter& formatter) { return checked_formatter(formatter); } void find_format_test() { const std::string source = "$replace $replace"; std::string expected = "ok $replace"; std::string output(80, '\0'); std::string::iterator pos = boost::find_format_copy( output.begin(), source, boost::first_finder("$replace"), make_checked_formatter(boost::const_formatter("ok"))); BOOST_CHECK(pos == output.begin() + expected.size()); output.erase(std::remove(output.begin(), output.end(), '\0'), output.end()); BOOST_CHECK_EQUAL(output, expected); output = boost::find_format_copy( source, boost::first_finder("$replace"), make_checked_formatter(boost::const_formatter("ok"))); BOOST_CHECK_EQUAL(output, expected); // now try finding a string that doesn't exist output.resize(80); pos = boost::find_format_copy( output.begin(), source, boost::first_finder("$noreplace"), make_checked_formatter(boost::const_formatter("bad"))); BOOST_CHECK(pos == output.begin() + source.size()); output.erase(std::remove(output.begin(), output.end(), '\0'), output.end()); BOOST_CHECK_EQUAL(output, source); output = boost::find_format_copy( source, boost::first_finder("$noreplace"), make_checked_formatter(boost::const_formatter("bad"))); BOOST_CHECK_EQUAL(output, source); // in place version output = source; boost::find_format( output, boost::first_finder("$replace"), make_checked_formatter(boost::const_formatter("ok"))); BOOST_CHECK_EQUAL(output, expected); output = source; boost::find_format( output, boost::first_finder("$noreplace"), make_checked_formatter(boost::const_formatter("bad"))); BOOST_CHECK_EQUAL(output, source); } void find_format_all_test() { const std::string source = "$replace $replace"; std::string expected = "ok ok"; std::string output(80, '\0'); std::string::iterator pos = boost::find_format_all_copy(output.begin(), source, boost::first_finder("$replace"), boost::const_formatter("ok")); BOOST_CHECK(pos == output.begin() + expected.size()); output.erase(std::remove(output.begin(), output.end(), '\0'), output.end()); BOOST_CHECK_EQUAL(output, expected); output = boost::find_format_all_copy( source, boost::first_finder("$replace"), make_checked_formatter(boost::const_formatter("ok"))); BOOST_CHECK_EQUAL(output, expected); // now try finding a string that doesn't exist output.resize(80); pos = boost::find_format_all_copy( output.begin(), source, boost::first_finder("$noreplace"), make_checked_formatter(boost::const_formatter("bad"))); BOOST_CHECK(pos == output.begin() + source.size()); output.erase(std::remove(output.begin(), output.end(), '\0'), output.end()); BOOST_CHECK_EQUAL(output, source); output = boost::find_format_all_copy( source, boost::first_finder("$noreplace"), make_checked_formatter(boost::const_formatter("bad"))); BOOST_CHECK_EQUAL(output, source); // in place version output = source; boost::find_format_all( output, boost::first_finder("$replace"), make_checked_formatter(boost::const_formatter("ok"))); BOOST_CHECK_EQUAL(output, expected); output = source; boost::find_format_all( output, boost::first_finder("$noreplace"), make_checked_formatter(boost::const_formatter("bad"))); BOOST_CHECK_EQUAL(output, source); } BOOST_AUTO_TEST_CASE( test_main ) { find_format_test(); find_format_all_test(); }