discourse-ember-source 3.5.1.1 → 3.5.1.2

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 (741) hide show
  1. checksums.yaml +4 -4
  2. data/lib/ember/version.rb +1 -1
  3. metadata +2 -740
  4. data/.gitignore +0 -9
  5. data/.travis.yml +0 -5
  6. data/Gemfile +0 -6
  7. data/LICENSE.txt +0 -21
  8. data/README +0 -18
  9. data/README.md +0 -39
  10. data/Rakefile +0 -27
  11. data/bin/console +0 -14
  12. data/bin/setup +0 -8
  13. data/discourse-ember-source-3.5.1.0.gem +0 -0
  14. data/dist/ember-all.debug.map +0 -1
  15. data/dist/ember-template-compiler.map +0 -1
  16. data/dist/ember-testing.map +0 -1
  17. data/dist/ember-tests.map +0 -1
  18. data/dist/ember-tests.prod.map +0 -1
  19. data/dist/ember.debug.map +0 -1
  20. data/dist/ember.min.map +0 -1
  21. data/dist/ember.prod.map +0 -1
  22. data/dist/es/@ember/application/globals-resolver.js +0 -425
  23. data/dist/es/@ember/application/index.js +0 -3
  24. data/dist/es/@ember/application/instance.js +0 -513
  25. data/dist/es/@ember/application/lib/application.js +0 -1139
  26. data/dist/es/@ember/application/lib/lazy_load.js +0 -69
  27. data/dist/es/@ember/application/lib/validate-type.js +0 -24
  28. data/dist/es/@ember/application/tests/application_instance_test.js +0 -230
  29. data/dist/es/@ember/application/tests/application_test.js +0 -470
  30. data/dist/es/@ember/application/tests/bootstrap-test.js +0 -28
  31. data/dist/es/@ember/application/tests/dependency_injection/custom_resolver_test.js +0 -32
  32. data/dist/es/@ember/application/tests/dependency_injection/default_resolver_test.js +0 -363
  33. data/dist/es/@ember/application/tests/dependency_injection/normalization_test.js +0 -70
  34. data/dist/es/@ember/application/tests/dependency_injection/to_string_test.js +0 -71
  35. data/dist/es/@ember/application/tests/dependency_injection_test.js +0 -93
  36. data/dist/es/@ember/application/tests/initializers_test.js +0 -391
  37. data/dist/es/@ember/application/tests/instance_initializers_test.js +0 -395
  38. data/dist/es/@ember/application/tests/lazy_load_test.js +0 -79
  39. data/dist/es/@ember/application/tests/logging_test.js +0 -179
  40. data/dist/es/@ember/application/tests/readiness_test.js +0 -138
  41. data/dist/es/@ember/application/tests/reset_test.js +0 -185
  42. data/dist/es/@ember/application/tests/visit_test.js +0 -783
  43. data/dist/es/@ember/canary-features/index.js +0 -76
  44. data/dist/es/@ember/controller/index.js +0 -50
  45. data/dist/es/@ember/controller/lib/controller_mixin.js +0 -42
  46. data/dist/es/@ember/controller/tests/controller_test.js +0 -209
  47. data/dist/es/@ember/debug/index.js +0 -264
  48. data/dist/es/@ember/debug/lib/deprecate.js +0 -198
  49. data/dist/es/@ember/debug/lib/handlers.js +0 -22
  50. data/dist/es/@ember/debug/lib/testing.js +0 -7
  51. data/dist/es/@ember/debug/lib/warn.js +0 -107
  52. data/dist/es/@ember/debug/tests/handlers-test.js +0 -144
  53. data/dist/es/@ember/debug/tests/main_test.js +0 -444
  54. data/dist/es/@ember/deprecated-features/index.js +0 -21
  55. data/dist/es/@ember/engine/index.js +0 -532
  56. data/dist/es/@ember/engine/instance.js +0 -228
  57. data/dist/es/@ember/engine/lib/engine-parent.js +0 -32
  58. data/dist/es/@ember/engine/tests/engine_initializers_test.js +0 -366
  59. data/dist/es/@ember/engine/tests/engine_instance_initializers_test.js +0 -409
  60. data/dist/es/@ember/engine/tests/engine_instance_test.js +0 -115
  61. data/dist/es/@ember/engine/tests/engine_parent_test.js +0 -20
  62. data/dist/es/@ember/engine/tests/engine_test.js +0 -121
  63. data/dist/es/@ember/error/index.js +0 -36
  64. data/dist/es/@ember/error/tests/index_test.js +0 -19
  65. data/dist/es/@ember/instrumentation/index.js +0 -240
  66. data/dist/es/@ember/instrumentation/tests/index-test.js +0 -214
  67. data/dist/es/@ember/map/index.js +0 -218
  68. data/dist/es/@ember/map/lib/ordered-set.js +0 -186
  69. data/dist/es/@ember/map/lib/utils.js +0 -29
  70. data/dist/es/@ember/map/tests/map_test.js +0 -578
  71. data/dist/es/@ember/map/with-default.js +0 -87
  72. data/dist/es/@ember/object/computed.js +0 -35
  73. data/dist/es/@ember/object/lib/computed/computed_macros.js +0 -742
  74. data/dist/es/@ember/object/lib/computed/reduce_computed_macros.js +0 -894
  75. data/dist/es/@ember/object/tests/computed/computed_macros_test.js +0 -533
  76. data/dist/es/@ember/object/tests/computed/reduce_computed_macros_test.js +0 -2243
  77. data/dist/es/@ember/polyfills/index.js +0 -3
  78. data/dist/es/@ember/polyfills/lib/assign.js +0 -43
  79. data/dist/es/@ember/polyfills/lib/merge.js +0 -35
  80. data/dist/es/@ember/polyfills/tests/assign_test.js +0 -64
  81. data/dist/es/@ember/runloop/index.js +0 -749
  82. data/dist/es/@ember/runloop/tests/debounce_test.js +0 -87
  83. data/dist/es/@ember/runloop/tests/later_test.js +0 -264
  84. data/dist/es/@ember/runloop/tests/next_test.js +0 -56
  85. data/dist/es/@ember/runloop/tests/once_test.js +0 -62
  86. data/dist/es/@ember/runloop/tests/onerror_test.js +0 -59
  87. data/dist/es/@ember/runloop/tests/run_bind_test.js +0 -59
  88. data/dist/es/@ember/runloop/tests/run_test.js +0 -28
  89. data/dist/es/@ember/runloop/tests/schedule_test.js +0 -86
  90. data/dist/es/@ember/runloop/tests/sync_test.js +0 -32
  91. data/dist/es/@ember/runloop/tests/unwind_test.js +0 -54
  92. data/dist/es/@ember/service/index.js +0 -57
  93. data/dist/es/@ember/string/index.js +0 -362
  94. data/dist/es/@ember/string/lib/string_registry.js +0 -13
  95. data/dist/es/@ember/string/tests/camelize_test.js +0 -53
  96. data/dist/es/@ember/string/tests/capitalize_test.js +0 -58
  97. data/dist/es/@ember/string/tests/classify_test.js +0 -79
  98. data/dist/es/@ember/string/tests/dasherize_test.js +0 -57
  99. data/dist/es/@ember/string/tests/decamelize_test.js +0 -51
  100. data/dist/es/@ember/string/tests/loc_test.js +0 -76
  101. data/dist/es/@ember/string/tests/underscore_test.js +0 -51
  102. data/dist/es/@ember/string/tests/w_test.js +0 -39
  103. data/dist/es/@glimmer/compiler.js +0 -1226
  104. data/dist/es/@glimmer/encoder.js +0 -39
  105. data/dist/es/@glimmer/low-level.js +0 -82
  106. data/dist/es/@glimmer/node.js +0 -112
  107. data/dist/es/@glimmer/opcode-compiler.js +0 -1999
  108. data/dist/es/@glimmer/program.js +0 -405
  109. data/dist/es/@glimmer/reference.js +0 -478
  110. data/dist/es/@glimmer/runtime.js +0 -4086
  111. data/dist/es/@glimmer/syntax.js +0 -1424
  112. data/dist/es/@glimmer/util.js +0 -189
  113. data/dist/es/@glimmer/vm.js +0 -27
  114. data/dist/es/@glimmer/wire-format.js +0 -56
  115. data/dist/es/backburner.js +0 -936
  116. data/dist/es/container/index.js +0 -8
  117. data/dist/es/container/lib/container.js +0 -437
  118. data/dist/es/container/lib/registry.js +0 -646
  119. data/dist/es/container/tests/container_test.js +0 -872
  120. data/dist/es/container/tests/owner_test.js +0 -20
  121. data/dist/es/container/tests/registry_test.js +0 -943
  122. data/dist/es/dag-map.js +0 -209
  123. data/dist/es/ember-browser-environment/index.js +0 -8
  124. data/dist/es/ember-browser-environment/lib/has-dom.js +0 -19
  125. data/dist/es/ember-console/index.js +0 -177
  126. data/dist/es/ember-environment/index.js +0 -3
  127. data/dist/es/ember-environment/lib/context.js +0 -20
  128. data/dist/es/ember-environment/lib/env.js +0 -185
  129. data/dist/es/ember-environment/lib/global.js +0 -14
  130. data/dist/es/ember-error-handling/index.js +0 -22
  131. data/dist/es/ember-extension-support/index.js +0 -2
  132. data/dist/es/ember-extension-support/lib/container_debug_adapter.js +0 -99
  133. data/dist/es/ember-extension-support/lib/data_adapter.js +0 -493
  134. data/dist/es/ember-extension-support/tests/container_debug_adapter_test.js +0 -73
  135. data/dist/es/ember-extension-support/tests/data_adapter_test.js +0 -301
  136. data/dist/es/ember-glimmer/index.js +0 -286
  137. data/dist/es/ember-glimmer/lib/compile-time-lookup.js +0 -37
  138. data/dist/es/ember-glimmer/lib/component-managers/abstract.js +0 -49
  139. data/dist/es/ember-glimmer/lib/component-managers/curly.js +0 -395
  140. data/dist/es/ember-glimmer/lib/component-managers/custom.js +0 -145
  141. data/dist/es/ember-glimmer/lib/component-managers/definition-state.js +0 -1
  142. data/dist/es/ember-glimmer/lib/component-managers/mount.js +0 -103
  143. data/dist/es/ember-glimmer/lib/component-managers/outlet.js +0 -114
  144. data/dist/es/ember-glimmer/lib/component-managers/render.js +0 -112
  145. data/dist/es/ember-glimmer/lib/component-managers/root.js +0 -74
  146. data/dist/es/ember-glimmer/lib/component-managers/template-only.js +0 -46
  147. data/dist/es/ember-glimmer/lib/component.js +0 -633
  148. data/dist/es/ember-glimmer/lib/components/checkbox.js +0 -57
  149. data/dist/es/ember-glimmer/lib/components/link-to.js +0 -777
  150. data/dist/es/ember-glimmer/lib/components/text_area.js +0 -236
  151. data/dist/es/ember-glimmer/lib/components/text_field.js +0 -145
  152. data/dist/es/ember-glimmer/lib/dom.js +0 -3
  153. data/dist/es/ember-glimmer/lib/environment.js +0 -102
  154. data/dist/es/ember-glimmer/lib/helper.js +0 -128
  155. data/dist/es/ember-glimmer/lib/helpers/-class.js +0 -23
  156. data/dist/es/ember-glimmer/lib/helpers/-html-safe.js +0 -9
  157. data/dist/es/ember-glimmer/lib/helpers/-input-type.js +0 -11
  158. data/dist/es/ember-glimmer/lib/helpers/-normalize-class.js +0 -22
  159. data/dist/es/ember-glimmer/lib/helpers/action.js +0 -360
  160. data/dist/es/ember-glimmer/lib/helpers/component.js +0 -135
  161. data/dist/es/ember-glimmer/lib/helpers/concat.js +0 -38
  162. data/dist/es/ember-glimmer/lib/helpers/each-in.js +0 -126
  163. data/dist/es/ember-glimmer/lib/helpers/get.js +0 -100
  164. data/dist/es/ember-glimmer/lib/helpers/hash.js +0 -44
  165. data/dist/es/ember-glimmer/lib/helpers/if-unless.js +0 -142
  166. data/dist/es/ember-glimmer/lib/helpers/loc.js +0 -40
  167. data/dist/es/ember-glimmer/lib/helpers/log.js +0 -25
  168. data/dist/es/ember-glimmer/lib/helpers/mut.js +0 -107
  169. data/dist/es/ember-glimmer/lib/helpers/query-param.js +0 -31
  170. data/dist/es/ember-glimmer/lib/helpers/readonly.js +0 -104
  171. data/dist/es/ember-glimmer/lib/helpers/unbound.js +0 -36
  172. data/dist/es/ember-glimmer/lib/modifiers/action.js +0 -185
  173. data/dist/es/ember-glimmer/lib/protocol-for-url.js +0 -48
  174. data/dist/es/ember-glimmer/lib/renderer.js +0 -371
  175. data/dist/es/ember-glimmer/lib/resolver.js +0 -290
  176. data/dist/es/ember-glimmer/lib/setup-registry.js +0 -77
  177. data/dist/es/ember-glimmer/lib/syntax.js +0 -73
  178. data/dist/es/ember-glimmer/lib/syntax/-text-area.js +0 -8
  179. data/dist/es/ember-glimmer/lib/syntax/input.js +0 -173
  180. data/dist/es/ember-glimmer/lib/syntax/let.js +0 -50
  181. data/dist/es/ember-glimmer/lib/syntax/mount.js +0 -101
  182. data/dist/es/ember-glimmer/lib/syntax/outlet.js +0 -120
  183. data/dist/es/ember-glimmer/lib/syntax/render.js +0 -140
  184. data/dist/es/ember-glimmer/lib/syntax/utils.js +0 -6
  185. data/dist/es/ember-glimmer/lib/template-compiler.js +0 -7
  186. data/dist/es/ember-glimmer/lib/template.js +0 -16
  187. data/dist/es/ember-glimmer/lib/template_registry.js +0 -18
  188. data/dist/es/ember-glimmer/lib/templates/component.js +0 -2
  189. data/dist/es/ember-glimmer/lib/templates/empty.js +0 -2
  190. data/dist/es/ember-glimmer/lib/templates/link-to.js +0 -2
  191. data/dist/es/ember-glimmer/lib/templates/outlet.js +0 -2
  192. data/dist/es/ember-glimmer/lib/templates/root.js +0 -2
  193. data/dist/es/ember-glimmer/lib/utils/bindings.js +0 -180
  194. data/dist/es/ember-glimmer/lib/utils/curly-component-state-bucket.js +0 -36
  195. data/dist/es/ember-glimmer/lib/utils/custom-component-manager.js +0 -20
  196. data/dist/es/ember-glimmer/lib/utils/debug-stack.js +0 -57
  197. data/dist/es/ember-glimmer/lib/utils/iterable.js +0 -358
  198. data/dist/es/ember-glimmer/lib/utils/outlet.js +0 -89
  199. data/dist/es/ember-glimmer/lib/utils/process-args.js +0 -40
  200. data/dist/es/ember-glimmer/lib/utils/references.js +0 -325
  201. data/dist/es/ember-glimmer/lib/utils/serialization-first-node-helpers.js +0 -1
  202. data/dist/es/ember-glimmer/lib/utils/string.js +0 -98
  203. data/dist/es/ember-glimmer/lib/utils/to-bool.js +0 -9
  204. data/dist/es/ember-glimmer/lib/views/outlet.js +0 -71
  205. data/dist/es/ember-glimmer/tests/integration/application/actions-test.js +0 -107
  206. data/dist/es/ember-glimmer/tests/integration/application/engine-test.js +0 -912
  207. data/dist/es/ember-glimmer/tests/integration/application/rendering-test.js +0 -530
  208. data/dist/es/ember-glimmer/tests/integration/components/angle-bracket-invocation-test.js +0 -852
  209. data/dist/es/ember-glimmer/tests/integration/components/append-test.js +0 -742
  210. data/dist/es/ember-glimmer/tests/integration/components/attribute-bindings-test.js +0 -999
  211. data/dist/es/ember-glimmer/tests/integration/components/attrs-lookup-test.js +0 -268
  212. data/dist/es/ember-glimmer/tests/integration/components/class-bindings-test.js +0 -849
  213. data/dist/es/ember-glimmer/tests/integration/components/contextual-components-test.js +0 -1493
  214. data/dist/es/ember-glimmer/tests/integration/components/curly-components-test.js +0 -3705
  215. data/dist/es/ember-glimmer/tests/integration/components/destroy-test.js +0 -33
  216. data/dist/es/ember-glimmer/tests/integration/components/dynamic-components-test.js +0 -896
  217. data/dist/es/ember-glimmer/tests/integration/components/error-handling-test.js +0 -164
  218. data/dist/es/ember-glimmer/tests/integration/components/fragment-components-test.js +0 -285
  219. data/dist/es/ember-glimmer/tests/integration/components/instrumentation-compile-test.js +0 -108
  220. data/dist/es/ember-glimmer/tests/integration/components/instrumentation-test.js +0 -157
  221. data/dist/es/ember-glimmer/tests/integration/components/life-cycle-test.js +0 -1653
  222. data/dist/es/ember-glimmer/tests/integration/components/link-to-test.js +0 -218
  223. data/dist/es/ember-glimmer/tests/integration/components/local-lookup-test.js +0 -414
  224. data/dist/es/ember-glimmer/tests/integration/components/namespaced-lookup-test.js +0 -185
  225. data/dist/es/ember-glimmer/tests/integration/components/render-to-element-test.js +0 -0
  226. data/dist/es/ember-glimmer/tests/integration/components/target-action-test.js +0 -779
  227. data/dist/es/ember-glimmer/tests/integration/components/template-only-components-test.js +0 -225
  228. data/dist/es/ember-glimmer/tests/integration/components/to-string-test.js +0 -27
  229. data/dist/es/ember-glimmer/tests/integration/components/utils-test.js +0 -401
  230. data/dist/es/ember-glimmer/tests/integration/components/web-component-fallback-test.js +0 -35
  231. data/dist/es/ember-glimmer/tests/integration/components/will-destroy-element-hook-test.js +0 -40
  232. data/dist/es/ember-glimmer/tests/integration/content-test.js +0 -1759
  233. data/dist/es/ember-glimmer/tests/integration/custom-component-manager-test.js +0 -508
  234. data/dist/es/ember-glimmer/tests/integration/event-dispatcher-test.js +0 -607
  235. data/dist/es/ember-glimmer/tests/integration/helpers/-class-test.js +0 -76
  236. data/dist/es/ember-glimmer/tests/integration/helpers/closure-action-test.js +0 -1240
  237. data/dist/es/ember-glimmer/tests/integration/helpers/concat-test.js +0 -106
  238. data/dist/es/ember-glimmer/tests/integration/helpers/custom-helper-test.js +0 -672
  239. data/dist/es/ember-glimmer/tests/integration/helpers/element-action-test.js +0 -1595
  240. data/dist/es/ember-glimmer/tests/integration/helpers/get-test.js +0 -618
  241. data/dist/es/ember-glimmer/tests/integration/helpers/hash-test.js +0 -188
  242. data/dist/es/ember-glimmer/tests/integration/helpers/if-unless-test.js +0 -149
  243. data/dist/es/ember-glimmer/tests/integration/helpers/input-test.js +0 -827
  244. data/dist/es/ember-glimmer/tests/integration/helpers/loc-test.js +0 -103
  245. data/dist/es/ember-glimmer/tests/integration/helpers/log-test.js +0 -61
  246. data/dist/es/ember-glimmer/tests/integration/helpers/mut-test.js +0 -580
  247. data/dist/es/ember-glimmer/tests/integration/helpers/partial-test.js +0 -386
  248. data/dist/es/ember-glimmer/tests/integration/helpers/readonly-test.js +0 -293
  249. data/dist/es/ember-glimmer/tests/integration/helpers/render-test.js +0 -522
  250. data/dist/es/ember-glimmer/tests/integration/helpers/text-area-test.js +0 -166
  251. data/dist/es/ember-glimmer/tests/integration/helpers/unbound-test.js +0 -650
  252. data/dist/es/ember-glimmer/tests/integration/helpers/yield-test.js +0 -275
  253. data/dist/es/ember-glimmer/tests/integration/input-test.js +0 -242
  254. data/dist/es/ember-glimmer/tests/integration/mount-test.js +0 -424
  255. data/dist/es/ember-glimmer/tests/integration/outlet-test.js +0 -318
  256. data/dist/es/ember-glimmer/tests/integration/refinements-test.js +0 -74
  257. data/dist/es/ember-glimmer/tests/integration/render-settled-test.js +0 -72
  258. data/dist/es/ember-glimmer/tests/integration/svg-test.js +0 -158
  259. data/dist/es/ember-glimmer/tests/integration/syntax/each-in-test.js +0 -697
  260. data/dist/es/ember-glimmer/tests/integration/syntax/each-test.js +0 -1251
  261. data/dist/es/ember-glimmer/tests/integration/syntax/experimental-syntax-test.js +0 -42
  262. data/dist/es/ember-glimmer/tests/integration/syntax/if-unless-test.js +0 -108
  263. data/dist/es/ember-glimmer/tests/integration/syntax/in-element-test.js +0 -119
  264. data/dist/es/ember-glimmer/tests/integration/syntax/let-test.js +0 -390
  265. data/dist/es/ember-glimmer/tests/integration/syntax/with-dynamic-var-test.js +0 -36
  266. data/dist/es/ember-glimmer/tests/integration/syntax/with-test.js +0 -422
  267. data/dist/es/ember-glimmer/tests/unit/outlet-test.js +0 -48
  268. data/dist/es/ember-glimmer/tests/unit/runtime-resolver-cache-test.js +0 -263
  269. data/dist/es/ember-glimmer/tests/unit/template-factory-test.js +0 -67
  270. data/dist/es/ember-glimmer/tests/unit/utils/debug-stack-test.js +0 -38
  271. data/dist/es/ember-glimmer/tests/utils/abstract-test-case.js +0 -1
  272. data/dist/es/ember-glimmer/tests/utils/helpers.js +0 -15
  273. data/dist/es/ember-glimmer/tests/utils/shared-conditional-tests.js +0 -965
  274. data/dist/es/ember-glimmer/tests/utils/string-test.js +0 -47
  275. data/dist/es/ember-glimmer/tests/utils/test-case.js +0 -6
  276. data/dist/es/ember-glimmer/tests/utils/test-helpers.js +0 -1
  277. data/dist/es/ember-meta/index.js +0 -1
  278. data/dist/es/ember-meta/lib/meta.js +0 -623
  279. data/dist/es/ember-meta/tests/meta_test.js +0 -169
  280. data/dist/es/ember-metal/index.js +0 -33
  281. data/dist/es/ember-metal/lib/alias.js +0 -80
  282. data/dist/es/ember-metal/lib/array.js +0 -55
  283. data/dist/es/ember-metal/lib/array_events.js +0 -65
  284. data/dist/es/ember-metal/lib/chains.js +0 -315
  285. data/dist/es/ember-metal/lib/change_event.js +0 -4
  286. data/dist/es/ember-metal/lib/computed.js +0 -526
  287. data/dist/es/ember-metal/lib/computed_cache.js +0 -58
  288. data/dist/es/ember-metal/lib/dependent_keys.js +0 -34
  289. data/dist/es/ember-metal/lib/deprecate_property.js +0 -34
  290. data/dist/es/ember-metal/lib/descriptor.js +0 -28
  291. data/dist/es/ember-metal/lib/each_proxy.js +0 -106
  292. data/dist/es/ember-metal/lib/each_proxy_events.js +0 -13
  293. data/dist/es/ember-metal/lib/events.js +0 -174
  294. data/dist/es/ember-metal/lib/expand_properties.js +0 -64
  295. data/dist/es/ember-metal/lib/get_properties.js +0 -45
  296. data/dist/es/ember-metal/lib/injected_property.js +0 -53
  297. data/dist/es/ember-metal/lib/is_blank.js +0 -34
  298. data/dist/es/ember-metal/lib/is_empty.js +0 -63
  299. data/dist/es/ember-metal/lib/is_none.js +0 -27
  300. data/dist/es/ember-metal/lib/is_present.js +0 -38
  301. data/dist/es/ember-metal/lib/libraries.js +0 -80
  302. data/dist/es/ember-metal/lib/mixin.js +0 -646
  303. data/dist/es/ember-metal/lib/namespace_search.js +0 -166
  304. data/dist/es/ember-metal/lib/observer.js +0 -34
  305. data/dist/es/ember-metal/lib/observer_set.js +0 -48
  306. data/dist/es/ember-metal/lib/path_cache.js +0 -5
  307. data/dist/es/ember-metal/lib/properties.js +0 -192
  308. data/dist/es/ember-metal/lib/property_events.js +0 -198
  309. data/dist/es/ember-metal/lib/property_get.js +0 -160
  310. data/dist/es/ember-metal/lib/property_set.js +0 -157
  311. data/dist/es/ember-metal/lib/set_properties.js +0 -43
  312. data/dist/es/ember-metal/lib/tags.js +0 -81
  313. data/dist/es/ember-metal/lib/tracked.js +0 -201
  314. data/dist/es/ember-metal/lib/transaction.js +0 -137
  315. data/dist/es/ember-metal/lib/watch_key.js +0 -113
  316. data/dist/es/ember-metal/lib/watch_path.js +0 -24
  317. data/dist/es/ember-metal/lib/watching.js +0 -54
  318. data/dist/es/ember-metal/tests/accessors/get_path_test.js +0 -82
  319. data/dist/es/ember-metal/tests/accessors/get_properties_test.js +0 -36
  320. data/dist/es/ember-metal/tests/accessors/get_test.js +0 -335
  321. data/dist/es/ember-metal/tests/accessors/mandatory_setters_test.js +0 -470
  322. data/dist/es/ember-metal/tests/accessors/set_path_test.js +0 -97
  323. data/dist/es/ember-metal/tests/accessors/set_test.js +0 -128
  324. data/dist/es/ember-metal/tests/alias_test.js +0 -167
  325. data/dist/es/ember-metal/tests/chains_test.js +0 -210
  326. data/dist/es/ember-metal/tests/computed_test.js +0 -1040
  327. data/dist/es/ember-metal/tests/descriptor_test.js +0 -368
  328. data/dist/es/ember-metal/tests/events_test.js +0 -210
  329. data/dist/es/ember-metal/tests/expand_properties_test.js +0 -119
  330. data/dist/es/ember-metal/tests/injected_property_test.js +0 -76
  331. data/dist/es/ember-metal/tests/is_blank_test.js +0 -29
  332. data/dist/es/ember-metal/tests/is_empty_test.js +0 -55
  333. data/dist/es/ember-metal/tests/is_none_test.js +0 -23
  334. data/dist/es/ember-metal/tests/is_present_test.js +0 -30
  335. data/dist/es/ember-metal/tests/libraries_test.js +0 -99
  336. data/dist/es/ember-metal/tests/main_test.js +0 -31
  337. data/dist/es/ember-metal/tests/mixin/alias_method_test.js +0 -91
  338. data/dist/es/ember-metal/tests/mixin/apply_test.js +0 -40
  339. data/dist/es/ember-metal/tests/mixin/computed_test.js +0 -166
  340. data/dist/es/ember-metal/tests/mixin/concatenated_properties_test.js +0 -117
  341. data/dist/es/ember-metal/tests/mixin/detect_test.js +0 -40
  342. data/dist/es/ember-metal/tests/mixin/introspection_test.js +0 -75
  343. data/dist/es/ember-metal/tests/mixin/merged_properties_test.js +0 -200
  344. data/dist/es/ember-metal/tests/mixin/method_test.js +0 -252
  345. data/dist/es/ember-metal/tests/mixin/observer_test.js +0 -202
  346. data/dist/es/ember-metal/tests/mixin/reopen_test.js +0 -53
  347. data/dist/es/ember-metal/tests/mixin/without_test.js +0 -22
  348. data/dist/es/ember-metal/tests/namespace_search_test.js +0 -16
  349. data/dist/es/ember-metal/tests/observer_test.js +0 -961
  350. data/dist/es/ember-metal/tests/performance_test.js +0 -81
  351. data/dist/es/ember-metal/tests/properties_test.js +0 -120
  352. data/dist/es/ember-metal/tests/property_did_change_hook.js +0 -73
  353. data/dist/es/ember-metal/tests/set_properties_test.js +0 -49
  354. data/dist/es/ember-metal/tests/tracked/computed_test.js +0 -67
  355. data/dist/es/ember-metal/tests/tracked/get_test.js +0 -86
  356. data/dist/es/ember-metal/tests/tracked/set_test.js +0 -44
  357. data/dist/es/ember-metal/tests/tracked/support.js +0 -37
  358. data/dist/es/ember-metal/tests/tracked/validation_test.js +0 -233
  359. data/dist/es/ember-metal/tests/watching/is_watching_test.js +0 -97
  360. data/dist/es/ember-metal/tests/watching/unwatch_test.js +0 -109
  361. data/dist/es/ember-metal/tests/watching/watch_test.js +0 -255
  362. data/dist/es/ember-owner/index.js +0 -66
  363. data/dist/es/ember-routing/index.js +0 -21
  364. data/dist/es/ember-routing/lib/ext/controller.js +0 -222
  365. data/dist/es/ember-routing/lib/location/api.js +0 -118
  366. data/dist/es/ember-routing/lib/location/auto_location.js +0 -323
  367. data/dist/es/ember-routing/lib/location/hash_location.js +0 -171
  368. data/dist/es/ember-routing/lib/location/history_location.js +0 -298
  369. data/dist/es/ember-routing/lib/location/none_location.js +0 -122
  370. data/dist/es/ember-routing/lib/location/util.js +0 -114
  371. data/dist/es/ember-routing/lib/services/router.js +0 -243
  372. data/dist/es/ember-routing/lib/services/routing.js +0 -101
  373. data/dist/es/ember-routing/lib/system/cache.js +0 -40
  374. data/dist/es/ember-routing/lib/system/controller_for.js +0 -14
  375. data/dist/es/ember-routing/lib/system/dsl.js +0 -208
  376. data/dist/es/ember-routing/lib/system/generate_controller.js +0 -54
  377. data/dist/es/ember-routing/lib/system/query_params.js +0 -6
  378. data/dist/es/ember-routing/lib/system/route.js +0 -2476
  379. data/dist/es/ember-routing/lib/system/router.js +0 -1607
  380. data/dist/es/ember-routing/lib/system/router_state.js +0 -26
  381. data/dist/es/ember-routing/lib/system/transition.js +0 -153
  382. data/dist/es/ember-routing/lib/utils.js +0 -230
  383. data/dist/es/ember-routing/tests/ext/controller_test.js +0 -85
  384. data/dist/es/ember-routing/tests/location/auto_location_test.js +0 -379
  385. data/dist/es/ember-routing/tests/location/hash_location_test.js +0 -207
  386. data/dist/es/ember-routing/tests/location/history_location_test.js +0 -322
  387. data/dist/es/ember-routing/tests/location/none_location_test.js +0 -88
  388. data/dist/es/ember-routing/tests/location/util_test.js +0 -159
  389. data/dist/es/ember-routing/tests/system/cache_test.js +0 -54
  390. data/dist/es/ember-routing/tests/system/controller_for_test.js +0 -75
  391. data/dist/es/ember-routing/tests/system/dsl_test.js +0 -413
  392. data/dist/es/ember-routing/tests/system/route_test.js +0 -587
  393. data/dist/es/ember-routing/tests/system/router_test.js +0 -287
  394. data/dist/es/ember-routing/tests/utils_test.js +0 -37
  395. data/dist/es/ember-runtime/.gitignore +0 -1
  396. data/dist/es/ember-runtime/README +0 -12
  397. data/dist/es/ember-runtime/index.js +0 -35
  398. data/dist/es/ember-runtime/lib/compare.js +0 -149
  399. data/dist/es/ember-runtime/lib/copy.js +0 -106
  400. data/dist/es/ember-runtime/lib/ext/function.js +0 -154
  401. data/dist/es/ember-runtime/lib/ext/rsvp.js +0 -59
  402. data/dist/es/ember-runtime/lib/is-equal.js +0 -60
  403. data/dist/es/ember-runtime/lib/mixins/-proxy.js +0 -109
  404. data/dist/es/ember-runtime/lib/mixins/action_handler.js +0 -222
  405. data/dist/es/ember-runtime/lib/mixins/array.js +0 -1661
  406. data/dist/es/ember-runtime/lib/mixins/comparable.js +0 -38
  407. data/dist/es/ember-runtime/lib/mixins/container_proxy.js +0 -154
  408. data/dist/es/ember-runtime/lib/mixins/copyable.js +0 -34
  409. data/dist/es/ember-runtime/lib/mixins/enumerable.js +0 -16
  410. data/dist/es/ember-runtime/lib/mixins/evented.js +0 -149
  411. data/dist/es/ember-runtime/lib/mixins/mutable_enumerable.js +0 -18
  412. data/dist/es/ember-runtime/lib/mixins/observable.js +0 -482
  413. data/dist/es/ember-runtime/lib/mixins/promise_proxy.js +0 -224
  414. data/dist/es/ember-runtime/lib/mixins/registry_proxy.js +0 -265
  415. data/dist/es/ember-runtime/lib/mixins/target_action_support.js +0 -172
  416. data/dist/es/ember-runtime/lib/system/array_proxy.js +0 -298
  417. data/dist/es/ember-runtime/lib/system/core_object.js +0 -1037
  418. data/dist/es/ember-runtime/lib/system/namespace.js +0 -69
  419. data/dist/es/ember-runtime/lib/system/object.js +0 -73
  420. data/dist/es/ember-runtime/lib/system/object_proxy.js +0 -81
  421. data/dist/es/ember-runtime/lib/type-of.js +0 -107
  422. data/dist/es/ember-runtime/tests/array/any-test.js +0 -55
  423. data/dist/es/ember-runtime/tests/array/compact-test.js +0 -12
  424. data/dist/es/ember-runtime/tests/array/every-test.js +0 -82
  425. data/dist/es/ember-runtime/tests/array/filter-test.js +0 -123
  426. data/dist/es/ember-runtime/tests/array/find-test.js +0 -86
  427. data/dist/es/ember-runtime/tests/array/firstObject-test.js +0 -27
  428. data/dist/es/ember-runtime/tests/array/forEach-test.js +0 -68
  429. data/dist/es/ember-runtime/tests/array/includes-test.js +0 -46
  430. data/dist/es/ember-runtime/tests/array/indexOf-test.js +0 -27
  431. data/dist/es/ember-runtime/tests/array/invoke-test.js +0 -60
  432. data/dist/es/ember-runtime/tests/array/isAny-test.js +0 -53
  433. data/dist/es/ember-runtime/tests/array/lastIndexOf-test.js +0 -78
  434. data/dist/es/ember-runtime/tests/array/lastObject-test.js +0 -31
  435. data/dist/es/ember-runtime/tests/array/map-test.js +0 -68
  436. data/dist/es/ember-runtime/tests/array/mapBy-test.js +0 -16
  437. data/dist/es/ember-runtime/tests/array/objectAt-test.js +0 -34
  438. data/dist/es/ember-runtime/tests/array/reduce-test.js +0 -24
  439. data/dist/es/ember-runtime/tests/array/reject-test.js +0 -134
  440. data/dist/es/ember-runtime/tests/array/sortBy-test.js +0 -23
  441. data/dist/es/ember-runtime/tests/array/toArray-test.js +0 -11
  442. data/dist/es/ember-runtime/tests/array/uniq-test.js +0 -27
  443. data/dist/es/ember-runtime/tests/array/uniqBy-test.js +0 -33
  444. data/dist/es/ember-runtime/tests/array/without-test.js +0 -39
  445. data/dist/es/ember-runtime/tests/copyable-array/copy-test.js +0 -12
  446. data/dist/es/ember-runtime/tests/core/compare_test.js +0 -89
  447. data/dist/es/ember-runtime/tests/core/copy_test.js +0 -47
  448. data/dist/es/ember-runtime/tests/core/isEqual_test.js +0 -65
  449. data/dist/es/ember-runtime/tests/core/is_array_test.js +0 -59
  450. data/dist/es/ember-runtime/tests/core/is_empty_test.js +0 -15
  451. data/dist/es/ember-runtime/tests/core/type_of_test.js +0 -54
  452. data/dist/es/ember-runtime/tests/ext/function_test.js +0 -121
  453. data/dist/es/ember-runtime/tests/ext/rsvp_test.js +0 -269
  454. data/dist/es/ember-runtime/tests/helpers/array.js +0 -336
  455. data/dist/es/ember-runtime/tests/inject_test.js +0 -51
  456. data/dist/es/ember-runtime/tests/legacy_1x/mixins/observable/chained_test.js +0 -63
  457. data/dist/es/ember-runtime/tests/legacy_1x/mixins/observable/observable_test.js +0 -892
  458. data/dist/es/ember-runtime/tests/legacy_1x/mixins/observable/propertyChanges_test.js +0 -142
  459. data/dist/es/ember-runtime/tests/legacy_1x/system/object/base_test.js +0 -98
  460. data/dist/es/ember-runtime/tests/legacy_1x/system/object/concatenated_test.js +0 -131
  461. data/dist/es/ember-runtime/tests/mixins/array_test.js +0 -400
  462. data/dist/es/ember-runtime/tests/mixins/comparable_test.js +0 -37
  463. data/dist/es/ember-runtime/tests/mixins/container_proxy_test.js +0 -48
  464. data/dist/es/ember-runtime/tests/mixins/enumerable_test.js +0 -17
  465. data/dist/es/ember-runtime/tests/mixins/evented_test.js +0 -23
  466. data/dist/es/ember-runtime/tests/mixins/mutable_enumerable_test.js +0 -17
  467. data/dist/es/ember-runtime/tests/mixins/observable_test.js +0 -137
  468. data/dist/es/ember-runtime/tests/mixins/promise_proxy_test.js +0 -593
  469. data/dist/es/ember-runtime/tests/mixins/target_action_support_test.js +0 -237
  470. data/dist/es/ember-runtime/tests/mutable-array/addObject-test.js +0 -76
  471. data/dist/es/ember-runtime/tests/mutable-array/clear-test.js +0 -64
  472. data/dist/es/ember-runtime/tests/mutable-array/insertAt-test.js +0 -216
  473. data/dist/es/ember-runtime/tests/mutable-array/popObject-test.js +0 -91
  474. data/dist/es/ember-runtime/tests/mutable-array/pushObject-test.js +0 -98
  475. data/dist/es/ember-runtime/tests/mutable-array/pushObjects-test.js +0 -12
  476. data/dist/es/ember-runtime/tests/mutable-array/removeAt-test.js +0 -187
  477. data/dist/es/ember-runtime/tests/mutable-array/removeObject-test.js +0 -77
  478. data/dist/es/ember-runtime/tests/mutable-array/removeObjects-test.js +0 -202
  479. data/dist/es/ember-runtime/tests/mutable-array/replace-test.js +0 -221
  480. data/dist/es/ember-runtime/tests/mutable-array/reverseObjects-test.js +0 -35
  481. data/dist/es/ember-runtime/tests/mutable-array/setObjects-test.js +0 -63
  482. data/dist/es/ember-runtime/tests/mutable-array/shiftObject-test.js +0 -105
  483. data/dist/es/ember-runtime/tests/mutable-array/unshiftObject-test.js +0 -99
  484. data/dist/es/ember-runtime/tests/mutable-array/unshiftObjects-test.js +0 -102
  485. data/dist/es/ember-runtime/tests/system/array_proxy/arranged_content_test.js +0 -275
  486. data/dist/es/ember-runtime/tests/system/array_proxy/array_observer_test.js +0 -51
  487. data/dist/es/ember-runtime/tests/system/array_proxy/content_change_test.js +0 -85
  488. data/dist/es/ember-runtime/tests/system/array_proxy/length_test.js +0 -201
  489. data/dist/es/ember-runtime/tests/system/array_proxy/watching_and_listening_test.js +0 -157
  490. data/dist/es/ember-runtime/tests/system/core_object_test.js +0 -114
  491. data/dist/es/ember-runtime/tests/system/namespace/base_test.js +0 -175
  492. data/dist/es/ember-runtime/tests/system/native_array/a_test.js +0 -16
  493. data/dist/es/ember-runtime/tests/system/native_array/copyable_suite_test.js +0 -19
  494. data/dist/es/ember-runtime/tests/system/native_array/replace_test.js +0 -17
  495. data/dist/es/ember-runtime/tests/system/object/computed_test.js +0 -352
  496. data/dist/es/ember-runtime/tests/system/object/create_test.js +0 -135
  497. data/dist/es/ember-runtime/tests/system/object/destroy_test.js +0 -146
  498. data/dist/es/ember-runtime/tests/system/object/detectInstance_test.js +0 -38
  499. data/dist/es/ember-runtime/tests/system/object/detect_test.js +0 -33
  500. data/dist/es/ember-runtime/tests/system/object/es-compatibility-test.js +0 -469
  501. data/dist/es/ember-runtime/tests/system/object/events_test.js +0 -156
  502. data/dist/es/ember-runtime/tests/system/object/extend_test.js +0 -153
  503. data/dist/es/ember-runtime/tests/system/object/observer_test.js +0 -216
  504. data/dist/es/ember-runtime/tests/system/object/reopenClass_test.js +0 -36
  505. data/dist/es/ember-runtime/tests/system/object/reopen_test.js +0 -48
  506. data/dist/es/ember-runtime/tests/system/object/strict-mode-test.js +0 -31
  507. data/dist/es/ember-runtime/tests/system/object/toString_test.js +0 -125
  508. data/dist/es/ember-runtime/tests/system/object_proxy_test.js +0 -314
  509. data/dist/es/ember-template-compiler/index.js +0 -26
  510. data/dist/es/ember-template-compiler/lib/compat.js +0 -16
  511. data/dist/es/ember-template-compiler/lib/plugins/assert-if-helper-without-arguments.js +0 -38
  512. data/dist/es/ember-template-compiler/lib/plugins/assert-input-helper-without-block.js +0 -20
  513. data/dist/es/ember-template-compiler/lib/plugins/assert-reserved-named-arguments.js +0 -26
  514. data/dist/es/ember-template-compiler/lib/plugins/assert-splattribute-expression.js +0 -27
  515. data/dist/es/ember-template-compiler/lib/plugins/deprecate-render-model.js +0 -38
  516. data/dist/es/ember-template-compiler/lib/plugins/deprecate-render.js +0 -41
  517. data/dist/es/ember-template-compiler/lib/plugins/deprecate-send-action.js +0 -42
  518. data/dist/es/ember-template-compiler/lib/plugins/index.js +0 -50
  519. data/dist/es/ember-template-compiler/lib/plugins/transform-action-syntax.js +0 -52
  520. data/dist/es/ember-template-compiler/lib/plugins/transform-angle-bracket-components.js +0 -10
  521. data/dist/es/ember-template-compiler/lib/plugins/transform-attrs-into-args.js +0 -62
  522. data/dist/es/ember-template-compiler/lib/plugins/transform-dot-component-invocation.js +0 -88
  523. data/dist/es/ember-template-compiler/lib/plugins/transform-each-in-into-each.js +0 -48
  524. data/dist/es/ember-template-compiler/lib/plugins/transform-has-block-syntax.js +0 -46
  525. data/dist/es/ember-template-compiler/lib/plugins/transform-in-element.js +0 -83
  526. data/dist/es/ember-template-compiler/lib/plugins/transform-inline-link-to.js +0 -31
  527. data/dist/es/ember-template-compiler/lib/plugins/transform-input-type-syntax.js +0 -52
  528. data/dist/es/ember-template-compiler/lib/plugins/transform-old-binding-syntax.js +0 -48
  529. data/dist/es/ember-template-compiler/lib/plugins/transform-old-class-binding-syntax.js +0 -102
  530. data/dist/es/ember-template-compiler/lib/plugins/transform-quoted-bindings-into-just-bindings.js +0 -34
  531. data/dist/es/ember-template-compiler/lib/plugins/transform-top-level-components.js +0 -41
  532. data/dist/es/ember-template-compiler/lib/system/bootstrap.js +0 -44
  533. data/dist/es/ember-template-compiler/lib/system/calculate-location-display.js +0 -20
  534. data/dist/es/ember-template-compiler/lib/system/compile-options.js +0 -71
  535. data/dist/es/ember-template-compiler/lib/system/compile.js +0 -28
  536. data/dist/es/ember-template-compiler/lib/system/dasherize-component-name.js +0 -13
  537. data/dist/es/ember-template-compiler/lib/system/initializer.js +0 -22
  538. data/dist/es/ember-template-compiler/lib/system/precompile.js +0 -18
  539. data/dist/es/ember-template-compiler/tests/plugins/assert-if-helper-without-arguments-test.js +0 -51
  540. data/dist/es/ember-template-compiler/tests/plugins/assert-input-helper-without-block-test.js +0 -17
  541. data/dist/es/ember-template-compiler/tests/plugins/assert-reserved-named-arguments-test.js +0 -416
  542. data/dist/es/ember-template-compiler/tests/plugins/assert-splattribute-expression-test.js +0 -57
  543. data/dist/es/ember-template-compiler/tests/plugins/deprecate-render-model-test.js +0 -19
  544. data/dist/es/ember-template-compiler/tests/plugins/deprecate-render-test.js +0 -19
  545. data/dist/es/ember-template-compiler/tests/plugins/deprecate-send-action-test.js +0 -29
  546. data/dist/es/ember-template-compiler/tests/plugins/transform-dot-component-invocation-test.js +0 -27
  547. data/dist/es/ember-template-compiler/tests/plugins/transform-inline-link-to-test.js +0 -15
  548. data/dist/es/ember-template-compiler/tests/plugins/transform-input-type-syntax-test.js +0 -25
  549. data/dist/es/ember-template-compiler/tests/system/bootstrap-test.js +0 -155
  550. data/dist/es/ember-template-compiler/tests/system/compile_options_test.js +0 -115
  551. data/dist/es/ember-template-compiler/tests/system/dasherize-component-name-test.js +0 -19
  552. data/dist/es/ember-testing/index.js +0 -10
  553. data/dist/es/ember-testing/lib/adapters/adapter.js +0 -58
  554. data/dist/es/ember-testing/lib/adapters/qunit.js +0 -47
  555. data/dist/es/ember-testing/lib/events.js +0 -136
  556. data/dist/es/ember-testing/lib/ext/application.js +0 -191
  557. data/dist/es/ember-testing/lib/ext/rsvp.js +0 -19
  558. data/dist/es/ember-testing/lib/helpers.js +0 -30
  559. data/dist/es/ember-testing/lib/helpers/-is-form-control.js +0 -16
  560. data/dist/es/ember-testing/lib/helpers/and_then.js +0 -3
  561. data/dist/es/ember-testing/lib/helpers/click.js +0 -36
  562. data/dist/es/ember-testing/lib/helpers/current_path.js +0 -27
  563. data/dist/es/ember-testing/lib/helpers/current_route_name.js +0 -25
  564. data/dist/es/ember-testing/lib/helpers/current_url.js +0 -27
  565. data/dist/es/ember-testing/lib/helpers/fill_in.js +0 -46
  566. data/dist/es/ember-testing/lib/helpers/find.js +0 -41
  567. data/dist/es/ember-testing/lib/helpers/find_with_assert.js +0 -34
  568. data/dist/es/ember-testing/lib/helpers/key_event.js +0 -36
  569. data/dist/es/ember-testing/lib/helpers/pause_test.js +0 -65
  570. data/dist/es/ember-testing/lib/helpers/trigger_event.js +0 -62
  571. data/dist/es/ember-testing/lib/helpers/visit.js +0 -42
  572. data/dist/es/ember-testing/lib/helpers/wait.js +0 -72
  573. data/dist/es/ember-testing/lib/initializers.js +0 -17
  574. data/dist/es/ember-testing/lib/setup_for_testing.js +0 -44
  575. data/dist/es/ember-testing/lib/support.js +0 -62
  576. data/dist/es/ember-testing/lib/test.js +0 -70
  577. data/dist/es/ember-testing/lib/test/adapter.js +0 -33
  578. data/dist/es/ember-testing/lib/test/helpers.js +0 -125
  579. data/dist/es/ember-testing/lib/test/on_inject_helpers.js +0 -38
  580. data/dist/es/ember-testing/lib/test/pending_requests.js +0 -24
  581. data/dist/es/ember-testing/lib/test/promise.js +0 -79
  582. data/dist/es/ember-testing/lib/test/run.js +0 -9
  583. data/dist/es/ember-testing/lib/test/waiters.js +0 -117
  584. data/dist/es/ember-testing/tests/acceptance_test.js +0 -478
  585. data/dist/es/ember-testing/tests/adapters/adapter_test.js +0 -31
  586. data/dist/es/ember-testing/tests/adapters/qunit_test.js +0 -50
  587. data/dist/es/ember-testing/tests/adapters_test.js +0 -405
  588. data/dist/es/ember-testing/tests/ext/rsvp_test.js +0 -124
  589. data/dist/es/ember-testing/tests/helper_registration_test.js +0 -98
  590. data/dist/es/ember-testing/tests/helpers_test.js +0 -1228
  591. data/dist/es/ember-testing/tests/integration_test.js +0 -106
  592. data/dist/es/ember-testing/tests/reexports_test.js +0 -26
  593. data/dist/es/ember-testing/tests/test/waiters-test.js +0 -145
  594. data/dist/es/ember-utils/index.js +0 -28
  595. data/dist/es/ember-utils/lib/cache.js +0 -36
  596. data/dist/es/ember-utils/lib/dictionary.js +0 -11
  597. data/dist/es/ember-utils/lib/guid.js +0 -120
  598. data/dist/es/ember-utils/lib/inspect.js +0 -112
  599. data/dist/es/ember-utils/lib/intern.js +0 -49
  600. data/dist/es/ember-utils/lib/invoke.js +0 -53
  601. data/dist/es/ember-utils/lib/is_proxy.js +0 -14
  602. data/dist/es/ember-utils/lib/lookup-descriptor.js +0 -11
  603. data/dist/es/ember-utils/lib/make-array.js +0 -7
  604. data/dist/es/ember-utils/lib/name.js +0 -9
  605. data/dist/es/ember-utils/lib/proxy-utils.js +0 -1
  606. data/dist/es/ember-utils/lib/spec.js +0 -14
  607. data/dist/es/ember-utils/lib/super.js +0 -83
  608. data/dist/es/ember-utils/lib/symbol-utils.js +0 -8
  609. data/dist/es/ember-utils/lib/symbol.js +0 -15
  610. data/dist/es/ember-utils/lib/to-string.js +0 -35
  611. data/dist/es/ember-utils/lib/weak_set.js +0 -18
  612. data/dist/es/ember-utils/tests/cache_test.js +0 -77
  613. data/dist/es/ember-utils/tests/can_invoke_test.js +0 -46
  614. data/dist/es/ember-utils/tests/checkHasSuper_test.js +0 -17
  615. data/dist/es/ember-utils/tests/generate_guid_test.js +0 -13
  616. data/dist/es/ember-utils/tests/guid_for_test.js +0 -101
  617. data/dist/es/ember-utils/tests/inspect_test.js +0 -146
  618. data/dist/es/ember-utils/tests/is_proxy_test.js +0 -18
  619. data/dist/es/ember-utils/tests/make_array_test.js +0 -41
  620. data/dist/es/ember-utils/tests/to-string-test.js +0 -32
  621. data/dist/es/ember-utils/tests/try_invoke_test.js +0 -48
  622. data/dist/es/ember-views/index.js +0 -28
  623. data/dist/es/ember-views/lib/compat/attrs.js +0 -3
  624. data/dist/es/ember-views/lib/compat/fallback-view-registry.js +0 -3
  625. data/dist/es/ember-views/lib/component_lookup.js +0 -27
  626. data/dist/es/ember-views/lib/mixins/action_support.js +0 -189
  627. data/dist/es/ember-views/lib/mixins/child_views_support.js +0 -27
  628. data/dist/es/ember-views/lib/mixins/class_names_support.js +0 -102
  629. data/dist/es/ember-views/lib/mixins/text_support.js +0 -333
  630. data/dist/es/ember-views/lib/mixins/view_state_support.js +0 -19
  631. data/dist/es/ember-views/lib/mixins/view_support.js +0 -452
  632. data/dist/es/ember-views/lib/system/action_manager.js +0 -14
  633. data/dist/es/ember-views/lib/system/event_dispatcher.js +0 -454
  634. data/dist/es/ember-views/lib/system/jquery.js +0 -29
  635. data/dist/es/ember-views/lib/system/jquery_event_deprecation.js +0 -61
  636. data/dist/es/ember-views/lib/system/lookup_partial.js +0 -55
  637. data/dist/es/ember-views/lib/system/utils.js +0 -201
  638. data/dist/es/ember-views/lib/utils/lookup-component.js +0 -58
  639. data/dist/es/ember-views/lib/views/core_view.js +0 -83
  640. data/dist/es/ember-views/lib/views/states.js +0 -48
  641. data/dist/es/ember-views/lib/views/states/default.js +0 -17
  642. data/dist/es/ember-views/lib/views/states/destroying.js +0 -16
  643. data/dist/es/ember-views/lib/views/states/has_element.js +0 -31
  644. data/dist/es/ember-views/lib/views/states/in_dom.js +0 -28
  645. data/dist/es/ember-views/lib/views/states/pre_render.js +0 -3
  646. data/dist/es/ember/index.js +0 -645
  647. data/dist/es/ember/tests/application_lifecycle_test.js +0 -188
  648. data/dist/es/ember/tests/component_context_test.js +0 -255
  649. data/dist/es/ember/tests/component_registration_test.js +0 -252
  650. data/dist/es/ember/tests/controller_test.js +0 -44
  651. data/dist/es/ember/tests/error_handler_test.js +0 -581
  652. data/dist/es/ember/tests/helpers/helper_registration_test.js +0 -103
  653. data/dist/es/ember/tests/helpers/link_to_test.js +0 -2103
  654. data/dist/es/ember/tests/helpers/link_to_test/link_to_transitioning_classes_test.js +0 -342
  655. data/dist/es/ember/tests/helpers/link_to_test/link_to_with_query_params_test.js +0 -694
  656. data/dist/es/ember/tests/homepage_example_test.js +0 -47
  657. data/dist/es/ember/tests/integration/multiple-app-test.js +0 -101
  658. data/dist/es/ember/tests/production_build_test.js +0 -34
  659. data/dist/es/ember/tests/reexports_test.js +0 -307
  660. data/dist/es/ember/tests/routing/decoupled_basic_test.js +0 -4506
  661. data/dist/es/ember/tests/routing/query_params_test.js +0 -1579
  662. data/dist/es/ember/tests/routing/query_params_test/model_dependent_state_with_query_params_test.js +0 -1117
  663. data/dist/es/ember/tests/routing/query_params_test/overlapping_query_params_test.js +0 -185
  664. data/dist/es/ember/tests/routing/query_params_test/query_param_async_get_handler_test.js +0 -327
  665. data/dist/es/ember/tests/routing/query_params_test/query_params_paramless_link_to_test.js +0 -37
  666. data/dist/es/ember/tests/routing/query_params_test/shared_state_test.js +0 -84
  667. data/dist/es/ember/tests/routing/router_map_test.js +0 -46
  668. data/dist/es/ember/tests/routing/router_service_test/basic_test.js +0 -95
  669. data/dist/es/ember/tests/routing/router_service_test/currenturl_lifecycle_test.js +0 -149
  670. data/dist/es/ember/tests/routing/router_service_test/isActive_test.js +0 -113
  671. data/dist/es/ember/tests/routing/router_service_test/replaceWith_test.js +0 -144
  672. data/dist/es/ember/tests/routing/router_service_test/transitionTo_test.js +0 -370
  673. data/dist/es/ember/tests/routing/router_service_test/urlFor_test.js +0 -307
  674. data/dist/es/ember/tests/routing/substates_test.js +0 -1110
  675. data/dist/es/ember/tests/routing/toplevel_dom_test.js +0 -37
  676. data/dist/es/ember/tests/service_injection_test.js +0 -278
  677. data/dist/es/ember/tests/view_instrumentation_test.js +0 -47
  678. data/dist/es/ember/version.js +0 -1
  679. data/dist/es/handlebars.js +0 -1268
  680. data/dist/es/internal-test-helpers/index.js +0 -31
  681. data/dist/es/internal-test-helpers/lib/.gitkeep +0 -0
  682. data/dist/es/internal-test-helpers/lib/apply-mixins.js +0 -37
  683. data/dist/es/internal-test-helpers/lib/browser-detect.js +0 -4
  684. data/dist/es/internal-test-helpers/lib/build-owner.js +0 -49
  685. data/dist/es/internal-test-helpers/lib/confirm-export.js +0 -45
  686. data/dist/es/internal-test-helpers/lib/ember-dev/assertion.js +0 -87
  687. data/dist/es/internal-test-helpers/lib/ember-dev/containers.js +0 -34
  688. data/dist/es/internal-test-helpers/lib/ember-dev/debug.js +0 -47
  689. data/dist/es/internal-test-helpers/lib/ember-dev/deprecation.js +0 -71
  690. data/dist/es/internal-test-helpers/lib/ember-dev/index.js +0 -19
  691. data/dist/es/internal-test-helpers/lib/ember-dev/method-call-tracker.js +0 -127
  692. data/dist/es/internal-test-helpers/lib/ember-dev/namespaces.js +0 -34
  693. data/dist/es/internal-test-helpers/lib/ember-dev/run-loop.js +0 -28
  694. data/dist/es/internal-test-helpers/lib/ember-dev/setup-qunit.js +0 -26
  695. data/dist/es/internal-test-helpers/lib/ember-dev/utils.js +0 -33
  696. data/dist/es/internal-test-helpers/lib/ember-dev/warning.js +0 -71
  697. data/dist/es/internal-test-helpers/lib/equal-inner-html.js +0 -37
  698. data/dist/es/internal-test-helpers/lib/equal-tokens.js +0 -53
  699. data/dist/es/internal-test-helpers/lib/factory.js +0 -65
  700. data/dist/es/internal-test-helpers/lib/get-all-property-names.js +0 -12
  701. data/dist/es/internal-test-helpers/lib/get-text-of.js +0 -3
  702. data/dist/es/internal-test-helpers/lib/matchers.js +0 -167
  703. data/dist/es/internal-test-helpers/lib/module-for.js +0 -89
  704. data/dist/es/internal-test-helpers/lib/registry-check.js +0 -28
  705. data/dist/es/internal-test-helpers/lib/run.js +0 -11
  706. data/dist/es/internal-test-helpers/lib/strip.js +0 -12
  707. data/dist/es/internal-test-helpers/lib/system/synthetic-events.js +0 -183
  708. data/dist/es/internal-test-helpers/lib/test-cases/abstract-application.js +0 -70
  709. data/dist/es/internal-test-helpers/lib/test-cases/abstract-rendering.js +0 -203
  710. data/dist/es/internal-test-helpers/lib/test-cases/abstract.js +0 -222
  711. data/dist/es/internal-test-helpers/lib/test-cases/application.js +0 -39
  712. data/dist/es/internal-test-helpers/lib/test-cases/autoboot-application.js +0 -34
  713. data/dist/es/internal-test-helpers/lib/test-cases/default-resolver-application.js +0 -43
  714. data/dist/es/internal-test-helpers/lib/test-cases/node-query.js +0 -120
  715. data/dist/es/internal-test-helpers/lib/test-cases/query-param.js +0 -124
  716. data/dist/es/internal-test-helpers/lib/test-cases/rendering.js +0 -14
  717. data/dist/es/internal-test-helpers/lib/test-cases/router.js +0 -26
  718. data/dist/es/internal-test-helpers/lib/test-cases/test-resolver-application.js +0 -40
  719. data/dist/es/internal-test-helpers/lib/test-resolver.js +0 -86
  720. data/dist/es/internal-test-helpers/tests/index-test.js +0 -10
  721. data/dist/es/route-recognizer.js +0 -685
  722. data/dist/es/router.js +0 -2454
  723. data/dist/es/rsvp.js +0 -2394
  724. data/dist/es/simple-html-tokenizer.js +0 -638
  725. data/dist/jquery/jquery.js +0 -10364
  726. data/dist/node/app-boot-test.js +0 -146
  727. data/dist/node/build-info-test.js +0 -177
  728. data/dist/node/component-rendering-test.js +0 -34
  729. data/dist/node/helpers/app-module.js +0 -198
  730. data/dist/node/helpers/assert-html-matches.js +0 -25
  731. data/dist/node/helpers/build-owner.js +0 -28
  732. data/dist/node/helpers/component-module.js +0 -137
  733. data/dist/node/sourcemap-test.js +0 -27
  734. data/dist/node/template-compiler-test.js +0 -45
  735. data/dist/node/visit-test.js +0 -349
  736. data/dist/qunit/qunit.css +0 -436
  737. data/dist/qunit/qunit.js +0 -5188
  738. data/dist/tests/index.html +0 -254
  739. data/ember-source.gemspec +0 -28
  740. data/node_modules/.yarn-integrity +0 -10
  741. data/yarn.lock +0 -4
