vsn 0.1.26 → 0.1.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (303) hide show
  1. package/demo/vsn.js +1 -1
  2. package/dist/AST/ArithmeticAssignmentNode.d.ts +23 -0
  3. package/dist/AST/ArithmeticAssignmentNode.js +313 -0
  4. package/dist/AST/ArithmeticAssignmentNode.js.map +1 -0
  5. package/dist/AST/ArithmeticNode.d.ts +15 -0
  6. package/dist/AST/ArithmeticNode.js +114 -0
  7. package/dist/AST/ArithmeticNode.js.map +1 -0
  8. package/dist/AST/ArrayNode.d.ts +14 -0
  9. package/dist/AST/ArrayNode.js +114 -0
  10. package/dist/AST/ArrayNode.js.map +1 -0
  11. package/dist/AST/BlockNode.d.ts +11 -0
  12. package/dist/AST/BlockNode.js +98 -0
  13. package/dist/AST/BlockNode.js.map +1 -0
  14. package/dist/AST/BooleanLiteralNode.d.ts +5 -0
  15. package/dist/AST/BooleanLiteralNode.js +31 -0
  16. package/dist/AST/BooleanLiteralNode.js.map +1 -0
  17. package/dist/AST/ComparisonNode.d.ts +15 -0
  18. package/dist/AST/ComparisonNode.js +120 -0
  19. package/dist/AST/ComparisonNode.js.map +1 -0
  20. package/dist/AST/ConditionalNode.d.ts +13 -0
  21. package/dist/AST/ConditionalNode.js +95 -0
  22. package/dist/AST/ConditionalNode.js.map +1 -0
  23. package/dist/AST/ElementAttributeNode.d.ts +18 -0
  24. package/dist/AST/ElementAttributeNode.js +159 -0
  25. package/dist/AST/ElementAttributeNode.js.map +1 -0
  26. package/dist/AST/ElementQueryNode.d.ts +12 -0
  27. package/dist/AST/ElementQueryNode.js +111 -0
  28. package/dist/AST/ElementQueryNode.js.map +1 -0
  29. package/dist/AST/ElementStyleNode.d.ts +18 -0
  30. package/dist/AST/ElementStyleNode.js +159 -0
  31. package/dist/AST/ElementStyleNode.js.map +1 -0
  32. package/dist/AST/ForStatementNode.d.ts +17 -0
  33. package/dist/AST/ForStatementNode.js +121 -0
  34. package/dist/AST/ForStatementNode.js.map +1 -0
  35. package/dist/AST/FunctionArgumentNode.d.ts +11 -0
  36. package/dist/AST/FunctionArgumentNode.js +100 -0
  37. package/dist/AST/FunctionArgumentNode.js.map +1 -0
  38. package/dist/AST/FunctionCallNode.d.ts +13 -0
  39. package/dist/AST/FunctionCallNode.js +102 -0
  40. package/dist/AST/FunctionCallNode.js.map +1 -0
  41. package/dist/AST/IfStatementNode.d.ts +14 -0
  42. package/dist/AST/IfStatementNode.js +128 -0
  43. package/dist/AST/IfStatementNode.js.map +1 -0
  44. package/dist/AST/InNode.d.ts +15 -0
  45. package/dist/AST/InNode.js +107 -0
  46. package/dist/AST/InNode.js.map +1 -0
  47. package/dist/AST/IndexNode.d.ts +16 -0
  48. package/dist/AST/IndexNode.js +126 -0
  49. package/dist/AST/IndexNode.js.map +1 -0
  50. package/dist/AST/LiteralNode.d.ts +10 -0
  51. package/dist/AST/LiteralNode.js +74 -0
  52. package/dist/AST/LiteralNode.js.map +1 -0
  53. package/dist/AST/Node.d.ts +19 -0
  54. package/dist/AST/Node.js +117 -0
  55. package/dist/AST/Node.js.map +1 -0
  56. package/dist/AST/NotNode.d.ts +12 -0
  57. package/dist/AST/NotNode.js +103 -0
  58. package/dist/AST/NotNode.js.map +1 -0
  59. package/dist/AST/NumberLiteralNode.d.ts +5 -0
  60. package/dist/AST/NumberLiteralNode.js +36 -0
  61. package/dist/AST/NumberLiteralNode.js.map +1 -0
  62. package/dist/AST/ObjectNode.d.ts +14 -0
  63. package/dist/AST/ObjectNode.js +131 -0
  64. package/dist/AST/ObjectNode.js.map +1 -0
  65. package/dist/AST/RootScopeMemberNode.d.ts +11 -0
  66. package/dist/AST/RootScopeMemberNode.js +87 -0
  67. package/dist/AST/RootScopeMemberNode.js.map +1 -0
  68. package/dist/AST/ScopeMemberNode.d.ts +12 -0
  69. package/dist/AST/ScopeMemberNode.js +128 -0
  70. package/dist/AST/ScopeMemberNode.js.map +1 -0
  71. package/dist/AST/UnitLiteralNode.d.ts +15 -0
  72. package/dist/AST/UnitLiteralNode.js +72 -0
  73. package/dist/AST/UnitLiteralNode.js.map +1 -0
  74. package/dist/AST.d.ts +7 -60
  75. package/dist/AST.js +778 -0
  76. package/dist/AST.js.map +1 -0
  77. package/dist/Attribute.d.ts +1 -1
  78. package/dist/Attribute.js +187 -0
  79. package/dist/Attribute.js.map +1 -0
  80. package/dist/Bencmark.js +179 -0
  81. package/dist/Bencmark.js.map +1 -0
  82. package/dist/Configuration.d.ts +1 -1
  83. package/dist/Configuration.js +64 -0
  84. package/dist/Configuration.js.map +1 -0
  85. package/dist/Controller.d.ts +4 -2
  86. package/dist/Controller.js +62 -0
  87. package/dist/Controller.js.map +1 -0
  88. package/dist/DOM/DOMObject.d.ts +1 -1
  89. package/dist/DOM/DOMObject.js +47 -0
  90. package/dist/DOM/DOMObject.js.map +1 -0
  91. package/dist/DOM/WrappedDocument.js +34 -0
  92. package/dist/DOM/WrappedDocument.js.map +1 -0
  93. package/dist/DOM/WrappedWindow.js +45 -0
  94. package/dist/DOM/WrappedWindow.js.map +1 -0
  95. package/dist/DOM.d.ts +1 -1
  96. package/dist/DOM.js +547 -0
  97. package/dist/DOM.js.map +1 -0
  98. package/dist/EventDispatcher.d.ts +29 -0
  99. package/dist/EventDispatcher.js +132 -0
  100. package/dist/EventDispatcher.js.map +1 -0
  101. package/dist/Formats.js +44 -0
  102. package/dist/Formats.js.map +1 -0
  103. package/dist/MessageList.d.ts +15 -0
  104. package/dist/MessageList.js +96 -0
  105. package/dist/MessageList.js.map +1 -0
  106. package/dist/Model/Field.d.ts +8 -0
  107. package/dist/Model/Field.js +38 -0
  108. package/dist/Model/Field.js.map +1 -0
  109. package/dist/Model.d.ts +12 -0
  110. package/dist/Model.js +61 -0
  111. package/dist/Model.js.map +1 -0
  112. package/dist/Query.js +66 -0
  113. package/dist/Query.js.map +1 -0
  114. package/dist/Registry.d.ts +5 -2
  115. package/dist/Registry.js +139 -0
  116. package/dist/Registry.js.map +1 -0
  117. package/dist/Scope/DynamicScopeData.d.ts +6 -0
  118. package/dist/Scope/DynamicScopeData.js +54 -0
  119. package/dist/Scope/DynamicScopeData.js.map +1 -0
  120. package/dist/Scope/QueryReference.d.ts +10 -0
  121. package/dist/Scope/QueryReference.js +103 -0
  122. package/dist/Scope/QueryReference.js.map +1 -0
  123. package/dist/Scope/ScopeData.d.ts +4 -0
  124. package/dist/Scope/ScopeData.js +40 -0
  125. package/dist/Scope/ScopeData.js.map +1 -0
  126. package/dist/Scope/ScopeDataAbstract.d.ts +22 -0
  127. package/dist/Scope/ScopeDataAbstract.js +137 -0
  128. package/dist/Scope/ScopeDataAbstract.js.map +1 -0
  129. package/dist/Scope/ScopeReference.d.ts +10 -0
  130. package/dist/Scope/ScopeReference.js +73 -0
  131. package/dist/Scope/ScopeReference.js.map +1 -0
  132. package/dist/Scope/ScopedVariableType.d.ts +6 -0
  133. package/dist/Scope/ScopedVariableType.js +14 -0
  134. package/dist/Scope/ScopedVariableType.js.map +1 -0
  135. package/dist/Scope/WrappedArray.d.ts +16 -0
  136. package/dist/Scope/WrappedArray.js +121 -0
  137. package/dist/Scope/WrappedArray.js.map +1 -0
  138. package/dist/Scope/properties/Property.d.ts +18 -0
  139. package/dist/Scope/properties/Property.js +93 -0
  140. package/dist/Scope/properties/Property.js.map +1 -0
  141. package/dist/Scope.d.ts +4 -48
  142. package/dist/Scope.js +227 -0
  143. package/dist/Scope.js.map +1 -0
  144. package/dist/SimplePromise.d.ts +42 -0
  145. package/dist/SimplePromise.js +217 -0
  146. package/dist/SimplePromise.js.map +1 -0
  147. package/dist/Tag/List.js +85 -0
  148. package/dist/Tag/List.js.map +1 -0
  149. package/dist/Tag.js +770 -0
  150. package/dist/Tag.js.map +1 -0
  151. package/dist/Types.d.ts +1 -0
  152. package/dist/Types.js +54 -0
  153. package/dist/Types.js.map +1 -0
  154. package/dist/Validators.d.ts +7 -0
  155. package/dist/Validators.js +54 -0
  156. package/dist/Validators.js.map +1 -0
  157. package/dist/attributes/AddClassIf.js +93 -0
  158. package/dist/attributes/AddClassIf.js.map +1 -0
  159. package/dist/attributes/Bind.js +272 -0
  160. package/dist/attributes/Bind.js.map +1 -0
  161. package/dist/attributes/ClassConstructor.d.ts +1 -0
  162. package/dist/attributes/ClassConstructor.js +104 -0
  163. package/dist/attributes/ClassConstructor.js.map +1 -0
  164. package/dist/attributes/ClickRemoveClass.js +114 -0
  165. package/dist/attributes/ClickRemoveClass.js.map +1 -0
  166. package/dist/attributes/ClickToggleClass.js +114 -0
  167. package/dist/attributes/ClickToggleClass.js.map +1 -0
  168. package/dist/attributes/ControllerAttribute.js +28 -0
  169. package/dist/attributes/ControllerAttribute.js.map +1 -0
  170. package/dist/attributes/DisableIf.js +94 -0
  171. package/dist/attributes/DisableIf.js.map +1 -0
  172. package/dist/attributes/Exec.js +108 -0
  173. package/dist/attributes/Exec.js.map +1 -0
  174. package/dist/attributes/Format.js +99 -0
  175. package/dist/attributes/Format.js.map +1 -0
  176. package/dist/attributes/If.js +159 -0
  177. package/dist/attributes/If.js.map +1 -0
  178. package/dist/attributes/JSONAttribute.js +118 -0
  179. package/dist/attributes/JSONAttribute.js.map +1 -0
  180. package/dist/attributes/KeyAbstract.js +117 -0
  181. package/dist/attributes/KeyAbstract.js.map +1 -0
  182. package/dist/attributes/KeyDown.js +88 -0
  183. package/dist/attributes/KeyDown.js.map +1 -0
  184. package/dist/attributes/KeyUp.js +88 -0
  185. package/dist/attributes/KeyUp.js.map +1 -0
  186. package/dist/attributes/List.js +282 -0
  187. package/dist/attributes/List.js.map +1 -0
  188. package/dist/attributes/ListItem.js +138 -0
  189. package/dist/attributes/ListItem.js.map +1 -0
  190. package/dist/attributes/ListItemModel.js +39 -0
  191. package/dist/attributes/ListItemModel.js.map +1 -0
  192. package/dist/attributes/ModelAttribute.js +29 -0
  193. package/dist/attributes/ModelAttribute.js.map +1 -0
  194. package/dist/attributes/Name.js +88 -0
  195. package/dist/attributes/Name.js.map +1 -0
  196. package/dist/attributes/On.js +135 -0
  197. package/dist/attributes/On.js.map +1 -0
  198. package/dist/attributes/Radio.js +174 -0
  199. package/dist/attributes/Radio.js.map +1 -0
  200. package/dist/attributes/Referenced.js +38 -0
  201. package/dist/attributes/Referenced.js.map +1 -0
  202. package/dist/attributes/RootAttribute.js +91 -0
  203. package/dist/attributes/RootAttribute.js.map +1 -0
  204. package/dist/attributes/ScopeAttribute.js +40 -0
  205. package/dist/attributes/ScopeAttribute.js.map +1 -0
  206. package/dist/attributes/ScopeChange.js +130 -0
  207. package/dist/attributes/ScopeChange.js.map +1 -0
  208. package/dist/attributes/SetAttribute.js +133 -0
  209. package/dist/attributes/SetAttribute.js.map +1 -0
  210. package/dist/attributes/StandardAttribute.js +186 -0
  211. package/dist/attributes/StandardAttribute.js.map +1 -0
  212. package/dist/attributes/StyleAttribute.js +183 -0
  213. package/dist/attributes/StyleAttribute.js.map +1 -0
  214. package/dist/attributes/Template.js +39 -0
  215. package/dist/attributes/Template.js.map +1 -0
  216. package/dist/attributes/TypeAttribute.js +104 -0
  217. package/dist/attributes/TypeAttribute.js.map +1 -0
  218. package/dist/attributes/_imports.js +60 -0
  219. package/dist/attributes/_imports.js.map +1 -0
  220. package/dist/helpers/DOMHelper.js +81 -0
  221. package/dist/helpers/DOMHelper.js.map +1 -0
  222. package/dist/helpers/ElementHelper.js +25 -0
  223. package/dist/helpers/ElementHelper.js.map +1 -0
  224. package/dist/helpers/VisionHelper.js +71 -0
  225. package/dist/helpers/VisionHelper.js.map +1 -0
  226. package/dist/helpers/decorators.js +38 -0
  227. package/dist/helpers/decorators.js.map +1 -0
  228. package/dist/vsn.d.ts +11 -2
  229. package/dist/vsn.js +181 -0
  230. package/dist/vsn.js.map +1 -0
  231. package/package.json +2 -6
  232. package/src/AST/ArithmeticAssignmentNode.ts +236 -0
  233. package/src/AST/ArithmeticNode.ts +52 -0
  234. package/src/AST/ArrayNode.ts +39 -0
  235. package/src/AST/BlockNode.ts +25 -0
  236. package/src/AST/BooleanLiteralNode.ts +10 -0
  237. package/src/AST/ComparisonNode.ts +57 -0
  238. package/src/AST/ConditionalNode.ts +36 -0
  239. package/src/AST/ElementAttributeNode.ts +63 -0
  240. package/src/AST/ElementQueryNode.ts +25 -0
  241. package/src/AST/ElementStyleNode.ts +63 -0
  242. package/src/AST/ForStatementNode.ts +59 -0
  243. package/src/AST/FunctionArgumentNode.ts +27 -0
  244. package/src/AST/FunctionCallNode.ts +32 -0
  245. package/src/AST/IfStatementNode.ts +67 -0
  246. package/src/AST/InNode.ts +46 -0
  247. package/src/AST/IndexNode.ts +61 -0
  248. package/src/AST/LiteralNode.ts +17 -0
  249. package/src/AST/Node.ts +71 -0
  250. package/src/AST/NotNode.ts +41 -0
  251. package/src/AST/NumberLiteralNode.ts +14 -0
  252. package/src/AST/ObjectNode.ts +55 -0
  253. package/src/AST/RootScopeMemberNode.ts +25 -0
  254. package/src/AST/ScopeMemberNode.ts +53 -0
  255. package/src/AST/UnitLiteralNode.ts +51 -0
  256. package/src/AST.ts +34 -1094
  257. package/src/Attribute.ts +2 -2
  258. package/src/Configuration.ts +3 -3
  259. package/src/Controller.ts +10 -2
  260. package/src/DOM/DOMObject.ts +1 -1
  261. package/src/DOM.ts +3 -3
  262. package/src/EventDispatcher.ts +134 -0
  263. package/src/Formats.ts +2 -2
  264. package/src/MessageList.ts +85 -0
  265. package/src/Model/Field.ts +20 -0
  266. package/src/Model.ts +43 -0
  267. package/src/Registry.ts +13 -3
  268. package/src/Scope/DynamicScopeData.ts +29 -0
  269. package/src/Scope/QueryReference.ts +29 -0
  270. package/src/Scope/ScopeData.ts +21 -0
  271. package/src/Scope/ScopeDataAbstract.ts +126 -0
  272. package/src/Scope/ScopeReference.ts +30 -0
  273. package/src/Scope/ScopedVariableType.ts +7 -0
  274. package/src/Scope/WrappedArray.ts +88 -0
  275. package/src/Scope/properties/Property.ts +79 -0
  276. package/src/Scope.ts +31 -252
  277. package/src/SimplePromise.ts +219 -0
  278. package/src/Tag.ts +3 -3
  279. package/src/Types.ts +6 -1
  280. package/src/Validators.ts +45 -0
  281. package/src/attributes/Bind.ts +4 -4
  282. package/src/attributes/ClassConstructor.ts +2 -1
  283. package/src/attributes/JSONAttribute.ts +2 -1
  284. package/src/attributes/List.ts +4 -4
  285. package/src/attributes/Radio.ts +3 -2
  286. package/src/attributes/ScopeChange.ts +2 -2
  287. package/src/attributes/SetAttribute.ts +2 -1
  288. package/src/attributes/StandardAttribute.ts +1 -1
  289. package/src/attributes/StyleAttribute.ts +3 -2
  290. package/src/attributes/TypeAttribute.ts +1 -1
  291. package/src/vsn.ts +16 -5
  292. package/test/AST/ArithmeticAssignmentNode.spec.ts +47 -0
  293. package/test/AST.spec.ts +3 -2
  294. package/test/Controller.spec.ts +44 -0
  295. package/test/MessageList.spec.ts +101 -0
  296. package/test/Model/DataModel.spec.ts +0 -0
  297. package/test/Scope/DynamicScopeData.spec.ts +141 -0
  298. package/test/Scope.spec.ts +15 -3
  299. package/test/SimplePromise.spec.ts +271 -0
  300. package/test/Tag/TagList.spec.ts +1 -1
  301. package/test/attributes/Bind.spec.ts +5 -5
  302. package/test/attributes/ListItem.spec.ts +1 -1
  303. package/dist/vsn.min.js +0 -1
