UNPKG

blueshell

Version:

A Behavior Tree implementation in modern Javascript

124 lines 4.79 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, result = lib_1.rc.SUCCESS) { super(name); this.result = result; this.eventCount = 0; } onEvent(state, event) { this.eventCount++; return this.result; } } describe('LatchedSwitch', function () { it('executes the child of the first matching switch entry', function () { const testAction0 = new TestAction('0'); const testAction1 = new TestAction('1'); const testAction2 = new TestAction('2'); const switchEntries = [ { conditional: (state, event) => state.switchEntryIndex === 0, child: testAction0, }, { conditional: (state, event) => state.switchEntryIndex === 1, child: testAction1, }, { conditional: (state, event) => state.switchEntryIndex === 2, child: testAction2, }, ]; const uut = new lib_1.LatchedSwitch('uut', switchEntries); const state = { __blueshell: {}, switchEntryIndex: 1, }; const result = uut.handleEvent(state, 1); chai_1.assert.strictEqual(result, lib_1.rc.SUCCESS); chai_1.assert.strictEqual(testAction0.eventCount, 0); chai_1.assert.strictEqual(testAction1.eventCount, 1); chai_1.assert.strictEqual(testAction2.eventCount, 0); }); it('assumes that a switchEntry with a missing condition always matches', function () { const testAction0 = new TestAction('0'); const testAction1 = new TestAction('1'); const switchEntries = [ { conditional: (state, event) => false, child: testAction0, }, { child: testAction1, }, ]; const uut = new lib_1.LatchedSwitch('uut', switchEntries); const state = { __blueshell: {}, switchEntryIndex: 1, }; const result = uut.handleEvent(state, 1); chai_1.assert.strictEqual(result, lib_1.rc.SUCCESS); chai_1.assert.strictEqual(testAction0.eventCount, 0); chai_1.assert.strictEqual(testAction1.eventCount, 1); }); it('returns the defaultResult when there are no matching switch entries', function () { const switchEntries = []; const uut = new lib_1.LatchedSwitch('uut', switchEntries, lib_1.rc.FAILURE); const state = { __blueshell: {}, switchEntryIndex: 1, }; const result = uut.handleEvent(state, 1); chai_1.assert.strictEqual(result, lib_1.rc.FAILURE); }); it('defaults defaultResult to SUCCESS', function () { const switchEntries = []; const uut = new lib_1.LatchedSwitch('uut', switchEntries); const state = { __blueshell: {}, switchEntryIndex: 1, }; const result = uut.handleEvent(state, 1); chai_1.assert.strictEqual(result, lib_1.rc.SUCCESS); }); it('latches', function () { const testAction0 = new TestAction('0', lib_1.rc.RUNNING); const testAction1 = new TestAction('1', lib_1.rc.RUNNING); const testAction2 = new TestAction('2', lib_1.rc.RUNNING); const switchEntries = [ { conditional: (state, event) => state.switchEntryIndex === 0, child: testAction0, }, { conditional: (state, event) => state.switchEntryIndex === 1, child: testAction1, }, { conditional: (state, event) => state.switchEntryIndex === 2, child: testAction2, }, ]; const uut = new lib_1.LatchedSwitch('uut', switchEntries); const state = { __blueshell: {}, switchEntryIndex: 1, }; let result = uut.handleEvent(state, 1); chai_1.assert.strictEqual(result, lib_1.rc.RUNNING); chai_1.assert.strictEqual(testAction0.eventCount, 0); chai_1.assert.strictEqual(testAction1.eventCount, 1); chai_1.assert.strictEqual(testAction2.eventCount, 0); state.switchEntryIndex = 0; result = uut.handleEvent(state, 1); chai_1.assert.strictEqual(result, lib_1.rc.RUNNING); chai_1.assert.strictEqual(testAction0.eventCount, 0); chai_1.assert.strictEqual(testAction1.eventCount, 2); chai_1.assert.strictEqual(testAction2.eventCount, 0); }); }); //# sourceMappingURL=LatchedSwitch.test.js.map