DI: port the old Singleton unit tests
all these tests are ported by drop-in replacement and should work afterwards exactly as before (and they do indeed) A minor twist was spotted though (nice to have more unit tests indeed!): Sometimes we want to pass a custom constructor *not* as modern-style lambda, but rather as direct function reference, function pointer or even member function pointer. However, we can not store those types into the closure for later lazy invocation. This is basically the same twist I run into yesterday, when modernising the thread-wrapper. And the solution is similar. Our traits class _Fun<FUN> has a new typedef Functor with a suitable functor type to be instantiated and copied. In case of the Lambda this is the (anonymous) lamda class itself, but in case of a function reference or pointer it is a std::function.
This commit is contained in:
parent
4d783770d0
commit
d6786870f3
9 changed files with 256 additions and 126 deletions
|
|
@ -150,7 +150,7 @@ Lifecycle Events
|
|||
~~~~~~~~~~~~~~~~
|
||||
The Application as a whole conducts a well defined lifecycle; whenever transitioning to the next phase,
|
||||
a _Lifecycle Event_ is issued. Components may register a notification hook with the central _Lifecycle Manager_
|
||||
(see 'include/lifecycle.h) to be invoked whenever a specific event is emitted. The process of registration
|
||||
(see 'include/lifecycle.h') to be invoked whenever a specific event is emitted. The process of registration
|
||||
can be simplified by planting a static variable of type `lumiera::LifecycleHook`.
|
||||
|
||||
WARNING: A callback enrolled this way needs to be callable at the respective point in the lifecycle,
|
||||
|
|
|
|||
|
|
@ -103,6 +103,7 @@
|
|||
** persistent history and UNDO.
|
||||
**
|
||||
** @see DependencyConfiguration_test
|
||||
** @see SingletonSubclass_test
|
||||
** @see subsys.hpp
|
||||
*/
|
||||
|
||||
|
|
@ -117,6 +118,7 @@
|
|||
#include "lib/error.hpp"
|
||||
#include "lib/nocopy.hpp"
|
||||
#include "lib/depend2.hpp"
|
||||
#include "lib/meta/trait.hpp"
|
||||
#include "lib/meta/function.hpp"
|
||||
#include "lib/sync-classlock.hpp"
|
||||
|
||||
|
|
@ -179,14 +181,11 @@ namespace lib {
|
|||
static void
|
||||
useSingleton(FUN&& ctor)
|
||||
{
|
||||
using Fun = typename SubclassFactory<FUN>::Fun;
|
||||
using Sub = typename SubclassFactory<FUN>::Sub;
|
||||
__assert_compatible<Sub>();
|
||||
|
||||
static InstanceHolder<Sub> singleton;
|
||||
installFactory ([ctor]()
|
||||
{
|
||||
return singleton.buildInstance (ctor);
|
||||
});
|
||||
installFactory (buildCustomSingleton<Sub,Fun> (forward<FUN> (ctor)));
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -329,6 +328,7 @@ namespace lib {
|
|||
static_assert (meta::_Fun<FUN>(),
|
||||
"Need a Lambda or Function object to create a heap allocated instance");
|
||||
|
||||
using Fun = typename meta::_Fun<FUN>::Functor; // suitable type to store for later invocation
|
||||
using Res = typename meta::_Fun<FUN>::Ret;
|
||||
using Sub = typename meta::Strip<Res>::TypePlain;
|
||||
|
||||
|
|
@ -348,6 +348,22 @@ namespace lib {
|
|||
Depend<SRV>::factory = move (otherFac);
|
||||
}
|
||||
|
||||
/** wrap custom factory function to plant a singleton instance
|
||||
* @remark call through this intermediary function because we need to capture a _copy_ of the functor,
|
||||
* to invoke it later, on-demand. Especially we need the ability to change the type of this functor,
|
||||
* since sometimes the argument is passed as function reference, which can not be instantiated,
|
||||
* but needs to be wrapped into a std::function. */
|
||||
template<class SUB, class FUN>
|
||||
static Factory
|
||||
buildCustomSingleton (FUN&& ctor)
|
||||
{
|
||||
static InstanceHolder<SUB> singleton;
|
||||
return ([ctor]() // copy of ctor in the closure
|
||||
{
|
||||
return singleton.buildInstance (ctor);
|
||||
});
|
||||
}
|
||||
|
||||
static void
|
||||
temporarilyInstallAlternateFactory (SRV*& stashInstance, Factory& stashFac, Factory&& newFac)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -67,12 +67,15 @@ namespace meta{
|
|||
/**
|
||||
* Helper for uniform access to function signature types.
|
||||
* Extract the type information contained in a function or functor type,
|
||||
* so it can be manipulated by metaprogramming. The embedded typedefs
|
||||
* allow to pick up the return type, the sequence of argument types
|
||||
* and the bare function signature type. This template works on
|
||||
* so it can be manipulated by metaprogramming. This template works on
|
||||
* anything _function like_, irrespective if the parameter is given
|
||||
* as function reference, function pointer, member function pointer,
|
||||
* functor object, `std::function` or lambda.
|
||||
* functor object, `std::function` or lambda. The embedded typedefs
|
||||
* allow to pick up
|
||||
* - `Ret` : the return type
|
||||
* - `Args`: the sequence of argument types as type sequence `Types<ARGS...>`
|
||||
* - `Sig` : the bare function signature type
|
||||
* - `Functor` : corresponding Functor type which can be instantiated or copied.
|
||||
*
|
||||
* This template can also be used in metaprogramming with `enable_if` to enable
|
||||
* some definition or specialisation only if a function-like type was detected; thus
|
||||
|
|
|
|||
|
|
@ -686,15 +686,15 @@ END
|
|||
|
||||
|
||||
TEST "SingletonTestMock_test" SingletonTestMock_test <<END
|
||||
out-lit: TestSingletonO::doIt() call=1
|
||||
out-lit: TestSingletonO::doIt() call=2
|
||||
out-lit: TestSingO::doIt() call=1
|
||||
out-lit: TestSingO::doIt() call=2
|
||||
out-lit: Mock_1::doIt() call=1
|
||||
out-lit: Mock_1::doIt() call=2
|
||||
out-lit: Mock_1::doIt() call=3
|
||||
out-lit: Mock_1::doIt() call=4
|
||||
out-lit: Mock_1::doIt() call=5
|
||||
out-lit: Mock_2::doIt() call=1
|
||||
out-lit: TestSingletonO::doIt() call=3
|
||||
out: Mock_.::doIt\(\) call=1
|
||||
out-lit: TestSingO::doIt() call=3
|
||||
return: 0
|
||||
END
|
||||
|
||||
|
|
|
|||
|
|
@ -33,8 +33,8 @@
|
|||
#include "lib/format-obj.hpp"
|
||||
#include "lib/util.hpp"
|
||||
|
||||
#include "lib/depend.hpp"
|
||||
#include "lib/test/depend-4test.hpp"
|
||||
#include "lib/depend2.hpp"
|
||||
#include "lib/depend-inject.hpp"
|
||||
#include "test-target-obj.hpp"
|
||||
|
||||
#include <cstdlib>
|
||||
|
|
@ -73,12 +73,7 @@ namespace test{
|
|||
|
||||
struct SubSub
|
||||
: Sub
|
||||
{
|
||||
/** marker typedef for Depend4Test,
|
||||
* allowing to pick the correct Depend<ServiceInterface>
|
||||
* to apply the instrumentation with the test mock. */
|
||||
typedef Sub ServiceInterface;
|
||||
};
|
||||
{ };
|
||||
|
||||
struct SubSubSub
|
||||
: SubSub
|
||||
|
|
@ -111,7 +106,6 @@ namespace test{
|
|||
verify_SubclassCreation();
|
||||
verify_FactoryDefinition_is_sticky();
|
||||
verify_customFactory();
|
||||
verify_temporaryReplacement();
|
||||
verify_automaticReplacement();
|
||||
}
|
||||
|
||||
|
|
@ -131,9 +125,12 @@ namespace test{
|
|||
void
|
||||
verify_SubclassCreation()
|
||||
{
|
||||
Depend<SubSub> specialAccessor(buildSingleton<SubSubSub>());
|
||||
Depend<SubSub> specialAccessor;
|
||||
Depend<Sub> genericAccessor;
|
||||
|
||||
// configure singleton subclass (prior to first use)
|
||||
DependInject<SubSub>::useSingleton<SubSubSub>();
|
||||
|
||||
SubSub& oSub = specialAccessor();
|
||||
Sub& o = genericAccessor();
|
||||
|
||||
|
|
@ -155,13 +152,18 @@ namespace test{
|
|||
|
||||
SubSub& yetAnotherInstance = yetAnotherSpecialAccessor();
|
||||
CHECK ( INSTANCEOF (SubSubSub, &yetAnotherInstance));
|
||||
|
||||
// both refer to the same configuration and thus access the singleton
|
||||
CHECK (isSameObject (oSub, yetAnotherInstance));
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
verify_customFactory()
|
||||
{
|
||||
Depend<SubSubSub> customisedAccessor(&customFactoryFunction);
|
||||
DependInject<SubSubSub>::useSingleton (customFactoryFunction);
|
||||
|
||||
Depend<SubSubSub> customisedAccessor;
|
||||
Depend<SubSub> otherSpecialAccessor;
|
||||
|
||||
SubSub& oSub = otherSpecialAccessor();
|
||||
|
|
@ -175,47 +177,12 @@ namespace test{
|
|||
CHECK (MAX_ID + 10 == oSubS.instanceID_);
|
||||
}
|
||||
|
||||
static void*
|
||||
static SubSubSub*
|
||||
customFactoryFunction (void)
|
||||
{
|
||||
static SubSubSub specialInstance;
|
||||
// NOTE: the factory function is responsible
|
||||
// for managing the instance's lifecycle
|
||||
|
||||
specialInstance.instanceID_ = MAX_ID + 10;
|
||||
return &specialInstance;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void
|
||||
verify_temporaryReplacement()
|
||||
{
|
||||
typedef Depend<Sub> GenericAccessor;
|
||||
|
||||
GenericAccessor genericAccessor;
|
||||
Sub& original = genericAccessor();
|
||||
uint oID = original.instanceID_;
|
||||
|
||||
SubSubSub mockObject;
|
||||
Sub* shaddowedOriginal = GenericAccessor::injectReplacement (&mockObject);
|
||||
|
||||
Sub& replacement = genericAccessor();
|
||||
CHECK ( isSameObject (replacement, mockObject));
|
||||
CHECK (!isSameObject (original, replacement));
|
||||
CHECK ( isSameObject (original, *shaddowedOriginal));
|
||||
|
||||
Depend<SubSub> special;
|
||||
Depend<SubSubSub> custom;
|
||||
|
||||
CHECK(!isSameObject (replacement, special() ));
|
||||
CHECK(!isSameObject (replacement, custom() ));
|
||||
|
||||
GenericAccessor::injectReplacement (shaddowedOriginal);
|
||||
|
||||
Sub& nextFetch = genericAccessor();
|
||||
CHECK (isSameObject (original, nextFetch));
|
||||
CHECK (oID == nextFetch.instanceID_);
|
||||
SubSubSub* specialInstance = new SubSubSub;
|
||||
specialInstance->instanceID_ = MAX_ID + 10;
|
||||
return specialInstance;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -227,8 +194,26 @@ namespace test{
|
|||
Sub& original = genericAccessor();
|
||||
uint oID = original.instanceID_;
|
||||
|
||||
{
|
||||
Depend4Test<SubSub> withinThisScope;
|
||||
{////////////////////////////////////////////////////TEST-Scope
|
||||
DependInject<Sub>::Local<SubSubSub> mockObject;
|
||||
|
||||
Sub& replacement = genericAccessor();
|
||||
CHECK ( isSameObject (replacement, *mockObject));
|
||||
CHECK (!isSameObject (original, replacement));
|
||||
|
||||
Depend<SubSub> special;
|
||||
Depend<SubSubSub> custom;
|
||||
|
||||
CHECK(!isSameObject (replacement, special() ));
|
||||
CHECK(!isSameObject (replacement, custom() ));
|
||||
}////////////////////////////////////////////////////(End)TEST-Scope
|
||||
|
||||
Sub& nextFetch = genericAccessor();
|
||||
CHECK (isSameObject (original, nextFetch));
|
||||
CHECK (oID == nextFetch.instanceID_);
|
||||
|
||||
{////////////////////////////////////////////////////TEST-Scope-2
|
||||
DependInject<Sub>::Local<SubSub> otherMock;
|
||||
|
||||
Sub& replacement = genericAccessor();
|
||||
uint repID = replacement.instanceID_;
|
||||
|
|
@ -254,11 +239,10 @@ namespace test{
|
|||
CHECK (!isSameObject (original, subTypeAccess));
|
||||
CHECK (repID != subTypeAccess.instanceID_);
|
||||
CHECK ( oID != subTypeAccess.instanceID_);
|
||||
}
|
||||
}////////////////////////////////////////////////////(End)TEST-Scope-2
|
||||
|
||||
Sub& nextFetch = genericAccessor();
|
||||
CHECK (isSameObject (original, nextFetch));
|
||||
CHECK (oID == nextFetch.instanceID_);
|
||||
CHECK (isSameObject (original, genericAccessor()));
|
||||
CHECK (oID == genericAccessor().instanceID_);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -32,7 +32,8 @@
|
|||
#include "lib/util.hpp"
|
||||
|
||||
#include "test-target-obj.hpp"
|
||||
#include "lib/depend.hpp"
|
||||
#include "lib/depend2.hpp"
|
||||
#include "lib/depend-inject.hpp"
|
||||
|
||||
#include <boost/lexical_cast.hpp>
|
||||
|
||||
|
|
@ -65,7 +66,8 @@ namespace test{
|
|||
Interface () : TestTargetObj(cnt) {}
|
||||
virtual ~Interface() {}
|
||||
|
||||
friend class lib::DependencyFactory;
|
||||
friend class lib::InstanceHolder<Interface>;
|
||||
friend class std::default_delete<Interface>;
|
||||
};
|
||||
|
||||
int Interface::cnt = 0;
|
||||
|
|
@ -86,13 +88,12 @@ namespace test{
|
|||
|
||||
|
||||
/***************************************************************//**
|
||||
* @test specialised variant of the Singleton Factory, for creating
|
||||
* subclasses (implementation classes) without coupling the
|
||||
* caller to the concrete class type.
|
||||
* Expected results: an instance of the subclass is created.
|
||||
* @test specific dependency-injection setup, to create a singleton
|
||||
* subclass (implementation class) instance, without coupling
|
||||
* the caller to the concrete type.
|
||||
* @remark Expected results: an instance of the subclass is created.
|
||||
* @see lib::Depend
|
||||
* @see lib::buildSingleton()
|
||||
* @see lib/dependency-factory.hpp
|
||||
* @see lib/depend-inject.hpp
|
||||
*/
|
||||
class SingletonSubclass_test : public Test
|
||||
{
|
||||
|
|
@ -106,12 +107,11 @@ namespace test{
|
|||
|
||||
Interface::setCountParam(num);
|
||||
|
||||
// marker to declare the concrete type to be created
|
||||
DependencyFactory::InstanceConstructor factoryFunction = buildSingleton<Impl>();
|
||||
// configuration to use the subclass on demand
|
||||
DependInject<Interface>::useSingleton<Impl>();
|
||||
|
||||
// define an instance of the Singleton factory,
|
||||
// specialised to create the concrete Type passed in
|
||||
Depend<Interface> instance (factoryFunction);
|
||||
// define an instance of the Singleton factory as always...
|
||||
Depend<Interface> instance;
|
||||
|
||||
// Now use the Singleton factory...
|
||||
// Note: we get the Base type
|
||||
|
|
@ -119,6 +119,8 @@ namespace test{
|
|||
Interface& t2 = instance();
|
||||
|
||||
CHECK (isSameObject (t1, t2), "not a Singleton, got two different instances." );
|
||||
CHECK ( INSTANCEOF (Impl,&t1)); // got the subclass as expected
|
||||
CHECK ("Implementation" == t2.identify());
|
||||
|
||||
cout << "calling a non-static method on the Singleton-"
|
||||
<< t1.identify() << endl
|
||||
|
|
@ -132,11 +134,13 @@ namespace test{
|
|||
void
|
||||
verify_error_detection ()
|
||||
{
|
||||
VERIFY_ERROR (LIFECYCLE, Depend<Interface> instance (buildSingleton<Impl_XXX>()) );
|
||||
VERIFY_ERROR (LIFECYCLE, Depend<Interface> instance (buildSingleton<Unrelated>()) );
|
||||
VERIFY_ERROR (LIFECYCLE, DependInject<Interface>::useSingleton<Impl_XXX>() );
|
||||
|
||||
Depend<Interface> newFactory;
|
||||
CHECK ( INSTANCEOF (Impl, &newFactory() )); // works as before
|
||||
|
||||
//////////does not compile due to incompatible baseclass
|
||||
// DependInject<Interface>::useSingleton<Unrelated>();
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@
|
|||
#include "lib/util.hpp"
|
||||
|
||||
#include "test-target-obj.hpp"
|
||||
#include "lib/depend.hpp"
|
||||
#include "lib/depend2.hpp"
|
||||
|
||||
#include <boost/lexical_cast.hpp>
|
||||
|
||||
|
|
@ -59,7 +59,7 @@ namespace test{
|
|||
protected:
|
||||
TargetObj () : TestTargetObj(cnt) {}
|
||||
|
||||
friend class lib::DependencyFactory;
|
||||
friend class lib::InstanceHolder<TargetObj>;
|
||||
};
|
||||
|
||||
int TargetObj::cnt = 0;
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@
|
|||
|
||||
|
||||
#include "lib/test/run.hpp"
|
||||
#include "lib/depend.hpp"
|
||||
#include "lib/depend-inject.hpp"
|
||||
#include "lib/util.hpp"
|
||||
|
||||
#include "lib/format-cout.hpp"
|
||||
|
|
@ -45,14 +45,14 @@ namespace test{
|
|||
* Client Class normally to be instantiated as Singleton.
|
||||
* But for tests, this class should be replaced by a Mock....
|
||||
*/
|
||||
class TestSingletonO
|
||||
class TestSingO
|
||||
{
|
||||
int callCnt_;
|
||||
Symbol typid_;
|
||||
_Fmt msg_;
|
||||
|
||||
public:
|
||||
TestSingletonO(Symbol ty="TestSingletonO")
|
||||
TestSingO(Symbol ty="TestSingO")
|
||||
: callCnt_(0)
|
||||
, typid_(ty)
|
||||
, msg_("%s::doIt() call=%d\n")
|
||||
|
|
@ -61,7 +61,7 @@ namespace test{
|
|||
}
|
||||
|
||||
virtual
|
||||
~TestSingletonO()
|
||||
~TestSingO()
|
||||
{
|
||||
TRACE (test, "dtor %s", typid_.c());
|
||||
}
|
||||
|
|
@ -83,17 +83,23 @@ namespace test{
|
|||
/**
|
||||
* Mock-1 to replace the Client Class...
|
||||
*/
|
||||
struct Mock_1 : TestSingletonO
|
||||
struct Mock_1 : TestSingO
|
||||
{
|
||||
Mock_1() : TestSingletonO("Mock_1") { };
|
||||
Mock_1() : TestSingO("Mock_1") { };
|
||||
};
|
||||
|
||||
/**
|
||||
* Mock-2 to replace the Client Class...
|
||||
* @note no default ctor
|
||||
*/
|
||||
struct Mock_2 : TestSingletonO
|
||||
struct Mock_2 : TestSingO
|
||||
{
|
||||
Mock_2() : TestSingletonO("Mock_2") { };
|
||||
int id;
|
||||
|
||||
Mock_2(Literal specialID, int i)
|
||||
: TestSingO{Symbol (_Fmt{"%s_%d"} % specialID % i)}
|
||||
, id{i}
|
||||
{ };
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -112,7 +118,7 @@ namespace test{
|
|||
* Client Object, then replace it by two different mocks,
|
||||
* and finally restore the original Client Object.
|
||||
* @see lib::Depend
|
||||
* @see lib::test::Depend4Test
|
||||
* @see depend-inject.hpp
|
||||
* @see DependencyFactory_test
|
||||
*/
|
||||
class SingletonTestMock_test : public Test
|
||||
|
|
@ -121,28 +127,36 @@ namespace test{
|
|||
void
|
||||
run (Arg)
|
||||
{
|
||||
Depend<TestSingletonO> sing;
|
||||
Depend<TestSingO> sing;
|
||||
|
||||
sing().doIt();
|
||||
sing().doIt();
|
||||
CHECK (sing().getCnt() == 2);
|
||||
|
||||
Mock_1 mock_1;
|
||||
TestSingletonO* original =
|
||||
sing.injectReplacement (&mock_1);
|
||||
sing().doIt();
|
||||
sing().doIt();
|
||||
sing().doIt();
|
||||
sing().doIt();
|
||||
sing().doIt();
|
||||
CHECK (sing().getCnt() == 5);
|
||||
{
|
||||
// shadow by local Mock instance
|
||||
DependInject<TestSingO>::Local<Mock_1> mock_1;
|
||||
sing().doIt();
|
||||
sing().doIt();
|
||||
sing().doIt();
|
||||
sing().doIt();
|
||||
sing().doIt();
|
||||
CHECK (sing().getCnt() == 5);
|
||||
|
||||
// shadow again by different local Mock, this time with special ctor call
|
||||
int instanceID = 0;
|
||||
DependInject<TestSingO>::Local<Mock_2> mock_2 ([&]{ return new Mock_2{"Mock", instanceID}; });
|
||||
|
||||
// NOTE: the ctor call for the Mock really happens delayed...
|
||||
instanceID = rand() % 10;
|
||||
sing().doIt(); // ctor invoked on first access
|
||||
CHECK (sing().getCnt() == 1);
|
||||
|
||||
// can access the Mock for instrumentation
|
||||
CHECK (instanceID == mock_2->id);
|
||||
|
||||
}// original instance automatically un-shadowed here
|
||||
|
||||
Mock_2 mock_2;
|
||||
sing.injectReplacement (&mock_2);
|
||||
sing().doIt();
|
||||
CHECK (sing().getCnt() == 1);
|
||||
|
||||
sing.injectReplacement (original); // un-shadowing original instance
|
||||
CHECK (sing().getCnt() == 2);
|
||||
sing().doIt();
|
||||
CHECK (sing().getCnt() == 3);
|
||||
|
|
|
|||
|
|
@ -27775,28 +27775,29 @@
|
|||
</node>
|
||||
</node>
|
||||
<node CREATED="1520722160591" ID="ID_135546699" MODIFIED="1520722168810" TEXT="Unit-Test">
|
||||
<node CREATED="1521419576303" ID="ID_726128967" MODIFIED="1521419582850" TEXT="alte Tests">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1521418937870" ID="ID_906296527" MODIFIED="1521418940664" TEXT="Singleton_test">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1521419576303" ID="ID_726128967" MODIFIED="1522042418343" TEXT="alte Tests portieren">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1521418937870" ID="ID_906296527" MODIFIED="1522033081893" TEXT="Singleton_test">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1521419045649" ID="ID_839295062" MODIFIED="1521419048033" TEXT="SingletonSubclass_test">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1521419045649" ID="ID_839295062" MODIFIED="1522035642960" TEXT="SingletonSubclass_test">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1521419134046" ID="ID_1638082455" MODIFIED="1521419136661" TEXT="SingletonTestMock_test">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1521419134046" ID="ID_1638082455" MODIFIED="1522037930919" TEXT="SingletonTestMock_test">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1521419300765" ID="ID_417098537" MODIFIED="1521419778465" TEXT="DependencyFactory_test">
|
||||
<linktarget COLOR="#b9274f" DESTINATION="ID_417098537" ENDARROW="Default" ENDINCLINATION="159;18;" ID="Arrow_ID_606259386" SOURCE="ID_914313570" STARTARROW="Default" STARTINCLINATION="18;-57;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1521419300765" ID="ID_417098537" MODIFIED="1522042501641" TEXT="DependencyFactory_test">
|
||||
<linktarget COLOR="#b9274f" DESTINATION="ID_417098537" ENDARROW="Default" ENDINCLINATION="-118;36;" ID="Arrow_ID_606259386" SOURCE="ID_914313570" STARTARROW="Default" STARTINCLINATION="-127;0;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1521419730442" HGAP="42" ID="ID_657803548" MODIFIED="1521419793254" TEXT="nach der Umstellung etwas straffen" VSHIFT="-13">
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1521419563657" ID="ID_733291707" MODIFIED="1521433847496" TEXT="DependencyConfiguration_test">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node CREATED="1521419590709" ID="ID_914313570" MODIFIED="1521419778465" TEXT="ziemlich redundant">
|
||||
<arrowlink COLOR="#b9274f" DESTINATION="ID_417098537" ENDARROW="Default" ENDINCLINATION="159;18;" ID="Arrow_ID_606259386" STARTARROW="Default" STARTINCLINATION="18;-57;"/>
|
||||
<node COLOR="#338800" CREATED="1521419563657" ID="ID_733291707" MODIFIED="1522034193646" TEXT="DependencyConfiguration_test">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1521419590709" ID="ID_914313570" MODIFIED="1522042501641" TEXT="ziemlich redundant">
|
||||
<arrowlink COLOR="#b9274f" DESTINATION="ID_417098537" ENDARROW="Default" ENDINCLINATION="-118;36;" ID="Arrow_ID_606259386" STARTARROW="Default" STARTINCLINATION="-127;0;"/>
|
||||
<node CREATED="1521419624065" HGAP="29" ID="ID_477987875" MODIFIED="1521419637660" TEXT="weiterhin sinnvoll?" VSHIFT="14">
|
||||
<node CREATED="1521419638943" ID="ID_717613154" MODIFIED="1521419705073" TEXT="TDD während der re-Implementirung"/>
|
||||
<node CREATED="1521419657356" ID="ID_1381265753" MODIFIED="1521419674957" TEXT="der alte Test muß weiterhin laufen (ohne nachzudenken!)"/>
|
||||
|
|
@ -27824,6 +27825,54 @@
|
|||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033106576" ID="ID_278956866" MODIFIED="1522034101344" TEXT="weitere Tests...">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
die von der alten DependencyFactory abhängen
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<linktarget COLOR="#b8154d" DESTINATION="ID_278956866" ENDARROW="Default" ENDINCLINATION="32;436;" ID="Arrow_ID_1985884795" SOURCE="ID_513111416" STARTARROW="None" STARTINCLINATION="223;-69;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033940685" ID="ID_447878554" MODIFIED="1522034123685" TEXT="media-access-mock-test.cpp">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033969821" ID="ID_1706164763" MODIFIED="1522034133500" TEXT="create-asset-test.cpp">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033977816" ID="ID_15822506" MODIFIED="1522034139730" TEXT="dependent-assets-test.cpp">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033997907" ID="ID_458476877" MODIFIED="1522034144346" TEXT="identity-of-assets-test.cpp">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522034004825" ID="ID_1008413222" MODIFIED="1522034149105" TEXT="make-clip-test.cpp">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522034011921" ID="ID_1809290651" MODIFIED="1522034153425" TEXT="ordering-of-assets-test.cpp">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522034021470" ID="ID_466658369" MODIFIED="1522034157376" TEXT="builder-tool-test.cpp">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522034029190" ID="ID_1418985959" MODIFIED="1522034158463" TEXT="testclip.cpp">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522034035772" ID="ID_1574270320" MODIFIED="1522034164514" TEXT="mobject-interface-test.cpp">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522034044775" ID="ID_984134175" MODIFIED="1522034168774" TEXT="mobject-ref-test.cpp">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522034052507" ID="ID_1667049787" MODIFIED="1522034171815" TEXT="placement-hierarchy-test.cpp">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1520722155112" ID="ID_1512641426" MODIFIED="1520722159028" TEXT="Integration">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1521160755182" ID="ID_678080556" MODIFIED="1521160802831" TEXT="Umbenennen">
|
||||
|
|
@ -27831,6 +27880,63 @@
|
|||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1521160765588" ID="ID_1857896991" MODIFIED="1521160801792" TEXT="Konfig-Aufrufe anpassen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033578207" HGAP="18" ID="ID_252429770" MODIFIED="1522035653422" TEXT="Name für Freunschaft+?" VSHIFT="-20">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1522033614743" ID="ID_1110690522" MODIFIED="1522033614743" TEXT="friend class lib::InstanceHolder<TargetObj>;">
|
||||
<node CREATED="1522033621114" ID="ID_1807735289" MODIFIED="1522033629872" TEXT="nicht so sexy">
|
||||
<icon BUILTIN="smiley-oh"/>
|
||||
</node>
|
||||
<node CREATED="1522035656233" ID="ID_678532992" MODIFIED="1522035672143" TEXT="und std::checked_deltet<TargetObj> auch noch">
|
||||
<icon BUILTIN="smiley-angry"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033635991" ID="ID_321432260" MODIFIED="1522033646528" TEXT="könnte das Depend selber sein?">
|
||||
<icon BUILTIN="help"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033193572" ID="ID_508353720" MODIFIED="1522033212243" TEXT="DependencyFactory">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033199726" ID="ID_314595550" MODIFIED="1522033214370" TEXT="engine-config.h">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033210086" ID="ID_638295060" MODIFIED="1522033214889" TEXT="demo-gui-roundtrip.cpp">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033231644" ID="ID_1199449420" MODIFIED="1522033861273" TEXT="config-facade.h">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033250207" ID="ID_322012422" MODIFIED="1522033862009" TEXT="asset/db.hpp">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033810436" ID="ID_1074903860" MODIFIED="1522033862649" TEXT="assetmanager.hpp">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033264576" ID="ID_1266730565" MODIFIED="1522033863264" TEXT="stypemanager.hpp">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033697671" ID="ID_522765001" MODIFIED="1522033863808" TEXT="diagnostic-buffer-provider.hpp">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033733342" ID="ID_711202966" MODIFIED="1522033864312" TEXT="fake-configrules.hpp">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033740662" ID="ID_1194803087" MODIFIED="1522033864856" TEXT="dummy-session-connection.hpp">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033747205" ID="ID_1409425930" MODIFIED="1522033865352" TEXT="scope-locator.hpp">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033753484" ID="ID_1909328069" MODIFIED="1522033865896" TEXT="sess-manager-impl.hpp">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033760875" ID="ID_1097826895" MODIFIED="1522033866703" TEXT="output-director.hpp">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522034066988" ID="ID_513111416" MODIFIED="1522034101345" TEXT="alle Mock-Tests">
|
||||
<arrowlink COLOR="#b8154d" DESTINATION="ID_278956866" ENDARROW="Default" ENDINCLINATION="32;436;" ID="Arrow_ID_1985884795" STARTARROW="None" STARTINCLINATION="223;-69;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1521858774321" ID="ID_302686020" MODIFIED="1521858778744" TEXT="aufräumen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
|
|
@ -27866,6 +27972,8 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522033564057" ID="ID_1294295502" MODIFIED="1522033567713" TEXT="Nacharbeiten">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1522018567685" ID="ID_1619059123" MODIFIED="1522018578992" TEXT="Frage: was ist mit AppState?">
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1522018581283" ID="ID_132446315" MODIFIED="1522018592182" TEXT="macht es Sinn, das via Depend zugänglich zu machen?"/>
|
||||
|
|
@ -27891,6 +27999,7 @@
|
|||
<icon BUILTIN="smiley-oh"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1521160792856" ID="ID_367925099" MODIFIED="1521160800344" TEXT="System läuft wie zuvor">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
|
|
|
|||
Loading…
Reference in a new issue