WIP: test driven brainstorming: basic MObjectRef behaviour
This commit is contained in:
parent
091c3a20ef
commit
2731e34c3e
2 changed files with 64 additions and 1 deletions
|
|
@ -46,6 +46,7 @@
|
||||||
|
|
||||||
//#include <tr1/memory>
|
//#include <tr1/memory>
|
||||||
|
|
||||||
|
///////////////////////////////////////////TODO: define an C-API representation here, make the header multilingual!
|
||||||
|
|
||||||
namespace mobject {
|
namespace mobject {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,23 +23,26 @@
|
||||||
|
|
||||||
#include "lib/test/run.hpp"
|
#include "lib/test/run.hpp"
|
||||||
#include "lib/lumitime.hpp"
|
#include "lib/lumitime.hpp"
|
||||||
|
#include "proc/asset/media.hpp"
|
||||||
#include "proc/mobject/mobject.hpp"
|
#include "proc/mobject/mobject.hpp"
|
||||||
#include "proc/mobject/mobject-ref.hpp"
|
#include "proc/mobject/mobject-ref.hpp"
|
||||||
#include "proc/mobject/placement.hpp"
|
#include "proc/mobject/placement.hpp"
|
||||||
#include "proc/mobject/placement-ref.hpp"
|
#include "proc/mobject/placement-ref.hpp"
|
||||||
|
#include "proc/mobject/session/clip.hpp"
|
||||||
#include "proc/mobject/explicitplacement.hpp"
|
#include "proc/mobject/explicitplacement.hpp"
|
||||||
#include "proc/mobject/test-dummy-mobject.hpp"
|
#include "proc/mobject/test-dummy-mobject.hpp"
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
using lumiera::Time;
|
|
||||||
using std::string;
|
using std::string;
|
||||||
using std::cout;
|
using std::cout;
|
||||||
|
using std::endl;
|
||||||
|
|
||||||
|
|
||||||
namespace mobject {
|
namespace mobject {
|
||||||
namespace test {
|
namespace test {
|
||||||
|
|
||||||
|
using lumiera::Time;
|
||||||
using session::Clip;
|
using session::Clip;
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -90,8 +93,26 @@ namespace test {
|
||||||
index->insert (pClip2, root);
|
index->insert (pClip2, root);
|
||||||
ASSERT (2 == index->size());
|
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------------------
|
// -----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------------------
|
// -----Tests------------------
|
||||||
|
|
||||||
// verify clean state
|
// verify clean state
|
||||||
|
|
@ -102,6 +123,47 @@ namespace test {
|
||||||
ASSERT (2 == pClip2.use_count());
|
ASSERT (2 == pClip2.use_count());
|
||||||
reset_PlacementIndex();
|
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());
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue