xterm
Version:
Full xterm terminal, in your browser
263 lines (261 loc) • 11.1 kB
JavaScript
;
var __extends = (this && this.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
var chai_1 = require("chai");
var CircularList_1 = require("./CircularList");
var TestCircularList = (function (_super) {
__extends(TestCircularList, _super);
function TestCircularList() {
return _super !== null && _super.apply(this, arguments) || this;
}
Object.defineProperty(TestCircularList.prototype, "array", {
get: function () { return this._array; },
enumerable: true,
configurable: true
});
return TestCircularList;
}(CircularList_1.CircularList));
describe('CircularList', function () {
describe('push', function () {
it('should push values onto the array', function () {
var list = new CircularList_1.CircularList(5);
list.push('1');
list.push('2');
list.push('3');
list.push('4');
list.push('5');
chai_1.assert.equal(list.get(0), '1');
chai_1.assert.equal(list.get(1), '2');
chai_1.assert.equal(list.get(2), '3');
chai_1.assert.equal(list.get(3), '4');
chai_1.assert.equal(list.get(4), '5');
});
it('should push old values from the start out of the array when max length is reached', function () {
var list = new CircularList_1.CircularList(2);
list.push('1');
list.push('2');
chai_1.assert.equal(list.get(0), '1');
chai_1.assert.equal(list.get(1), '2');
list.push('3');
chai_1.assert.equal(list.get(0), '2');
chai_1.assert.equal(list.get(1), '3');
list.push('4');
chai_1.assert.equal(list.get(0), '3');
chai_1.assert.equal(list.get(1), '4');
});
});
describe('maxLength', function () {
it('should increase the size of the list', function () {
var list = new CircularList_1.CircularList(2);
list.push('1');
list.push('2');
chai_1.assert.equal(list.get(0), '1');
chai_1.assert.equal(list.get(1), '2');
list.maxLength = 4;
list.push('3');
list.push('4');
chai_1.assert.equal(list.get(0), '1');
chai_1.assert.equal(list.get(1), '2');
chai_1.assert.equal(list.get(2), '3');
chai_1.assert.equal(list.get(3), '4');
list.push('wrapped');
chai_1.assert.equal(list.get(0), '2');
chai_1.assert.equal(list.get(1), '3');
chai_1.assert.equal(list.get(2), '4');
chai_1.assert.equal(list.get(3), 'wrapped');
});
it('should return the maximum length of the list', function () {
var list = new CircularList_1.CircularList(2);
chai_1.assert.equal(list.maxLength, 2);
list.push('1');
list.push('2');
chai_1.assert.equal(list.maxLength, 2);
list.push('3');
chai_1.assert.equal(list.maxLength, 2);
list.maxLength = 4;
chai_1.assert.equal(list.maxLength, 4);
});
});
describe('length', function () {
it('should return the current length of the list, capped at the maximum length', function () {
var list = new CircularList_1.CircularList(2);
chai_1.assert.equal(list.length, 0);
list.push('1');
chai_1.assert.equal(list.length, 1);
list.push('2');
chai_1.assert.equal(list.length, 2);
list.push('3');
chai_1.assert.equal(list.length, 2);
});
});
describe('splice', function () {
it('should delete items', function () {
var list = new CircularList_1.CircularList(2);
list.push('1');
list.push('2');
list.splice(0, 1);
chai_1.assert.equal(list.length, 1);
chai_1.assert.equal(list.get(0), '2');
list.push('3');
list.splice(1, 1);
chai_1.assert.equal(list.length, 1);
chai_1.assert.equal(list.get(0), '2');
});
it('should insert items', function () {
var list = new CircularList_1.CircularList(2);
list.push('1');
list.splice(0, 0, '2');
chai_1.assert.equal(list.length, 2);
chai_1.assert.equal(list.get(0), '2');
chai_1.assert.equal(list.get(1), '1');
list.splice(1, 0, '3');
chai_1.assert.equal(list.length, 2);
chai_1.assert.equal(list.get(0), '3');
chai_1.assert.equal(list.get(1), '1');
});
it('should delete items then insert items', function () {
var list = new CircularList_1.CircularList(3);
list.push('1');
list.push('2');
list.splice(0, 1, '3', '4');
chai_1.assert.equal(list.length, 3);
chai_1.assert.equal(list.get(0), '3');
chai_1.assert.equal(list.get(1), '4');
chai_1.assert.equal(list.get(2), '2');
});
it('should wrap the array correctly when more items are inserted than deleted', function () {
var list = new CircularList_1.CircularList(3);
list.push('1');
list.push('2');
list.splice(1, 0, '3', '4');
chai_1.assert.equal(list.length, 3);
chai_1.assert.equal(list.get(0), '3');
chai_1.assert.equal(list.get(1), '4');
chai_1.assert.equal(list.get(2), '2');
});
});
describe('trimStart', function () {
it('should remove items from the beginning of the list', function () {
var list = new CircularList_1.CircularList(5);
list.push('1');
list.push('2');
list.push('3');
list.push('4');
list.push('5');
list.trimStart(1);
chai_1.assert.equal(list.length, 4);
chai_1.assert.deepEqual(list.get(0), '2');
chai_1.assert.deepEqual(list.get(1), '3');
chai_1.assert.deepEqual(list.get(2), '4');
chai_1.assert.deepEqual(list.get(3), '5');
list.trimStart(2);
chai_1.assert.equal(list.length, 2);
chai_1.assert.deepEqual(list.get(0), '4');
chai_1.assert.deepEqual(list.get(1), '5');
});
it('should remove all items if the requested trim amount is larger than the list\'s length', function () {
var list = new CircularList_1.CircularList(5);
list.push('1');
list.trimStart(2);
chai_1.assert.equal(list.length, 0);
});
});
describe('shiftElements', function () {
it('should not mutate the list when count is 0', function () {
var list = new CircularList_1.CircularList(5);
list.push(1);
list.push(2);
list.shiftElements(0, 0, 1);
chai_1.assert.equal(list.length, 2);
chai_1.assert.equal(list.get(0), 1);
chai_1.assert.equal(list.get(1), 2);
});
it('should throw for invalid args', function () {
var list = new CircularList_1.CircularList(5);
list.push(1);
chai_1.assert.throws(function () { return list.shiftElements(-1, 1, 1); }, 'start argument out of range');
chai_1.assert.throws(function () { return list.shiftElements(1, 1, 1); }, 'start argument out of range');
chai_1.assert.throws(function () { return list.shiftElements(0, 1, -1); }, 'Cannot shift elements in list beyond index 0');
});
it('should shift an element forward', function () {
var list = new CircularList_1.CircularList(5);
list.push(1);
list.push(2);
list.shiftElements(0, 1, 1);
chai_1.assert.equal(list.length, 2);
chai_1.assert.equal(list.get(0), 1);
chai_1.assert.equal(list.get(1), 1);
});
it('should shift elements forward', function () {
var list = new CircularList_1.CircularList(5);
list.push(1);
list.push(2);
list.push(3);
list.push(4);
list.shiftElements(0, 2, 2);
chai_1.assert.equal(list.length, 4);
chai_1.assert.equal(list.get(0), 1);
chai_1.assert.equal(list.get(1), 2);
chai_1.assert.equal(list.get(2), 1);
chai_1.assert.equal(list.get(3), 2);
});
it('should shift elements forward, expanding the list if needed', function () {
var list = new CircularList_1.CircularList(5);
list.push(1);
list.push(2);
list.shiftElements(0, 2, 2);
chai_1.assert.equal(list.length, 4);
chai_1.assert.equal(list.get(0), 1);
chai_1.assert.equal(list.get(1), 2);
chai_1.assert.equal(list.get(2), 1);
chai_1.assert.equal(list.get(3), 2);
});
it('should shift elements forward, wrapping the list if needed', function () {
var list = new CircularList_1.CircularList(5);
list.push(1);
list.push(2);
list.push(3);
list.push(4);
list.push(5);
list.shiftElements(2, 2, 3);
chai_1.assert.equal(list.length, 5);
chai_1.assert.equal(list.get(0), 3);
chai_1.assert.equal(list.get(1), 4);
chai_1.assert.equal(list.get(2), 5);
chai_1.assert.equal(list.get(3), 3);
chai_1.assert.equal(list.get(4), 4);
});
it('should shift an element backwards', function () {
var list = new CircularList_1.CircularList(5);
list.push(1);
list.push(2);
list.shiftElements(1, 1, -1);
chai_1.assert.equal(list.length, 2);
chai_1.assert.equal(list.get(0), 2);
chai_1.assert.equal(list.get(1), 2);
});
it('should shift elements backwards', function () {
var list = new CircularList_1.CircularList(5);
list.push(1);
list.push(2);
list.push(3);
list.push(4);
list.shiftElements(2, 2, -2);
chai_1.assert.equal(list.length, 4);
chai_1.assert.equal(list.get(0), 3);
chai_1.assert.equal(list.get(1), 4);
chai_1.assert.equal(list.get(2), 3);
chai_1.assert.equal(list.get(3), 4);
});
});
});
//# sourceMappingURL=CircularList.test.js.map