@@ -1,2243 +0,0 @@
1
- import { run } from '@ember/runloop';
2
- import {
3
- defineProperty,
4
- setProperties,
5
- get,
6
- set,
7
- addObserver,
8
- computed,
9
- observer,
10
- } from 'ember-metal';
11
- import { Object as EmberObject, ObjectProxy, isArray, A as emberA, removeAt } from 'ember-runtime';
12
- import {
13
- sum,
14
- min,
15
- max,
16
- map,
17
- sort,
18
- setDiff,
19
- mapBy,
20
- filter,
21
- filterBy,
22
- uniq,
23
- uniqBy,
24
- union,
25
- intersect,
26
- collect,
27
- } from '@ember/object/computed';
28
- import { EMBER_METAL_TRACKED_PROPERTIES } from '@ember/canary-features';
29
- import { moduleFor, AbstractTestCase } from 'internal-test-helpers';
30
-
31
- let obj;
32
- moduleFor(
33
- 'map',
34
- class extends AbstractTestCase {
35
- beforeEach() {
36
- obj = EmberObject.extend({
37
- mapped: map('array.@each.v', item => item.v),
38
- mappedObjects: map('arrayObjects.@each.v', item => ({
39
- name: item.v.name,
40
- })),
41
- }).create({
42
- arrayObjects: emberA([{ v: { name: 'Robert' } }, { v: { name: 'Leanna' } }]),
43
-
44
- array: emberA([{ v: 1 }, { v: 3 }, { v: 2 }, { v: 1 }]),
45
- });
46
- }
47
-
48
- afterEach() {
49
- run(obj, 'destroy');
50
- }
51
-
52
- ['@test map is readOnly'](assert) {
53
- assert.throws(function() {
54
- obj.set('mapped', 1);
55
- }, /Cannot set read-only property "mapped" on object:/);
56
- }
57
-
58
- ['@test it maps simple properties'](assert) {
59
- assert.deepEqual(obj.get('mapped'), [1, 3, 2, 1]);
60
-
61
- obj.get('array').pushObject({ v: 5 });
62
-
63
- assert.deepEqual(obj.get('mapped'), [1, 3, 2, 1, 5]);
64
-
65
- removeAt(obj.get('array'), 3);
66
-
67
- assert.deepEqual(obj.get('mapped'), [1, 3, 2, 5]);
68
- }
69
-
70
- ['@test it maps simple unshifted properties'](assert) {
71
- let array = emberA();
72
-
73
- obj = EmberObject.extend({
74
- mapped: map('array', item => item.toUpperCase()),
75
- }).create({
76
- array,
77
- });
78
-
79
- array.unshiftObject('c');
80
- array.unshiftObject('b');
81
- array.unshiftObject('a');
82
-
83
- array.popObject();
84
-
85
- assert.deepEqual(
86
- obj.get('mapped'),
87
- ['A', 'B'],
88
- 'properties unshifted in sequence are mapped correctly'
89
- );
90
- }
91
-
92
- ['@test it has the correct `this`'](assert) {
93
- obj = EmberObject.extend({
94
- mapped: map('array', function(item) {
95
- assert.equal(this, obj, 'should have correct context');
96
- return this.upperCase(item);
97
- }),
98
- upperCase(string) {
99
- return string.toUpperCase();
100
- },
101
- }).create({
102
- array: ['a', 'b', 'c'],
103
- });
104
-
105
- assert.deepEqual(
106
- obj.get('mapped'),
107
- ['A', 'B', 'C'],
108
- 'properties unshifted in sequence are mapped correctly'
109
- );
110
- }
111
-
112
- ['@test it passes the index to the callback'](assert) {
113
- let array = ['a', 'b', 'c'];
114
-
115
- obj = EmberObject.extend({
116
- mapped: map('array', (item, index) => index),
117
- }).create({
118
- array,
119
- });
120
-
121
- assert.deepEqual(obj.get('mapped'), [0, 1, 2], 'index is passed to callback correctly');
122
- }
123
-
124
- ['@test it maps objects'](assert) {
125
- assert.deepEqual(obj.get('mappedObjects'), [{ name: 'Robert' }, { name: 'Leanna' }]);
126
-
127
- obj.get('arrayObjects').pushObject({
128
- v: { name: 'Eddard' },
129
- });
130
-
131
- assert.deepEqual(obj.get('mappedObjects'), [
132
- { name: 'Robert' },
133
- { name: 'Leanna' },
134
- { name: 'Eddard' },
135
- ]);
136
-
137
- removeAt(obj.get('arrayObjects'), 1);
138
-
139
- assert.deepEqual(obj.get('mappedObjects'), [{ name: 'Robert' }, { name: 'Eddard' }]);
140
-
141
- set(obj.get('arrayObjects')[0], 'v', { name: 'Stannis' });
142
-
143
- assert.deepEqual(obj.get('mappedObjects'), [{ name: 'Stannis' }, { name: 'Eddard' }]);
144
- }
145
-
146
- ['@test it maps unshifted objects with property observers'](assert) {
147
- let array = emberA();
148
- let cObj = { v: 'c' };
149
-
150
- obj = EmberObject.extend({
151
- mapped: map('array.@each.v', item => get(item, 'v').toUpperCase()),
152
- }).create({
153
- array,
154
- });
155
-
156
- array.unshiftObject(cObj);
157
- array.unshiftObject({ v: 'b' });
158
- array.unshiftObject({ v: 'a' });
159
-
160
- set(cObj, 'v', 'd');
161
-
162
- assert.deepEqual(array.mapBy('v'), ['a', 'b', 'd'], 'precond - unmapped array is correct');
163
- assert.deepEqual(
164
- obj.get('mapped'),
165
- ['A', 'B', 'D'],
166
- 'properties unshifted in sequence are mapped correctly'
167
- );
168
- }
169
- }
170
- );
171
-
172
- moduleFor(
173
- 'mapBy',
174
- class extends AbstractTestCase {
175
- beforeEach() {
176
- obj = EmberObject.extend({
177
- mapped: mapBy('array', 'v'),
178
- }).create({
179
- array: emberA([{ v: 1 }, { v: 3 }, { v: 2 }, { v: 1 }]),
180
- });
181
- }
182
-
183
- afterEach() {
184
- run(obj, 'destroy');
185
- }
186
-
187
- ['@test mapBy is readOnly'](assert) {
188
- assert.throws(function() {
189
- obj.set('mapped', 1);
190
- }, /Cannot set read-only property "mapped" on object:/);
191
- }
192
-
193
- ['@test it maps properties'](assert) {
194
- assert.deepEqual(obj.get('mapped'), [1, 3, 2, 1]);
195
-
196
- obj.get('array').pushObject({ v: 5 });
197
-
198
- assert.deepEqual(obj.get('mapped'), [1, 3, 2, 1, 5]);
199
-
200
- removeAt(obj.get('array'), 3);
201
-
202
- assert.deepEqual(obj.get('mapped'), [1, 3, 2, 5]);
203
- }
204
-
205
- ['@test it is observable'](assert) {
206
- let calls = 0;
207
-
208
- assert.deepEqual(obj.get('mapped'), [1, 3, 2, 1]);
209
-
210
- addObserver(obj, 'mapped.@each', () => calls++);
211
-
212
- obj.get('array').pushObject({ v: 5 });
213
-
214
- assert.equal(calls, 1, 'mapBy is observable');
215
- }
216
- }
217
- );
218
-
219
- moduleFor(
220
- 'filter',
221
- class extends AbstractTestCase {
222
- beforeEach() {
223
- obj = EmberObject.extend({
224
- filtered: filter('array', item => item % 2 === 0),
225
- }).create({
226
- array: emberA([1, 2, 3, 4, 5, 6, 7, 8]),
227
- });
228
- }
229
-
230
- afterEach() {
231
- run(obj, 'destroy');
232
- }
233
-
234
- ['@test filter is readOnly'](assert) {
235
- assert.throws(function() {
236
- obj.set('filtered', 1);
237
- }, /Cannot set read-only property "filtered" on object:/);
238
- }
239
-
240
- ['@test it filters according to the specified filter function'](assert) {
241
- assert.deepEqual(
242
- obj.get('filtered'),
243
- [2, 4, 6, 8],
244
- 'filter filters by the specified function'
245
- );
246
- }
247
-
248
- ['@test it passes the index to the callback'](assert) {
249
- obj = EmberObject.extend({
250
- filtered: filter('array', (item, index) => index === 1),
251
- }).create({
252
- array: ['a', 'b', 'c'],
253
- });
254
-
255
- assert.deepEqual(get(obj, 'filtered'), ['b'], 'index is passed to callback correctly');
256
- }
257
-
258
- ['@test it has the correct `this`'](assert) {
259
- obj = EmberObject.extend({
260
- filtered: filter('array', function(item, index) {
261
- assert.equal(this, obj);
262
- return this.isOne(index);
263
- }),
264
- isOne(value) {
265
- return value === 1;
266
- },
267
- }).create({
268
- array: ['a', 'b', 'c'],
269
- });
270
-
271
- assert.deepEqual(get(obj, 'filtered'), ['b'], 'index is passed to callback correctly');
272
- }
273
-
274
- ['@test it passes the array to the callback'](assert) {
275
- obj = EmberObject.extend({
276
- filtered: filter('array', (item, index, array) => index === get(array, 'length') - 2),
277
- }).create({
278
- array: emberA(['a', 'b', 'c']),
279
- });
280
-
281
- assert.deepEqual(obj.get('filtered'), ['b'], 'array is passed to callback correctly');
282
- }
283
-
284
- ['@test it caches properly'](assert) {
285
- let array = obj.get('array');
286
-
287
- let filtered = obj.get('filtered');
288
- assert.ok(filtered === obj.get('filtered'));
289
-
290
- array.addObject(11);
291
- let newFiltered = obj.get('filtered');
292
-
293
- assert.ok(filtered !== newFiltered);
294
-
295
- assert.ok(obj.get('filtered') === newFiltered);
296
- }
297
-
298
- ['@test it updates as the array is modified'](assert) {
299
- let array = obj.get('array');
300
-
301
- assert.deepEqual(
302
- obj.get('filtered'),
303
- [2, 4, 6, 8],
304
- 'precond - filtered array is initially correct'
305
- );
306
-
307
- array.addObject(11);
308
- assert.deepEqual(
309
- obj.get('filtered'),
310
- [2, 4, 6, 8],
311
- 'objects not passing the filter are not added'
312
- );
313
-
314
- array.addObject(12);
315
- assert.deepEqual(
316
- obj.get('filtered'),
317
- [2, 4, 6, 8, 12],
318
- 'objects passing the filter are added'
319
- );
320
-
321
- array.removeObject(3);
322
- array.removeObject(4);
323
-
324
- assert.deepEqual(
325
- obj.get('filtered'),
326
- [2, 6, 8, 12],
327
- 'objects removed from the dependent array are removed from the computed array'
328
- );
329
- }
330
-
331
- ['@test the dependent array can be cleared one at a time'](assert) {
332
- let array = get(obj, 'array');
333
-
334
- assert.deepEqual(
335
- obj.get('filtered'),
336
- [2, 4, 6, 8],
337
- 'precond - filtered array is initially correct'
338
- );
339
-
340
- // clear 1-8 but in a random order
341
- array.removeObject(3);
342
- array.removeObject(1);
343
- array.removeObject(2);
344
- array.removeObject(4);
345
- array.removeObject(8);
346
- array.removeObject(6);
347
- array.removeObject(5);
348
- array.removeObject(7);
349
-
350
- assert.deepEqual(obj.get('filtered'), [], 'filtered array cleared correctly');
351
- }
352
-
353
- ['@test the dependent array can be `clear`ed directly (#3272)'](assert) {
354
- assert.deepEqual(
355
- obj.get('filtered'),
356
- [2, 4, 6, 8],
357
- 'precond - filtered array is initially correct'
358
- );
359
-
360
- obj.get('array').clear();
361
-
362
- assert.deepEqual(obj.get('filtered'), [], 'filtered array cleared correctly');
363
- }
364
-
365
- ['@test it updates as the array is replaced'](assert) {
366
- assert.deepEqual(
367
- obj.get('filtered'),
368
- [2, 4, 6, 8],
369
- 'precond - filtered array is initially correct'
370
- );
371
-
372
- obj.set('array', [20, 21, 22, 23, 24]);
373
-
374
- assert.deepEqual(
375
- obj.get('filtered'),
376
- [20, 22, 24],
377
- 'computed array is updated when array is changed'
378
- );
379
- }
380
-
381
- ['@test it updates properly on @each with {} dependencies'](assert) {
382
- let item = EmberObject.create({ prop: true });
383
-
384
- obj = EmberObject.extend({
385
- filtered: filter('items.@each.{prop}', function(item) {
386
- return item.get('prop') === true;
387
- }),
388
- }).create({
389
- items: emberA([item]),
390
- });
391
-
392
- assert.deepEqual(obj.get('filtered'), [item]);
393
-
394
- item.set('prop', false);
395
-
396
- assert.deepEqual(obj.get('filtered'), []);
397
- }
398
- }
399
- );
400
-
401
- moduleFor(
402
- 'filterBy',
403
- class extends AbstractTestCase {
404
- beforeEach() {
405
- obj = EmberObject.extend({
406
- a1s: filterBy('array', 'a', 1),
407
- as: filterBy('array', 'a'),
408
- bs: filterBy('array', 'b'),
409
- }).create({
410
- array: emberA([
411
- { name: 'one', a: 1, b: false },
412
- { name: 'two', a: 2, b: false },
413
- { name: 'three', a: 1, b: true },
414
- { name: 'four', b: true },
415
- ]),
416
- });
417
- }
418
-
419
- afterEach() {
420
- run(obj, 'destroy');
421
- }
422
-
423
- ['@test filterBy is readOnly'](assert) {
424
- assert.throws(function() {
425
- obj.set('as', 1);
426
- }, /Cannot set read-only property "as" on object:/);
427
- }
428
-
429
- ['@test properties can be filtered by truthiness'](assert) {
430
- assert.deepEqual(
431
- obj.get('as').mapBy('name'),
432
- ['one', 'two', 'three'],
433
- 'properties can be filtered by existence'
434
- );
435
- assert.deepEqual(obj.get('bs').mapBy('name'), ['three', 'four'], 'booleans can be filtered');
436
-
437
- set(obj.get('array')[0], 'a', undefined);
438
- set(obj.get('array')[3], 'a', true);
439
-
440
- set(obj.get('array')[0], 'b', true);
441
- set(obj.get('array')[3], 'b', false);
442
-
443
- assert.deepEqual(
444
- obj.get('as').mapBy('name'),
445
- ['two', 'three', 'four'],
446
- 'arrays computed by filter property respond to property changes'
447
- );
448
- assert.deepEqual(
449
- obj.get('bs').mapBy('name'),
450
- ['one', 'three'],
451
- 'arrays computed by filtered property respond to property changes'
452
- );
453
-
454
- obj.get('array').pushObject({ name: 'five', a: 6, b: true });
455
-
456
- assert.deepEqual(
457
- obj.get('as').mapBy('name'),
458
- ['two', 'three', 'four', 'five'],
459
- 'arrays computed by filter property respond to added objects'
460
- );
461
- assert.deepEqual(
462
- obj.get('bs').mapBy('name'),
463
- ['one', 'three', 'five'],
464
- 'arrays computed by filtered property respond to added objects'
465
- );
466
-
467
- obj.get('array').popObject();
468
-
469
- assert.deepEqual(
470
- obj.get('as').mapBy('name'),
471
- ['two', 'three', 'four'],
472
- 'arrays computed by filter property respond to removed objects'
473
- );
474
- assert.deepEqual(
475
- obj.get('bs').mapBy('name'),
476
- ['one', 'three'],
477
- 'arrays computed by filtered property respond to removed objects'
478
- );
479
-
480
- obj.set('array', [{ name: 'six', a: 12, b: true }]);
481
-
482
- assert.deepEqual(
483
- obj.get('as').mapBy('name'),
484
- ['six'],
485
- 'arrays computed by filter property respond to array changes'
486
- );
487
- assert.deepEqual(
488
- obj.get('bs').mapBy('name'),
489
- ['six'],
490
- 'arrays computed by filtered property respond to array changes'
491
- );
492
- }
493
-
494
- ['@test properties can be filtered by values'](assert) {
495
- assert.deepEqual(
496
- obj.get('a1s').mapBy('name'),
497
- ['one', 'three'],
498
- 'properties can be filtered by matching value'
499
- );
500
-
501
- obj.get('array').pushObject({ name: 'five', a: 1 });
502
-
503
- assert.deepEqual(
504
- obj.get('a1s').mapBy('name'),
505
- ['one', 'three', 'five'],
506
- 'arrays computed by matching value respond to added objects'
507
- );
508
-
509
- obj.get('array').popObject();
510
-
511
- assert.deepEqual(
512
- obj.get('a1s').mapBy('name'),
513
- ['one', 'three'],
514
- 'arrays computed by matching value respond to removed objects'
515
- );
516
-
517
- set(obj.get('array')[1], 'a', 1);
518
- set(obj.get('array')[2], 'a', 2);
519
-
520
- assert.deepEqual(
521
- obj.get('a1s').mapBy('name'),
522
- ['one', 'two'],
523
- 'arrays computed by matching value respond to modified properties'
524
- );
525
- }
526
-
527
- ['@test properties values can be replaced'](assert) {
528
- obj = EmberObject.extend({
529
- a1s: filterBy('array', 'a', 1),
530
- a1bs: filterBy('a1s', 'b'),
531
- }).create({
532
- array: [],
533
- });
534
-
535
- assert.deepEqual(
536
- obj.get('a1bs').mapBy('name'),
537
- [],
538
- 'properties can be filtered by matching value'
539
- );
540
-
541
- set(obj, 'array', [{ name: 'item1', a: 1, b: true }]);
542
-
543
- assert.deepEqual(
544
- obj.get('a1bs').mapBy('name'),
545
- ['item1'],
546
- 'properties can be filtered by matching value'
547
- );
548
- }
549
- }
550
- );
551
-
552
- [['uniq', uniq], ['union', union]].forEach(tuple => {
553
- let [name, macro] = tuple;
554
-
555
- moduleFor(
556
- `computed.${name}`,
557
- class extends AbstractTestCase {
558
- beforeEach() {
559
- obj = EmberObject.extend({
560
- union: macro('array', 'array2', 'array3'),
561
- }).create({
562
- array: emberA([1, 2, 3, 4, 5, 6]),
563
- array2: emberA([4, 5, 6, 7, 8, 9, 4, 5, 6, 7, 8, 9]),
564
- array3: emberA([1, 8, 10]),
565
- });
566
- }
567
-
568
- afterEach() {
569
- run(obj, 'destroy');
570
- }
571
-
572
- [`@test ${name} is readOnly`](assert) {
573
- assert.throws(function() {
574
- obj.set('union', 1);
575
- }, /Cannot set read-only property "union" on object:/);
576
- }
577
-
578
- ['@test does not include duplicates'](assert) {
579
- let array = obj.get('array');
580
- let array2 = obj.get('array2');
581
-
582
- assert.deepEqual(
583
- obj.get('union').sort((x, y) => x - y),
584
- [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
585
- name + ' does not include duplicates'
586
- );
587
-
588
- array.pushObject(8);
589
-
590
- assert.deepEqual(
591
- obj.get('union').sort((x, y) => x - y),
592
- [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
593
- name + ' does not add existing items'
594
- );
595
-
596
- array.pushObject(11);
597
-
598
- assert.deepEqual(
599
- obj.get('union').sort((x, y) => x - y),
600
- [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
601
- name + ' adds new items'
602
- );
603
-
604
- removeAt(array2, 6); // remove 7
605
-
606
- assert.deepEqual(
607
- obj.get('union').sort((x, y) => x - y),
608
- [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
609
- name + ' does not remove items that are still in the dependent array'
610
- );
611
-
612
- array2.removeObject(7);
613
-
614
- assert.deepEqual(
615
- obj.get('union').sort((x, y) => x - y),
616
- [1, 2, 3, 4, 5, 6, 8, 9, 10, 11],
617
- name + ' removes items when their last instance is gone'
618
- );
619
- }
620
-
621
- ['@test has set-union semantics'](assert) {
622
- let array = obj.get('array');
623
-
624
- assert.deepEqual(
625
- obj.get('union').sort((x, y) => x - y),
626
- [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
627
- name + ' is initially correct'
628
- );
629
-
630
- array.removeObject(6);
631
-
632
- assert.deepEqual(
633
- obj.get('union').sort((x, y) => x - y),
634
- [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
635
- 'objects are not removed if they exist in other dependent arrays'
636
- );
637
-
638
- array.clear();
639
-
640
- assert.deepEqual(
641
- obj.get('union').sort((x, y) => x - y),
642
- [1, 4, 5, 6, 7, 8, 9, 10],
643
- 'objects are removed when they are no longer in any dependent array'
644
- );
645
- }
646
- }
647
- );
648
- });
649
-
650
- moduleFor(
651
- 'computed.uniqBy',
652
- class extends AbstractTestCase {
653
- beforeEach() {
654
- obj = EmberObject.extend({
655
- list: null,
656
- uniqueById: uniqBy('list', 'id'),
657
- }).create({
658
- list: emberA([{ id: 1, value: 'one' }, { id: 2, value: 'two' }, { id: 1, value: 'one' }]),
659
- });
660
- }
661
-
662
- afterEach() {
663
- run(obj, 'destroy');
664
- }
665
-
666
- ['@test uniqBy is readOnly'](assert) {
667
- assert.throws(function() {
668
- obj.set('uniqueById', 1);
669
- }, /Cannot set read-only property "uniqueById" on object:/);
670
- }
671
- ['@test does not include duplicates'](assert) {
672
- assert.deepEqual(obj.get('uniqueById'), [{ id: 1, value: 'one' }, { id: 2, value: 'two' }]);
673
- }
674
-
675
- ['@test it does not share state among instances'](assert) {
676
- let MyObject = EmberObject.extend({
677
- list: [],
678
- uniqueByName: uniqBy('list', 'name'),
679
- });
680
- let a = MyObject.create({
681
- list: [{ name: 'bob' }, { name: 'mitch' }, { name: 'mitch' }],
682
- });
683
- let b = MyObject.create({
684
- list: [{ name: 'warren' }, { name: 'mitch' }],
685
- });
686
-
687
- assert.deepEqual(a.get('uniqueByName'), [{ name: 'bob' }, { name: 'mitch' }]);
688
- // Making sure that 'mitch' appears
689
- assert.deepEqual(b.get('uniqueByName'), [{ name: 'warren' }, { name: 'mitch' }]);
690
- }
691
-
692
- ['@test it handles changes to the dependent array'](assert) {
693
- obj.get('list').pushObject({ id: 3, value: 'three' });
694
-
695
- assert.deepEqual(
696
- obj.get('uniqueById'),
697
- [{ id: 1, value: 'one' }, { id: 2, value: 'two' }, { id: 3, value: 'three' }],
698
- 'The list includes three'
699
- );
700
-
701
- obj.get('list').pushObject({ id: 3, value: 'three' });
702
-
703
- assert.deepEqual(
704
- obj.get('uniqueById'),
705
- [{ id: 1, value: 'one' }, { id: 2, value: 'two' }, { id: 3, value: 'three' }],
706
- 'The list does not include a duplicate three'
707
- );
708
- }
709
-
710
- ['@test it returns an empty array when computed on a non-array'](assert) {
711
- let MyObject = EmberObject.extend({
712
- list: null,
713
- uniq: uniqBy('list', 'name'),
714
- });
715
- let a = MyObject.create({ list: 'not an array' });
716
-
717
- assert.deepEqual(a.get('uniq'), []);
718
- }
719
- }
720
- );
721
-
722
- moduleFor(
723
- 'computed.intersect',
724
- class extends AbstractTestCase {
725
- beforeEach() {
726
- obj = EmberObject.extend({
727
- intersection: intersect('array', 'array2', 'array3'),
728
- }).create({
729
- array: emberA([1, 2, 3, 4, 5, 6]),
730
- array2: emberA([3, 3, 3, 4, 5]),
731
- array3: emberA([3, 5, 6, 7, 8]),
732
- });
733
- }
734
-
735
- afterEach() {
736
- run(obj, 'destroy');
737
- }
738
-
739
- ['@test intersect is readOnly'](assert) {
740
- assert.throws(function() {
741
- obj.set('intersection', 1);
742
- }, /Cannot set read-only property "intersection" on object:/);
743
- }
744
-
745
- ['@test it has set-intersection semantics'](assert) {
746
- let array2 = obj.get('array2');
747
- let array3 = obj.get('array3');
748
-
749
- assert.deepEqual(
750
- obj.get('intersection').sort((x, y) => x - y),
751
- [3, 5],
752
- 'intersection is initially correct'
753
- );
754
-
755
- array2.shiftObject();
756
-
757
- assert.deepEqual(
758
- obj.get('intersection').sort((x, y) => x - y),
759
- [3, 5],
760
- 'objects are not removed when they are still in all dependent arrays'
761
- );
762
-
763
- array2.shiftObject();
764
-
765
- assert.deepEqual(
766
- obj.get('intersection').sort((x, y) => x - y),
767
- [3, 5],
768
- 'objects are not removed when they are still in all dependent arrays'
769
- );
770
-
771
- array2.shiftObject();
772
-
773
- assert.deepEqual(
774
- obj.get('intersection'),
775
- [5],
776
- 'objects are removed once they are gone from all dependent arrays'
777
- );
778
-
779
- array2.pushObject(1);
780
-
781
- assert.deepEqual(
782
- obj.get('intersection'),
783
- [5],
784
- 'objects are not added as long as they are missing from any dependent array'
785
- );
786
-
787
- array3.pushObject(1);
788
-
789
- assert.deepEqual(
790
- obj.get('intersection').sort((x, y) => x - y),
791
- [1, 5],
792
- 'objects added once they belong to all dependent arrays'
793
- );
794
- }
795
- }
796
- );
797
-
798
- moduleFor(
799
- 'setDiff',
800
- class extends AbstractTestCase {
801
- beforeEach() {
802
- obj = EmberObject.extend({
803
- diff: setDiff('array', 'array2'),
804
- }).create({
805
- array: emberA([1, 2, 3, 4, 5, 6, 7]),
806
- array2: emberA([3, 4, 5, 10]),
807
- });
808
- }
809
-
810
- afterEach() {
811
- run(obj, 'destroy');
812
- }
813
-
814
- ['@test setDiff is readOnly'](assert) {
815
- assert.throws(function() {
816
- obj.set('diff', 1);
817
- }, /Cannot set read-only property "diff" on object:/);
818
- }
819
-
820
- ['@test it asserts if given fewer or more than two dependent properties']() {
821
- expectAssertion(
822
- function() {
823
- EmberObject.extend({
824
- diff: setDiff('array'),
825
- }).create({
826
- array: emberA([1, 2, 3, 4, 5, 6, 7]),
827
- array2: emberA([3, 4, 5]),
828
- });
829
- },
830
- /\`computed\.setDiff\` requires exactly two dependent arrays/,
831
- 'setDiff requires two dependent arrays'
832
- );
833
-
834
- expectAssertion(
835
- function() {
836
- EmberObject.extend({
837
- diff: setDiff('array', 'array2', 'array3'),
838
- }).create({
839
- array: emberA([1, 2, 3, 4, 5, 6, 7]),
840
- array2: emberA([3, 4, 5]),
841
- array3: emberA([7]),
842
- });
843
- },
844
- /\`computed\.setDiff\` requires exactly two dependent arrays/,
845
- 'setDiff requires two dependent arrays'
846
- );
847
- }
848
-
849
- ['@test it has set-diff semantics'](assert) {
850
- let array1 = obj.get('array');
851
- let array2 = obj.get('array2');
852
-
853
- assert.deepEqual(
854
- obj.get('diff').sort((x, y) => x - y),
855
- [1, 2, 6, 7],
856
- 'set-diff is initially correct'
857
- );
858
-
859
- array2.popObject();
860
-
861
- assert.deepEqual(
862
- obj.get('diff').sort((x, y) => x - y),
863
- [1, 2, 6, 7],
864
- 'removing objects from the remove set has no effect if the object is not in the keep set'
865
- );
866
-
867
- array2.shiftObject();
868
-
869
- assert.deepEqual(
870
- obj.get('diff').sort((x, y) => x - y),
871
- [1, 2, 3, 6, 7],
872
- "removing objects from the remove set adds them if they're in the keep set"
873
- );
874
-
875
- array1.removeObject(3);
876
-
877
- assert.deepEqual(
878
- obj.get('diff').sort((x, y) => x - y),
879
- [1, 2, 6, 7],
880
- 'removing objects from the keep array removes them from the computed array'
881
- );
882
-
883
- array1.pushObject(5);
884
-
885
- assert.deepEqual(
886
- obj.get('diff').sort((x, y) => x - y),
887
- [1, 2, 6, 7],
888
- 'objects added to the keep array that are in the remove array are not added to the computed array'
889
- );
890
-
891
- array1.pushObject(22);
892
-
893
- assert.deepEqual(
894
- obj.get('diff').sort((x, y) => x - y),
895
- [1, 2, 6, 7, 22],
896
- 'objects added to the keep array not in the remove array are added to the computed array'
897
- );
898
- }
899
- }
900
- );
901
-
902
- moduleFor(
903
- 'sort - sortProperties',
904
- class extends AbstractTestCase {
905
- beforeEach() {
906
- obj = EmberObject.extend({
907
- sortedItems: sort('items', 'itemSorting'),
908
- }).create({
909
- itemSorting: emberA(['lname', 'fname']),
910
- items: emberA([
911
- { fname: 'Jaime', lname: 'Lannister', age: 34 },
912
- { fname: 'Cersei', lname: 'Lannister', age: 34 },
913
- { fname: 'Robb', lname: 'Stark', age: 16 },
914
- { fname: 'Bran', lname: 'Stark', age: 8 },
915
- ]),
916
- });
917
- }
918
-
919
- afterEach() {
920
- run(obj, 'destroy');
921
- }
922
-
923
- ['@test sort is readOnly'](assert) {
924
- assert.throws(function() {
925
- obj.set('sortedItems', 1);
926
- }, /Cannot set read-only property "sortedItems" on object:/);
927
- }
928
-
929
- ['@test arrays are initially sorted'](assert) {
930
- assert.deepEqual(
931
- obj.get('sortedItems').mapBy('fname'),
932
- ['Cersei', 'Jaime', 'Bran', 'Robb'],
933
- 'array is initially sorted'
934
- );
935
- }
936
-
937
- ['@test default sort order is correct'](assert) {
938
- assert.deepEqual(
939
- obj.get('sortedItems').mapBy('fname'),
940
- ['Cersei', 'Jaime', 'Bran', 'Robb'],
941
- 'array is initially sorted'
942
- );
943
- }
944
-
945
- ['@test changing the dependent array updates the sorted array'](assert) {
946
- assert.deepEqual(
947
- obj.get('sortedItems').mapBy('fname'),
948
- ['Cersei', 'Jaime', 'Bran', 'Robb'],
949
- 'precond - array is initially sorted'
950
- );
951
-
952
- obj.set('items', [
953
- { fname: 'Roose', lname: 'Bolton' },
954
- { fname: 'Theon', lname: 'Greyjoy' },
955
- { fname: 'Ramsey', lname: 'Bolton' },
956
- { fname: 'Stannis', lname: 'Baratheon' },
957
- ]);
958
-
959
- assert.deepEqual(
960
- obj.get('sortedItems').mapBy('fname'),
961
- ['Stannis', 'Ramsey', 'Roose', 'Theon'],
962
- 'changing dependent array updates sorted array'
963
- );
964
- }
965
-
966
- ['@test adding to the dependent array updates the sorted array'](assert) {
967
- let items = obj.get('items');
968
-
969
- assert.deepEqual(
970
- obj.get('sortedItems').mapBy('fname'),
971
- ['Cersei', 'Jaime', 'Bran', 'Robb'],
972
- 'precond - array is initially sorted'
973
- );
974
-
975
- items.pushObject({
976
- fname: 'Tyrion',
977
- lname: 'Lannister',
978
- });
979
-
980
- assert.deepEqual(
981
- obj.get('sortedItems').mapBy('fname'),
982
- ['Cersei', 'Jaime', 'Tyrion', 'Bran', 'Robb'],
983
- 'Adding to the dependent array updates the sorted array'
984
- );
985
- }
986
-
987
- ['@test removing from the dependent array updates the sorted array'](assert) {
988
- assert.deepEqual(
989
- obj.get('sortedItems').mapBy('fname'),
990
- ['Cersei', 'Jaime', 'Bran', 'Robb'],
991
- 'precond - array is initially sorted'
992
- );
993
-
994
- obj.get('items').popObject();
995
-
996
- assert.deepEqual(
997
- obj.get('sortedItems').mapBy('fname'),
998
- ['Cersei', 'Jaime', 'Robb'],
999
- 'Removing from the dependent array updates the sorted array'
1000
- );
1001
- }
1002
-
1003
- ['@test distinct items may be sort-equal, although their relative order will not be guaranteed'](
1004
- assert
1005
- ) {
1006
- // We recreate jaime and "Cersei" here only for test stability: we want
1007
- // their guid-ordering to be deterministic
1008
- let jaimeInDisguise = {
1009
- fname: 'Cersei',
1010
- lname: 'Lannister',
1011
- age: 34,
1012
- };
1013
-
1014
- let jaime = {
1015
- fname: 'Jaime',
1016
- lname: 'Lannister',
1017
- age: 34,
1018
- };
1019
-
1020
- let items = obj.get('items');
1021
-
1022
- items.replace(0, 1, [jaime]);
1023
- items.replace(1, 1, [jaimeInDisguise]);
1024
-
1025
- assert.deepEqual(
1026
- obj.get('sortedItems').mapBy('fname'),
1027
- ['Cersei', 'Jaime', 'Bran', 'Robb'],
1028
- 'precond - array is initially sorted'
1029
- );
1030
-
1031
- set(jaimeInDisguise, 'fname', 'Jaime');
1032
-
1033
- assert.deepEqual(
1034
- obj.get('sortedItems').mapBy('fname'),
1035
- ['Jaime', 'Jaime', 'Bran', 'Robb'],
1036
- 'sorted array is updated'
1037
- );
1038
-
1039
- set(jaimeInDisguise, 'fname', 'Cersei');
1040
-
1041
- assert.deepEqual(
1042
- obj.get('sortedItems').mapBy('fname'),
1043
- ['Cersei', 'Jaime', 'Bran', 'Robb'],
1044
- 'sorted array is updated'
1045
- );
1046
- }
1047
-
1048
- ['@test guid sort-order fallback with a search proxy is not confused by non-search ObjectProxys'](
1049
- assert
1050
- ) {
1051
- let tyrion = {
1052
- fname: 'Tyrion',
1053
- lname: 'Lannister',
1054
- };
1055
-
1056
- let tyrionInDisguise = ObjectProxy.create({
1057
- fname: 'Yollo',
1058
- lname: '',
1059
- content: tyrion,
1060
- });
1061
-
1062
- let items = obj.get('items');
1063
-
1064
- items.pushObject(tyrion);
1065
-
1066
- assert.deepEqual(obj.get('sortedItems').mapBy('fname'), [
1067
- 'Cersei',
1068
- 'Jaime',
1069
- 'Tyrion',
1070
- 'Bran',
1071
- 'Robb',
1072
- ]);
1073
-
1074
- items.pushObject(tyrionInDisguise);
1075
-
1076
- assert.deepEqual(obj.get('sortedItems').mapBy('fname'), [
1077
- 'Yollo',
1078
- 'Cersei',
1079
- 'Jaime',
1080
- 'Tyrion',
1081
- 'Bran',
1082
- 'Robb',
1083
- ]);
1084
- }
1085
-
1086
- ['@test updating sort properties detaches observers for old sort properties'](assert) {
1087
- let objectToRemove = obj.get('items')[3];
1088
-
1089
- assert.deepEqual(
1090
- obj.get('sortedItems').mapBy('fname'),
1091
- ['Cersei', 'Jaime', 'Bran', 'Robb'],
1092
- 'precond - array is initially sorted'
1093
- );
1094
-
1095
- obj.set('itemSorting', emberA(['fname:desc']));
1096
-
1097
- assert.deepEqual(
1098
- obj.get('sortedItems').mapBy('fname'),
1099
- ['Robb', 'Jaime', 'Cersei', 'Bran'],
1100
- 'after updating sort properties array is updated'
1101
- );
1102
-
1103
- obj.get('items').removeObject(objectToRemove);
1104
-
1105
- assert.deepEqual(
1106
- obj.get('sortedItems').mapBy('fname'),
1107
- ['Robb', 'Jaime', 'Cersei'],
1108
- 'after removing item array is updated'
1109
- );
1110
-
1111
- set(objectToRemove, 'lname', 'Updated-Stark');
1112
-
1113
- assert.deepEqual(
1114
- obj.get('sortedItems').mapBy('fname'),
1115
- ['Robb', 'Jaime', 'Cersei'],
1116
- 'after changing removed item array is not updated'
1117
- );
1118
- }
1119
-
1120
- ['@test sort works if array property is null (non array value) on first evaluation of computed prop'](
1121
- assert
1122
- ) {
1123
- obj.set('items', null);
1124
- assert.deepEqual(obj.get('sortedItems'), []);
1125
- obj.set('items', emberA([{ fname: 'Cersei', lname: 'Lanister' }]));
1126
- assert.deepEqual(obj.get('sortedItems'), [{ fname: 'Cersei', lname: 'Lanister' }]);
1127
- }
1128
-
1129
- ['@test updating sort properties updates the sorted array'](assert) {
1130
- assert.deepEqual(
1131
- obj.get('sortedItems').mapBy('fname'),
1132
- ['Cersei', 'Jaime', 'Bran', 'Robb'],
1133
- 'precond - array is initially sorted'
1134
- );
1135
-
1136
- obj.set('itemSorting', emberA(['fname:desc']));
1137
-
1138
- assert.deepEqual(
1139
- obj.get('sortedItems').mapBy('fname'),
1140
- ['Robb', 'Jaime', 'Cersei', 'Bran'],
1141
- 'after updating sort properties array is updated'
1142
- );
1143
- }
1144
-
1145
- ['@test updating sort properties invalidates the sorted array'](assert) {
1146
- let sortProps = obj.get('itemSorting');
1147
-
1148
- assert.deepEqual(
1149
- obj.get('sortedItems').mapBy('fname'),
1150
- ['Cersei', 'Jaime', 'Bran', 'Robb'],
1151
- 'precond - array is initially sorted'
1152
- );
1153
-
1154
- sortProps.clear();
1155
- sortProps.pushObject('fname');
1156
-
1157
- assert.deepEqual(
1158
- obj.get('sortedItems').mapBy('fname'),
1159
- ['Bran', 'Cersei', 'Jaime', 'Robb'],
1160
- 'after updating sort properties array is updated'
1161
- );
1162
- }
1163
-
1164
- ['@test updating new sort properties invalidates the sorted array'](assert) {
1165
- assert.deepEqual(
1166
- obj.get('sortedItems').mapBy('fname'),
1167
- ['Cersei', 'Jaime', 'Bran', 'Robb'],
1168
- 'precond - array is initially sorted'
1169
- );
1170
-
1171
- obj.set('itemSorting', emberA(['age:desc', 'fname:asc']));
1172
-
1173
- assert.deepEqual(
1174
- obj.get('sortedItems').mapBy('fname'),
1175
- ['Cersei', 'Jaime', 'Robb', 'Bran'],
1176
- 'precond - array is correct after item sorting is changed'
1177
- );
1178
-
1179
- set(obj.get('items')[1], 'age', 29);
1180
-
1181
- assert.deepEqual(
1182
- obj.get('sortedItems').mapBy('fname'),
1183
- ['Jaime', 'Cersei', 'Robb', 'Bran'],
1184
- 'after updating sort properties array is updated'
1185
- );
1186
- }
1187
-
1188
- ['@test sort direction defaults to ascending'](assert) {
1189
- assert.deepEqual(obj.get('sortedItems').mapBy('fname'), ['Cersei', 'Jaime', 'Bran', 'Robb']);
1190
- }
1191
-
1192
- ['@test sort direction defaults to ascending (with sort property change)'](assert) {
1193
- assert.deepEqual(
1194
- obj.get('sortedItems').mapBy('fname'),
1195
- ['Cersei', 'Jaime', 'Bran', 'Robb'],
1196
- 'precond - array is initially sorted'
1197
- );
1198
-
1199
- obj.set('itemSorting', emberA(['fname']));
1200
-
1201
- assert.deepEqual(
1202
- obj.get('sortedItems').mapBy('fname'),
1203
- ['Bran', 'Cersei', 'Jaime', 'Robb'],
1204
- 'sort direction defaults to ascending'
1205
- );
1206
- }
1207
-
1208
- ["@test updating an item's sort properties updates the sorted array"](assert) {
1209
- let tyrionInDisguise = obj.get('items')[1];
1210
-
1211
- assert.deepEqual(
1212
- obj.get('sortedItems').mapBy('fname'),
1213
- ['Cersei', 'Jaime', 'Bran', 'Robb'],
1214
- 'precond - array is initially sorted'
1215
- );
1216
-
1217
- set(tyrionInDisguise, 'fname', 'Tyrion');
1218
-
1219
- assert.deepEqual(
1220
- obj.get('sortedItems').mapBy('fname'),
1221
- ['Jaime', 'Tyrion', 'Bran', 'Robb'],
1222
- "updating an item's sort properties updates the sorted array"
1223
- );
1224
- }
1225
-
1226
- ["@test updating several of an item's sort properties updated the sorted array"](assert) {
1227
- let sansaInDisguise = obj.get('items')[1];
1228
-
1229
- assert.deepEqual(
1230
- obj.get('sortedItems').mapBy('fname'),
1231
- ['Cersei', 'Jaime', 'Bran', 'Robb'],
1232
- 'precond - array is initially sorted'
1233
- );
1234
-
1235
- setProperties(sansaInDisguise, {
1236
- fname: 'Sansa',
1237
- lname: 'Stark',
1238
- });
1239
-
1240
- assert.deepEqual(
1241
- obj.get('sortedItems').mapBy('fname'),
1242
- ['Jaime', 'Bran', 'Robb', 'Sansa'],
1243
- "updating an item's sort properties updates the sorted array"
1244
- );
1245
- }
1246
-
1247
- ["@test updating an item's sort properties does not error when binary search does a self compare (#3273)"](
1248
- assert
1249
- ) {
1250
- let jaime = {
1251
- name: 'Jaime',
1252
- status: 1,
1253
- };
1254
-
1255
- let cersei = {
1256
- name: 'Cersei',
1257
- status: 2,
1258
- };
1259
-
1260
- let obj = EmberObject.extend({
1261
- sortProps: ['status'],
1262
- sortedPeople: sort('people', 'sortProps'),
1263
- }).create({
1264
- people: [jaime, cersei],
1265
- });
1266
-
1267
- assert.deepEqual(
1268
- obj.get('sortedPeople'),
1269
- [jaime, cersei],
1270
- 'precond - array is initially sorted'
1271
- );
1272
-
1273
- set(cersei, 'status', 3);
1274
-
1275
- assert.deepEqual(obj.get('sortedPeople'), [jaime, cersei], 'array is sorted correctly');
1276
-
1277
- set(cersei, 'status', 2);
1278
-
1279
- assert.deepEqual(obj.get('sortedPeople'), [jaime, cersei], 'array is sorted correctly');
1280
- }
1281
-
1282
- ['@test array should not be sorted if sort properties array is empty'](assert) {
1283
- var o = EmberObject.extend({
1284
- sortedItems: sort('items', 'itemSorting'),
1285
- }).create({
1286
- itemSorting: emberA([]),
1287
- // This bug only manifests when array.sort(() => 0) is not equal to array.
1288
- // In order for this to happen, the browser must use an unstable sort and the
1289
- // array must be sufficient large. On Chrome, 12 items is currently sufficient.
1290
- items: emberA([6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5]),
1291
- });
1292
-
1293
- assert.deepEqual(
1294
- o.get('sortedItems'),
1295
- [6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5],
1296
- 'array is not changed'
1297
- );
1298
- }
1299
-
1300
- ['@test array should update if items to be sorted is replaced when sort properties array is empty'](
1301
- assert
1302
- ) {
1303
- var o = EmberObject.extend({
1304
- sortedItems: sort('items', 'itemSorting'),
1305
- }).create({
1306
- itemSorting: emberA([]),
1307
- items: emberA([6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5]),
1308
- });
1309
-
1310
- assert.deepEqual(
1311
- o.get('sortedItems'),
1312
- [6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5],
1313
- 'array is not changed'
1314
- );
1315
-
1316
- set(o, 'items', emberA([5, 6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4]));
1317
-
1318
- assert.deepEqual(
1319
- o.get('sortedItems'),
1320
- [5, 6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4],
1321
- 'array was updated'
1322
- );
1323
- }
1324
-
1325
- ['@test array should update if items to be sorted is mutated when sort properties array is empty'](
1326
- assert
1327
- ) {
1328
- var o = EmberObject.extend({
1329
- sortedItems: sort('items', 'itemSorting'),
1330
- }).create({
1331
- itemSorting: emberA([]),
1332
- items: emberA([6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5]),
1333
- });
1334
-
1335
- assert.deepEqual(
1336
- o.get('sortedItems'),
1337
- [6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5],
1338
- 'array is not changed'
1339
- );
1340
-
1341
- o.get('items').pushObject(12);
1342
-
1343
- assert.deepEqual(
1344
- o.get('sortedItems'),
1345
- [6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5, 12],
1346
- 'array was updated'
1347
- );
1348
- }
1349
-
1350
- ['@test array observers do not leak'](assert) {
1351
- let daria = { name: 'Daria' };
1352
- let jane = { name: 'Jane' };
1353
-
1354
- let sisters = [jane, daria];
1355
-
1356
- let sortProps = emberA(['name']);
1357
- let jaime = EmberObject.extend({
1358
- sortedPeople: sort('sisters', 'sortProps'),
1359
- sortProps,
1360
- }).create({
1361
- sisters,
1362
- });
1363
-
1364
- jaime.get('sortedPeople');
1365
- run(jaime, 'destroy');
1366
-
1367
- try {
1368
- sortProps.pushObject({
1369
- name: 'Anna',
1370
- });
1371
- assert.ok(true);
1372
- } catch (e) {
1373
- assert.ok(false, e);
1374
- }
1375
- }
1376
-
1377
- ['@test property paths in sort properties update the sorted array'](assert) {
1378
- let jaime = {
1379
- relatedObj: { status: 1, firstName: 'Jaime', lastName: 'Lannister' },
1380
- };
1381
-
1382
- let cersei = {
1383
- relatedObj: { status: 2, firstName: 'Cersei', lastName: 'Lannister' },
1384
- };
1385
-
1386
- let sansa = EmberObject.create({
1387
- relatedObj: { status: 3, firstName: 'Sansa', lastName: 'Stark' },
1388
- });
1389
-
1390
- let obj = EmberObject.extend({
1391
- sortProps: ['relatedObj.status'],
1392
- sortedPeople: sort('people', 'sortProps'),
1393
- }).create({
1394
- people: [jaime, cersei, sansa],
1395
- });
1396
-
1397
- assert.deepEqual(
1398
- obj.get('sortedPeople'),
1399
- [jaime, cersei, sansa],
1400
- 'precond - array is initially sorted'
1401
- );
1402
-
1403
- set(cersei, 'status', 3);
1404
-
1405
- assert.deepEqual(
1406
- obj.get('sortedPeople'),
1407
- [jaime, cersei, sansa],
1408
- 'array is sorted correctly'
1409
- );
1410
-
1411
- set(cersei, 'status', 1);
1412
-
1413
- assert.deepEqual(
1414
- obj.get('sortedPeople'),
1415
- [jaime, cersei, sansa],
1416
- 'array is sorted correctly'
1417
- );
1418
-
1419
- sansa.set('status', 1);
1420
-
1421
- assert.deepEqual(
1422
- obj.get('sortedPeople'),
1423
- [jaime, cersei, sansa],
1424
- 'array is sorted correctly'
1425
- );
1426
-
1427
- obj.set('sortProps', ['relatedObj.firstName']);
1428
-
1429
- assert.deepEqual(
1430
- obj.get('sortedPeople'),
1431
- [cersei, jaime, sansa],
1432
- 'array is sorted correctly'
1433
- );
1434
- }
1435
-
1436
- ['@test if the dependentKey is neither an array nor object, it will return an empty array'](
1437
- assert
1438
- ) {
1439
- set(obj, 'items', null);
1440
- assert.ok(isArray(obj.get('sortedItems')), 'returns an empty arrays');
1441
-
1442
- set(obj, 'array', undefined);
1443
- assert.ok(isArray(obj.get('sortedItems')), 'returns an empty arrays');
1444
-
1445
- set(obj, 'array', 'not an array');
1446
- assert.ok(isArray(obj.get('sortedItems')), 'returns an empty arrays');
1447
- }
1448
- }
1449
- );
1450
-
1451
- function sortByLnameFname(a, b) {
1452
- let lna = get(a, 'lname');
1453
- let lnb = get(b, 'lname');
1454
-
1455
- if (lna !== lnb) {
1456
- return lna > lnb ? 1 : -1;
1457
- }
1458
-
1459
- return sortByFnameAsc(a, b);
1460
- }
1461
-
1462
- function sortByFnameAsc(a, b) {
1463
- let fna = get(a, 'fname');
1464
- let fnb = get(b, 'fname');
1465
-
1466
- if (fna === fnb) {
1467
- return 0;
1468
- }
1469
- return fna > fnb ? 1 : -1;
1470
- }
1471
-
1472
- moduleFor(
1473
- 'sort - sort function',
1474
- class extends AbstractTestCase {
1475
- beforeEach() {
1476
- obj = EmberObject.extend({
1477
- sortedItems: sort('items.@each.fname', sortByLnameFname),
1478
- }).create({
1479
- items: emberA([
1480
- { fname: 'Jaime', lname: 'Lannister', age: 34 },
1481
- { fname: 'Cersei', lname: 'Lannister', age: 34 },
1482
- { fname: 'Robb', lname: 'Stark', age: 16 },
1483
- { fname: 'Bran', lname: 'Stark', age: 8 },
1484
- ]),
1485
- });
1486
- }
1487
-
1488
- afterEach() {
1489
- run(obj, 'destroy');
1490
- }
1491
-
1492
- ['@test sort has correct `this`'](assert) {
1493
- let obj = EmberObject.extend({
1494
- sortedItems: sort('items.@each.fname', function(a, b) {
1495
- assert.equal(this, obj, 'expected the object to be `this`');
1496
- return this.sortByLastName(a, b);
1497
- }),
1498
- sortByLastName(a, b) {
1499
- return sortByFnameAsc(a, b);
1500
- },
1501
- }).create({
1502
- items: emberA([
1503
- { fname: 'Jaime', lname: 'Lannister', age: 34 },
1504
- { fname: 'Cersei', lname: 'Lannister', age: 34 },
1505
- { fname: 'Robb', lname: 'Stark', age: 16 },
1506
- { fname: 'Bran', lname: 'Stark', age: 8 },
1507
- ]),
1508
- });
1509
-
1510
- obj.get('sortedItems');
1511
- }
1512
-
1513
- ['@test sort (with function) is readOnly'](assert) {
1514
- assert.throws(function() {
1515
- obj.set('sortedItems', 1);
1516
- }, /Cannot set read-only property "sortedItems" on object:/);
1517
- }
1518
-
1519
- ['@test arrays are initially sorted'](assert) {
1520
- assert.deepEqual(
1521
- obj.get('sortedItems').mapBy('fname'),
1522
- ['Cersei', 'Jaime', 'Bran', 'Robb'],
1523
- 'array is initially sorted'
1524
- );
1525
- }
1526
-
1527
- ['@test default sort order is correct'](assert) {
1528
- assert.deepEqual(
1529
- obj.get('sortedItems').mapBy('fname'),
1530
- ['Cersei', 'Jaime', 'Bran', 'Robb'],
1531
- 'array is initially sorted'
1532
- );
1533
- }
1534
-
1535
- ['@test changing the dependent array updates the sorted array'](assert) {
1536
- assert.deepEqual(
1537
- obj.get('sortedItems').mapBy('fname'),
1538
- ['Cersei', 'Jaime', 'Bran', 'Robb'],
1539
- 'precond - array is initially sorted'
1540
- );
1541
-
1542
- obj.set('items', [
1543
- { fname: 'Roose', lname: 'Bolton' },
1544
- { fname: 'Theon', lname: 'Greyjoy' },
1545
- { fname: 'Ramsey', lname: 'Bolton' },
1546
- { fname: 'Stannis', lname: 'Baratheon' },
1547
- ]);
1548
-
1549
- assert.deepEqual(
1550
- obj.get('sortedItems').mapBy('fname'),
1551
- ['Stannis', 'Ramsey', 'Roose', 'Theon'],
1552
- 'changing dependent array updates sorted array'
1553
- );
1554
- }
1555
-
1556
- ['@test adding to the dependent array updates the sorted array'](assert) {
1557
- let items = obj.get('items');
1558
-
1559
- assert.deepEqual(
1560
- obj.get('sortedItems').mapBy('fname'),
1561
- ['Cersei', 'Jaime', 'Bran', 'Robb'],
1562
- 'precond - array is initially sorted'
1563
- );
1564
-
1565
- items.pushObject({
1566
- fname: 'Tyrion',
1567
- lname: 'Lannister',
1568
- });
1569
-
1570
- assert.deepEqual(
1571
- obj.get('sortedItems').mapBy('fname'),
1572
- ['Cersei', 'Jaime', 'Tyrion', 'Bran', 'Robb'],
1573
- 'Adding to the dependent array updates the sorted array'
1574
- );
1575
- }
1576
-
1577
- ['@test removing from the dependent array updates the sorted array'](assert) {
1578
- assert.deepEqual(
1579
- obj.get('sortedItems').mapBy('fname'),
1580
- ['Cersei', 'Jaime', 'Bran', 'Robb'],
1581
- 'precond - array is initially sorted'
1582
- );
1583
-
1584
- obj.get('items').popObject();
1585
-
1586
- assert.deepEqual(
1587
- obj.get('sortedItems').mapBy('fname'),
1588
- ['Cersei', 'Jaime', 'Robb'],
1589
- 'Removing from the dependent array updates the sorted array'
1590
- );
1591
- }
1592
-
1593
- ['@test distinct items may be sort-equal, although their relative order will not be guaranteed'](
1594
- assert
1595
- ) {
1596
- // We recreate jaime and "Cersei" here only for test stability: we want
1597
- // their guid-ordering to be deterministic
1598
- let jaimeInDisguise = {
1599
- fname: 'Cersei',
1600
- lname: 'Lannister',
1601
- age: 34,
1602
- };
1603
-
1604
- let jaime = {
1605
- fname: 'Jaime',
1606
- lname: 'Lannister',
1607
- age: 34,
1608
- };
1609
-
1610
- let items = obj.get('items');
1611
-
1612
- items.replace(0, 1, [jaime]);
1613
- items.replace(1, 1, [jaimeInDisguise]);
1614
-
1615
- assert.deepEqual(
1616
- obj.get('sortedItems').mapBy('fname'),
1617
- ['Cersei', 'Jaime', 'Bran', 'Robb'],
1618
- 'precond - array is initially sorted'
1619
- );
1620
-
1621
- set(jaimeInDisguise, 'fname', 'Jaime');
1622
-
1623
- assert.deepEqual(
1624
- obj.get('sortedItems').mapBy('fname'),
1625
- ['Jaime', 'Jaime', 'Bran', 'Robb'],
1626
- 'sorted array is updated'
1627
- );
1628
-
1629
- set(jaimeInDisguise, 'fname', 'Cersei');
1630
-
1631
- assert.deepEqual(
1632
- obj.get('sortedItems').mapBy('fname'),
1633
- ['Cersei', 'Jaime', 'Bran', 'Robb'],
1634
- 'sorted array is updated'
1635
- );
1636
- }
1637
-
1638
- ['@test guid sort-order fallback with a search proxy is not confused by non-search ObjectProxys'](
1639
- assert
1640
- ) {
1641
- let tyrion = {
1642
- fname: 'Tyrion',
1643
- lname: 'Lannister',
1644
- };
1645
-
1646
- let tyrionInDisguise = ObjectProxy.create({
1647
- fname: 'Yollo',
1648
- lname: '',
1649
- content: tyrion,
1650
- });
1651
-
1652
- let items = obj.get('items');
1653
-
1654
- items.pushObject(tyrion);
1655
-
1656
- assert.deepEqual(obj.get('sortedItems').mapBy('fname'), [
1657
- 'Cersei',
1658
- 'Jaime',
1659
- 'Tyrion',
1660
- 'Bran',
1661
- 'Robb',
1662
- ]);
1663
-
1664
- items.pushObject(tyrionInDisguise);
1665
-
1666
- assert.deepEqual(obj.get('sortedItems').mapBy('fname'), [
1667
- 'Yollo',
1668
- 'Cersei',
1669
- 'Jaime',
1670
- 'Tyrion',
1671
- 'Bran',
1672
- 'Robb',
1673
- ]);
1674
- }
1675
-
1676
- ['@test changing item properties specified via @each triggers a resort of the modified item'](
1677
- assert
1678
- ) {
1679
- let items = get(obj, 'items');
1680
-
1681
- let tyrionInDisguise = items[1];
1682
-
1683
- assert.deepEqual(
1684
- obj.get('sortedItems').mapBy('fname'),
1685
- ['Cersei', 'Jaime', 'Bran', 'Robb'],
1686
- 'precond - array is initially sorted'
1687
- );
1688
-
1689
- set(tyrionInDisguise, 'fname', 'Tyrion');
1690
-
1691
- assert.deepEqual(
1692
- obj.get('sortedItems').mapBy('fname'),
1693
- ['Jaime', 'Tyrion', 'Bran', 'Robb'],
1694
- 'updating a specified property on an item resorts it'
1695
- );
1696
- }
1697
-
1698
- ['@test changing item properties not specified via @each does not trigger a resort'](assert) {
1699
- if (!EMBER_METAL_TRACKED_PROPERTIES) {
1700
- let items = obj.get('items');
1701
- let cersei = items[1];
1702
-
1703
- assert.deepEqual(
1704
- obj.get('sortedItems').mapBy('fname'),
1705
- ['Cersei', 'Jaime', 'Bran', 'Robb'],
1706
- 'precond - array is initially sorted'
1707
- );
1708
-
1709
- set(cersei, 'lname', 'Stark'); // plot twist! (possibly not canon)
1710
-
1711
- // The array has become unsorted. If your sort function is sensitive to
1712
- // properties, they *must* be specified as dependent item property keys or
1713
- // we'll be doing binary searches on unsorted arrays.
1714
- assert.deepEqual(
1715
- obj.get('sortedItems').mapBy('fname'),
1716
- ['Cersei', 'Jaime', 'Bran', 'Robb'],
1717
- 'updating an unspecified property on an item does not resort it'
1718
- );
1719
- } else {
1720
- assert.expect(0);
1721
- }
1722
- }
1723
- }
1724
- );
1725
-
1726
- moduleFor(
1727
- 'sort - stability',
1728
- class extends AbstractTestCase {
1729
- beforeEach() {
1730
- obj = EmberObject.extend({
1731
- sortProps: ['count', 'name'],
1732
- sortedItems: sort('items', 'sortProps'),
1733
- }).create({
1734
- items: [
1735
- { name: 'A', count: 1, thing: 4 },
1736
- { name: 'B', count: 1, thing: 3 },
1737
- { name: 'C', count: 1, thing: 2 },
1738
- { name: 'D', count: 1, thing: 4 },
1739
- ],
1740
- });
1741
- }
1742
-
1743
- afterEach() {
1744
- run(obj, 'destroy');
1745
- }
1746
-
1747
- ['@test sorts correctly as only one property changes'](assert) {
1748
- assert.deepEqual(obj.get('sortedItems').mapBy('name'), ['A', 'B', 'C', 'D'], 'initial');
1749
-
1750
- set(obj.get('items')[3], 'count', 2);
1751
-
1752
- assert.deepEqual(obj.get('sortedItems').mapBy('name'), ['A', 'B', 'C', 'D'], 'final');
1753
- }
1754
- }
1755
- );
1756
-
1757
- let klass;
1758
- moduleFor(
1759
- 'sort - concurrency',
1760
- class extends AbstractTestCase {
1761
- beforeEach() {
1762
- klass = EmberObject.extend({
1763
- sortProps: ['count'],
1764
- sortedItems: sort('items', 'sortProps'),
1765
- customSortedItems: sort('items.@each.count', (a, b) => a.count - b.count),
1766
- });
1767
- obj = klass.create({
1768
- items: emberA([
1769
- { name: 'A', count: 1, thing: 4, id: 1 },
1770
- { name: 'B', count: 2, thing: 3, id: 2 },
1771
- { name: 'C', count: 3, thing: 2, id: 3 },
1772
- { name: 'D', count: 4, thing: 1, id: 4 },
1773
- ]),
1774
- });
1775
- }
1776
-
1777
- afterEach() {
1778
- run(obj, 'destroy');
1779
- }
1780
-
1781
- ['@test sorts correctly after mutation to the sort properties'](assert) {
1782
- let sorted = obj.get('sortedItems');
1783
- assert.deepEqual(sorted.mapBy('name'), ['A', 'B', 'C', 'D'], 'initial');
1784
-
1785
- set(obj.get('items')[1], 'count', 5);
1786
- set(obj.get('items')[2], 'count', 6);
1787
-
1788
- assert.deepEqual(obj.get('sortedItems').mapBy('name'), ['A', 'D', 'B', 'C'], 'final');
1789
- }
1790
-
1791
- ['@test sort correctly after mutation to the sort'](assert) {
1792
- assert.deepEqual(obj.get('customSortedItems').mapBy('name'), ['A', 'B', 'C', 'D'], 'initial');
1793
-
1794
- set(obj.get('items')[1], 'count', 5);
1795
- set(obj.get('items')[2], 'count', 6);
1796
-
1797
- assert.deepEqual(obj.get('customSortedItems').mapBy('name'), ['A', 'D', 'B', 'C'], 'final');
1798
-
1799
- assert.deepEqual(obj.get('sortedItems').mapBy('name'), ['A', 'D', 'B', 'C'], 'final');
1800
- }
1801
-
1802
- ['@test sort correctly on multiple instances of the same class'](assert) {
1803
- let obj2 = klass.create({
1804
- items: emberA([
1805
- { name: 'W', count: 23, thing: 4 },
1806
- { name: 'X', count: 24, thing: 3 },
1807
- { name: 'Y', count: 25, thing: 2 },
1808
- { name: 'Z', count: 26, thing: 1 },
1809
- ]),
1810
- });
1811
-
1812
- assert.deepEqual(obj2.get('sortedItems').mapBy('name'), ['W', 'X', 'Y', 'Z'], 'initial');
1813
- assert.deepEqual(obj.get('sortedItems').mapBy('name'), ['A', 'B', 'C', 'D'], 'initial');
1814
-
1815
- set(obj.get('items')[1], 'count', 5);
1816
- set(obj.get('items')[2], 'count', 6);
1817
- set(obj2.get('items')[1], 'count', 27);
1818
- set(obj2.get('items')[2], 'count', 28);
1819
-
1820
- assert.deepEqual(obj.get('sortedItems').mapBy('name'), ['A', 'D', 'B', 'C'], 'final');
1821
- assert.deepEqual(obj2.get('sortedItems').mapBy('name'), ['W', 'Z', 'X', 'Y'], 'final');
1822
-
1823
- obj.set('sortProps', ['thing']);
1824
-
1825
- assert.deepEqual(obj.get('sortedItems').mapBy('name'), ['D', 'C', 'B', 'A'], 'final');
1826
-
1827
- obj2.notifyPropertyChange('sortedItems'); // invalidate to flush, to get DK refreshed
1828
- obj2.get('sortedItems'); // flush to get updated DK
1829
-
1830
- obj2.set('items.firstObject.count', 9999);
1831
-
1832
- assert.deepEqual(obj2.get('sortedItems').mapBy('name'), ['Z', 'X', 'Y', 'W'], 'final');
1833
- }
1834
-
1835
- ['@test sort correctly when multiple sorts are chained on the same instance of a class'](
1836
- assert
1837
- ) {
1838
- let obj2 = klass
1839
- .extend({
1840
- items: computed('sibling.sortedItems.[]', function() {
1841
- return this.get('sibling.sortedItems');
1842
- }),
1843
- asdf: observer('sibling.sortedItems.[]', function() {
1844
- this.get('sibling.sortedItems');
1845
- }),
1846
- })
1847
- .create({
1848
- sibling: obj,
1849
- });
1850
-
1851
- /*
1852
- ┌───────────┐ ┌────────────┐
1853
- │sortedProps│ │sortedProps2│
1854
- └───────────┘ └────────────┘
1855
- ▲ ▲
1856
- │ ╔═══════════╗ │
1857
- │─ ─ ─ ─ ─ ─ ─ ▶║ CP (sort) ║◀─ ─ ─ ─ ─ ─ ─ ┤
1858
- │ ╚═══════════╝ │
1859
- │ │
1860
- ┌───────────┐ ┏━━━━━━━━━━━┓ ┏━━━━━━━━━━━━┓
1861
- │ │ ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┃ ┃ ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┃ ┃
1862
- │ items │◀── items.@each.count │◀──┃sortedItems┃◀─── items.@each.count │◀───┃sortedItems2┃
1863
- │ │ └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┃ ┃ └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┃ ┃
1864
- └───────────┘ ┗━━━━━━━━━━━┛ ┗━━━━━━━━━━━━┛
1865
- */
1866
-
1867
- assert.deepEqual(
1868
- obj.get('sortedItems').mapBy('name'),
1869
- ['A', 'B', 'C', 'D'],
1870
- 'obj.sortedItems.name should be sorted alpha'
1871
- );
1872
- assert.deepEqual(
1873
- obj2.get('sortedItems').mapBy('name'),
1874
- ['A', 'B', 'C', 'D'],
1875
- 'obj2.sortedItems.name should be sorted alpha'
1876
- );
1877
-
1878
- set(obj.get('items')[1], 'count', 5);
1879
- set(obj.get('items')[2], 'count', 6);
1880
-
1881
- assert.deepEqual(
1882
- obj.get('sortedItems').mapBy('name'),
1883
- ['A', 'D', 'B', 'C'],
1884
- 'obj.sortedItems.name should now have changed'
1885
- );
1886
- assert.deepEqual(
1887
- obj2.get('sortedItems').mapBy('name'),
1888
- ['A', 'D', 'B', 'C'],
1889
- 'obj2.sortedItems.name should still mirror sortedItems2'
1890
- );
1891
-
1892
- obj.set('sortProps', ['thing']);
1893
- obj2.set('sortProps', ['id']);
1894
-
1895
- assert.deepEqual(
1896
- obj2.get('sortedItems').mapBy('name'),
1897
- ['A', 'B', 'C', 'D'],
1898
- 'we now sort obj2 by id, so we expect a b c d'
1899
- );
1900
- assert.deepEqual(
1901
- obj.get('sortedItems').mapBy('name'),
1902
- ['D', 'C', 'B', 'A'],
1903
- 'we now sort obj by thing'
1904
- );
1905
- }
1906
- }
1907
- );
1908
-
1909
- moduleFor(
1910
- 'max',
1911
- class extends AbstractTestCase {
1912
- beforeEach() {
1913
- obj = EmberObject.extend({
1914
- max: max('items'),
1915
- }).create({
1916
- items: emberA([1, 2, 3]),
1917
- });
1918
- }
1919
-
1920
- afterEach() {
1921
- run(obj, 'destroy');
1922
- }
1923
-
1924
- ['@test max is readOnly'](assert) {
1925
- assert.throws(function() {
1926
- obj.set('max', 1);
1927
- }, /Cannot set read-only property "max" on object:/);
1928
- }
1929
-
1930
- ['@test max tracks the max number as objects are added'](assert) {
1931
- assert.equal(obj.get('max'), 3, 'precond - max is initially correct');
1932
-
1933
- let items = obj.get('items');
1934
-
1935
- items.pushObject(5);
1936
-
1937
- assert.equal(obj.get('max'), 5, 'max updates when a larger number is added');
1938
-
1939
- items.pushObject(2);
1940
-
1941
- assert.equal(obj.get('max'), 5, 'max does not update when a smaller number is added');
1942
- }
1943
-
1944
- ['@test max recomputes when the current max is removed'](assert) {
1945
- assert.equal(obj.get('max'), 3, 'precond - max is initially correct');
1946
-
1947
- obj.get('items').removeObject(2);
1948
-
1949
- assert.equal(obj.get('max'), 3, 'max is unchanged when a non-max item is removed');
1950
-
1951
- obj.get('items').removeObject(3);
1952
-
1953
- assert.equal(obj.get('max'), 1, 'max is recomputed when the current max is removed');
1954
- }
1955
- }
1956
- );
1957
-
1958
- moduleFor(
1959
- 'min',
1960
- class extends AbstractTestCase {
1961
- beforeEach() {
1962
- obj = EmberObject.extend({
1963
- min: min('items'),
1964
- }).create({
1965
- items: emberA([1, 2, 3]),
1966
- });
1967
- }
1968
-
1969
- afterEach() {
1970
- run(obj, 'destroy');
1971
- }
1972
-
1973
- ['@test min is readOnly'](assert) {
1974
- assert.throws(function() {
1975
- obj.set('min', 1);
1976
- }, /Cannot set read-only property "min" on object:/);
1977
- }
1978
-
1979
- ['@test min tracks the min number as objects are added'](assert) {
1980
- assert.equal(obj.get('min'), 1, 'precond - min is initially correct');
1981
-
1982
- obj.get('items').pushObject(-2);
1983
-
1984
- assert.equal(obj.get('min'), -2, 'min updates when a smaller number is added');
1985
-
1986
- obj.get('items').pushObject(2);
1987
-
1988
- assert.equal(obj.get('min'), -2, 'min does not update when a larger number is added');
1989
- }
1990
-
1991
- ['@test min recomputes when the current min is removed'](assert) {
1992
- let items = obj.get('items');
1993
-
1994
- assert.equal(obj.get('min'), 1, 'precond - min is initially correct');
1995
-
1996
- items.removeObject(2);
1997
-
1998
- assert.equal(obj.get('min'), 1, 'min is unchanged when a non-min item is removed');
1999
-
2000
- items.removeObject(1);
2001
-
2002
- assert.equal(obj.get('min'), 3, 'min is recomputed when the current min is removed');
2003
- }
2004
- }
2005
- );
2006
-
2007
- moduleFor(
2008
- 'Ember.arrayComputed - mixed sugar',
2009
- class extends AbstractTestCase {
2010
- beforeEach() {
2011
- obj = EmberObject.extend({
2012
- lannisters: filterBy('items', 'lname', 'Lannister'),
2013
- lannisterSorting: emberA(['fname']),
2014
- sortedLannisters: sort('lannisters', 'lannisterSorting'),
2015
-
2016
- starks: filterBy('items', 'lname', 'Stark'),
2017
- starkAges: mapBy('starks', 'age'),
2018
- oldestStarkAge: max('starkAges'),
2019
- }).create({
2020
- items: emberA([
2021
- { fname: 'Jaime', lname: 'Lannister', age: 34 },
2022
- { fname: 'Cersei', lname: 'Lannister', age: 34 },
2023
- { fname: 'Robb', lname: 'Stark', age: 16 },
2024
- { fname: 'Bran', lname: 'Stark', age: 8 },
2025
- ]),
2026
- });
2027
- }
2028
-
2029
- afterEach() {
2030
- run(obj, 'destroy');
2031
- }
2032
-
2033
- ['@test filtering and sorting can be combined'](assert) {
2034
- let items = obj.get('items');
2035
-
2036
- assert.deepEqual(
2037
- obj.get('sortedLannisters').mapBy('fname'),
2038
- ['Cersei', 'Jaime'],
2039
- 'precond - array is initially filtered and sorted'
2040
- );
2041
-
2042
- items.pushObject({ fname: 'Tywin', lname: 'Lannister' });
2043
- items.pushObject({ fname: 'Lyanna', lname: 'Stark' });
2044
- items.pushObject({ fname: 'Gerion', lname: 'Lannister' });
2045
-
2046
- assert.deepEqual(
2047
- obj.get('sortedLannisters').mapBy('fname'),
2048
- ['Cersei', 'Gerion', 'Jaime', 'Tywin'],
2049
- 'updates propagate to array'
2050
- );
2051
- }
2052
-
2053
- ['@test filtering, sorting and reduce (max) can be combined'](assert) {
2054
- let items = obj.get('items');
2055
-
2056
- assert.equal(16, obj.get('oldestStarkAge'), 'precond - end of chain is initially correct');
2057
-
2058
- items.pushObject({ fname: 'Rickon', lname: 'Stark', age: 5 });
2059
-
2060
- assert.equal(16, obj.get('oldestStarkAge'), 'chain is updated correctly');
2061
-
2062
- items.pushObject({ fname: 'Eddard', lname: 'Stark', age: 35 });
2063
-
2064
- assert.equal(35, obj.get('oldestStarkAge'), 'chain is updated correctly');
2065
- }
2066
- }
2067
- );
2068
-
2069
- function todo(name, priority) {
2070
- return EmberObject.create({ name: name, priority: priority });
2071
- }
2072
-
2073
- function priorityComparator(todoA, todoB) {
2074
- let pa = parseInt(get(todoA, 'priority'), 10);
2075
- let pb = parseInt(get(todoB, 'priority'), 10);
2076
-
2077
- return pa - pb;
2078
- }
2079
-
2080
- function evenPriorities(todo) {
2081
- let p = parseInt(get(todo, 'priority'), 10);
2082
-
2083
- return p % 2 === 0;
2084
- }
2085
-
2086
- moduleFor(
2087
- 'Ember.arrayComputed - chains',
2088
- class extends AbstractTestCase {
2089
- beforeEach() {
2090
- obj = EmberObject.extend({
2091
- sorted: sort('todos.@each.priority', priorityComparator),
2092
- filtered: filter('sorted.@each.priority', evenPriorities),
2093
- }).create({
2094
- todos: emberA([todo('E', 4), todo('D', 3), todo('C', 2), todo('B', 1), todo('A', 0)]),
2095
- });
2096
- }
2097
-
2098
- afterEach() {
2099
- run(obj, 'destroy');
2100
- }
2101
-
2102
- ['@test it can filter and sort when both depend on the same item property'](assert) {
2103
- assert.deepEqual(
2104
- obj.get('todos').mapBy('name'),
2105
- ['E', 'D', 'C', 'B', 'A'],
2106
- 'precond - todos initially correct'
2107
- );
2108
- assert.deepEqual(
2109
- obj.get('sorted').mapBy('name'),
2110
- ['A', 'B', 'C', 'D', 'E'],
2111
- 'precond - sorted initially correct'
2112
- );
2113
- assert.deepEqual(
2114
- obj.get('filtered').mapBy('name'),
2115
- ['A', 'C', 'E'],
2116
- 'precond - filtered initially correct'
2117
- );
2118
-
2119
- set(obj.get('todos')[1], 'priority', 6);
2120
-
2121
- assert.deepEqual(
2122
- obj.get('todos').mapBy('name'),
2123
- ['E', 'D', 'C', 'B', 'A'],
2124
- 'precond - todos remain correct'
2125
- );
2126
- assert.deepEqual(
2127
- obj.get('sorted').mapBy('name'),
2128
- ['A', 'B', 'C', 'E', 'D'],
2129
- 'precond - sorted updated correctly'
2130
- );
2131
- assert.deepEqual(
2132
- obj.get('filtered').mapBy('name'),
2133
- ['A', 'C', 'E', 'D'],
2134
- 'filtered updated correctly'
2135
- );
2136
- }
2137
- }
2138
- );
2139
-
2140
- let userFnCalls;
2141
- moduleFor(
2142
- 'Chaining array and reduced CPs',
2143
- class extends AbstractTestCase {
2144
- beforeEach() {
2145
- userFnCalls = 0;
2146
- obj = EmberObject.extend({
2147
- mapped: mapBy('array', 'v'),
2148
- max: max('mapped'),
2149
- maxDidChange: observer('max', () => userFnCalls++),
2150
- }).create({
2151
- array: emberA([{ v: 1 }, { v: 3 }, { v: 2 }, { v: 1 }]),
2152
- });
2153
- }
2154
-
2155
- afterEach() {
2156
- run(obj, 'destroy');
2157
- }
2158
-
2159
- ['@test it computes interdependent array computed properties'](assert) {
2160
- assert.equal(obj.get('max'), 3, 'sanity - it properly computes the maximum value');
2161
-
2162
- let calls = 0;
2163
-
2164
- addObserver(obj, 'max', () => calls++);
2165
-
2166
- obj.get('array').pushObject({ v: 5 });
2167
-
2168
- assert.equal(obj.get('max'), 5, 'maximum value is updated correctly');
2169
- assert.equal(userFnCalls, 1, 'object defined observers fire');
2170
- assert.equal(calls, 1, 'runtime created observers fire');
2171
- }
2172
- }
2173
- );
2174
-
2175
- moduleFor(
2176
- 'sum',
2177
- class extends AbstractTestCase {
2178
- beforeEach() {
2179
- obj = EmberObject.extend({
2180
- total: sum('array'),
2181
- }).create({
2182
- array: emberA([1, 2, 3]),
2183
- });
2184
- }
2185
-
2186
- afterEach() {
2187
- run(obj, 'destroy');
2188
- }
2189
-
2190
- ['@test sum is readOnly'](assert) {
2191
- assert.throws(function() {
2192
- obj.set('total', 1);
2193
- }, /Cannot set read-only property "total" on object:/);
2194
- }
2195
-
2196
- ['@test sums the values in the dependentKey'](assert) {
2197
- assert.equal(obj.get('total'), 6, 'sums the values');
2198
- }
2199
-
2200
- ['@test if the dependentKey is neither an array nor object, it will return `0`'](assert) {
2201
- set(obj, 'array', null);
2202
- assert.equal(get(obj, 'total'), 0, 'returns 0');
2203
-
2204
- set(obj, 'array', undefined);
2205
- assert.equal(get(obj, 'total'), 0, 'returns 0');
2206
-
2207
- set(obj, 'array', 'not an array');
2208
- assert.equal(get(obj, 'total'), 0, 'returns 0');
2209
- }
2210
-
2211
- ['@test updates when array is modified'](assert) {
2212
- obj.get('array').pushObject(1);
2213
-
2214
- assert.equal(obj.get('total'), 7, 'recomputed when elements are added');
2215
-
2216
- obj.get('array').popObject();
2217
-
2218
- assert.equal(obj.get('total'), 6, 'recomputes when elements are removed');
2219
- }
2220
- }
2221
- );
2222
-
2223
- moduleFor(
2224
- 'collect',
2225
- class extends AbstractTestCase {
2226
- ['@test works'](assert) {
2227
- let obj = { one: 'foo', two: 'bar', three: null };
2228
- defineProperty(obj, 'all', collect('one', 'two', 'three', 'four'));
2229
-
2230
- assert.deepEqual(get(obj, 'all'), ['foo', 'bar', null, null], 'have all of them');
2231
-
2232
- set(obj, 'four', true);
2233
-
2234
- assert.deepEqual(get(obj, 'all'), ['foo', 'bar', null, true], 'have all of them');
2235
-
2236
- let a = [];
2237
- set(obj, 'one', 0);
2238
- set(obj, 'three', a);
2239
-
2240
- assert.deepEqual(get(obj, 'all'), [0, 'bar', a, true], 'have all of them');
2241
- }
2242
- }
2243
- );