diff --git a/dist/tests/01-ping-pong.js b/dist/tests/01-ping-pong.js index dda4210..9f256d1 100644 --- a/dist/tests/01-ping-pong.js +++ b/dist/tests/01-ping-pong.js @@ -15,6 +15,9 @@ var Goto = function(targetStateName) { return { type: "Goto", targetStateName }; }; + var Context = function(fn) { + return { type: "ContextMutation", fn }; + }; function interpret(machine, options) { let { state, context } = options; if (typeof state === "undefined") { @@ -86,11 +89,11 @@ send(ctx.clientActor, ["received-response", self]); }; var startTimer = async (ctx, e, self) => { - await wait(500); + await wait(1500); send(self, ["timer-finished", null]); }; var log = (ctx, e, self) => { - console.log(self.state); + console.log(self.state, ctx); }; var client = Machine( State( @@ -113,6 +116,7 @@ "entry", SideEffect(log), SideEffect(makeRequest), + Context((ctx) => ({ ...ctx, requestsMade: ctx.requestsMade + 1 })), Goto("awaiting-response") ) ), @@ -125,6 +129,7 @@ On( "received-response", SideEffect(log), + Context((ctx) => ({ ...ctx, responsesReceived: ctx.responsesReceived + 1 })), Goto("making-request") ) ) @@ -158,7 +163,7 @@ ) ) ); - var clientActor = interpret(client, { context: {} }); + var clientActor = interpret(client, { context: { requestsMade: 0, responsesReceived: 0 } }); var serverActor = interpret(server, { context: {} }); send(clientActor, ["server-created", serverActor]); })(); diff --git a/src/tests/01-ping-pong.ts b/src/tests/01-ping-pong.ts index 2c7b5a1..330b0f0 100644 --- a/src/tests/01-ping-pong.ts +++ b/src/tests/01-ping-pong.ts @@ -1,21 +1,10 @@ -import { Machine, State, On, SideEffect, Goto, Spawn, Unspawn, interpret, Interpreter_T, send, Event_T } from '../index'; +import { Machine, State, On, SideEffect, Goto, Spawn, Unspawn, interpret, Interpreter_T, send, Event_T, Context } from '../index'; const wait = (ms:number)=>new Promise((resolve)=>{ setTimeout(()=>{ resolve(1); }, ms); }); const makeRequest = (ctx,e,self)=>{ send(ctx.serverActor, ['received-request',self]); }; const sendResponse = (ctx,e,self)=>{ send(ctx.clientActor, ['received-response',self]); }; -const startTimer = async (ctx,e,self)=>{ await wait(500); send(self, ['timer-finished',null]); } -const log = (ctx, e, self:Interpreter_T)=>{ console.log(self.state); }; - -type Sc = - | 'idle' - | 'making-request' - | 'awaiting-response'; -type Ec = - | ['entry',null] - | ['received-response',Interpreter_T] - | ['server-created', Interpreter_T]; -type Cc = - | {serverActor?:Interpreter_T}; +const startTimer = async (ctx,e,self)=>{ await wait(1500); send(self, ['timer-finished',null]); } +const log = (ctx, e, self:Interpreter_T)=>{ console.log(self.state, ctx); }; const client = Machine( @@ -32,6 +21,7 @@ const client = On('entry', SideEffect(log), SideEffect(makeRequest), + Context((ctx)=>({...ctx, requestsMade: ctx.requestsMade+1})), Goto('awaiting-response') ), ), @@ -41,20 +31,12 @@ const client = ), On('received-response', SideEffect(log), + Context((ctx)=>({...ctx, responsesReceived: ctx.responsesReceived+1})), Goto('making-request') ), ), ); -type Ss = - | 'awaiting-request' - | 'sending-response'; -type Es = - | ['entry',null] - | ['received-request',Interpreter_T] - | ['timer-finished', null]; -type Cs = {clientActor?:Interpreter_T}; - const server = Machine( State('awaiting-request', @@ -78,6 +60,6 @@ const server = ), ); -const clientActor = interpret(client, {context:{}}); +const clientActor = interpret(client, {context:{requestsMade:0, responsesReceived:0}}); const serverActor = interpret(server, {context:{}}); send(clientActor, ['server-created', serverActor]); \ No newline at end of file