WIP: test driven brainstorming: basic MObjectRef behaviour

This commit is contained in:
Fischlurch 2009-06-07 00:45:55 +02:00
parent 091c3a20ef
commit 2731e34c3e
2 changed files with 64 additions and 1 deletions

View file

@ -46,6 +46,7 @@
//#include <tr1/memory>
///////////////////////////////////////////TODO: define an C-API representation here, make the header multilingual!
namespace mobject {

View file

@ -23,23 +23,26 @@
#include "lib/test/run.hpp"
#include "lib/lumitime.hpp"
#include "proc/asset/media.hpp"
#include "proc/mobject/mobject.hpp"
#include "proc/mobject/mobject-ref.hpp"
#include "proc/mobject/placement.hpp"
#include "proc/mobject/placement-ref.hpp"
#include "proc/mobject/session/clip.hpp"
#include "proc/mobject/explicitplacement.hpp"
#include "proc/mobject/test-dummy-mobject.hpp"
#include <iostream>
using lumiera::Time;
using std::string;
using std::cout;
using std::endl;
namespace mobject {
namespace test {
using lumiera::Time;
using session::Clip;
@ -90,8 +93,26 @@ namespace test {
index->insert (pClip2, root);
ASSERT (2 == index->size());
// extract various kinds of IDs and refs
PMObj & rP1 (pClip1);
PMObj const& rP2 (pClip2);
PMObj::ID id1 = pClip1.getID();
PMObj::Id<Clip> id2 = pClip2.getID();
LumieraUid luid = id1.get();
///////////////////////////////////////////TODO: check the C-API representation here
PlacementRef<Clip> ref1 (id1);
PlacementRef<MObject> ref2 (pClip2);
// -----Tests------------------
checkBuildMObjectRef (rP1, &pClip1);
checkBuildMObjectRef (rP2, &pClip2);
checkBuildMObjectRef (id1, &pClip1);
checkBuildMObjectRef (id2, &pClip2);
checkBuildMObjectRef (luid, &pClip1);
///////////////////////////////////////////TODO: check the C-API representation here
checkBuildMObjectRef (ref1, &pClip1);
checkBuildMObjectRef (ref2, &pClip2);
// -----Tests------------------
// verify clean state
@ -102,6 +123,47 @@ namespace test {
ASSERT (2 == pClip2.use_count());
reset_PlacementIndex();
}
template<typename REF>
void
checkBuildMObjectRef (REF refObj, void* placementAdr)
{
MORef<Clip> rMO;
ASSERT (!rMO); // still empty (not bound)
cout << rMO << endl;
cout << showSizeof(rMO) << endl;
// activate by binding to provided ref
rMO.activate(refObj);
ASSERT (rMO); // now bound
cout << rMO << endl;
// access MObject (Clip API)
cout << rMO->operator string() << endl;
cout << rMO->getMedia()->ident << endl;
ASSERT (rMO->isValid());
// access the Placement-API
ASSERT (2 == rMO.use_count()); // we are referring, not creating a new Placement
ASSERT (0 < rMO.getStartTime()); // (internally, this resolves to an ExplicitPlacement)
ASSERT ( rMO.isCompatible<MObject>());
ASSERT ( rMO.isCompatible<Clip>());
ASSERT (!rMO.isCompatible<TestSubMO1>());
Time start = rMO.getStartTime();
// re-link to the Placement (note we get the Clip API!)
Placement<Clip> & refP = rMO.getPlacement();
ASSERT (refP);
ASSERT (2 == refP.use_count());
ASSERT (&refP == placementAdr); // actually denotes the address of the original Placement in the "session"
cout << string(refP) << endl;
ExplicitPlacement exPla = refP.resolve();
ASSERT (exPla.time == start); // recovered Placement resolves to the same time as provided by the proxied API
ASSERT (3 == refP.use_count()); // but now we've indeed created an additional owner (exPla)
ASSERT (3 == rMO.use_count());
}
};