UNPKG

basicprimitives

Version:

Basic Primitives Diagrams for JavaScript - data visualization components library that implements organizational chart and multi-parent dependency diagrams, contains implementations of JavaScript Controls and PDF rendering plugins.

403 lines (329 loc) 11.4 kB
import TreeLevels from './TreeLevels'; function getTreeLevels(levels) { var treeLevels = TreeLevels(); for (var levelIndex = 0, levelLen = levels.length; levelIndex < levelLen; levelIndex += 1) { var level = levels[levelIndex]; for (var index = 0, len = level.length; index < len; index += 1) { treeLevels.addItem(levelIndex, level[index], { id: level[index] }); } } return treeLevels; }; var items = [ [1], [2, 3], [4, 5, 6], [], [7, 8, 9, 10] ]; test('isEmpty function returns true for empty structure', () => { var treeLevels = TreeLevels(); expect(treeLevels.isEmpty()).toBe(true); }); test('isEmpty function returns false for none empty structure', () => { var treeLevels = TreeLevels(); treeLevels.addlevel(1, "Level 1"); expect(treeLevels.isEmpty()).toBe(false); }); test('hasLevel function', () => { var treeLevels = TreeLevels(); treeLevels.addlevel(1, "Level 1"); expect(treeLevels.hasLevel(1)).toBe(true); }); test('hasLevel function test for 2 levels contexts', () => { var treeLevels = TreeLevels(); treeLevels.addlevel(1, "Level 1"); treeLevels.addlevel(2, "Level 2"); expect(treeLevels.hasLevel(1) && treeLevels.hasLevel(2)).toBe(true); }); test('hasItem function checkes item presence in structure', () => { var treeLevels = TreeLevels(); treeLevels.addItem(1, 100, { name: "Item 1 Name", descriptions: "Item 1 Description" }); expect(treeLevels.hasItem(100)).toBe(true); }); test('loopLevels function indexes levels', () => { var treeLevels = getTreeLevels(items); var result = []; treeLevels.loopLevels(this, function (index, level) { result.push(index); }) expect(result).toEqual([0, 1, 2, 4]); }); test('loopLevelsReversed function indexes levels in reversed order', () => { var treeLevels = getTreeLevels(items); var result = []; treeLevels.loopLevelsReversed(this, function (index, level) { result.push(index); }) expect(result).toEqual([4, 2, 1, 0]); }); test('loopLevelItems function loops items of the level', () => { var treeLevels = getTreeLevels(items); var result = []; treeLevels.loopLevelItems(this, 2, function (itemid, context, position) { result.push([itemid, context.id, position]); }) expect(result).toEqual( [ [4, 4, 0], [5, 5, 1], [6, 6, 2] ]); }); test('getLevelIndex function returns index of items level', () => { var treeLevels = getTreeLevels(items); expect(treeLevels.getLevelIndex(6)).toBe(2); }); test('getItemPosition function returns item position at level', () => { var treeLevels = getTreeLevels(items); expect(treeLevels.getItemPosition(8)).toBe(1); }); test('getItemAtPosition function returns item at given level position', () => { var treeLevels = getTreeLevels(items); expect(treeLevels.getItemAtPosition(2, 1)).toBe(5); }); test('getPrevItem function returns previous item at the level', () => { var treeLevels = getTreeLevels(items); expect(treeLevels.getPrevItem(5)).toBe(4); }); test('getPrevItem function returns null for the first item of the level', () => { var treeLevels = getTreeLevels(items); expect(treeLevels.getPrevItem(7)).toBe(undefined); }); test('getNextItem function returns next item at the level', () => { var treeLevels = getTreeLevels(items); expect(treeLevels.getNextItem(5)).toBe(6); }); test('getNextItem function returns null for the last item of the level', () => { var treeLevels = getTreeLevels(items); expect(treeLevels.getNextItem(10)).toBe(undefined); }); test('getLevelLength function returns 0 for omitted level', () => { var treeLevels = getTreeLevels(items); expect(treeLevels.getLevelLength(3)).toBe(0); }); test('getLevelLength function returns number of items at the level', () => { var treeLevels = getTreeLevels(items); expect(treeLevels.getLevelLength(4)).toBe(4); }); var items2 = [ [1], [2, 3, 5], [4, 5, 6], [5], [7, 8, 9, 5, 10] ]; test('getLevelIndex function returns index of items start level', () => { var treeLevels = getTreeLevels(items2); expect(treeLevels.getLevelIndex(5)).toBe(1); }); test('getEndLevelIndex function returns index of items end level', () => { var treeLevels = getTreeLevels(items2); expect(treeLevels.getEndLevelIndex(5)).toBe(4); }); test('getItemPosition function returns item position at start level', () => { var treeLevels = getTreeLevels(items2); expect(treeLevels.getItemPosition(5)).toBe(2); }); test('getItemPosition function returns item position at middle level', () => { var treeLevels = getTreeLevels(items2); expect(treeLevels.getItemPosition(5, 2)).toBe(1); }); test('getItemPosition function returns item position at end level', () => { var treeLevels = getTreeLevels(items2); expect(treeLevels.getItemPosition(5, 4)).toBe(3); }); test('getItemAtPosition function returns item at given level position', () => { var treeLevels = getTreeLevels(items2); expect(treeLevels.getItemAtPosition(2, 1)).toBe(5); }); test('getPrevItem function returns previous item at the items start level', () => { var treeLevels = getTreeLevels(items2); expect(treeLevels.getPrevItem(5)).toBe(3); }); test('getPrevItem function returns previous item at the items middle level', () => { var treeLevels = getTreeLevels(items2); expect(treeLevels.getPrevItem(5, 2)).toBe(4); }); test('getPrevItem function returns previous item at the items end level', () => { var treeLevels = getTreeLevels(items2); expect(treeLevels.getPrevItem(5, 4)).toBe(9); }); test('getNextItem function returns next item at the items start level', () => { var treeLevels = getTreeLevels(items2); expect(treeLevels.getNextItem(5)).toBe(undefined); }); test('getNextItem function returns next item at the items middle level', () => { var treeLevels = getTreeLevels(items2); expect(treeLevels.getNextItem(5, 2)).toBe(6); }); test('getNextItem function returns next item at the items end level', () => { var treeLevels = getTreeLevels(items2); expect(treeLevels.getNextItem(5, 4)).toBe(10); }); test('loopItems function loops items in structure', () => { var treeLevels = getTreeLevels([ [1], [2, 3], [4, 5, 6], [], [7, 8, 9, 10] ]); var result = []; treeLevels.loopItems(this, function (itemid, item, position, levelIndex, level) { result.push([itemid, position, levelIndex]); }) var expectedResult = [ [1, 0, 0], [2, 0, 1], [3, 1, 1], [4, 0, 2], [5, 1, 2], [6, 2, 2], [7, 0, 4], [8, 1, 4], [9, 2, 4], [10, 3, 4] ]; expect(result).toEqual(expectedResult); }); test('binarySearch function returns nearest item at the level', () => { var treeLevels = getTreeLevels([[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]); var result = treeLevels.binarySearch(this, 0, function (itemid) { return 4.2 - itemid; }) expect(result).toBe(4); }); test('binarySearch function returns first item of collection for item beyond the left margin', () => { var treeLevels = getTreeLevels([[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]); var result = treeLevels.binarySearch(this, 0, function (itemid) { return 0 - itemid; }) expect(result).toBe(1); }); test('binarySearch function returns the last item of collection for item beyond the last item', () => { var treeLevels = getTreeLevels([[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]); var result = treeLevels.binarySearch(this, 0, function (itemid) { return 15 - itemid; }) expect(result).toBe(10); }); test('loopFromItem function returns items up to the end of level starting from item', () => { var treeLevels = getTreeLevels([ [7, 8, 9, 10, 11, 12, 13, 14, 15, 16], [1, 2, 12, 4, 5, 6] ]); var result = []; treeLevels.loopFromItem(this, 12, false, function (itemid, item) { result.push([itemid, item.id]); }); var expectedResult = [ [13, 13], [14, 14], [15, 15], [16, 16] ]; expect(result).toEqual(expectedResult); }); test('loopFromItem function returns items up to the end of level starting from item', () => { var treeLevels = getTreeLevels([ [7, 8, 9, 10, 11, 12, 13, 14, 15, 16], [1, 2, 12, 4, 5, 6] ]); var result = []; treeLevels.loopFromItem(this, 12, false, function (itemid, item) { result.push(itemid); }, 1); expect(result).toEqual([4, 5, 6]); }); test('loopFromItem function returns items up to the start of the level starting from item', () => { var treeLevels = getTreeLevels([ [7, 8, 9, 10, 11, 12, 13, 14, 15, 16], [1, 2, 12, 3, 4, 5, 6] ]); var result = []; treeLevels.loopFromItem(this, 12, true, function (itemid, item) { result.push([itemid, item.id]); }); var expectedResult = [ [11, 11], [10, 10], [9, 9], [8, 8], [7, 7] ]; expect(result).toEqual(expectedResult); }); test('loopFromItem function returns items up to the start of the level starting from item', () => { var treeLevels = getTreeLevels([ [7, 8, 9, 10, 11, 12, 13, 14, 15, 16], [1, 2, 12, 3, 4, 5, 6] ]); var result = []; treeLevels.loopFromItem(this, 12, true, function (itemid, item) { result.push(itemid); }, 1); expect(result).toEqual([2, 1]); }); test('loopLevelsFromItem function returns level indexes above the item starting for the immidiate level above', () => { var treeLevels = getTreeLevels([ [1], [2, 3], [4, 5, 6], [5], [7, 8, 9, 10], [11, 12, 13], [14] ]); var result = []; treeLevels.loopLevelsFromItem(this, 5, false, function (levelIndex, level) { result.push(levelIndex); }); var expectedResult = [1, 0]; expect(result).toEqual(expectedResult); }); test('loopLevelsFromItem function returns level indexes below the item starting for the immidiate level below', () => { var treeLevels = getTreeLevels([ [1], [2, 3], [4, 5, 6], [5], [7, 8, 9, 10], [11, 12, 13], [14] ]); var result = []; treeLevels.loopLevelsFromItem(this, 5, true, function (levelIndex, level) { result.push(levelIndex); }); var expectedResult = [4, 5, 6]; expect(result).toEqual(expectedResult); }); test('loopMerged function returns merged levels into one collection by weight', () => { var treeLevels = getTreeLevels([ [1, 6, 9], [2, 3, 5, 8], [4, 5], [], [7, 10] ]); var result = []; treeLevels.loopMerged(this, function (itemid) { return itemid; }, function (itemid, item) { result.push(itemid); }); var expectedResult = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; expect(result).toEqual(expectedResult); }); test('clone function returns copy of existing structure', () => { var expectedResult = [ [1, 6, 9], [2, 3, 8], [4, 5], [7, 10] ]; var treeLevels = getTreeLevels(expectedResult).clone(); var result = []; treeLevels.loopLevels(this, function (index, level) { var levelItems = []; treeLevels.loopLevelItems(this, index, function (itemid, context, position) { levelItems.push(itemid); }) result.push(levelItems); }) expect(result).toEqual(expectedResult); });