zippa
Version:
A Generic Zipper Library
69 lines (48 loc) • 1.92 kB
JavaScript
;
var _chai = require('chai');
var _chai2 = _interopRequireDefault(_chai);
var _sinonChai = require('sinon-chai');
var _sinonChai2 = _interopRequireDefault(_sinonChai);
var _index = require('../index');
var _tree_zipper = require('./tree_zipper');
var _utils = require('./utils');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
_chai2.default.use(_sinonChai2.default);
var expect = _chai2.default.expect;
var log = function log(node) {
console.log('LOG NODE:', node.data);
return node;
};
describe('TreeZipper walk', function () {
function getTree() {
return new _tree_zipper.Node(1, [new _tree_zipper.Node(2, [new _tree_zipper.Node(4), new _tree_zipper.Node(5)]), new _tree_zipper.Node(3)]);
}
function incrementNode(node) {
return new _tree_zipper.Node(node.data + 1, node.children);
}
it('postwalk works', function () {
var z = _tree_zipper.TreeZipper.from(getTree());
var initialNumbers = (0, _utils.collect)(function (node) {
return node.data;
}, z);
expect(initialNumbers).to.deep.equal([1, 2, 4, 5, 3]);
// Do the incrementation.
z = (0, _index.postWalk)(incrementNode, z);
// Check result.
var afterNumbers = (0, _utils.collect)(function (node) {
return node.data;
}, z);
expect(afterNumbers).to.deep.equal([2, 3, 5, 6, 4]);
});
it('prewalk is in correct order', function () {
var z = _tree_zipper.TreeZipper.from(getTree());
function _gatherNumbers(listRef, node) {
listRef.push(node.data);
return node;
}
var treeNumbers = [];
var gatherNumbers = _gatherNumbers.bind(null, treeNumbers);
z = (0, _index.preWalk)(gatherNumbers, z);
expect(treeNumbers).to.deep.equal([1, 2, 4, 5, 3]);
});
});