behaviortree
Version:
A JavaScript implementation of Behavior Trees. They are useful for implementing AIs. For Browsers and NodeJS.
50 lines (49 loc) • 2.08 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
/* eslint-env jest */
const constants_1 = require("./constants");
const Decorator_1 = __importDefault(require("./Decorator"));
const Task_1 = __importDefault(require("./Task"));
describe('Decorator', () => {
it('does nothing by itself', () => {
const task = new Task_1.default({
run(blackboard) {
return blackboard.result;
}
});
expect(task.run({ result: constants_1.SUCCESS })).toEqual(constants_1.SUCCESS);
expect(task.run({ result: constants_1.FAILURE })).toEqual(constants_1.FAILURE);
expect(task.run({ result: constants_1.RUNNING })).toEqual(constants_1.RUNNING);
const decoratedTask = new Decorator_1.default({ node: task });
expect(decoratedTask.run({ result: constants_1.SUCCESS })).toEqual(constants_1.SUCCESS);
expect(decoratedTask.run({ result: constants_1.FAILURE })).toEqual(constants_1.FAILURE);
expect(decoratedTask.run({ result: constants_1.RUNNING })).toEqual(constants_1.RUNNING);
});
it('can have a start and end callback', () => {
const blackboard = { start: 0, end: 0, result: constants_1.RUNNING };
const task = new Task_1.default({
run(blackboard) {
return blackboard.result;
}
});
const decoratedTask = new Decorator_1.default({
start: function (b) {
++b.start;
},
end: function (b) {
++b.end;
},
node: task
});
decoratedTask.run(blackboard);
expect(blackboard.start).toEqual(1);
expect(blackboard.end).toEqual(0);
blackboard.result = constants_1.FAILURE;
decoratedTask.run(blackboard, { rerun: true });
expect(blackboard.start).toEqual(1);
expect(blackboard.end).toEqual(1);
});
});