diff --git a/.gitignore b/.gitignore
index 132530c..17f91c4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
bin
out
+build/xsl
diff --git a/build/vc100/turtle.vcxproj b/build/vc100/turtle.vcxproj
index 2fc8585..cf3d8da 100644
--- a/build/vc100/turtle.vcxproj
+++ b/build/vc100/turtle.vcxproj
@@ -19,13 +19,13 @@
+
-
diff --git a/build/vc100/turtle.vcxproj.filters b/build/vc100/turtle.vcxproj.filters
index db9e20b..f3f1f04 100644
--- a/build/vc100/turtle.vcxproj.filters
+++ b/build/vc100/turtle.vcxproj.filters
@@ -115,9 +115,6 @@
Source Files\detail
-
- Source Files\detail
-
Source Files\detail
@@ -127,5 +124,8 @@
Source Files\detail
+
+ Source Files
+
\ No newline at end of file
diff --git a/doc/example/patterns_static_objects.cpp b/doc/example/patterns_static_objects.cpp
new file mode 100644
index 0000000..c385fbc
--- /dev/null
+++ b/doc/example/patterns_static_objects.cpp
@@ -0,0 +1,67 @@
+// http://turtle.sourceforge.net
+//
+// Copyright Mathieu Champlon 2015
+//
+// 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)
+
+//[ static_objects_problem
+#define BOOST_AUTO_TEST_MAIN
+#include
+#include
+#include
+
+namespace
+{
+ struct my_class
+ {
+ my_class( int i )
+ : i_( i )
+ {}
+
+ int i_;
+ };
+
+ std::ostream& operator<<( std::ostream& os, const my_class* c )
+ {
+ return os << "my_class " << c->i_; // the 'c' pointer must be valid when logging
+ }
+
+ MOCK_FUNCTION( f, 1, void( my_class* ) ) // being static 'f' outlive the test case
+}
+
+BOOST_AUTO_TEST_CASE( static_objects_problem )
+{
+ my_class c( 42 );
+ MOCK_EXPECT( f ).once().with( &c ); // the set expectation will also outlive the test case and leak into other test cases using 'f'
+} // the 'c' instance goes out of scope and the '&c' pointer becomes dangling
+//]
+
+//[ static_objects_partial_solution
+struct fixture
+{
+ ~fixture()
+ {
+ mock::reset(); // the use of a fixture ensures the reset will prevent the expectations from leaking into other test cases
+ }
+};
+
+BOOST_FIXTURE_TEST_CASE( static_object_partial_solution, fixture )
+{
+ my_class c( 42 );
+ MOCK_EXPECT( f ).once().with( &c );
+ f( &c );
+ mock::verify(); // verify the expectations before local objects are destroyed and before the fixture resets them
+}
+//]
+
+//[ static_objects_solution
+BOOST_FIXTURE_TEST_CASE( static_objects_solution, mock::cleanup ) // actually the library includes a ready to use fixture just like the one described
+{
+ my_class c( 42 );
+ MOCK_EXPECT( f ).once().with( &c );
+ f( &c );
+ mock::verify();
+}
+//]
diff --git a/doc/patterns.qbk b/doc/patterns.qbk
index 9322966..7cdfd84 100644
--- a/doc/patterns.qbk
+++ b/doc/patterns.qbk
@@ -6,6 +6,7 @@
/]
[section Patterns]
+[import example/patterns_static_objects.cpp]
[import example/patterns_async_call.cpp]
[import example/patterns_retrieve_cref.cpp]
[import example/patterns_invoke_functor.cpp]
@@ -13,6 +14,22 @@
This section highlights not-so-obvious features of the library gathered from real use cases.
+[section Managing static mock objects]
+
+Problem :
+
+[static_objects_problem]
+
+Partial solution :
+
+[static_objects_partial_solution]
+
+Solution :
+
+[static_objects_solution]
+
+[endsect]
+
[section Waiting for an asynchronous call]
Problem :
diff --git a/include/turtle/detail/cleanup.hpp b/include/turtle/cleanup.hpp
similarity index 72%
rename from include/turtle/detail/cleanup.hpp
rename to include/turtle/cleanup.hpp
index 87cc5fb..47f8038 100644
--- a/include/turtle/detail/cleanup.hpp
+++ b/include/turtle/cleanup.hpp
@@ -9,29 +9,28 @@
#ifndef MOCK_CLEANUP_HPP_INCLUDED
#define MOCK_CLEANUP_HPP_INCLUDED
-#include "../config.hpp"
+#include "config.hpp"
+#include "verify.hpp"
+#include "reset.hpp"
#ifdef MOCK_USE_BOOST_TEST
-#include "../verify.hpp"
-#include "../reset.hpp"
#include
+#endif
namespace mock
-{
-namespace detail
{
struct cleanup
{
~cleanup()
{
- // see https://svn.boost.org/trac/boost/ticket/5563
- //mock::verify();
mock::reset();
}
};
+
+#ifdef MOCK_USE_BOOST_TEST
BOOST_GLOBAL_FIXTURE( cleanup );
-}
+#endif
+
} // mock
-#endif // MOCK_USE_BOOST_TEST
#endif // MOCK_CLEANUP_HPP_INCLUDED
diff --git a/include/turtle/mock.hpp b/include/turtle/mock.hpp
index b7c9f65..a560800 100644
--- a/include/turtle/mock.hpp
+++ b/include/turtle/mock.hpp
@@ -13,12 +13,12 @@
#include "object.hpp"
#include "reset.hpp"
#include "verify.hpp"
+#include "cleanup.hpp"
#include "detail/functor.hpp"
#include "detail/function.hpp"
#include "detail/type_name.hpp"
#include "detail/signature.hpp"
#include "detail/parameter.hpp"
-#include "detail/cleanup.hpp"
#include
#include
#include