@angular-wave/angular.ts 0.4.2 → 0.4.4

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 (150) hide show
  1. package/dist/angular-ts.esm.js +2 -2
  2. package/dist/angular-ts.umd.js +12 -2
  3. package/index.html +74 -3
  4. package/package.json +7 -7
  5. package/src/angular.spec.js +1 -269
  6. package/src/animations/animate-css-driver.js +2 -2
  7. package/src/animations/animate-css.js +12 -21
  8. package/src/animations/animate-js-driver.js +1 -3
  9. package/src/animations/animate-js.js +4 -4
  10. package/src/animations/animate-queue.js +23 -23
  11. package/src/animations/animate-runner.js +4 -8
  12. package/src/animations/animate.md +1 -1
  13. package/src/animations/animate.spec.js +0 -21
  14. package/src/animations/animation.js +4 -4
  15. package/src/animations/shared.js +14 -12
  16. package/src/binding.spec.js +0 -1
  17. package/src/core/cache/cache.js +2 -29
  18. package/src/core/compile/attributes.js +2 -3
  19. package/src/core/compile/compile.js +260 -245
  20. package/src/core/compile/compile.spec.js +63 -317
  21. package/src/core/compile/compile.test.js +1 -1
  22. package/src/core/controller/controller.js +2 -0
  23. package/src/core/di/injector.md +1 -1
  24. package/src/core/di/injector.spec.js +0 -2
  25. package/src/core/di/internal-injector.js +2 -1
  26. package/src/core/interpolate/interpolate.js +16 -3
  27. package/src/core/interpolate/interpolate.spec.js +70 -16
  28. package/src/core/location/location.js +0 -2
  29. package/src/core/location/location.spec.js +27 -27
  30. package/src/core/{scope/scope.html → model/model.html} +1 -1
  31. package/src/core/model/model.js +944 -0
  32. package/src/core/model/model.spec.js +3012 -0
  33. package/src/core/on.spec.js +0 -7
  34. package/src/core/parse/interpreter.js +10 -7
  35. package/src/core/parse/parse.js +28 -7
  36. package/src/core/parse/parse.spec.js +95 -91
  37. package/src/core/prop.spec.js +4 -60
  38. package/src/core/sce/sce.js +1 -2
  39. package/src/core/sce/sce.spec.js +0 -8
  40. package/src/core/scope/scope.js +62 -32
  41. package/src/core/scope/scope.spec.js +25 -1960
  42. package/src/directive/aria/aria.js +3 -6
  43. package/src/directive/aria/aria.spec.js +0 -87
  44. package/src/directive/attrs/attrs.spec.js +0 -5
  45. package/src/directive/{list/list.test.js → attrs/attrs.test.js} +1 -1
  46. package/src/{core/q/q.html → directive/attrs/boolean.html} +1 -1
  47. package/src/directive/attrs/boolean.spec.js +0 -15
  48. package/src/{core/q/q.test.js → directive/attrs/boolean.test.js} +1 -2
  49. package/src/{core/timeout/timeout.html → directive/attrs/element-style.html} +4 -1
  50. package/src/directive/attrs/element-style.spec.js +0 -8
  51. package/src/{core/scope/scope.test.js → directive/attrs/element-style.test.js} +1 -2
  52. package/src/directive/attrs/src.spec.js +0 -7
  53. package/src/directive/bind/bind.spec.js +0 -33
  54. package/src/directive/bind/bing-html.spec.js +1 -4
  55. package/src/{core/interval/interval.html → directive/channel/channel.html} +1 -1
  56. package/src/directive/channel/channel.js +29 -0
  57. package/src/directive/channel/channel.spec.js +52 -0
  58. package/src/directive/channel/channel.test.js +9 -0
  59. package/src/directive/class/class.js +3 -3
  60. package/src/directive/class/class.spec.js +9 -75
  61. package/src/directive/controller/controller.spec.js +0 -13
  62. package/src/directive/events/click.spec.js +0 -3
  63. package/src/directive/events/event.spec.js +0 -6
  64. package/src/directive/form/form.js +14 -22
  65. package/src/directive/form/form.spec.js +0 -65
  66. package/src/directive/if/if.spec.js +2 -7
  67. package/src/directive/if/if.test.js +1 -2
  68. package/src/directive/include/include.js +2 -2
  69. package/src/directive/include/include.spec.js +8 -59
  70. package/src/directive/init/init.js +6 -2
  71. package/src/directive/init/init.spec.js +0 -2
  72. package/src/directive/input/input.js +1 -2
  73. package/src/directive/input/input.spec.js +191 -331
  74. package/src/directive/messages/messages.spec.js +4 -35
  75. package/src/directive/model/model.js +30 -42
  76. package/src/directive/model/model.spec.js +2 -49
  77. package/src/directive/model-options/model-options.js +22 -26
  78. package/src/directive/model-options/model-options.spec.js +0 -6
  79. package/src/directive/non-bindable/non-bindable.spec.js +0 -1
  80. package/src/directive/observe/observe.js +0 -1
  81. package/src/directive/observe/observe.spec.js +0 -1
  82. package/src/directive/options/options.js +1 -3
  83. package/src/directive/options/options.spec.js +3 -38
  84. package/src/directive/ref/href.spec.js +0 -15
  85. package/src/directive/repeat/repeat.js +2 -2
  86. package/src/directive/repeat/repeat.spec.js +56 -192
  87. package/src/directive/script/script.spec.js +0 -2
  88. package/src/directive/select/select.js +3 -3
  89. package/src/directive/select/select.spec.js +9 -106
  90. package/src/directive/show-hide/show-hide.js +2 -2
  91. package/src/directive/show-hide/show-hide.spec.js +8 -19
  92. package/src/directive/style/style.spec.js +0 -7
  93. package/src/directive/switch/switch.js +1 -2
  94. package/src/directive/switch/switch.spec.js +5 -5
  95. package/src/directive/validators/validators.spec.js +0 -1
  96. package/src/loader.js +0 -1
  97. package/src/public.js +75 -80
  98. package/src/router/common/coreservices.js +0 -2
  99. package/src/router/directives/state-directives.js +24 -30
  100. package/src/router/directives/state-directives.spec.js +0 -83
  101. package/src/router/directives/view-directive.js +6 -15
  102. package/src/router/directives/view-directive.spec.js +25 -71
  103. package/src/router/hooks/lazy-load.js +2 -2
  104. package/src/router/hooks/views.js +3 -5
  105. package/src/router/resolve/resolvable.js +3 -6
  106. package/src/router/resolve/resolve-context.js +2 -2
  107. package/src/router/state/state-service.js +4 -4
  108. package/src/router/state/state.spec.js +2 -5
  109. package/src/router/state/views.js +9 -12
  110. package/src/router/template-factory.js +3 -6
  111. package/src/router/template-factory.spec.js +0 -4
  112. package/src/router/transition/transition-hook.js +1 -1
  113. package/src/router/transition/transition.js +1 -1
  114. package/src/router/url/url-service.js +2 -8
  115. package/src/router/url/url-service.spec.js +3 -4
  116. package/src/router/view-hook.spec.js +2 -2
  117. package/src/router/view-scroll.js +4 -6
  118. package/src/services/http/http.js +11 -15
  119. package/src/services/http/http.spec.js +30 -31
  120. package/src/services/http/template-request.spec.js +0 -10
  121. package/src/services/http-backend/http-backend.js +19 -17
  122. package/src/services/http-backend/http-backend.spec.js +3 -3
  123. package/src/services/template-request.js +2 -4
  124. package/src/shared/common.js +6 -10
  125. package/src/shared/jqlite/jqlite.js +14 -15
  126. package/src/shared/jqlite/jqlite.spec.js +2 -2
  127. package/src/shared/utils.js +15 -92
  128. package/types/core/cache/cache.d.ts +1 -1
  129. package/types/core/model/model.d.ts +204 -0
  130. package/types/core/parse/parse.d.ts +26 -0
  131. package/types/core/scope/scope.d.ts +22 -21
  132. package/types/directive/channel/channel.d.ts +11 -0
  133. package/types/directive/form/form.d.ts +1 -0
  134. package/types/shared/common.d.ts +0 -1
  135. package/types/shared/utils.d.ts +0 -35
  136. package/src/core/interval/interval-factory.js +0 -50
  137. package/src/core/interval/interval.js +0 -77
  138. package/src/core/interval/interval.md +0 -123
  139. package/src/core/interval/interval.spec.js +0 -280
  140. package/src/core/q/q.js +0 -472
  141. package/src/core/q/q.md +0 -211
  142. package/src/core/q/q.spec.js +0 -2748
  143. package/src/core/timeout/timeout.js +0 -109
  144. package/src/core/timeout/timeout.spec.js +0 -354
  145. package/src/core/timeout/timout.test.js +0 -12
  146. package/src/directive/list/list.html +0 -18
  147. package/src/directive/list/list.js +0 -46
  148. package/src/directive/list/list.md +0 -22
  149. package/src/directive/list/list.spec.js +0 -172
  150. package/types/directive/list/list.d.ts +0 -4
