"use strict"; var assert = require("assert"), Variables = require("../../../../lib/pipeline/expressions/Variables"); // Mocha one-liner to make these tests self-hosted if (!module.parent)return(require.cache[__filename] = null, (new (require("mocha"))({ui: "exports", reporter: "spec", grep: process.env.TEST_GREP})).addFile(__filename).run(process.exit)); exports.Variables = { "constructor": { "should be able to construct empty variables": function() { new Variables(); }, "should be able to give number of variables": function() { new Variables(5); }, "should throw if not given a number": function() { assert.throws(function() { new Variables('hi'); }); assert.throws(function() { new Variables({}); }); assert.throws(function() { new Variables([]); }); assert.throws(function() { new Variables(new Date()); }); }, "setValue throws if no args given": function() { assert.throws(function() { var variables = new Variables(); variables.setValue(1, 'hi'); }); }, }, "#setRoot": { "should set the _root variable to the passed value": function() { var variables = new Variables(), root = {'hi':'hi'}; variables.setRoot(root); assert.equal(root, variables._root); }, "must be an object": function mustBeObject() { var variables = new Variables(), root = 'hi'; assert.throws(function() { variables.setRoot(root); }); }, }, "#clearRoot": { "should set the _root variable to empty obj": function() { var variables = new Variables(), root = {'hi':'hi'}; variables.setRoot(root); variables.clearRoot(); assert.deepEqual({}, variables._root); }, }, "#getRoot": { "should return the _root variable": function() { var variables = new Variables(), root = {'hi':'hi'}; variables.setRoot(root); assert.equal(root, variables.getRoot()); }, }, "#setValue": { "id must be number": function() { assert.throws(function() { var variables = new Variables(); variables.setValue('hi', 5); }); assert.throws(function() { var variables = new Variables(); variables.setValue(null, 5); }); assert.throws(function() { var variables = new Variables(); variables.setValue(new Date(), 5); }); assert.throws(function() { var variables = new Variables(); variables.setValue([], 5); }); assert.throws(function() { var variables = new Variables(); variables.setValue({}, 5); }); assert.doesNotThrow(function() { var variables = new Variables(5); variables.setValue(1, 5); }); }, "cannot use root id": function() { assert.throws(function() { var variables = new Variables(5); variables.setValue(Variables.ROOT_ID, 'hi'); }); }, "cannot use id larger than initial size": function() { assert.throws(function() { var variables = new Variables(5); variables.setValue(5, 'hi'); //off by one check }); assert.throws(function() { var variables = new Variables(5); variables.setValue(6, 'hi'); }); }, "sets the value": function() { var variables = new Variables(5); variables.setValue(1, 'hi'); //off by one check assert.equal(variables._rest[1], 'hi'); }, }, "#getValue": { "id must be number": function() { assert.throws(function() { var variables = new Variables(); variables.getValue('hi', 5); }); assert.throws(function() { var variables = new Variables(); variables.getValue(null, 5); }); assert.throws(function() { var variables = new Variables(); variables.getValue(new Date(), 5); }); assert.throws(function() { var variables = new Variables(); variables.getValue([], 5); }); assert.throws(function() { var variables = new Variables(); variables.getValue({}, 5); }); assert.doesNotThrow(function() { var variables = new Variables(5); variables.getValue(1, 5); }); }, "returns root when given root id": function() { var variables = new Variables(5), root = {hi:'hi'}; variables.setRoot(root); variables.getValue(Variables.ROOT_ID, root); }, "cannot use id larger than initial size": function() { assert.throws(function() { var variables = new Variables(5); variables.getValue(5, 'hi'); //off by one check }); assert.throws(function() { var variables = new Variables(5); variables.getValue(6, 'hi'); }); }, "gets the value": function() { var variables = new Variables(5); variables.setValue(1, 'hi'); assert.equal(variables.getValue(1), 'hi'); }, }, "#getDocument": { "id must be number": function() { assert.throws(function() { var variables = new Variables(); variables.getDocument('hi', 5); }); assert.throws(function() { var variables = new Variables(); variables.getDocument(null, 5); }); assert.throws(function() { var variables = new Variables(); variables.getDocument(new Date(), 5); }); assert.throws(function() { var variables = new Variables(); variables.getDocument([], 5); }); assert.throws(function() { var variables = new Variables(); variables.getDocument({}, 5); }); assert.doesNotThrow(function() { var variables = new Variables(5); variables.getDocument(1, 5); }); }, "returns root when given root id": function() { var variables = new Variables(5), root = {hi:'hi'}; variables.setRoot(root); variables.getDocument(Variables.ROOT_ID, root); }, "cannot use id larger than initial size": function() { assert.throws(function() { var variables = new Variables(5); variables.getDocument(5, 'hi'); //off by one check }); assert.throws(function() { var variables = new Variables(5); variables.getDocument(6, 'hi'); }); }, "gets the value": function() { var variables = new Variables(5), value = {hi:'hi'}; variables.setValue(1, value); assert.equal(variables.getDocument(1), value); }, "only returns documents": function() { var variables = new Variables(5), value = 'hi'; variables.setValue(1, value); assert.deepEqual(variables.getDocument(1), {}); }, }, };