forked from boostorg/algorithm
		
	
		
			
				
	
	
		
			163 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			163 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
//  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 <boost/algorithm/string/find_format.hpp>
 | 
						|
#include <boost/algorithm/string/finder.hpp>
 | 
						|
#include <boost/algorithm/string/formatter.hpp>
 | 
						|
 | 
						|
// Include unit test framework
 | 
						|
#define BOOST_TEST_MAIN
 | 
						|
#include <boost/test/unit_test.hpp>
 | 
						|
 | 
						|
#include <boost/test/test_tools.hpp>
 | 
						|
 | 
						|
// We're only using const_formatter.
 | 
						|
template<class Formatter>
 | 
						|
struct formatter_result {
 | 
						|
    typedef boost::iterator_range<const char*> type;
 | 
						|
};
 | 
						|
 | 
						|
template<class Formatter>
 | 
						|
struct checked_formatter {
 | 
						|
public:
 | 
						|
    checked_formatter(const Formatter& formatter) : formatter_(formatter) {}
 | 
						|
    template< typename T >
 | 
						|
    typename formatter_result<Formatter>::type operator()( const T & s ) const {
 | 
						|
        BOOST_CHECK( !s.empty() );
 | 
						|
        return formatter_(s);
 | 
						|
    }
 | 
						|
private:
 | 
						|
    Formatter formatter_;
 | 
						|
};
 | 
						|
 | 
						|
template<class Formatter>
 | 
						|
checked_formatter<Formatter>
 | 
						|
make_checked_formatter(const Formatter& formatter) {
 | 
						|
    return checked_formatter<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();
 | 
						|
}
 |