From 24792c1f1921c036d1bb8f3fa4fa75f6df34f411 Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Sat, 19 Oct 2013 23:37:00 +0200 Subject: [PATCH] brainstorming: how to implement the test mock injection --- src/lib/dependency-factory.cpp | 37 +++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/src/lib/dependency-factory.cpp b/src/lib/dependency-factory.cpp index 06581137b..7153fbda0 100644 --- a/src/lib/dependency-factory.cpp +++ b/src/lib/dependency-factory.cpp @@ -84,15 +84,34 @@ namespace lib { -// struct TemporarySwitch -// { -// void* originalInstance; -// InstanceConstructor originalCtor; -// }; -// -// static TemporarySwitch temporarySwitch; - - + class TemporaryShadowedInstanceFactory + : boost::noncopyable + { + typedef DependencyFactory::InstanceConstructor Ctor; + + void* originalInstance_; + Ctor originalCtor_; + + public: + TemporaryShadowedInstanceFactory(void* instance, Ctor ctor) + : originalInstance_(instance) + , originalCtor_(ctor) + { } + + void* + constructorInvocation() + { + REQUIRE (originalCtor_); + + if (!originalInstance_) + return originalCtor_(); + + void* existingInstance = originalInstance_; + originalInstance_ = NULL; + return existingInstance; + } + }; + }