diff options
| author | Dan Goodliffe <dan@randomdan.homeip.net> | 2016-12-09 16:45:08 +0000 | 
|---|---|---|
| committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2016-12-09 16:45:08 +0000 | 
| commit | 3536bad518fb67881d04fa57c9260483a552571a (patch) | |
| tree | 1c6405412dadc454998ab8d599015460761de97a | |
| parent | Provide a way of formatting a literal percent sign (diff) | |
| download | libadhocutil-3536bad518fb67881d04fa57c9260483a552571a.tar.bz2 libadhocutil-3536bad518fb67881d04fa57c9260483a552571a.tar.xz libadhocutil-3536bad518fb67881d04fa57c9260483a552571a.zip  | |
Tidy tests
| -rw-r--r-- | libadhocutil/unittests/testCompileTimeFormatter.cpp | 154 | 
1 files changed, 71 insertions, 83 deletions
diff --git a/libadhocutil/unittests/testCompileTimeFormatter.cpp b/libadhocutil/unittests/testCompileTimeFormatter.cpp index b3e3dac..d1afb68 100644 --- a/libadhocutil/unittests/testCompileTimeFormatter.cpp +++ b/libadhocutil/unittests/testCompileTimeFormatter.cpp @@ -21,158 +21,146 @@ extern constexpr const char * formatStringEscape2 = "literal %%? percentage.";  extern constexpr const char * formatStringEscape3 = "literal %%%? percentage.";  extern constexpr const char * formatStringEscape4 = "literal %%%?%% percentage."; +namespace AdHoc { +	// Custom stream writer formatter, formats as (bracketed expression) +	template<const char * const & S, int start, typename stream, char ... sn> +	struct StreamWriter<S, start, stream, '%', '(', ')', sn...> { +		template<typename P, typename ... Pn> +		static void write(stream & s, const P & p, const Pn & ... pn) +		{ +			s << "-( " << p << " )-"; +			StreamWriter<S, start + 3, stream, sn...>::write(s, pn...); +		} +	}; +	// Custom stream writer formatter, formats +	//            right-aligned by given width +	template<const char * const & S, int start, typename stream, char ... sn> +	struct StreamWriter<S, start, stream, '%', 'r', 'a', sn...> { +		template<typename P, typename ... Pn> +		static void write(stream & s, int width, const P & p, const Pn & ... pn) +		{ +			std::stringstream buf; +			buf << p; +			std::string spaces(width - buf.str().length(), ' '); +			s << spaces << buf.str(); +			StreamWriter<S, start + 3, stream, sn...>::write(s, pn...); +		} +	}; +} + +BOOST_FIXTURE_TEST_SUITE( TestStreamWrite, std::stringstream ) +  BOOST_AUTO_TEST_CASE ( empty )  { -	std::stringstream buf; -  Formatter<formatEdgeCaseEmpty>::write(buf); -	BOOST_REQUIRE(buf.str().empty()); +	Formatter<formatEdgeCaseEmpty>::write(*this); +	BOOST_REQUIRE(this->str().empty());  }  BOOST_AUTO_TEST_CASE ( single )  { -	std::stringstream buf; -  Formatter<formatEdgeCaseSingle>::write(buf); -	BOOST_REQUIRE_EQUAL(buf.str(), "1"); +	Formatter<formatEdgeCaseSingle>::write(*this); +	BOOST_REQUIRE_EQUAL(this->str(), "1");  }  BOOST_AUTO_TEST_CASE ( start )  { -	std::stringstream buf; -  Formatter<formatEdgeCaseFormatStart>::write(buf, 10); -	BOOST_REQUIRE_EQUAL(buf.str(), "10 after"); +	Formatter<formatEdgeCaseFormatStart>::write(*this, 10); +	BOOST_REQUIRE_EQUAL(this->str(), "10 after");  }  BOOST_AUTO_TEST_CASE ( end )  { -	std::stringstream buf; -  Formatter<formatEdgeCaseFormatEnd>::write(buf, 10); -	BOOST_REQUIRE_EQUAL(buf.str(), "before 10"); +	Formatter<formatEdgeCaseFormatEnd>::write(*this, 10); +	BOOST_REQUIRE_EQUAL(this->str(), "before 10");  }  BOOST_AUTO_TEST_CASE ( lonely )  { -	std::stringstream buf; -  Formatter<formatEdgeCaseFormatLonely>::write(buf, 10); -	BOOST_REQUIRE_EQUAL(buf.str(), "10"); +	Formatter<formatEdgeCaseFormatLonely>::write(*this, 10); +	BOOST_REQUIRE_EQUAL(this->str(), "10");  }  BOOST_AUTO_TEST_CASE ( literal )  { -	std::stringstream buf; -  Formatter<formatStringLiteral>::write(buf); -	BOOST_REQUIRE_EQUAL(buf.str(), "literal"); +	Formatter<formatStringLiteral>::write(*this); +	BOOST_REQUIRE_EQUAL(this->str(), "literal");  }  BOOST_AUTO_TEST_CASE ( singleInt )  { -	std::stringstream buf; -  Formatter<formatStringSingle>::write(buf, 32); -	BOOST_REQUIRE_EQUAL(buf.str(), "single 32."); +	Formatter<formatStringSingle>::write(*this, 32); +	BOOST_REQUIRE_EQUAL(this->str(), "single 32.");  }  BOOST_AUTO_TEST_CASE ( singleDouble )  { -	std::stringstream buf; -  Formatter<formatStringSingle>::write(buf, 3.14); -	BOOST_REQUIRE_EQUAL(buf.str(), "single 3.14."); +	Formatter<formatStringSingle>::write(*this, 3.14); +	BOOST_REQUIRE_EQUAL(this->str(), "single 3.14.");  }  BOOST_AUTO_TEST_CASE ( singlePath )  { -	std::stringstream buf;  	boost::filesystem::path p("/tmp/test/path"); -  Formatter<formatStringSingle>::write(buf, p); -	BOOST_REQUIRE_EQUAL(buf.str(), R"(single "/tmp/test/path".)"); +	Formatter<formatStringSingle>::write(*this, p); +	BOOST_REQUIRE_EQUAL(this->str(), R"(single "/tmp/test/path".)");  }  BOOST_AUTO_TEST_CASE ( multi )  { -	std::stringstream buf; -	Formatter<formatStringMulti>::write(buf, "one", "two"); -	BOOST_REQUIRE_EQUAL(buf.str(), "First one, then two."); +	Formatter<formatStringMulti>::write(*this, "one", "two"); +	BOOST_REQUIRE_EQUAL(this->str(), "First one, then two.");  }  BOOST_AUTO_TEST_CASE ( escape1 )  { -	std::stringstream buf; -	Formatter<formatStringEscape1>::write(buf); -	BOOST_REQUIRE_EQUAL(buf.str(), "literal % percentage."); +	Formatter<formatStringEscape1>::write(*this); +	BOOST_REQUIRE_EQUAL(this->str(), "literal % percentage.");  }  BOOST_AUTO_TEST_CASE ( escape2 )  { -	std::stringstream buf; -	Formatter<formatStringEscape2>::write(buf); -	BOOST_REQUIRE_EQUAL(buf.str(), "literal %? percentage."); +	Formatter<formatStringEscape2>::write(*this); +	BOOST_REQUIRE_EQUAL(this->str(), "literal %? percentage.");  }  BOOST_AUTO_TEST_CASE ( escape3 )  { -	std::stringstream buf; -	Formatter<formatStringEscape3>::write(buf, 3); -	BOOST_REQUIRE_EQUAL(buf.str(), "literal %3 percentage."); +	Formatter<formatStringEscape3>::write(*this, 3); +	BOOST_REQUIRE_EQUAL(this->str(), "literal %3 percentage.");  }  BOOST_AUTO_TEST_CASE ( escape4 )  { -	std::stringstream buf; -	Formatter<formatStringEscape4>::write(buf, 3); -	BOOST_REQUIRE_EQUAL(buf.str(), "literal %3% percentage."); -} - -namespace AdHoc { -	// Custom stream writer formatter, formats as (bracketed expression) -	template<const char * const & S, int start, typename stream, char ... sn> -	struct StreamWriter<S, start, stream, '%', '(', ')', sn...> { -		template<typename P, typename ... Pn> -		static void write(stream & s, const P & p, const Pn & ... pn) -		{ -			s << "-( " << p << " )-"; -			StreamWriter<S, start + 3, stream, sn...>::write(s, pn...); -		} -	}; -	// Custom stream writer formatter, formats -	//            right-aligned by given width -	template<const char * const & S, int start, typename stream, char ... sn> -	struct StreamWriter<S, start, stream, '%', 'r', 'a', sn...> { -		template<typename P, typename ... Pn> -		static void write(stream & s, int width, const P & p, const Pn & ... pn) -		{ -			std::stringstream buf; -			buf << p; -			std::string spaces(width - buf.str().length(), ' '); -			s << spaces << buf.str(); -			StreamWriter<S, start + 3, stream, sn...>::write(s, pn...); -		} -	}; +	Formatter<formatStringEscape4>::write(*this, 3); +	BOOST_REQUIRE_EQUAL(this->str(), "literal %3% percentage.");  }  extern constexpr const char * formatStringCustom = "custom %()";  BOOST_AUTO_TEST_CASE ( customBracketted )  { -	std::stringstream buf; -  Formatter<formatStringCustom>::write(buf, "expr"); -	BOOST_REQUIRE_EQUAL(buf.str(), "custom -( expr )-"); +	Formatter<formatStringCustom>::write(*this, "expr"); +	BOOST_REQUIRE_EQUAL(this->str(), "custom -( expr )-"); +} + +extern constexpr const char * formatStringLong = "                                                                                                                                                                                                                                                      "; +BOOST_AUTO_TEST_CASE ( longFormatString ) +{ +	Formatter<formatStringLong>::write(*this); +	BOOST_REQUIRE_EQUAL(this->str().length(), 246);  } +BOOST_AUTO_TEST_SUITE_END(); +  extern constexpr const char * formatStringMultiArg = "value%ra";  BOOST_AUTO_TEST_CASE ( customMultiArgRightAlign )  {  	std::stringstream buf1, buf2, buf3;  	const int width = 20; -  Formatter<formatStringMultiArg>::write(buf1, width, "something"); -  Formatter<formatStringMultiArg>::write(buf2, width, "something else"); -  Formatter<formatStringMultiArg>::write(buf3, width, 123.45); +	Formatter<formatStringMultiArg>::write(buf1, width, "something"); +	Formatter<formatStringMultiArg>::write(buf2, width, "something else"); +	Formatter<formatStringMultiArg>::write(buf3, width, 123.45);  	BOOST_REQUIRE_EQUAL(buf1.str(), "value           something");  	BOOST_REQUIRE_EQUAL(buf2.str(), "value      something else");  	BOOST_REQUIRE_EQUAL(buf3.str(), "value              123.45");  } -extern constexpr const char * formatStringLong = "                                                                                                                                                                                                                                                      "; -BOOST_AUTO_TEST_CASE ( longFormatString ) -{ -	std::stringstream buf; -  Formatter<formatStringLong>::write(buf); -	BOOST_REQUIRE_EQUAL(buf.str().length(), 246); -} -  | 