@@ -1,7 +1,6 @@
1
1
  import { Angular } from "../../loader";
2
- import { createInjector } from "../../core/di/injector";
3
2
  import { dealoc, JQLite } from "../../shared/jqlite/jqlite";
4
- import { forEach, valueFn } from "../../shared/utils";
3
+ import { valueFn } from "../../shared/utils";
5
4
 
6
5
  describe("ngRepeat", () => {
7
6
  let element;
@@ -56,21 +55,18 @@ describe("ngRepeat", () => {
56
55
  Array.prototype.extraProperty = "should be ignored";
57
56
  // INIT
58
57
  scope.items = [{ name: "misko" }, { name: "shyam" }];
59
- scope.$digest();
60
58
  expect(element.find("li").length).toEqual(2);
61
59
  expect(element.text()).toEqual("misko;shyam;");
62
60
  delete Array.prototype.extraProperty;
63
61
 
64
62
  // GROW
65
63
  scope.items.push({ name: "adam" });
66
- scope.$digest();
67
64
  expect(element.find("li").length).toEqual(3);
68
65
  expect(element.text()).toEqual("misko;shyam;adam;");
69
66
 
70
67
  // // SHRINK
71
68
  scope.items.pop();
72
69
  scope.items.shift();
73
- scope.$digest();
74
70
  expect(element.find("li").length).toEqual(1);
75
71
  expect(element.text()).toEqual("shyam;");
76
72
  });
@@ -80,14 +76,10 @@ describe("ngRepeat", () => {
80
76
  "<ul>" + '<li ng-repeat="item in ::items">{{item.name}};</li>' + "</ul>",
81
77
  )(scope);
82
78
 
83
- scope.$digest();
84
-
85
79
  scope.items = [{ name: "misko" }, { name: "shyam" }];
86
- scope.$digest();
87
80
  expect(element.find("li").length).toEqual(2);
88
81
  expect(element.text()).toEqual("misko;shyam;");
89
82
  scope.items.push({ name: "adam" });
90
- scope.$digest();
91
83
  expect(element.find("li").length).toEqual(2);
92
84
  expect(element.text()).toEqual("misko;shyam;");
93
85
  });
@@ -97,14 +89,10 @@ describe("ngRepeat", () => {
97
89
  "<ul>" + '<li ng-repeat="item in items">{{::item.name}};</li>' + "</ul>",
98
90
  )(scope);
99
91
 
100
- scope.$digest();
101
-
102
92
  scope.items = [{ name: "misko" }, { name: "shyam" }];
103
- scope.$digest();
104
93
  expect(element.find("li").length).toEqual(2);
105
94
  expect(element.text()).toEqual("misko;shyam;");
106
95
  scope.items.push({ name: "adam" });
107
- scope.$digest();
108
96
  expect(element.find("li").length).toEqual(3);
109
97
  expect(element.text()).toEqual("misko;shyam;adam;");
110
98
  });
