Variables_test.js 6.1 KB

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