@@ -0,0 +1,101 @@
1
+ import MessageList from "../src/MessageList";
2
+
3
+ describe('MessageList', () => {
4
+ it("should reset properly", () => {
5
+ const list = new MessageList();
6
+ list.merge({
7
+ 'foo': ['bar', 'baz']
8
+ });
9
+ console.info(list.keys);
10
+ expect(list.length).toBe(1);
11
+ expect(list['foo']).toEqual(['bar', 'baz']);
12
+
13
+ list.reset();
14
+
15
+ expect(list.length).toBe(0);
16
+ expect(list['foo']).toEqual(undefined);
17
+ });
18
+
19
+ it("should add messages", () => {
20
+ const list = new MessageList({
21
+ 'foo': ['bar', 'baz']
22
+ });
23
+
24
+ // Add list
25
+ list.add('foo', ['biz', 'blarg']);
26
+ expect(list['foo']).toEqual(['bar', 'baz', 'biz', 'blarg']);
27
+
28
+ // Add single error and replace
29
+ list.add('foo', 'replaced', true);
30
+ expect(list['foo']).toEqual(['replaced']);
31
+ });
32
+
33
+ it("should merge messages", () => {
34
+ const list = new MessageList();
35
+ list.merge({
36
+ 'foo': ['bar', 'baz'],
37
+ 'test': ['test 1', 'test 2']
38
+ });
39
+
40
+ list.merge({
41
+ 'foo': ['merged 1', 'merged 2'],
42
+ 'test': ['test 3', 'test 4'],
43
+ 'new': ['new 1', 'new 2']
44
+ });
45
+
46
+ expect(list['foo']).toEqual(['bar', 'baz', 'merged 1', 'merged 2']);
47
+ expect(list['test']).toEqual(['test 1', 'test 2', 'test 3', 'test 4']);
48
+ expect(list['new']).toEqual(['new 1', 'new 2']);
49
+ });
50
+
51
+ it("should replace messages", () => {
52
+ const list = new MessageList();
53
+ list.merge({
54
+ 'foo': ['bar', 'baz'],
55
+ 'test': ['test 1', 'test 2']
56
+ });
57
+
58
+ list.merge({
59
+ 'foo': ['merged 1', 'merged 2'],
60
+ 'test': ['test 3', 'test 4'],
61
+ 'new': ['new 1', 'new 2']
62
+ }, true);
63
+
64
+ expect(list['foo']).toEqual(['merged 1', 'merged 2']);
65
+ expect(list['test']).toEqual(['test 3', 'test 4']);
66
+ expect(list['new']).toEqual(['new 1', 'new 2']);
67
+ });
68
+
69
+ it("should return a list", () => {
70
+ const list = new MessageList(),
71
+ items = {
72
+ 'foo': ['bar', 'baz'],
73
+ 'test': ['test 1', 'test 2']
74
+ };
75
+ list.merge(items);
76
+ expect(list.list).toEqual(items);
77
+ });
78
+
79
+ it("should ignore empty additions", () => {
80
+ const list = new MessageList();
81
+ list.merge({});
82
+ list.merge(null);
83
+ expect(list.length).toEqual(0);
84
+
85
+ list.merge({
86
+ 'empty': [],
87
+ 'null': null
88
+ });
89
+ expect(list.length).toEqual(0);
90
+ });
91
+
92
+ it("should cache list getter result", () => {
93
+ const messageList = new MessageList({
94
+ 'foo': ['bar', 'baz']
95
+ }),
96
+ list = messageList.list;
97
+ expect(list).toBe(messageList.list);
98
+ messageList.add('bar', 'baz');
99
+ expect(list).not.toBe(messageList.list);
100
+ });
101
+ });
File without changes
@@ -0,0 +1,141 @@
1
+ import {DynamicScopeData} from "../../src/Scope/DynamicScopeData";
2
+
3
+
4
+ describe('DynamicScopeData', () => {
5
+ it("Should trigger a change event when any field is changed", () => {
6
+ const m = new DynamicScopeData(['foo']);
7
+ let value = null,
8
+ field = null;
9
+
10
+ m.on('change', (_field, values) => {
11
+ field = _field;
12
+ value = values.value;
13
+ });
14
+
15
+ m.foo = 'testing';
16
+
17
+ expect<string | null>(field).toBe('foo');
18
+ expect(value).toBe(m.foo);
19
+ });
20
+
21
+ it("Should create the given fields from an object", () => {
22
+ const m = new DynamicScopeData({
23
+ field_1: 1,
24
+ field_2: 'yes',
25
+ field_3: true
26
+ });
27
+ expect(m.getProperties().length).toBe(3);
28
+
29
+ m.setData({field_4: 4, field_5: 5});
30
+ expect(m.getProperties().length).toBe(5);
31
+ const data = m.getData();
32
+ expect(data['field_1']).toBe(1);
33
+ expect(data['field_2']).toBe('yes');
34
+ expect(data['field_3']).toBe(true);
35
+ expect(data['field_4']).toBe(4);
36
+ expect(data['field_5']).toBe(5);
37
+ });
38
+
39
+ it("Should create the given fields from an array", () => {
40
+ const m = new DynamicScopeData([
41
+ 'field_1',
42
+ 'field_2',
43
+ 'field_3'
44
+ ]);
45
+ expect(m.getProperties().length).toBe(3);
46
+ });
47
+
48
+ it("Should trigger a change event when a field is changed", () => {
49
+ const m = new DynamicScopeData({
50
+ field_1: 1,
51
+ field_2: 'yes',
52
+ field_3: true
53
+ });
54
+
55
+ let oldValue = null,
56
+ oldValueCheck = null,
57
+ value = null;
58
+
59
+ m.bindToProperties('change', [
60
+ 'field_2',
61
+ 'field_1'
62
+ ], (values) => {
63
+ oldValue = values.oldValue;
64
+ value = values.value;
65
+ });
66
+
67
+ // Test to make sure field_1 change event is being called
68
+ oldValueCheck = m.field_1;
69
+ m.field_1 = 2;
70
+ expect(value).toBe(m.field_1);
71
+ expect(oldValue).toBe(oldValueCheck);
72
+
73
+ // Test to make sure field_2 change event is being called
74
+ oldValueCheck = m.field_2;
75
+ m.field_2 = 'no';
76
+ expect(value).toBe(m.field_2);
77
+ expect(oldValue).toBe(oldValueCheck);
78
+
79
+ // Test to make sure fields that aren't being listened to aren't
80
+ // triggering the event
81
+ oldValueCheck = m.foo;
82
+ m.foo = false;
83
+ expect(value).not.toBe(m.foo);
84
+ expect(oldValue).not.toBe(oldValueCheck);
85
+ });
86
+
87
+ it("Should trigger a change:field event when any field is changed", () => {
88
+ const m = new DynamicScopeData(['field_1']);
89
+ let value = null;
90
+
91
+ m.on('change:field_1', (values) => {
92
+ value = values.value;
93
+ });
94
+
95
+ m.field_1 = 'testing';
96
+
97
+ expect(value).toBe(m.field_1);
98
+ });
99
+
100
+ it("should save last data and return true with is modfied if something is modified", () => {
101
+ const m = new DynamicScopeData({
102
+ field_1: 1,
103
+ field_2: 'foo'
104
+ });
105
+ m.setLastData();
106
+ expect(m.isModified()).toBe(false);
107
+ m.field_1 = 2;
108
+ m.field_2 = null;
109
+ expect(m.isModified()).toBe(true);
110
+ m.setLastData();
111
+ expect(m.isModified()).toBe(false);
112
+ m.field_2 = 'bar';
113
+ expect(m.isModified()).toBe(true);
114
+ });
115
+
116
+ it("should revert to last data correctly", () => {
117
+ const m = new DynamicScopeData({
118
+ field_1: 1,
119
+ field_2: 'bar'
120
+ });
121
+ m.setLastData();
122
+ expect(m.isModified()).toBe(false);
123
+ m.field_1 = 2;
124
+ m.field_2 = null;
125
+ expect(m.isModified()).toBe(true);
126
+ m.revert();
127
+ expect(m.isModified()).toBe(false);
128
+ expect(m.field_1).toBe(1);
129
+ expect(m.field_2).toBe('bar');
130
+ });
131
+
132
+ it("should return the field object", () => {
133
+ const m = new DynamicScopeData({
134
+ field_1: 1,
135
+ field_2: 'string field!'
136
+ }),
137
+ field = m.getProperty('field_2');
138
+ expect(field.value).toBe('string field!');
139
+
140
+ });
141
+ });
@@ -1,4 +1,5 @@
1
- import {Scope, WrappedArray} from "../src/Scope";
1
+ import {Scope} from "../src/Scope";
2
+ import {WrappedArray} from "../src/Scope/WrappedArray";
2
3
 
