UNPKG

openlayers

Version:

Build tools and sources for developing OpenLayers based mapping applications

268 lines (232 loc) 7.25 kB
goog.provide('ol.test.structs.LinkedList'); goog.require('ol.structs.LinkedList'); describe('ol.structs.LinkedList', function() { var ll; var item = {}; var item2 = {}; beforeEach(function() { ll = new ol.structs.LinkedList(); }); it('defaults to circular', function() { expect(ll.circular_).to.be(true); }); it('creates an empty list', function() { expect(ll.length_).to.be(0); expect(ll.first_).to.be(undefined); expect(ll.last_).to.be(undefined); expect(ll.head_).to.be(undefined); }); describe('#insertItem', function() { beforeEach(function() { ll.insertItem(item); }); it('inserts an item into the list', function() { expect(ll.length_).to.be(1); }); it('sets the cursor to the inserted item', function() { expect(ll.head_.data).to.be(item); }); it('links the previous item to the new one', function() { ll.insertItem(item2); expect(ll.head_.prev.data).to.be(item); expect(ll.head_.prev.next.data).to.be(item2); }); }); describe('#removeItem', function() { var item3 = {}; beforeEach(function() { ll.insertItem(item); ll.insertItem(item2); ll.insertItem(item3); }); it('removes the current item', function() { ll.removeItem(); expect(ll.length_).to.be(2); expect(ll.head_.data).not.to.be(item3); }); it('sets the cursor to the next item if possible', function() { ll.removeItem(); expect(ll.head_.data).to.be(item); }); it('otherwise sets the cursor to the prevous item', function() { ll = new ol.structs.LinkedList(false); ll.insertItem(item); ll.insertItem(item2); ll.insertItem(item3); ll.removeItem(); expect(ll.head_.data).to.be(item2); }); it('empties a list with only one item', function() { ll = new ol.structs.LinkedList(); ll.insertItem(item); ll.removeItem(); expect(ll.length_).to.be(0); expect(ll.head_).to.be(undefined); expect(ll.first_).to.be(undefined); expect(ll.last_).to.be(undefined); }); }); describe('#firstItem', function() { it('sets the cursor to the first item and returns its data', function() { ll.insertItem(item); ll.insertItem(item2); var i = ll.firstItem(); expect(i).to.be(item); expect(ll.head_.data).to.be(item); }); it('returns undefined on empty list', function() { var i = ll.firstItem(); expect(i).to.be(undefined); }); }); describe('#lastItem', function() { it('sets the cursor to the last item and returns its data', function() { ll.insertItem(item); ll.insertItem(item2); ll.firstItem(); var i = ll.lastItem(); expect(i).to.be(item2); expect(ll.head_.data).to.be(item2); }); it('returns undefined on empty list', function() { var i = ll.lastItem(); expect(i).to.be(undefined); }); }); describe('#nextItem', function() { it('sets the cursor to the next item and returns its data', function() { ll.insertItem(item); ll.insertItem(item2); ll.firstItem(); var i = ll.nextItem(); expect(i).to.be(item2); expect(ll.head_.data).to.be(item2); }); it('returns undefined on empty list', function() { var i = ll.nextItem(); expect(i).to.be(undefined); }); }); describe('#prevItem', function() { it('sets the cursor to the previous item and returns its data', function() { ll.insertItem(item); ll.insertItem(item2); var i = ll.prevItem(); expect(i).to.be(item); expect(ll.head_.data).to.be(item); }); it('returns undefined on empty list', function() { var i = ll.prevItem(); expect(i).to.be(undefined); }); }); describe('#getNextItem', function() { it('returns the data of the next item without stepping the cursor', function() { ll.insertItem(item); ll.insertItem(item2); ll.firstItem(); var i = ll.getNextItem(); expect(i).to.be(item2); expect(ll.head_.data).to.be(item); }); it('returns undefined on empty list', function() { var i = ll.getNextItem(); expect(i).to.be(undefined); }); }); describe('#getPrevItem', function() { it('returns the data of the previous item without stepping the cursor', function() { ll.insertItem(item); ll.insertItem(item2); var i = ll.getPrevItem(); expect(i).to.be(item); expect(ll.head_.data).to.be(item2); }); it('returns undefined on empty list', function() { var i = ll.getPrevItem(); expect(i).to.be(undefined); }); }); describe('#getCurrItem', function() { it('returns the data of the current item', function() { var item3 = {}; ll.insertItem(item); ll.insertItem(item2); ll.insertItem(item3); ll.prevItem(); var i = ll.getCurrItem(); expect(i).to.be(item2); expect(ll.head_.data).to.be(item2); }); it('returns undefined on empty list', function() { var i = ll.getCurrItem(); expect(i).to.be(undefined); }); }); describe('#getLength', function() { it('returns the length of the list', function() { ll.insertItem(item); ll.insertItem(item2); var l = ll.getLength(); expect(l).to.be(2); }); }); describe('#concat', function() { var ll2, item3; beforeEach(function() { item3 = {}; ll2 = new ol.structs.LinkedList(); ll2.insertItem(item); ll2.insertItem(item2); ll2.insertItem(item3); }); it('concatenates a second list with the current one', function() { var item4 = {}; var item5 = {}; var item6 = {}; ll.insertItem(item4); ll.insertItem(item5); ll.insertItem(item6); ll.prevItem(); ll.concat(ll2); expect(ll.length_).to.be(6); expect(ll.head_.data).to.be(item5); expect(ll.head_.next.data).to.be(item); expect(ll.head_.next.next.next.next.data).to.be(item6); }); it('receives the second list if the current one is empty', function() { ll.concat(ll2); expect(ll.length_).to.be(3); expect(ll.first_.data).to.be(item); expect(ll.last_.data).to.be(item3); expect(ll.head_.data).to.be(item3); }); it('destroys the second list', function() { ll.concat(ll2); expect(ll2.length_).to.be(0); expect(ll2.first_).to.be(undefined); expect(ll2.last_).to.be(undefined); expect(ll2.head_).to.be(undefined); }); }); describe('when circular', function() { beforeEach(function() { ll = new ol.structs.LinkedList(); ll.insertItem(item); }); describe('#insertItem', function() { it('initializes the list in a circular way', function() { expect(ll.head_.prev.data).to.be(item); expect(ll.head_.next.data).to.be(item); }); }); describe('#setFirstItem', function() { it('resets the first item to the current one', function() { ll.insertItem(item2); ll.setFirstItem(); expect(ll.first_.data).to.be(item2); expect(ll.last_.data).to.be(item); }); }); }); });