UNPKG

blueshell

Version:

A Behavior Tree implementation in modern Javascript

100 lines 4.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const chai_1 = require("chai"); const lib_1 = require("../../../lib"); class TestAction extends lib_1.Action { constructor(name, sequence = [{ rc: lib_1.rc.SUCCESS, inc: true }]) { super(name); this.sequence = sequence; this.eventCount = 0; this.currentSequenceIdx = 0; } onEvent(state, event) { this.eventCount++; const sequenceEntry = this.sequence[this.currentSequenceIdx]; if (sequenceEntry.inc) { state.counter++; } this.incrementCurrentResultSequenceIdx(); return sequenceEntry.rc; } incrementCurrentResultSequenceIdx() { if (++this.currentSequenceIdx >= this.sequence.length) { this.currentSequenceIdx = 0; } } } describe('While', function () { it('executes the child action until condition is met and returns the child result', function () { const testAction = new TestAction('testAction', [{ rc: lib_1.rc.FAILURE, inc: true }]); const uut = new lib_1.decorators.While('uut', (state, event) => { return state.counter < 1; }, testAction); const state = { __blueshell: {}, counter: 0, }; const result = uut.handleEvent(state, 0); chai_1.assert.strictEqual(lib_1.rc.FAILURE, result); chai_1.assert.strictEqual(state.counter, 1); chai_1.assert.strictEqual(testAction.eventCount, 1); }); it('returns defaultResult when the condition is already met', function () { const testAction = new TestAction(); const uut = new lib_1.decorators.While('uut', (state, event) => { return state.counter < 1; }, testAction, lib_1.rc.FAILURE); const state = { __blueshell: {}, counter: 1, }; const result = uut.handleEvent(state, 0); chai_1.assert.strictEqual(lib_1.rc.FAILURE, result); chai_1.assert.strictEqual(state.counter, 1); chai_1.assert.strictEqual(testAction.eventCount, 0); }); it('defaults defaultResult to SUCCESS', function () { const testAction = new TestAction(); const uut = new lib_1.decorators.While('uut', (state, event) => { return state.counter < 1; }, testAction); const state = { __blueshell: {}, counter: 1, }; const result = uut.handleEvent(state, 0); chai_1.assert.strictEqual(lib_1.rc.SUCCESS, result); chai_1.assert.strictEqual(state.counter, 1); chai_1.assert.strictEqual(testAction.eventCount, 0); }); it('latches', function () { const testAction = new TestAction('testAction', [ { rc: lib_1.rc.RUNNING, inc: true }, { rc: lib_1.rc.SUCCESS, inc: false }, ]); const uut = new lib_1.decorators.While('uut', (state, event) => { return state.counter < 3; }, testAction); const state = { __blueshell: {}, counter: 0, }; let result = uut.handleEvent(state, 0); chai_1.assert.strictEqual(lib_1.rc.RUNNING, result); chai_1.assert.strictEqual(state.counter, 1); chai_1.assert.strictEqual(testAction.eventCount, 1); result = uut.handleEvent(state, 0); chai_1.assert.strictEqual(lib_1.rc.RUNNING, result); chai_1.assert.strictEqual(state.counter, 2); chai_1.assert.strictEqual(testAction.eventCount, 3); result = uut.handleEvent(state, 0); chai_1.assert.strictEqual(lib_1.rc.RUNNING, result); chai_1.assert.strictEqual(state.counter, 3); chai_1.assert.strictEqual(testAction.eventCount, 5); result = uut.handleEvent(state, 0); chai_1.assert.strictEqual(lib_1.rc.SUCCESS, result); chai_1.assert.strictEqual(state.counter, 3); chai_1.assert.strictEqual(testAction.eventCount, 6); }); }); //# sourceMappingURL=While.test.js.map