Read-only mirrors. Development, issues and pull requests are on GitHub.

summaryrefslogtreecommitdiffhomepage
path: root/projects/SelfTest/ToStringWhich.cpp
diff options
context:
space:
mode:
authorAndy Sawyer2014-09-01 18:09:37 +0100
committerAndy Sawyer2014-09-01 18:09:37 +0100
commitabf9ffc9820fc8e1b27320316118034a8e4750c6 (patch)
treeab222730b627e15b4c378c06ab55f07464825a98 /projects/SelfTest/ToStringWhich.cpp
parentcd2a5aa688be79226f646aeb94f7bd27c39f033f (diff)
downloadcatch3-abf9ffc9820fc8e1b27320316118034a8e4750c6.tar.gz
A bunch of Catch::toString tests
Diffstat (limited to 'projects/SelfTest/ToStringWhich.cpp')
-rw-r--r--projects/SelfTest/ToStringWhich.cpp74
1 files changed, 74 insertions, 0 deletions
diff --git a/projects/SelfTest/ToStringWhich.cpp b/projects/SelfTest/ToStringWhich.cpp
new file mode 100644
index 00000000..f9f4beb5
--- /dev/null
+++ b/projects/SelfTest/ToStringWhich.cpp
@@ -0,0 +1,74 @@
+#include "catch.hpp"
+/*
+ Demonstrate which version of toString/StringMaker is being used
+ for various types
+*/
+
+
+struct has_toString { };
+struct has_maker {};
+struct has_maker_and_toString {};
+
+namespace Catch {
+ std::string toString( const has_toString& ) {
+ return "toString( has_toString )";
+ }
+ std::string toString( const has_maker_and_toString& ) {
+ return "toString( has_maker_and_toString )";
+ }
+ template<>
+ struct StringMaker<has_maker> {
+ static std::string convert( const has_maker& ) {
+ return "StringMaker<has_maker>";
+ }
+ };
+ template<>
+ struct StringMaker<has_maker_and_toString> {
+ static std::string convert( const has_maker_and_toString& ) {
+ return "StringMaker<has_maker_and_toString>";
+ }
+ };
+}
+
+// Call the overload
+TEST_CASE( "toString( has_toString )", "[toString]" )
+{
+ has_toString item;
+ REQUIRE( Catch::toString( item ) == "toString( has_toString )" );
+}
+
+// Call the overload
+TEST_CASE( "toString( has_maker )", "[toString]" )
+{
+ has_maker item;
+ REQUIRE( Catch::toString( item ) == "StringMaker<has_maker>" );
+}
+
+// Call the overload
+TEST_CASE( "toString( has_maker_and_toString )", "[toString]" )
+{
+ has_maker_and_toString item;
+ REQUIRE( Catch::toString( item ) == "toString( has_maker_and_toString )" );
+}
+
+// Vectors...
+TEST_CASE( "toString( vectors<has_toString )", "[toString]" )
+{
+ std::vector<has_toString> v(1);
+ // This invokes template<T> toString which actually gives us '{ ? }'
+ REQUIRE( Catch::toString( v ) == "{ {?} }" );
+}
+
+TEST_CASE( "toString( vectors<has_maker )", "[toString]" )
+{
+ std::vector<has_maker> v(1);
+ REQUIRE( Catch::toString( v ) == "{ StringMaker<has_maker> }" );
+}
+
+
+TEST_CASE( "toString( vectors<has_maker_and_toString )", "[toString]" )
+{
+ std::vector<has_maker_and_toString> v(1);
+ // Note: This invokes the template<T> toString -> StringMaker
+ REQUIRE( Catch::toString( v ) == "{ StringMaker<has_maker_and_toString> }" );
+}