'use strict'; const assert = require('assert'); const List = require('../src/list/List'); const Node = require('../src/list/Node'); describe('Node', () => { describe('Constructor', () => { it('initializes member variables', (done) => { const node = new Node('A', 0, 0, 'hello', []); assert.equal(node.id, 'A'); assert.equal(node.seq, 0); assert.equal(node.ver, 0); assert.equal(node.data, 'hello'); assert.equal(node.next instanceof Array, true); done(); }); it('initializes member variables without specified data and next', (done) => { const node = new Node('A', 0, 0); assert.equal(node.id, 'A'); assert.equal(node.seq, 0); assert.equal(node.ver, 0); assert.equal(node.data, null); assert.equal(node.next instanceof Array, true); done(); }); }); describe('compactId', () => { it('presents the node as a string with id, sequence and version', (done) => { const node1 = new Node('A', 0, 0); const node2 = new Node('B', 123, 456); assert.equal(node1.compactId, 'A.0.0'); assert.equal(node2.compactId, 'B.123.456'); done(); }); }); describe('equals', () => { it('check if nodes are equal', (done) => { const node1 = new Node('A', 0, 0); const node2 = new Node('A', 0, 0); const node3 = new Node('A', 1, 1); const node4 = new Node('B', 123, 456); assert.equal(Node.equals(node1, node1), true); assert.equal(Node.equals(node1, node2), true); assert.equal(Node.equals(node1, node3), false); assert.equal(Node.equals(node1, node4), false); assert.equal(Node.equals(node3, node4), false); done(); }); }); describe('hasChild', () => { it('finds the child reference', (done) => { const a = new Node('A', 0, 0); const b = new Node('B', 0, 0, "hello", [a]); const c = new Node('C', 0, 0, "hello", [a, b]); assert.equal(b.hasChild(a), true) assert.equal(c.hasChild(a), true) assert.equal(c.hasChild(b), true) done(); }); }); });