Activity-Lang: a way how to provide a faked Execution Context
...basically just delegated to DiagnosticFun instances, yet the actual setup is somwewhat tricky to get right
This commit is contained in:
parent
1c6ee62c1a
commit
dd44373166
5 changed files with 96 additions and 12 deletions
|
|
@ -154,12 +154,10 @@ namespace gear {
|
|||
"Execution-Context: " STRINGIFY(_FUN_) " expect function with signature: " STRINGIFY(_SIG_));
|
||||
|
||||
|
||||
EXE const& ctx = std::declval<EXE>();
|
||||
|
||||
ASSERT_MEMBER_FUNCTOR (ctx.post, Proc(Activity&, EXE&, Time));
|
||||
ASSERT_MEMBER_FUNCTOR (ctx.work, void(Time, size_t));
|
||||
ASSERT_MEMBER_FUNCTOR (ctx.done, void(Time, size_t));
|
||||
ASSERT_MEMBER_FUNCTOR (ctx.tick, Proc(Time));
|
||||
ASSERT_MEMBER_FUNCTOR (EXE::post, Proc(Activity&, EXE&, Time));
|
||||
ASSERT_MEMBER_FUNCTOR (EXE::work, void(Time, size_t));
|
||||
ASSERT_MEMBER_FUNCTOR (EXE::done, void(Time, size_t));
|
||||
ASSERT_MEMBER_FUNCTOR (EXE::tick, Proc(Time));
|
||||
|
||||
|
||||
#undef ASSERT_MEMBER_FUNCTOR
|
||||
|
|
|
|||
|
|
@ -69,6 +69,7 @@ namespace test {
|
|||
|
||||
verifyMockInvocation();
|
||||
verifyMockJobFunctor();
|
||||
verifyFakeExeContext();
|
||||
detect_activation();
|
||||
detect_gate();
|
||||
}
|
||||
|
|
@ -179,8 +180,26 @@ namespace test {
|
|||
|
||||
|
||||
|
||||
/** @test faked execution context to perform Activity activation
|
||||
* @todo WIP 8/23 🔁 define ⟶ implement
|
||||
*/
|
||||
void
|
||||
verifyFakeExeContext()
|
||||
{
|
||||
ActivityDetector detector;
|
||||
auto& ctx = detector.executionCtx;
|
||||
// an otherwise opaque object fulfilling the "Concept"
|
||||
activity::_verify_usable_as_ExecutionContext<decltype(detector.executionCtx)>();
|
||||
|
||||
Time t = lib::test::randTime();
|
||||
|
||||
CHECK (activity::PASS == ctx.tick(t));
|
||||
cout<<detector.showLog()<<endl;
|
||||
}
|
||||
|
||||
|
||||
/** @test TODO diagnostic setup to detect Activity activation and propagation
|
||||
* @todo WIP 7/23 ⟶ define ⟶ implement
|
||||
* @todo WIP 8/23 🔁 define ⟶ implement
|
||||
*/
|
||||
void
|
||||
detect_activation()
|
||||
|
|
|
|||
|
|
@ -124,6 +124,11 @@ namespace test {
|
|||
|
||||
using SIG_JobDiagnostic = void(TimeValue, int32_t);
|
||||
const size_t JOB_ARG_POS_TIME = 0;
|
||||
|
||||
const string CTX_POST{"post"};
|
||||
const string CTX_WORK{"work"};
|
||||
const string CTX_DONE{"done"};
|
||||
const string CTX_TICK{"tick"};
|
||||
}
|
||||
|
||||
class ActivityDetector;
|
||||
|
|
@ -282,7 +287,7 @@ namespace test {
|
|||
|
||||
/** mock function call operator: logs all invocations */
|
||||
RET
|
||||
operator() (ARGS const& ...args)
|
||||
operator() (ARGS ...args)
|
||||
{
|
||||
log_->call (log_->getID(), id_, args...)
|
||||
.addAttrib (MARK_SEQ, util::toString(*seqNr_));
|
||||
|
|
@ -401,6 +406,39 @@ namespace test {
|
|||
}
|
||||
|
||||
|
||||
|
||||
struct FakeExecutionCtx;
|
||||
using SIG_post = activity::Proc(Activity&, FakeExecutionCtx&, Time);
|
||||
using SIG_work = void(Time, size_t);
|
||||
using SIG_done = void(Time, size_t);
|
||||
using SIG_tick = activity::Proc(Time);
|
||||
|
||||
/**
|
||||
* Mock setup of the execution context for Activity activation.
|
||||
* The instance #executionCtx is wired back with the #eventLog_
|
||||
* and allows thus to detect and verify all callbacks from the Activities.
|
||||
* @note the return value of the #post and #tick functions can be changed
|
||||
* to another fixed response by calling DiagnosticFun::returning
|
||||
*/
|
||||
struct FakeExecutionCtx
|
||||
{
|
||||
_DiagnosticFun<SIG_post>::Type post;
|
||||
_DiagnosticFun<SIG_work>::Type work;
|
||||
_DiagnosticFun<SIG_done>::Type done;
|
||||
_DiagnosticFun<SIG_tick>::Type tick;
|
||||
|
||||
FakeExecutionCtx (ActivityDetector& adi)
|
||||
: post{adi.buildDiagnosticFun<SIG_post>(CTX_POST).returning(activity::PASS)}
|
||||
, work{adi.buildDiagnosticFun<SIG_work>(CTX_WORK)}
|
||||
, done{adi.buildDiagnosticFun<SIG_done>(CTX_DONE)}
|
||||
, tick{adi.buildDiagnosticFun<SIG_tick>(CTX_TICK).returning(activity::PASS)}
|
||||
{ }
|
||||
};
|
||||
|
||||
FakeExecutionCtx executionCtx{*this};
|
||||
|
||||
|
||||
|
||||
ActivityMatch
|
||||
verifyInvocation (string fun)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@
|
|||
|
||||
|
||||
#include "lib/test/run.hpp"
|
||||
#include "activity-detector.hpp"
|
||||
#include "vault/gear/activity-lang.hpp"
|
||||
#include "lib/time/timevalue.hpp"
|
||||
//#include "lib/format-cout.hpp"
|
||||
|
|
@ -78,7 +79,7 @@ namespace test {
|
|||
|
||||
|
||||
/** @test TODO demonstrate a simple usage scenario
|
||||
* @todo WIP 7/23 ⟶ define ⟶ implement
|
||||
* @todo WIP 7/23 🔁 define 🔁 implement
|
||||
*/
|
||||
void
|
||||
simpleUsage()
|
||||
|
|
@ -94,11 +95,12 @@ namespace test {
|
|||
|
||||
|
||||
/** @test TODO behaviour of Activity::INVOKE
|
||||
* @todo WIP 7/23 ⟶ define ⟶ implement
|
||||
* @todo WIP 7/23 🔁 define ⟶ implement
|
||||
*/
|
||||
void
|
||||
verifyActivity_Invoke()
|
||||
{
|
||||
ActivityDetector detector;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -78454,7 +78454,13 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1690068793535" ID="ID_1906823317" MODIFIED="1690068819476" TEXT="ist implementiert durch die ActivityLang selber"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1690068793535" ID="ID_1906823317" MODIFIED="1692286273670" TEXT="ist implementiert durch die ActivityLang selber">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1692286145852" ID="ID_596906210" MODIFIED="1692286248899" TEXT="Fake-Setup für Tests (ActivityDetector)">
|
||||
<arrowlink COLOR="#433d62" DESTINATION="ID_902152915" ENDARROW="Default" ENDINCLINATION="656;-38;" ID="Arrow_ID_644734597" STARTARROW="None" STARTINCLINATION="1154;77;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1690068830605" ID="ID_330404913" MODIFIED="1690068833053" TEXT="Invocation">
|
||||
|
|
@ -79425,10 +79431,14 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1689201354393" HGAP="24" ID="ID_1250518280" MODIFIED="1689201365333" TEXT="Hilfsmittel" VSHIFT="2">
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1689201660559" ID="ID_747497995" MODIFIED="1692057369715" TEXT="ActivityDetector">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node CREATED="1689201667734" ID="ID_901153159" MODIFIED="1689201676495" TEXT="speziell verdrahtete Activity">
|
||||
<node CREATED="1689201667734" ID="ID_901153159" MODIFIED="1692286015665" TEXT="speziell verdrahtetes Setup">
|
||||
<icon BUILTIN="info"/>
|
||||
<node CREATED="1689201677836" ID="ID_166879509" MODIFIED="1689201693231" TEXT="kann ihre Aktivierung dokumentieren"/>
|
||||
<node CREATED="1689201999161" ID="ID_554259263" MODIFIED="1689202008524" TEXT="kann Gate-Verhalten aufzeichnen"/>
|
||||
<node CREATED="1692286019936" ID="ID_902152915" MODIFIED="1692286702295" TEXT="bietet ExecutionContext-Fake">
|
||||
<arrowlink COLOR="#7d5f6b" DESTINATION="ID_1648694746" ENDARROW="Default" ENDINCLINATION="-155;-594;" ID="Arrow_ID_1288986872" STARTARROW="None" STARTINCLINATION="668;64;"/>
|
||||
<linktarget COLOR="#433d62" DESTINATION="ID_902152915" ENDARROW="Default" ENDINCLINATION="656;-38;" ID="Arrow_ID_644734597" SOURCE="ID_596906210" STARTARROW="None" STARTINCLINATION="1154;77;"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1689202062345" ID="ID_373470992" MODIFIED="1692057818268" TEXT="implementiert als eigenständiges Test-Hilfsmittel">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
|
|
@ -82030,6 +82040,23 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1692286331547" ID="ID_1648694746" MODIFIED="1692286680929" TEXT="FakeExecutionCtx bereitstellen">
|
||||
<linktarget COLOR="#7d5f6b" DESTINATION="ID_1648694746" ENDARROW="Default" ENDINCLINATION="-155;-594;" ID="Arrow_ID_1288986872" SOURCE="ID_902152915" STARTARROW="None" STARTINCLINATION="668;64;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1692286350353" ID="ID_592111396" MODIFIED="1692293651780" TEXT="bietet die notwendingen λ-Bindings">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node CREATED="1690069222750" ID="ID_1750846288" MODIFIED="1692293582767" TEXT="λ-post: (Activity, ExecutionCtx, Time) activity::Proc ⟼ activity::Proc"/>
|
||||
<node CREATED="1690069365933" ID="ID_832098393" MODIFIED="1692286755765" TEXT="λ-work: (Time, quality)"/>
|
||||
<node CREATED="1690069480630" ID="ID_320780008" MODIFIED="1692286762564" TEXT="λ-done: (Time, quality)"/>
|
||||
<node CREATED="1690069554609" ID="ID_761100089" MODIFIED="1692286770500" TEXT="λ-tick: (Time) ⟼ activity::Proc"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1692286383148" ID="ID_675137089" MODIFIED="1692286389285" TEXT="diese sind per Log verifizierbar">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1692286398114" ID="ID_482490572" MODIFIED="1692293638298" TEXT="präparierte Rückgabewerte">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1689205081622" ID="ID_1440811513" MODIFIED="1689205086027" TEXT="Meßpunkte">
|
||||
|
|
|
|||
Loading…
Reference in a new issue