3
4
  class Test {
4
5
  public testing: string = 'test';
@@ -30,7 +31,7 @@ describe('WrappedArray', () => {
30
31
  it("should behave like an array", async () => {
31
32
  const a = new WrappedArray();
32
33
  let removes: number = 0;
33
- a.bind('remove', (e) => {
34
+ a.on('remove', (e) => {
34
35
  removes += 1;
35
36
  });
36
37
  a.push(1);
@@ -44,7 +45,7 @@ describe('WrappedArray', () => {
44
45
  it("should trigger change events", async () => {
45
46
  const a = new WrappedArray();
46
47
  let changes: number = 0;
47
- a.bind('change', (e) => {
48
+ a.on('change', (e) => {
48
49
  changes += 1;
49
50
  });
50
51
  a.push(1);
@@ -54,4 +55,15 @@ describe('WrappedArray', () => {
54
55
  expect(changes).toBe(6);
55
56
  expect(a.length).toBe(0);
56
57
  });
58
+
59
+ it("should set types correctly", async () => {
60
+ const scope = new Scope();
61
+ scope.setType('test', 'integer');
62
+ scope.set('test', '1');
63
+ expect(scope.get('test')).toBe(1);
64
+
65
+ scope.setType('testing', 'string');
66
+ scope.set('testing', 2);
67
+ expect(scope.get('testing')).toBe('2');
68
+ });
57
69
  });
@@ -0,0 +1,271 @@
1
+ import {IDeferred, SimplePromise} from "../src/SimplePromise";
2
+
3
+
4
+ class Test {
5
+ constructor(
6
+ public value: string = 'test'
7
+ ) {}
8
+ }
9
+ class Testing {
10
+ constructor(
11
+ public test: Test
12
+ ) {}
13
+ }
14
+
15
+
16
+ describe('Promise', () => {
17
+ let dummy: any = null,
18
+ dummy2: any = null;
19
+
20
+ beforeEach(() => {
21
+ dummy = jasmine.createSpyObj('dummy', ['callback']);
22
+ dummy2 = jasmine.createSpyObj('dummy2', ['callback']);
23
+ });
24
+
25
+ it("defer should work properly with resolve", () => {
26
+ const d: IDeferred<Test> = SimplePromise.defer<Test>();
27
+ const t: Test = new Test();
28
+ expect(dummy.callback).not.toHaveBeenCalled();
29
+ d.promise.then(dummy.callback.bind(dummy));
30
+ d.resolve(t);
31
+ expect(dummy.callback).toHaveBeenCalled();
32
+ expect(d.promise['result']).toBe(t);
33
+ });
34
+
35
+ it("defer should work properly with reject", () => {
36
+ const d: IDeferred<Test> = SimplePromise.defer<Test>();
37
+ const t: Test = new Test();
38
+ expect(dummy.callback).not.toHaveBeenCalled();
39
+ expect(dummy2.callback).not.toHaveBeenCalled();
40
+ d.promise.then(dummy.callback.bind(dummy), dummy2.callback.bind(dummy2));
41
+ d.reject("failed");
42
+ expect(dummy.callback).not.toHaveBeenCalled();
43
+ expect(dummy2.callback).toHaveBeenCalled();
44
+ expect(d.promise['result']).toBe("failed");
45
+ });
46
+
47
+ it("defer should work properly with finally", () => {
48
+ const d: IDeferred<Test> = SimplePromise.defer<Test>();
49
+ expect(dummy.callback).not.toHaveBeenCalled();
50
+ expect(dummy2.callback).not.toHaveBeenCalled();
51
+ d.promise.then((result: Test) => {
52
+ expect(false).toBe(true); // should never be called
53
+ return result;
54
+ }, (reason: string) => {
55
+ expect(dummy2.callback).not.toHaveBeenCalled();
56
+ return reason;
57
+ }).finally(dummy2.callback.bind(dummy2));
58
+
59
+ d.reject("failed");
60
+ expect(dummy2.callback).toHaveBeenCalled();
61
+ expect(d.promise['result']).toBe("failed");
62
+ });
63
+
64
+ it("test race with reject", () => {
65
+ const d: IDeferred<Test> = SimplePromise.defer<Test>();
66
+ const d2: IDeferred<Test> = SimplePromise.defer<Test>();
67
+ const t: Test = new Test();
68
+ expect(dummy.callback).not.toHaveBeenCalled();
69
+ expect(dummy2.callback).not.toHaveBeenCalled();
70
+ SimplePromise.race([
71
+ d.promise,
72
+ d2.promise
73
+ ]).then(dummy.callback.bind(dummy), dummy2.callback.bind(dummy2));
74
+
75
+ d.reject("failed");
76
+ d2.resolve(t);
77
+ expect(dummy.callback).not.toHaveBeenCalled();
78
+ expect(dummy2.callback).toHaveBeenCalled();
79
+ expect(d.promise['result']).toBe("failed");
80
+ });
81
+
82
+ it("test race with resolve", () => {
83
+ const d: IDeferred<Test> = SimplePromise.defer<Test>();
84
+ const d2: IDeferred<Test> = SimplePromise.defer<Test>();
85
+ const t: Test = new Test();
86
+ expect(dummy.callback).not.toHaveBeenCalled();
87
+ expect(dummy2.callback).not.toHaveBeenCalled();
88
+ SimplePromise.race([
89
+ d.promise,
90
+ d2.promise
91
+ ]).then(dummy.callback.bind(dummy), dummy2.callback.bind(dummy2));
92
+
93
+ d.resolve(t);
94
+ d.reject("failed");
95
+ expect(dummy.callback).toHaveBeenCalled();
96
+ expect(dummy2.callback).not.toHaveBeenCalled();
97
+ expect(d.promise['result']).toBe(t);
98
+ });
99
+
100
+ it("test all with resolve", () => {
101
+ const d: IDeferred<Test> = SimplePromise.defer<Test>();
102
+ const d2: IDeferred<Test> = SimplePromise.defer<Test>();
103
+ const t: Test = new Test();
104
+ expect(dummy.callback).not.toHaveBeenCalled();
105
+ expect(dummy2.callback).not.toHaveBeenCalled();
106
+ SimplePromise.all([
107
+ d.promise,
108
+ d2.promise
109
+ ]).then(dummy.callback.bind(dummy), dummy2.callback.bind(dummy2));
110
+
111
+ d.resolve(t);
112
+ expect(dummy.callback).not.toHaveBeenCalled();
113
+ expect(dummy2.callback).not.toHaveBeenCalled();
114
+ d2.resolve(t);
115
+ expect(dummy.callback).toHaveBeenCalled();
116
+ expect(dummy2.callback).not.toHaveBeenCalled();
117
+ expect(d.promise['result']).toBe(t);
118
+ });
119
+
120
+ it("test all with reject", () => {
121
+ const d: IDeferred<Test> = SimplePromise.defer<Test>();
122
+ const d2: IDeferred<Test> = SimplePromise.defer<Test>();
123
+ const t: Test = new Test();
124
+ expect(dummy.callback).not.toHaveBeenCalled();
125
+ expect(dummy2.callback).not.toHaveBeenCalled();
126
+ SimplePromise.all([
127
+ d.promise,
128
+ d2.promise
129
+ ]).then(dummy.callback.bind(dummy), dummy2.callback.bind(dummy2));
130
+
131
+ d.resolve(t);
132
+ expect(dummy.callback).not.toHaveBeenCalled();
133
+ expect(dummy2.callback).not.toHaveBeenCalled();
134
+ d2.reject("failed");
135
+ expect(dummy.callback).not.toHaveBeenCalled();
136
+ expect(dummy2.callback).toHaveBeenCalled();
137
+ expect(d2.promise['result']).toBe("failed");
138
+ });
139
+
140
+ it("resolve static function should work properly", () => {
141
+ const t: Test = new Test();
142
+ expect(dummy.callback).not.toHaveBeenCalled();
143
+ expect(dummy2.callback).not.toHaveBeenCalled();
144
+ SimplePromise.resolve(t).then(dummy.callback.bind(dummy), dummy2.callback.bind(dummy2));
145
+ expect(dummy.callback).toHaveBeenCalled();
146
+ expect(dummy2.callback).not.toHaveBeenCalled();
147
+ });
148
+
149
+ it("reject static function should work properly", () => {
150
+ const t: Test = new Test();
151
+ expect(dummy.callback).not.toHaveBeenCalled();
152
+ expect(dummy2.callback).not.toHaveBeenCalled();
153
+ SimplePromise.reject("failed").then(dummy.callback.bind(dummy), dummy2.callback.bind(dummy2));
154
+ expect(dummy.callback).not.toHaveBeenCalled();
155
+ expect(dummy2.callback).toHaveBeenCalled();
156
+ });
157
+
158
+ it("should be rejected if error is thrown", () => {
159
+ const t: Test = new Test();
160
+ expect(dummy.callback).not.toHaveBeenCalled();
161
+ expect(dummy2.callback).not.toHaveBeenCalled();
162
+ new SimplePromise<Test>((resolve, reject) => {
163
+ throw Error('failed');
164
+ }).then(dummy.callback.bind(dummy), dummy2.callback.bind(dummy2));
165
+ expect(dummy.callback).not.toHaveBeenCalled();
166
+ expect(dummy2.callback).toHaveBeenCalled();
167
+ });
168
+
169
+ it("should process multiple then statements in the correct order", () => {
170
+ const d: IDeferred<Test> = SimplePromise.defer<Test>();
171
+ const t: Test = new Test();
172
+ d.promise.then<Test>((result: Test): Test => {
173
+ expect(result.value).toBe('test');
174
+ result.value = 'then 1';
175
+ return result;
176
+ });
177
+ d.promise.then<Test>((result: Test): Test => {
178
+ expect(result.value).toBe('then 1');
179
+ result.value = 'then 2';
180
+ return result;
181
+ });
182
+ d.promise.then<Test>((result: Test): Test => {
183
+ expect(result.value).toBe('then 2');
184
+ result.value = 'then 3';
185
+ return result;
186
+ });
187
+ d.promise.then<Test>((result: Test): Test => {
188
+ expect(result.value).toBe('then 3');
189
+ result.value = 'then 4';
190
+ return result;
191
+ });
192
+
193
+ d.resolve(t);
194
+ });
195
+
196
+ it("should process chained then statements in the correct order", () => {
197
+ const d: IDeferred<Test> = SimplePromise.defer<Test>();
198
+ const t: Test = new Test();
199
+ d.promise.then<Testing>((result: Test) => {
200
+ expect(d.promise['result']).toBe(result);
201
+ return new Testing(result);
202
+ }).then((result: Testing | undefined): Testing => {
203
+ expect((result as any as Testing).test).toBe(t);
204
+ return result as any as Testing;
205
+ });
206
+ d.resolve(t);
207
+ });
208
+
209
+ it("should process callback on previously resolved promise", (done) => {
210
+ const d: IDeferred<Test> = SimplePromise.defer<Test>();
211
+ const t: Test = new Test();
212
+ d.resolve(t);
213
+
214
+ d.promise.then<Testing>((result: Test) => {
215
+ expect(d.promise['result']).toBe(result);
216
+ done();
217
+ return new Testing(result);
218
+ });
219
+ });
220
+
221
+ it("should process callback on previously rejected promise", (done) => {
222
+ const d: IDeferred<Test> = SimplePromise.defer<Test>();
223
+ d.reject('Failure.');
224
+
225
+ d.promise.then<Testing>((result: Test) => {
226
+ expect(false).toBe(true);
227
+ return new Testing(result);
228
+ }, (reason?: string): string => {
229
+ expect(reason).toBe('Failure.');
230
+ done();
231
+
232
+ return reason as string;
233
+ });
234
+ });
235
+
236
+ it("should process Promise.all callbacks with previously resolved promises", (done) => {
237
+ const d: IDeferred<Test> = SimplePromise.defer<Test>();
238
+ const d2: IDeferred<Test> = SimplePromise.defer<Test>();
239
+ const t: Test = new Test();
240
+ const t2: Test = new Test();
241
+ d2.resolve(t2);
242
+
243
+ SimplePromise.all<Test>([d.promise, d2.promise]).then((results?: Test[]) => {
244
+ if (results === undefined) return;
245
+ expect(d.promise['result']).toBe(results[0]);
246
+ expect(d2.promise['result']).toBe(results[1]);
247
+ done();
248
+ });
249
+
250
+ d.resolve(t);
251
+ });
252
+
253
+ it("should process Promise.all callbacks with previously rejected promises", (done) => {
254
+ const d: IDeferred<Test> = SimplePromise.defer<Test>();
255
+ const d2: IDeferred<Test> = SimplePromise.defer<Test>();
256
+ const t: Test = new Test();
257
+ const t2: Test = new Test();
258
+ d.reject('Failure.');
259
+
260
+ SimplePromise.all<Test>([d.promise, d2.promise]).then((results?: Test[]) => {
261
+ expect(false).toBe(true);
262
+ }, (reason?: string): string => {
263
+ expect(reason).toBe('Failure.');
264
+ done();
265
+
266
+ return reason as string;
267
+ });
268
+
269
+ d2.resolve(t2);
270
+ });
271
+ });
@@ -1,7 +1,7 @@
1
1
  import {DOM} from "../../src/DOM";
2
2
  import {Query} from "../../src/Query";
3
3
  import {TagList} from "../../src/Tag/List";
4
- import {DOMObject} from "../../dist/DOM/DOMObject";
4
+ import {DOMObject} from "../../src/DOM/DOMObject";
5
5
 
6
6
  describe('TagList', () => {
7
7
  it("should be able to fail properly", (done) => {
@@ -60,7 +60,7 @@ describe('Bind', () => {
60
60
  const test = document.getElementById('test');
61
61
  const tag = await dom.getTagForElement(test);
62
62
 
63
- tag.scope.bind('change:id', () => {
63
+ tag.scope.on('change:id', () => {
64
64
  expect(test.getAttribute('id')).toBe('new-id');
65
65
  expect(tag.scope.get('id')).toBe('new-id');
66
66
  done();
@@ -81,7 +81,7 @@ describe('Bind', () => {
81
81
  const tag = await dom.getTagForElement(test);
82
82
  expect(tag.scope.get('val')).toBe('testing');
83
83
 
84
- tag.scope.get('test').bind('change:val', () => {
84
+ tag.scope.get('test').on('change:val', () => {
85
85
  expect(tag.scope.get('val')).toBe('new-val');
86
86
  done();
87
87
  });
@@ -102,7 +102,7 @@ describe('Bind', () => {
102
102
  const tag = await dom.getTagForElement(test);
103
103
  expect(tag.scope.get('val')).toBe('testing');
104
104
 
105
- tag.scope.get('test').bind('change:val', () => {
105
+ tag.scope.get('test').on('change:val', () => {
106
106
  expect(tag.scope.get('val')).toBe('new-val');
107
107
  done();
108
108
  });
@@ -127,7 +127,7 @@ describe('Bind', () => {
127
127
  const tag = await dom.getTagForElement(test);
128
128
  expect(tag.scope.get('val')).toBe('testing');
129
129
 
130
- tag.scope.get('test').bind('change:val', () => {
130
+ tag.scope.get('test').on('change:val', () => {
131
131
  expect(test.innerHTML).toBe('new-val');
132
132
  done();
133
133
  });
@@ -148,7 +148,7 @@ describe('Bind', () => {
148
148
  const tag = await dom.getTagForElement(test);
149
149
  expect(tag.scope.get('val')).toBe('testing');
150
150
 
151
- tag.bind('mutate', () => {
151
+ tag.on('mutate', () => {
152
152
  expect(test.getAttribute('value')).toBe('new-val');
153
153
  done();
154
154
  });
@@ -74,7 +74,7 @@ describe('ListItem', () => {
74
74
  const controller: ListItemController = list.scope.get('controller').wrapped;
75
75
  const listAttr: List = await list.getAttribute('vsn-list') as List;
76
76
 
77
- list.bind('add', () => {
77
+ list.on('add', () => {
78
78
  const listItem = listAttr.tags[0];
79
79
 
80
80
  expect(listItem.scope.wrapped instanceof ListItemSpecTestItem).toBeTrue();