key-tree
Version:
Simple keyed tree data structure
134 lines (116 loc) • 4.09 kB
JavaScript
const KeyTree = require('../');
test('Remove value test', () => {
const tree = new KeyTree();
tree.add('cars', ['toyota', 'bmw', 'honda', 'merc']);
tree.add('animals', 'dogs');
tree.add('cars.models', ['sedan', 'suv']);
tree.add('cars.years', [2001, 2002]);
tree.add('cars.models.colors', ['red', 'green', 'blue']);
let cars = tree.get('cars');
expect(cars.length).toBe(4);
expect(cars).toContain('merc');
let colors = tree.get('cars.models.colors');
expect(colors.length).toBe(3);
expect(colors).toContain('red');
tree.remove('cars', 'merc');
cars = tree.get('cars');
expect(cars.length).toBe(3);
expect(cars).toContain('toyota');
expect(cars).toContain('bmw');
expect(cars).toContain('honda');
tree.remove('cars.models.colors', 'red');
colors = tree.get('cars.models.colors');
expect(colors.length).toBe(2);
expect(colors).toContain('green');
expect(colors).toContain('blue');
});
test('Remove key', () => {
const tree = new KeyTree();
tree.add('cars', ['toyota', 'bmw', 'honda', 'merc']);
tree.add('animals', 'dogs');
tree.add('cars.models', ['sedan', 'suv']);
tree.add('cars.years', [2001, 2002]);
tree.add('cars.models.colors', ['red', 'green', 'blue']);
let cars = tree.get('cars');
expect(cars.length).toBe(4);
let colors = tree.get('cars.models.colors');
expect(colors.length).toBe(3);
let models = tree.get('cars.models');
expect(models.length).toBe(2);
let years = tree.get('cars.years');
expect(years.length).toBe(2);
tree.removeKey('cars.models.colors');
colors = tree.get('cars.models.colors');
expect(colors.length).toBe(0);
tree.removeKey('cars');
models = tree.get('cars.models');
expect(models.length).toBe(0);
cars = tree.get('cars');
expect(cars.length).toBe(0);
years = tree.get('cars.years');
expect(years.length).toBe(0);
let animals = tree.get('animals');
expect(animals.length).toBe(1);
});
test('Remove children', () => {
const tree = new KeyTree();
tree.add('cars', ['toyota', 'bmw', 'honda', 'merc']);
tree.add('cars.models', ['sedan', 'suv']);
tree.add('cars.years', [2001, 2002]);
tree.add('cars.models.colors', ['red', 'green', 'blue']);
let cars = tree.get('cars');
expect(cars.length).toBe(4);
let colors = tree.get('cars.models.colors');
expect(colors.length).toBe(3);
let models = tree.get('cars.models');
expect(models.length).toBe(2);
let years = tree.get('cars.years');
expect(years.length).toBe(2);
tree.removeChildren('cars.models');
models = tree.get('cars.models');
expect(models.length).toBe(2);
colors = tree.get('cars.models.colors');
expect(colors.length).toBe(0);
years = tree.get('cars.years');
expect(years.length).toBe(2);
tree.removeChildren('cars');
models = tree.get('cars.models');
expect(models.length).toBe(0);
cars = tree.get('cars');
expect(cars.length).toBe(4);
cars = tree.getSub('cars');
expect(cars.length).toBe(4);
});
test('Clear key', () => {
const tree = new KeyTree();
tree.add('cars', ['toyota', 'bmw', 'honda', 'merc']);
tree.add('cars.models', ['sedan', 'suv']);
tree.add('cars.years', [2001, 2002]);
tree.add('cars.models.colors', ['red', 'green', 'blue']);
let cars = tree.get('cars');
expect(cars.length).toBe(4);
let colors = tree.get('cars.models.colors');
expect(colors.length).toBe(3);
let models = tree.get('cars.models');
expect(models.length).toBe(2);
let years = tree.get('cars.years');
expect(years.length).toBe(2);
tree.clearKey('cars');
cars = tree.get('cars');
expect(cars.length).toBe(0);
colors = tree.get('cars.models.colors');
expect(colors.length).toBe(3);
models = tree.get('cars.models');
expect(models.length).toBe(2);
years = tree.get('cars.years');
expect(years.length).toBe(2);
tree.clearKey('cars', true);
cars = tree.get('cars');
expect(cars.length).toBe(0);
colors = tree.get('cars.models.colors');
expect(colors.length).toBe(0);
models = tree.get('cars.models');
expect(models.length).toBe(0);
years = tree.get('cars.years');
expect(years.length).toBe(0);
});