discourse-ember-source 3.5.1.1 → 3.5.1.2

Sign up to get free protection for your applications and to get access to all the features.
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
- );