@@ -121,7 +109,6 @@ describe("ngRepeat", () => {
121
109
 
122
110
  const htmlCollection = document.getElementsByClassName("test");
123
111
  scope.items = htmlCollection;
124
- scope.$digest();
125
112
  expect(element.find("li").length).toEqual(3);
126
113
  expect(element.text()).toEqual("x;y;x;");
127
114
 
@@ -144,7 +131,6 @@ describe("ngRepeat", () => {
144
131
  )(scope);
145
132
 
146
133
  scope.items = collection;
147
- scope.$digest();
148
134
  expect(element.find("li").length).toEqual(3);
149
135
  expect(element.text()).toEqual("x;y;z;");
150
136
  });
@@ -156,7 +142,6 @@ describe("ngRepeat", () => {
156
142
  "</ul>",
157
143
  )(scope);
158
144
  scope.items = { misko: "swe", shyam: "set" };
159
- scope.$digest();
160
145
  expect(element.text()).toEqual("misko:swe|shyam:set|");
161
146
  });
162
147
 
@@ -167,7 +152,6 @@ describe("ngRepeat", () => {
167
152
  "</ul>",
168
153
  )(scope);
169
154
  scope.items = { me: "swe", you: "set" };
170
- scope.$digest();
171
155
  expect(element.text()).toEqual("me:swe|you:set|");
172
156
  });
173
157
 
@@ -184,7 +168,6 @@ describe("ngRepeat", () => {
184
168
  dogname: "Bingo",
185
169
  codename: "20",
186
170
  };
187
- scope.$digest();
188
171
  expect(element.text()).toEqual(
189
172
  "age:20|wealth:20|prodname:Bingo|dogname:Bingo|codename:20|",
190
173
  );
@@ -202,11 +185,9 @@ describe("ngRepeat", () => {
202
185
  items.shyam = "set";
203
186
 
204
187
  scope.items = items;
205
- scope.$digest();
206
188
  expect(element.text()).toEqual("misko:swe|shyam:set|");
207
189
 
208
190
  delete items.shyam;
209
- scope.$digest();
210
191
  expect(element.text()).toEqual("misko:swe|");
211
192
  });
212
193
 
@@ -218,12 +199,10 @@ describe("ngRepeat", () => {
218
199
  "</ul>",
219
200
  )(scope);
220
201
  scope.items = [{ id: "misko" }, { id: "igor" }];
221
- scope.$digest();
222
202
  const li0 = element.find("li")[0];
223
203
  const li1 = element.find("li")[1];
224
204
 
225
205
  scope.items.push(scope.items.shift());
226
- scope.$digest();
227
206
  expect(element.find("li")[0]).toBe(li1);
228
207
  expect(element.find("li")[1]).toBe(li0);
229
208
  });
@@ -235,12 +214,10 @@ describe("ngRepeat", () => {
235
214
  "</ul>",
236
215
  )(scope);
237
216
  scope.items = [{ name: "misko" }, { name: "igor" }];
238
- scope.$digest();
239
217
  const li0 = element.find("li")[0];
240
218
  const li1 = element.find("li")[1];
241
219
 
242
220
  scope.items.push(scope.items.shift());
243
- scope.$digest();
244
221
  expect(element.find("li")[0]).toBe(li1);
245
222
  expect(element.find("li")[1]).toBe(li0);
246
223
  });
@@ -255,18 +232,16 @@ describe("ngRepeat", () => {
255
232
  "</ul>",
256
233
  )(scope);
257
234
  scope.items = [{ name: "igor" }, { name: "misko" }];
258
- scope.$digest();
259
-
260
235
  expect(element.find("li").text()).toBe("igor;");
261
236
  });
262
237
 
