UNPKG

substance

Version:

Substance is a JavaScript library for web-based content editing. It provides building blocks for realizing custom text editors and web-based publishing systems.

64 lines (57 loc) 2.55 kB
import { module } from 'substance-test' import { TreeIndex } from 'substance' const test = module('TreeIndex') test("Setting and getting values from a TreeIndex", function(t) { var adapter = new TreeIndex() adapter.set(['a'], 1) adapter.set(['c', 'b'], 2) t.equal(adapter.get('a'), 1, 'Top level value should be retrieved correctly.') t.equal(adapter.get(['c', 'b']), 2, 'Second level value should be retrieved correctly.') t.end() }) test("Getting with invalid arguments", function(t) { var adapter = new TreeIndex() adapter.set(['a'], 1) adapter.set(['c', 'b'], 2) t.isNil(adapter.get('e'), 'Should return no value for unknown id') t.isNil(adapter.get(['c', 'd']), 'Should return no value for unknown path') t.isNil(adapter.get(null), 'Should return no value for null') t.isNil(adapter.get(), 'Should return no value for no path') t.isNil(adapter.get([]), 'Should return no value for empty path') t.isNil(adapter.get({}), 'Should return no value for object') t.isNil(adapter.get(1), 'Should return no value for a number') t.end() }) // test("Wrapping an existing object", function(t) { // // Note: this way you can create an adapter for plain objects // var mine = {} // var adapter = TreeIndex.wrap(mine) // adapter.set(['a', 'b'], 2) // t.equal(adapter.get(['a', 'b']), 2, 'Value should be retrievable.') // t.equal(mine.a.b, 2, 'Value should have been written inplace.') // t.deepEqual(adapter.get('a'), mine.a, 'Get on first level should return plain content.') // }) test("Getting values recursively", function(t) { var adapter = new TreeIndex() adapter.set(['a', 'b'], 'foo') adapter.set(['a', 'c', 'd'], 'bar') t.deepEqual(adapter.getAll('a'), { b: 'foo', d: 'bar'}, 'Values should be collected together into an object') t.end() }) test("Arrays: basic usage", function(t) { var adapter = new TreeIndex.Arrays() t.throws(function() { adapter.set('a', []) }, 'TreeIndex.set is not allowed for array type') adapter.add('a', 1) t.deepEqual(adapter.get('a'), [1], 'Get should return an array.') adapter.add(['a', 'b'], 2) t.deepEqual(adapter.get('a'), [1], 'Content should still be the same after adding a nested value.') t.deepEqual(adapter.getAll('a'), [1, 2], 'Collect all values into an array.') adapter.add(['a', 'b'], 3) adapter.remove(['a', 'b'], 2) t.deepEqual(adapter.get(['a', 'b']), [3], 'Only one value should be left after removal.') adapter.delete(['a','b']) t.isNil(adapter.get(['a', 'b']), 'Value should now be deleted.') t.end() })