Variables.js 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. "use strict";
  2. var assert = require("assert"),
  3. Variables = require("../../../../lib/pipeline/expressions/Variables");
  4. module.exports = {
  5. "Variables": {
  6. "constructor": {
  7. "Should be able to construct empty variables": function canConstructEmpty() {
  8. var variables = new Variables();
  9. },
  10. "Should be able to give number of variables": function giveNumber() {
  11. var variables = new Variables(5);
  12. },
  13. "Should throw if not given a number": function throwsOnInvalid() {
  14. assert.throws(function() {
  15. var variables = new Variables('hi');
  16. });
  17. assert.throws(function() {
  18. var variables = new Variables({});
  19. });
  20. assert.throws(function() {
  21. var variables = new Variables([]);
  22. });
  23. assert.throws(function() {
  24. var variables = new Variables(new Date());
  25. });
  26. },
  27. "setValue throws if no args given": function setValueThrows() {
  28. assert.throws(function() {
  29. var variables = new Variables();
  30. variables.setValue(1, 'hi');
  31. });
  32. }
  33. },
  34. "#setRoot": {
  35. "should set the _root variable to the passed value": function setsRoot() {
  36. var variables = new Variables(),
  37. root = {'hi':'hi'};
  38. variables.setRoot(root);
  39. assert.equal(root, variables._root);
  40. },
  41. "must be an object": function mustBeObject() {
  42. var variables = new Variables(),
  43. root = 'hi';
  44. assert.throws(function() {
  45. variables.setRoot(root);
  46. });
  47. }
  48. },
  49. "#clearRoot": {
  50. "should set the _root variable to empty obj": function setsRootToEmpty() {
  51. var variables = new Variables(),
  52. root = {'hi':'hi'};
  53. variables.setRoot(root);
  54. variables.clearRoot();
  55. assert.deepEqual({}, variables._root);
  56. }
  57. },
  58. "#getRoot": {
  59. "should return the _root variable": function returnsRoot() {
  60. var variables = new Variables(),
  61. root = {'hi':'hi'};
  62. variables.setRoot(root);
  63. assert.equal(root, variables.getRoot());
  64. }
  65. },
  66. "#setValue": {
  67. "id must be number": function idMustBeNumber() {
  68. assert.throws(function() {
  69. var variables = new Variables();
  70. variables.setValue('hi', 5);
  71. });
  72. assert.throws(function() {
  73. var variables = new Variables();
  74. variables.setValue(null, 5);
  75. });
  76. assert.throws(function() {
  77. var variables = new Variables();
  78. variables.setValue(new Date(), 5);
  79. });
  80. assert.throws(function() {
  81. var variables = new Variables();
  82. variables.setValue([], 5);
  83. });
  84. assert.throws(function() {
  85. var variables = new Variables();
  86. variables.setValue({}, 5);
  87. });
  88. assert.doesNotThrow(function() {
  89. var variables = new Variables(5);
  90. variables.setValue(1, 5);
  91. });
  92. },
  93. "cannot use root id": function cannotUseRootId() {
  94. assert.throws(function() {
  95. var variables = new Variables(5);
  96. variables.setValue(Variables.ROOT_ID, 'hi');
  97. });
  98. },
  99. "cannot use id larger than initial size": function idSizeIsCorrect() {
  100. assert.throws(function() {
  101. var variables = new Variables(5);
  102. variables.setValue(5, 'hi'); //off by one check
  103. });
  104. assert.throws(function() {
  105. var variables = new Variables(5);
  106. variables.setValue(6, 'hi');
  107. });
  108. },
  109. "sets the value": function setsTheValue() {
  110. var variables = new Variables(5);
  111. variables.setValue(1, 'hi'); //off by one check
  112. assert.equal(variables._rest[1], 'hi');
  113. }
  114. },
  115. "#getValue": {
  116. "id must be number": function idMustBeNumber() {
  117. assert.throws(function() {
  118. var variables = new Variables();
  119. variables.getValue('hi', 5);
  120. });
  121. assert.throws(function() {
  122. var variables = new Variables();
  123. variables.getValue(null, 5);
  124. });
  125. assert.throws(function() {
  126. var variables = new Variables();
  127. variables.getValue(new Date(), 5);
  128. });
  129. assert.throws(function() {
  130. var variables = new Variables();
  131. variables.getValue([], 5);
  132. });
  133. assert.throws(function() {
  134. var variables = new Variables();
  135. variables.getValue({}, 5);
  136. });
  137. assert.doesNotThrow(function() {
  138. var variables = new Variables(5);
  139. variables.getValue(1, 5);
  140. });
  141. },
  142. "returns root when given root id": function returnsRoot() {
  143. var variables = new Variables(5),
  144. root = {hi:'hi'};
  145. variables.setRoot(root);
  146. variables.getValue(Variables.ROOT_ID, root);
  147. },
  148. "cannot use id larger than initial size": function idSizeIsCorrect() {
  149. assert.throws(function() {
  150. var variables = new Variables(5);
  151. variables.getValue(5, 'hi'); //off by one check
  152. });
  153. assert.throws(function() {
  154. var variables = new Variables(5);
  155. variables.getValue(6, 'hi');
  156. });
  157. },
  158. "gets the value": function getsTheValue() {
  159. var variables = new Variables(5);
  160. variables.setValue(1, 'hi');
  161. assert.equal(variables.getValue(1), 'hi');
  162. }
  163. },
  164. "#getDocument": {
  165. "id must be number": function idMustBeNumber() {
  166. assert.throws(function() {
  167. var variables = new Variables();
  168. variables.getDocument('hi', 5);
  169. });
  170. assert.throws(function() {
  171. var variables = new Variables();
  172. variables.getDocument(null, 5);
  173. });
  174. assert.throws(function() {
  175. var variables = new Variables();
  176. variables.getDocument(new Date(), 5);
  177. });
  178. assert.throws(function() {
  179. var variables = new Variables();
  180. variables.getDocument([], 5);
  181. });
  182. assert.throws(function() {
  183. var variables = new Variables();
  184. variables.getDocument({}, 5);
  185. });
  186. assert.doesNotThrow(function() {
  187. var variables = new Variables(5);
  188. variables.getDocument(1, 5);
  189. });
  190. },
  191. "returns root when given root id": function returnsRoot() {
  192. var variables = new Variables(5),
  193. root = {hi:'hi'};
  194. variables.setRoot(root);
  195. variables.getDocument(Variables.ROOT_ID, root);
  196. },
  197. "cannot use id larger than initial size": function idSizeIsCorrect() {
  198. assert.throws(function() {
  199. var variables = new Variables(5);
  200. variables.getDocument(5, 'hi'); //off by one check
  201. });
  202. assert.throws(function() {
  203. var variables = new Variables(5);
  204. variables.getDocument(6, 'hi');
  205. });
  206. },
  207. "gets the value": function getsTheDocument() {
  208. var variables = new Variables(5),
  209. value = {hi:'hi'};
  210. variables.setValue(1, value);
  211. assert.equal(variables.getDocument(1), value);
  212. },
  213. "only returns documents": function returnsOnlyDocs() {
  214. var variables = new Variables(5),
  215. value = 'hi';
  216. variables.setValue(1, value);
  217. assert.deepEqual(variables.getDocument(1), {});
  218. }
  219. }
  220. }
  221. };
  222. if (!module.parent)(new(require("mocha"))()).ui("exports").reporter("spec").addFile(__filename).run(process.exit);