var DLList = require('../lib/DLList') var assert = require('assert') var c = require('./context')({datastore: 'local'}) var fakeQueues = function () { this._length = 0 this.incr = () => this._length++ this.decr = () => this._length-- } describe('DLList', function () { it('Should be created and be empty', function () { var list = new DLList(new fakeQueues()) c.mustEqual(list.getArray().length, 0) }) it('Should be possible to append once', function () { var list = new DLList(new fakeQueues()) list.push(5) var arr = list.getArray() c.mustEqual(arr.length, 1) c.mustEqual(list.length, 1) c.mustEqual(list._queues._length, 1) c.mustEqual(arr[0], 5) }) it('Should be possible to append multiple times', function () { var list = new DLList(new fakeQueues()) list.push(5) list.push(6) var arr = list.getArray() c.mustEqual(arr.length, 2) c.mustEqual(list.length, 2) c.mustEqual(list._queues._length, 2) c.mustEqual(arr[0], 5) c.mustEqual(arr[1], 6) list.push(10) arr = list.getArray() c.mustEqual(arr.length, 3) c.mustEqual(list.length, 3) c.mustEqual(arr[0], 5) c.mustEqual(arr[1], 6) c.mustEqual(arr[2], 10) }) it('Should be possible to shift an empty list', function () { var list = new DLList(new fakeQueues()) c.mustEqual(list.length, 0) assert(list.shift() === undefined) var arr = list.getArray() c.mustEqual(arr.length, 0) c.mustEqual(list.length, 0) assert(list.shift() === undefined) arr = list.getArray() c.mustEqual(arr.length, 0) c.mustEqual(list.length, 0) c.mustEqual(list._queues._length, 0) }) it('Should be possible to append then shift once', function () { var list = new DLList(new fakeQueues()) list.push(5) c.mustEqual(list.length, 1) c.mustEqual(list.shift(), 5) var arr = list.getArray() c.mustEqual(arr.length, 0) c.mustEqual(list.length, 0) c.mustEqual(list._queues._length, 0) }) it('Should be possible to append then shift multiple times', function () { var list = new DLList(new fakeQueues()) list.push(5) c.mustEqual(list.length, 1) c.mustEqual(list.shift(), 5) c.mustEqual(list.length, 0) list.push(6) c.mustEqual(list.length, 1) c.mustEqual(list.shift(), 6) c.mustEqual(list.length, 0) c.mustEqual(list._queues._length, 0) }) it('Should pass a full test', function () { var list = new DLList(new fakeQueues()) list.push(10) c.mustEqual(list.length, 1) list.push("11") c.mustEqual(list.length, 2) list.push(12) c.mustEqual(list.length, 3) c.mustEqual(list._queues._length, 3) c.mustEqual(list.shift(), 10) c.mustEqual(list.length, 2) c.mustEqual(list.shift(),"11") c.mustEqual(list.length, 1) list.push(true) c.mustEqual(list.length, 2) var arr = list.getArray() c.mustEqual(arr[0], 12) c.mustEqual(arr[1], true) c.mustEqual(arr.length, 2) c.mustEqual(list._queues._length, 2) }) it('Should return the first value without shifting', function () { var list = new DLList(new fakeQueues()) assert(list.first() === undefined) assert(list.first() === undefined) list.push(1) c.mustEqual(list.first(), 1) c.mustEqual(list.first(), 1) list.push(2) c.mustEqual(list.first(), 1) c.mustEqual(list.first(), 1) c.mustEqual(list.shift(), 1) c.mustEqual(list.first(), 2) c.mustEqual(list.first(), 2) c.mustEqual(list.shift(), 2) assert(list.first() === undefined) assert(list.first() === undefined) assert(list.first() === undefined) assert(list.shift() === undefined) assert(list.first() === undefined) }) })