263
238
  it("should track using provided function when a filter is present", () => {
264
239
  scope.newArray = function (items) {
265
240
  const newArray = [];
266
- forEach(items, (item) => {
241
+ Object.entries(items).forEach(([id, name]) => {
267
242
  newArray.push({
268
- id: item.id,
269
- name: item.name,
243
+ id: id,
244
+ name: name,
270
245
  });
271
246
  });
272
247
  return newArray;
@@ -278,14 +253,12 @@ describe("ngRepeat", () => {
278
253
  { id: 1, name: "igor" },
279
254
  { id: 2, name: "misko" },
280
255
  ];
281
- scope.$digest();
282
256
  expect(element.text()).toBe("igor;misko;");
283
257
 
284
258
  const li0 = element.find("li")[0];
285
259
  const li1 = element.find("li")[1];
286
260
 
287
261
  scope.items.push(scope.items.shift());
288
- scope.$digest();
289
262
  expect(element.find("li")[0]).toBe(li1);
290
263
  expect(element.find("li")[1]).toBe(li0);
291
264
  });
@@ -300,75 +273,61 @@ describe("ngRepeat", () => {
300
273
  Array.prototype.extraProperty = "should be ignored";
301
274
  // INIT
302
275
  scope.items = [true, true, true];
303
- scope.$digest();
304
276
  expect(element.find("li").length).toEqual(3);
305
277
  expect(element.text()).toEqual("true;true;true;");
306
278
  delete Array.prototype.extraProperty;
307
279
 
308
280
  scope.items = [false, true, true];
309
- scope.$digest();
310
281
  expect(element.find("li").length).toEqual(3);
311
282
  expect(element.text()).toEqual("false;true;true;");
312
283
 
313
284
  scope.items = [false, true, false];
314
- scope.$digest();
315
285
  expect(element.find("li").length).toEqual(3);
316
286
  expect(element.text()).toEqual("false;true;false;");
317
287
 
318
288
  scope.items = [true];
319
- scope.$digest();
320
289
  expect(element.find("li").length).toEqual(1);
321
290
  expect(element.text()).toEqual("true;");
322
291
 
323
292
  scope.items = [true, true, false];
324
- scope.$digest();
325
293
  expect(element.find("li").length).toEqual(3);
326
294
  expect(element.text()).toEqual("true;true;false;");
327
295
 
328
296
  scope.items = [true, false, false];
329
- scope.$digest();
330
297
  expect(element.find("li").length).toEqual(3);
331
298
  expect(element.text()).toEqual("true;false;false;");
332
299
 
333
300
  // string
334
301
  scope.items = ["a", "a", "a"];
335
- scope.$digest();
336
302
  expect(element.find("li").length).toEqual(3);
337
303
  expect(element.text()).toEqual("a;a;a;");
338
304
 
339
305
  scope.items = ["ab", "a", "a"];
340
- scope.$digest();
341
306
  expect(element.find("li").length).toEqual(3);
342
307
  expect(element.text()).toEqual("ab;a;a;");
343
308
 
344
309
  scope.items = ["test"];
345
- scope.$digest();
346
310
  expect(element.find("li").length).toEqual(1);
347
311
  expect(element.text()).toEqual("test;");
348
312
 
349
313
  scope.items = ["same", "value"];
350
- scope.$digest();
351
314
  expect(element.find("li").length).toEqual(2);
352
315
  expect(element.text()).toEqual("same;value;");
353
316
 
354
317
  // number
355
318
  scope.items = [12, 12, 12];
356
- scope.$digest();
357
319
  expect(element.find("li").length).toEqual(3);
358
320
  expect(element.text()).toEqual("12;12;12;");
359
321
 
360
322
  scope.items = [53, 12, 27];
361
- scope.$digest();
362
323
  expect(element.find("li").length).toEqual(3);
363
324
  expect(element.text()).toEqual("53;12;27;");
364
325
 
365
326
  scope.items = [89];
366
- scope.$digest();
367
327
  expect(element.find("li").length).toEqual(1);
368
328
  expect(element.text()).toEqual("89;");
369
329
 
370
330
  scope.items = [89, 23];
371
- scope.$digest();
372
331
  expect(element.find("li").length).toEqual(2);
373
332
  expect(element.text()).toEqual("89;23;");
374
333
  });
@@ -384,7 +343,6 @@ describe("ngRepeat", () => {
384
343
  )(scope);
385
344
  document.getElementById("dummy").appendChild(element[0]);
386
345
  scope.items = { misko: true, shyam: true, zhenbo: true };
387
- scope.$digest();
388
346
  expect(element.find("li").length).toEqual(3);
389
347
  expect(element.text()).toEqual("misko:true;shyam:true;zhenbo:true;");
390
348
  element.find("input").eq(0)[0].click();
@@ -407,7 +365,6 @@ describe("ngRepeat", () => {
407
365
  expect(element.find("input")[2].checked).toBe(true);
408
366
 
409
367
  scope.items = { misko: false, shyam: true, zhenbo: true };
410
- scope.$digest();
411
368
  expect(element.text()).toEqual("misko:false;shyam:true;zhenbo:true;");
412
369
  expect(element.find("input")[0].checked).toBe(false);
413
370
  expect(element.find("input")[1].checked).toBe(true);
@@ -426,8 +383,6 @@ describe("ngRepeat", () => {
426
383
  '<li ng-repeat="(k, v) in [1, 2] track by trackBy(k, v)"></li>' +
427
384
  "</ul>",
428
385
  )(scope);
429
- scope.$digest();
430
-
431
386
  expect(scope.trackBy).toHaveBeenCalledTimes(2);
432
387
  expect(scope.trackBy.calls.argsFor(0)).toEqual([0, 1]);
433
388
  expect(scope.trackBy.calls.argsFor(1)).toEqual([1, 2]);
@@ -446,8 +401,6 @@ describe("ngRepeat", () => {
446
401
  "</li>" +
447
402
  "</ul>",
448
403
  )(scope);
449
- scope.$digest();
450
-
451
404
  expect(scope.trackBy).toHaveBeenCalledTimes(4);
452
405
  expect(scope.trackBy.calls.argsFor(0)).toEqual([0, 1, 0, 3]);
453
406
  expect(scope.trackBy.calls.argsFor(1)).toEqual([0, 1, 1, 4]);
@@ -472,11 +425,7 @@ describe("ngRepeat", () => {
472
425
  ];
473
426
 
474
427
  expect(scope.results).toBeUndefined();
475
- scope.$digest();
476
-
477
428
  scope.x = "bl";
478
- scope.$digest();
479
-
480
429
  expect(scope.results).toEqual([
481
430
  { name: "blue" },
482
431
  { name: "black" },
@@ -484,8 +433,6 @@ describe("ngRepeat", () => {
484
433
  ]);
485
434
 
486
435
  scope.items = [];
487
- scope.$digest();
488
-
489
436
  expect(scope.results).toEqual([]);
490
437
  });
491
438
 
@@ -500,12 +447,9 @@ describe("ngRepeat", () => {
500
447
  )(scope);
501
448
 
502
449
  scope.items = [1, 2, 3, 4, 5, 6];
503
- scope.$digest();
504
450
  expect(element.text().trim()).toEqual("123456");
505
451
 
506
452
  scope.x = "0";
507
- scope.$digest();
508
-
509
453
  expect(element.text().trim()).toEqual("No results found...");
510
454
  });
511
455
 
@@ -519,22 +463,17 @@ describe("ngRepeat", () => {
519
463
  { name: "orange" },
520
464
  { name: "blonde" },
521
465
  ];
522
- forEach(
523
- ["null2", "qthis", "qthisq", "fundefined", "$$parent"],
524
- (name) => {
525
- const expr = `item in items | filter:x as ${name} track by $index`;
526
- element = $compile(`<div><div ng-repeat="${expr}"></div></div>`)(
527
- scope,
528
- );
529
- scope.$digest();
530
- expect(scope[name]).toEqual([
531
- { name: "blue" },
532
- { name: "black" },
533
- { name: "blonde" },
534
- ]);
535
- dealoc(element);
536
- },
537
- );
466
+ ["null2", "qthis", "qthisq", "fundefined", "$$parent"].forEach((name) => {
467
+ const expr = `item in items | filter:x as ${name} track by $index`;
468
+ element = $compile(`<div><div ng-repeat="${expr}"></div></div>`)(scope);
469
+ scope.$digest();
470
+ expect(scope[name]).toEqual([
471
+ { name: "blue" },
472
+ { name: "black" },
473
+ { name: "blonde" },
474
+ ]);
475
+ dealoc(element);
476
+ });
538
477
  });
539
478
 
540
479
  it("should throw if alias identifier is not a simple identifier", () => {
@@ -548,42 +487,39 @@ describe("ngRepeat", () => {
548
487
  { name: "blonde" },
549
488
  ];
550
489
 
551
- forEach(
552
- [
553
- "null",
554
- "this",
555
- "undefined",
556
- "$parent",
557
- "$root",
558
- "$id",
559
- "$index",
560
- "$first",
561
- "$middle",
562
- "$last",
563
- "$even",
564
- "$odd",
565
- "obj[key]",
566
- 'obj["key"]',
567
- "obj['key']",
568
- "obj.property",
569
- "foo=6",
570
- ],
571
- (expr) => {
572
- const expression =
573
- `item in items | filter:x as ${expr} track by $index`.replace(
574
- /"/g,
575
- "&quot;",
576
- );
577
- element = $compile(
578
- `<div>` +
579
- ` <div ng-repeat="${expression}">{{item}}</div>` +
580
- `</div>`,
581
- )(scope);
582
- expect(logs.shift().message).toMatch(/must be a valid JS identifier/);
583
-
584
- dealoc(element);
585
- },
586
- );
490
+ [
491
+ "null",
492
+ "this",
493
+ "undefined",
494
+ "$parent",
495
+ "$root",
496
+ "$id",
497
+ "$index",
498
+ "$first",
499
+ "$middle",
500
+ "$last",
501
+ "$even",
502
+ "$odd",
503
+ "obj[key]",
504
+ 'obj["key"]',
505
+ "obj['key']",
506
+ "obj.property",
507
+ "foo=6",
508
+ ].forEach((expr) => {
509
+ const expression =
510
+ `item in items | filter:x as ${expr} track by $index`.replace(
511
+ /"/g,
512
+ "&quot;",
513
+ );
514
+ element = $compile(
515
+ `<div>` +
516
+ ` <div ng-repeat="${expression}">{{item}}</div>` +
517
+ `</div>`,
518
+ )(scope);
519
+ expect(logs.shift().message).toMatch(/must be a valid JS identifier/);
520
+
521
+ dealoc(element);
522
+ });
587
523
  });
588
524
 
589
525
  it("should allow expressions over multiple lines", () => {
@@ -599,8 +535,6 @@ describe("ngRepeat", () => {
599
535
  };
600
536
  scope.items = [{ name: "igor" }, { name: "misko" }];
601
537
 
602
- scope.$digest();
603
-
604
538
  expect(element.text()).toEqual("igor/misko/");
605
539
  });
606
540
 
@@ -615,8 +549,6 @@ describe("ngRepeat", () => {
615
549
 
616
550
  scope.items = [{ name: "igor" }, { name: "misko" }];
617
551
 
618
- scope.$digest();
619
-
620
552
  expect(element.text()).toEqual("misko/");
621
553
  });
622
554
 
@@ -632,7 +564,6 @@ describe("ngRepeat", () => {
632
564
  )(scope);
633
565
  scope.items = new Class();
634
566
  scope.items.name = "value";
635
- scope.$digest();
636
567
  expect(element.text()).toEqual("name:value;");
637
568
  });
638
569
 
@@ -655,7 +586,6 @@ describe("ngRepeat", () => {
655
586
  "</ul>",
656
587
  )(scope);
657
588
  scope.items = ["misko", "shyam", "frodo"];
658
- scope.$digest();
659
589
  expect(element.text()).toEqual("misko:0|shyam:1|frodo:2|");
660
590
  });
661
591
 
@@ -666,7 +596,6 @@ describe("ngRepeat", () => {
666
596
  "</ul>",
667
597
  )(scope);
668
598
  scope.items = { misko: "m", shyam: "s", frodo: "f" };
669
- scope.$digest();
670
599
  expect(element.text()).toEqual("misko:m:0|shyam:s:1|frodo:f:2|");
671
600
  });
672
601
 
@@ -677,7 +606,6 @@ describe("ngRepeat", () => {
677
606
  "</ul>",
678
607
  )(scope);
679
608
  scope.items = { misko: "m", shyam: "s", frodo: "f", length: 0 };
680
- scope.$digest();
681
609
  expect(element.text()).toEqual(
682
610
  "misko:m:0|shyam:s:1|frodo:f:2|length:0:3|",
683
611
  );
@@ -690,13 +618,11 @@ describe("ngRepeat", () => {
690
618
  "</ul>",
691
619
  )(scope);
692
620
  scope.items = ["misko", "shyam", "doug"];
693
- scope.$digest();
694
621
  expect(element.text()).toEqual(
695
622
  "misko:true-false-false|shyam:false-true-false|doug:false-false-true|",
696
623
  );
697
624
 
698
625
  scope.items.push("frodo");
699
- scope.$digest();
700
626
  expect(element.text()).toEqual(
701
627
  "misko:true-false-false|" +
702
628
  "shyam:false-true-false|" +
@@ -706,13 +632,11 @@ describe("ngRepeat", () => {
706
632
 
707
633
  scope.items.pop();
708
634
  scope.items.pop();
709
- scope.$digest();
710
635
  expect(element.text()).toEqual(
711
636
  "misko:true-false-false|shyam:false-false-true|",
712
637
  );
713
638
 
714
639
  scope.items.pop();
715
- scope.$digest();
716
640
  expect(element.text()).toEqual("misko:true-false-true|");
717
641
  });
718
642
 
@@ -723,13 +647,11 @@ describe("ngRepeat", () => {
723
647
  "</ul>",
724
648
  )(scope);
725
649
  scope.items = ["misko", "shyam", "doug"];
726
- scope.$digest();
727
650
  expect(element.text()).toEqual(
728
651
  "misko:true-false|shyam:false-true|doug:true-false|",
729
652
  );
730
653
 
731
654
  scope.items.push("frodo");
732
- scope.$digest();
733
655
  expect(element.text()).toBe(
734
656
  "misko:true-false|" +
735
657
  "shyam:false-true|" +
@@ -739,7 +661,6 @@ describe("ngRepeat", () => {
739
661
 
740
662
  scope.items.shift();
741
663
  scope.items.pop();
742
- scope.$digest();
743
664
  expect(element.text()).toBe("shyam:true-false|doug:false-true|");
744
665
  });
745
666
 
@@ -750,7 +671,6 @@ describe("ngRepeat", () => {
750
671
  "</ul>",
751
672
  )(scope);
752
673
  scope.items = { misko: "m", shyam: "s", doug: "d", frodo: "f" };
753
- scope.$digest();
754
674
  expect(element.text()).toEqual(
755
675
  "misko:m:true-false-false|" +
756
676
  "shyam:s:false-true-false|" +
@@ -760,13 +680,11 @@ describe("ngRepeat", () => {
760
680
 
761
681
  delete scope.items.doug;
762
682
  delete scope.items.frodo;
763
- scope.$digest();
764
683
  expect(element.text()).toEqual(
765
684
  "misko:m:true-false-false|shyam:s:false-false-true|",
766
685
  );
767
686
 
768
687
  delete scope.items.shyam;
769
- scope.$digest();
770
688
  expect(element.text()).toEqual("misko:m:true-false-true|");
771
689
  });
772
690
 
@@ -777,7 +695,6 @@ describe("ngRepeat", () => {
777
695
  "</ul>",
778
696
  )(scope);
779
697
  scope.items = { misko: "m", shyam: "s", doug: "d", frodo: "f" };
780
- scope.$digest();
781
698
  expect(element.text()).toBe(
782
699
  "misko:m:true-false|" +
783
700
  "shyam:s:false-true|" +
@@ -787,7 +704,6 @@ describe("ngRepeat", () => {
787
704
 
788
705
  delete scope.items.frodo;
789
706
  delete scope.items.shyam;
790
- scope.$digest();
791
707
  expect(element.text()).toBe("misko:m:true-false|doug:d:false-true|");
792
708
  });
793
709
 
@@ -804,8 +720,6 @@ describe("ngRepeat", () => {
804
720
  frodo: "f",
805
721
  $toBeFilteredOut: "xxxx",
806
722
  };
807
- scope.$digest();
808
-
809
723
  expect(element.text()).toEqual(
810
724
  "misko:m:true-false-false|" +
811
725
  "shyam:s:false-true-false|" +
@@ -827,7 +741,6 @@ describe("ngRepeat", () => {
827
741
  frodo: "f",
828
742
  $toBeFilteredOut: "xxxx",
829
743
  };
830
- scope.$digest();
831
744
  expect(element.text()).toEqual(
832
745
  "misko:m:true-false|" +
833
746
  "shyam:s:false-true|" +
@@ -843,8 +756,6 @@ describe("ngRepeat", () => {
843
756
  scope.items = ["a", "b", "c"];
844
757
  scope.items.$$hashKey = "xxx";
845
758
  scope.items.$root = "yyy";
846
- scope.$digest();
847
-
848
759
  expect(element.text()).toEqual("a|b|c|");
849
760
  });
850
761
 
@@ -860,8 +771,6 @@ describe("ngRepeat", () => {
860
771
  ["a", "b"],
861
772
  ["c", "d"],
862
773
  ];
863
- scope.$digest();
864
-
865
774
  expect(element.text()).toEqual("a|b|Xc|d|X");
866
775
  });
867
776
 
@@ -872,8 +781,6 @@ describe("ngRepeat", () => {
872
781
  scope.array = ["a", "b", "c"];
873
782
  scope.array.foo = "23";
874
783
  scope.array.bar = function () {};
875
- scope.$digest();
876
-
877
784
  expect(element.text()).toBe("a|b|c|");
878
785
  });
879
786
 
@@ -884,8 +791,6 @@ describe("ngRepeat", () => {
884
791
  scope.array = ["a", "b"];
885
792
  scope.array[4] = "c";
886
793
  scope.array[6] = "d";
887
- scope.$digest();
888
-
889
794
  expect(element.text()).toBe("a|b|||c||d|");
890
795
  });
891
796
 
@@ -894,8 +799,6 @@ describe("ngRepeat", () => {
894
799
  '<ul><li ng-repeat="item in array">{{item}}|</li></ul>',
895
800
  )(scope);
896
801
  scope.array = ["a", 1, null, undefined, {}];
897
- scope.$digest();
898
-
899
802
  expect(element.text()).toMatch(/a\|1\|\|\|\{\s*\}\|/);
900
803
  });
901
804
 
@@ -904,15 +807,11 @@ describe("ngRepeat", () => {
904
807
  '<ul><li ng-repeat="item in array">{{item}}|</li></ul>',
905
808
  )(scope);
906
809
  scope.array = ["a", "b"];
907
- scope.$digest();
908
-
909
810
  let lis = element.find("li");
910
811
  lis.eq(0).data("mark", "a");
911
812
  lis.eq(1).data("mark", "b");
912
813
 
913
814
  scope.array = ["b", "a"];
914
- scope.$digest();
915
-
916
815
  lis = element.find("li");
917
816
  expect(lis.eq(0).data("mark")).toEqual("b");
918
817
  expect(lis.eq(1).data("mark")).toEqual("a");
@@ -1087,8 +986,6 @@ describe("ngRepeat", () => {
1087
986
  "</div>",
1088
987
  )(scope);
1089
988
 
1090
- scope.$digest();
1091
-
1092
989
  const ends = element.find("p");
1093
990
  expect(ends.length).toBe(3);
1094
991
 
@@ -1097,8 +994,6 @@ describe("ngRepeat", () => {
1097
994
  element[0].insertBefore(extra, ends[1]);
1098
995
 
1099
996
  scope.values.splice(1, 1);
1100
- scope.$digest();
1101
-
1102
997
  // expect the strong tag to be removed too
1103
998
  expect(
1104
999
  Array.from(element[0].children).map((x) => x.tagName.toLowerCase()),
@@ -1116,8 +1011,6 @@ describe("ngRepeat", () => {
1116
1011
  "</div>",
1117
1012
  )(scope);
1118
1013
 
1119
- scope.$digest();
1120
-
1121
1014
  const ends = element.find("p");
1122
1015
  expect(ends.length).toBe(3);
1123
1016
 
@@ -1127,8 +1020,6 @@ describe("ngRepeat", () => {
1127
1020
 
1128
1021
  // move the third block to the beginning
1129
1022
  scope.values.unshift(scope.values.pop());
1130
- scope.$digest();
1131
-
1132
1023
  // expect the strong tag to be moved too
1133
1024
  expect(
1134
1025
  Array.from(element[0].children).map((x) => x.tagName.toLowerCase()),
@@ -1164,13 +1055,11 @@ describe("ngRepeat", () => {
1164
1055
  d = 4;
1165
1056
 
1166
1057
  scope.items = [a, b, c];
1167
- scope.$digest();
1168
1058
  lis = element.find("li");
1169
1059
  });
1170
1060
 
1171
1061
  it("should preserve the order of elements", () => {
1172
1062
  scope.items = [a, c, d];
1173
- scope.$digest();
1174
1063
  const newElements = element.find("li");
1175
1064
  expect(newElements[0]).toEqual(lis[0]);
1176
1065
  expect(newElements[1]).toEqual(lis[2]);
@@ -1179,47 +1068,39 @@ describe("ngRepeat", () => {
1179
1068
 
1180
1069
  it("should throw error on adding existing duplicates and recover", () => {
1181
1070
  scope.items = [a, a, a];
1182
- scope.$digest();
1183
1071
  expect(logs.shift().message).toMatch(/Duplicate key/);
1184
1072
 
1185
1073
  // recover
1186
1074
  scope.items = [a];
1187
- scope.$digest();
1188
1075
  let newElements = element.find("li");
1189
1076
  expect(newElements.length).toEqual(1);
1190
1077
  expect(newElements[0]).toEqual(lis[0]);
1191
1078
 
1192
1079
  scope.items = [];
1193
- scope.$digest();
1194
1080
  newElements = element.find("li");
1195
1081
  expect(newElements.length).toEqual(0);
1196
1082
  });
1197
1083
 
1198
1084
  it("should throw error on new duplicates and recover", () => {
1199
1085
  scope.items = [d, d, d];
1200
- scope.$digest();
1201
1086
  expect(logs.shift().message).toMatch(/Duplicate key/);
1202
1087
 
1203
1088
  // recover
1204
1089
  scope.items = [a];
1205
- scope.$digest();
1206
1090
  let newElements = element.find("li");
1207
1091
  expect(newElements.length).toEqual(1);
1208
1092
  expect(newElements[0]).toEqual(lis[0]);
1209
1093
 
1210
1094
  scope.items = [];
1211
- scope.$digest();
1212
1095
  newElements = element.find("li");
1213
1096
  expect(newElements.length).toEqual(0);
1214
1097
  });
1215
1098
 
1216
1099
  it("should reverse items when the collection is reversed", () => {
1217
1100
  scope.items = [a, b, c];
1218
- scope.$digest();
1219
1101
  lis = element.find("li");
1220
1102
 
1221
1103
  scope.items = [c, b, a];
1222
- scope.$digest();
1223
1104
  const newElements = element.find("li");
1224
1105
  expect(newElements.length).toEqual(3);
1225
1106
  expect(newElements[0]).toEqual(lis[2]);
@@ -1232,12 +1113,10 @@ describe("ngRepeat", () => {
1232
1113
  // model that is composed of primitives.
1233
1114
 
1234
1115
  scope.items = ["hello", "cau", "ahoj"];
1235
- scope.$digest();
1236
1116
  lis = element.find("li");
1237
1117
  lis[2].id = "yes";
1238
1118
 
1239
1119
  scope.items = ["ahoj", "hello", "cau"];
1240
- scope.$digest();
1241
1120
  const newLis = element.find("li");
1242
1121
  expect(newLis.length).toEqual(3);
1243
1122
  expect(newLis[0]).toEqual(lis[2]);
@@ -1247,15 +1126,9 @@ describe("ngRepeat", () => {
1247
1126
 
1248
1127
  it("should be stable even if the collection is initially undefined", () => {
1249
1128
  scope.items = undefined;
1250
- scope.$digest();
1251
-
1252
1129
  scope.items = [{ name: "A" }, { name: "B" }, { name: "C" }];
1253
- scope.$digest();
1254
-
1255
1130
  lis = element.find("li");
1256
1131
  scope.items.shift();
1257
- scope.$digest();
1258
-
1259
1132
  const newLis = element.find("li");
1260
1133
  expect(newLis.length).toBe(2);
1261
1134
  expect(newLis[0]).toBe(lis[1]);
@@ -1281,7 +1154,6 @@ describe("ngRepeat", () => {
1281
1154
  element = $compile(
1282
1155
  '<div><div ng-repeat="i in [1,2]" elm-trans>{{i}}</div></div>',
1283
1156
  )(scope);
1284
- scope.$digest();
1285
1157
  expect(element.text()).toBe("[[1]][[2]]");
1286
1158
  });
1287
1159
 
@@ -1295,7 +1167,6 @@ describe("ngRepeat", () => {
1295
1167
  scope = injector.get("$rootScope");
1296
1168
  $templateCache = injector.get("$templateCache");
1297
1169
  $templateCache.set("test.html", "hello");
1298
- scope.$digest();
1299
1170
  setTimeout(() => {
1300
1171
  expect(element.text()).toBe("hellohello");
1301
1172
  done();
@@ -1306,7 +1177,6 @@ describe("ngRepeat", () => {
1306
1177
  element = $compile(
1307
1178
  '<div><div ng-repeat="i in [1,2,3,4]" ng-if="i % 2 === 0">{{i}};</div></div>',
1308
1179
  )(scope);
1309
- scope.$digest();
1310
1180
  expect(element.text()).toBe("2;4;");
1311
1181
  });
1312
1182
  });
@@ -1325,10 +1195,8 @@ describe("ngRepeat", () => {
1325
1195
  "</div>",
1326
1196
  )(scope);
1327
1197
 
1328
- scope.$digest();
1329
1198
  expect(element.text()).toEqual("T1:D1;T2:D2;");
1330
1199
  scope.books.push({ title: "T3", description: "D3" });
1331
- scope.$digest();
1332
1200
  expect(element.text()).toEqual("T1:D1;T2:D2;T3:D3;");
1333
1201
  });
1334
1202
 
@@ -1343,12 +1211,10 @@ describe("ngRepeat", () => {
1343
1211
  "</div>",
1344
1212
  )(scope);
1345
1213
 
1346
- scope.$digest();
1347
1214
  expect(element.find("div").length).toBe(6);
1348
1215
  scope.values.shift();
1349
1216
  scope.values.push(4);
1350
1217
 
1351
- scope.$digest();
1352
1218
  expect(element.find("div").length).toBe(6);
1353
1219
  expect(element.text()).not.toContain("if:1;");
1354
1220
  });
@@ -1401,7 +1267,6 @@ describe("ngRepeat", () => {
1401
1267
  const element = $compile('<iso><span ng-bind="val"></span></iso>')(
1402
1268
  $rootScope,
1403
1269
  );
1404
- $rootScope.$digest();
1405
1270
  expect(element.text().trim()).toEqual("transcluded content");
1406
1271
  dealoc(element);
1407
1272
  });
@@ -1420,7 +1285,6 @@ describe("ngRepeat", () => {
1420
1285
  const element = $compile(
1421
1286
  '<div><span ng-repeat="a in [1]"><span assert-a></span></span></div>',
1422
1287
  )($rootScope);
1423
- $rootScope.$digest();
1424
1288
  dealoc(element);
1425
1289
  });
1426
1290
  });
@@ -1492,10 +1356,10 @@ describe("ngRepeat", () => {
1492
1356
  // ),
1493
1357
  // )(scope);
1494
1358
 
1495
- // scope.$digest(); // re-enable the animations;
1359
+ // ; // re-enable the animations;
1496
1360
 
1497
1361
  // scope.items = ["1", "2", "3"];
1498
- // scope.$digest();
1362
+ // ;
1499
1363
 
1500
1364
  // item = $animate.queue.shift();
1501
1365
  // expect(item.event).toBe("enter");
@@ -1527,7 +1391,7 @@ describe("ngRepeat", () => {
1527
1391
  // )(scope);
1528
1392
 
1529
1393
  // scope.items = ["1", "2", "3"];
1530
- // scope.$digest();
1394
+ // ;
1531
1395
 
1532
1396
  // item = $animate.queue.shift();
1533
1397
  // expect(item.event).toBe("enter");
@@ -1542,7 +1406,7 @@ describe("ngRepeat", () => {
1542
1406
  // expect(item.element.text()).toBe("3");
1543
1407
 
1544
1408
  // scope.items = ["1", "3"];
1545
- // scope.$digest();
1409
+ // ;
1546
1410
 
1547
1411
  // item = $animate.queue.shift();
1548
1412
  // expect(item.event).toBe("leave");
@@ -1579,11 +1443,11 @@ describe("ngRepeat", () => {
1579
1443
  // )(scope);
1580
1444
 
1581
1445
  // scope.items = ["1", "2", "3"];
1582
- // scope.$digest();
1446
+ // ;
1583
1447
  // expect(element.text()).toBe("123");
1584
1448
 
1585
1449
  // scope.items = ["1", "3"];
1586
- // scope.$digest();
1450
+ // ;
1587
1451
 
1588
1452
  // expect(element.text()).toBe("123"); // the original order should be preserved
1589
1453
  // $animate.flush();
@@ -1608,7 +1472,7 @@ describe("ngRepeat", () => {
1608
1472
  // )(scope);
1609
1473
 
1610
1474
  // scope.items = ["1", "2", "3"];
1611
- // scope.$digest();
1475
+ // ;
1612
1476
 
1613
1477
  // item = $animate.queue.shift();
1614
1478
  // expect(item.event).toBe("enter");
@@ -1623,7 +1487,7 @@ describe("ngRepeat", () => {
1623
1487
  // expect(item.element.text()).toBe("3");
1624
1488
 
1625
1489
  // scope.items = ["2", "3", "1"];
1626
- // scope.$digest();
1490
+ // ;
1627
1491
 
1628
1492
  // item = $animate.queue.shift();
1629
1493
  // expect(item.event).toBe("move");