discourse-ember-source 3.5.1.1 → 3.5.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/ember/version.rb +1 -1
- metadata +2 -740
- data/.gitignore +0 -9
- data/.travis.yml +0 -5
- data/Gemfile +0 -6
- data/LICENSE.txt +0 -21
- data/README +0 -18
- data/README.md +0 -39
- data/Rakefile +0 -27
- data/bin/console +0 -14
- data/bin/setup +0 -8
- data/discourse-ember-source-3.5.1.0.gem +0 -0
- data/dist/ember-all.debug.map +0 -1
- data/dist/ember-template-compiler.map +0 -1
- data/dist/ember-testing.map +0 -1
- data/dist/ember-tests.map +0 -1
- data/dist/ember-tests.prod.map +0 -1
- data/dist/ember.debug.map +0 -1
- data/dist/ember.min.map +0 -1
- data/dist/ember.prod.map +0 -1
- data/dist/es/@ember/application/globals-resolver.js +0 -425
- data/dist/es/@ember/application/index.js +0 -3
- data/dist/es/@ember/application/instance.js +0 -513
- data/dist/es/@ember/application/lib/application.js +0 -1139
- data/dist/es/@ember/application/lib/lazy_load.js +0 -69
- data/dist/es/@ember/application/lib/validate-type.js +0 -24
- data/dist/es/@ember/application/tests/application_instance_test.js +0 -230
- data/dist/es/@ember/application/tests/application_test.js +0 -470
- data/dist/es/@ember/application/tests/bootstrap-test.js +0 -28
- data/dist/es/@ember/application/tests/dependency_injection/custom_resolver_test.js +0 -32
- data/dist/es/@ember/application/tests/dependency_injection/default_resolver_test.js +0 -363
- data/dist/es/@ember/application/tests/dependency_injection/normalization_test.js +0 -70
- data/dist/es/@ember/application/tests/dependency_injection/to_string_test.js +0 -71
- data/dist/es/@ember/application/tests/dependency_injection_test.js +0 -93
- data/dist/es/@ember/application/tests/initializers_test.js +0 -391
- data/dist/es/@ember/application/tests/instance_initializers_test.js +0 -395
- data/dist/es/@ember/application/tests/lazy_load_test.js +0 -79
- data/dist/es/@ember/application/tests/logging_test.js +0 -179
- data/dist/es/@ember/application/tests/readiness_test.js +0 -138
- data/dist/es/@ember/application/tests/reset_test.js +0 -185
- data/dist/es/@ember/application/tests/visit_test.js +0 -783
- data/dist/es/@ember/canary-features/index.js +0 -76
- data/dist/es/@ember/controller/index.js +0 -50
- data/dist/es/@ember/controller/lib/controller_mixin.js +0 -42
- data/dist/es/@ember/controller/tests/controller_test.js +0 -209
- data/dist/es/@ember/debug/index.js +0 -264
- data/dist/es/@ember/debug/lib/deprecate.js +0 -198
- data/dist/es/@ember/debug/lib/handlers.js +0 -22
- data/dist/es/@ember/debug/lib/testing.js +0 -7
- data/dist/es/@ember/debug/lib/warn.js +0 -107
- data/dist/es/@ember/debug/tests/handlers-test.js +0 -144
- data/dist/es/@ember/debug/tests/main_test.js +0 -444
- data/dist/es/@ember/deprecated-features/index.js +0 -21
- data/dist/es/@ember/engine/index.js +0 -532
- data/dist/es/@ember/engine/instance.js +0 -228
- data/dist/es/@ember/engine/lib/engine-parent.js +0 -32
- data/dist/es/@ember/engine/tests/engine_initializers_test.js +0 -366
- data/dist/es/@ember/engine/tests/engine_instance_initializers_test.js +0 -409
- data/dist/es/@ember/engine/tests/engine_instance_test.js +0 -115
- data/dist/es/@ember/engine/tests/engine_parent_test.js +0 -20
- data/dist/es/@ember/engine/tests/engine_test.js +0 -121
- data/dist/es/@ember/error/index.js +0 -36
- data/dist/es/@ember/error/tests/index_test.js +0 -19
- data/dist/es/@ember/instrumentation/index.js +0 -240
- data/dist/es/@ember/instrumentation/tests/index-test.js +0 -214
- data/dist/es/@ember/map/index.js +0 -218
- data/dist/es/@ember/map/lib/ordered-set.js +0 -186
- data/dist/es/@ember/map/lib/utils.js +0 -29
- data/dist/es/@ember/map/tests/map_test.js +0 -578
- data/dist/es/@ember/map/with-default.js +0 -87
- data/dist/es/@ember/object/computed.js +0 -35
- data/dist/es/@ember/object/lib/computed/computed_macros.js +0 -742
- data/dist/es/@ember/object/lib/computed/reduce_computed_macros.js +0 -894
- data/dist/es/@ember/object/tests/computed/computed_macros_test.js +0 -533
- data/dist/es/@ember/object/tests/computed/reduce_computed_macros_test.js +0 -2243
- data/dist/es/@ember/polyfills/index.js +0 -3
- data/dist/es/@ember/polyfills/lib/assign.js +0 -43
- data/dist/es/@ember/polyfills/lib/merge.js +0 -35
- data/dist/es/@ember/polyfills/tests/assign_test.js +0 -64
- data/dist/es/@ember/runloop/index.js +0 -749
- data/dist/es/@ember/runloop/tests/debounce_test.js +0 -87
- data/dist/es/@ember/runloop/tests/later_test.js +0 -264
- data/dist/es/@ember/runloop/tests/next_test.js +0 -56
- data/dist/es/@ember/runloop/tests/once_test.js +0 -62
- data/dist/es/@ember/runloop/tests/onerror_test.js +0 -59
- data/dist/es/@ember/runloop/tests/run_bind_test.js +0 -59
- data/dist/es/@ember/runloop/tests/run_test.js +0 -28
- data/dist/es/@ember/runloop/tests/schedule_test.js +0 -86
- data/dist/es/@ember/runloop/tests/sync_test.js +0 -32
- data/dist/es/@ember/runloop/tests/unwind_test.js +0 -54
- data/dist/es/@ember/service/index.js +0 -57
- data/dist/es/@ember/string/index.js +0 -362
- data/dist/es/@ember/string/lib/string_registry.js +0 -13
- data/dist/es/@ember/string/tests/camelize_test.js +0 -53
- data/dist/es/@ember/string/tests/capitalize_test.js +0 -58
- data/dist/es/@ember/string/tests/classify_test.js +0 -79
- data/dist/es/@ember/string/tests/dasherize_test.js +0 -57
- data/dist/es/@ember/string/tests/decamelize_test.js +0 -51
- data/dist/es/@ember/string/tests/loc_test.js +0 -76
- data/dist/es/@ember/string/tests/underscore_test.js +0 -51
- data/dist/es/@ember/string/tests/w_test.js +0 -39
- data/dist/es/@glimmer/compiler.js +0 -1226
- data/dist/es/@glimmer/encoder.js +0 -39
- data/dist/es/@glimmer/low-level.js +0 -82
- data/dist/es/@glimmer/node.js +0 -112
- data/dist/es/@glimmer/opcode-compiler.js +0 -1999
- data/dist/es/@glimmer/program.js +0 -405
- data/dist/es/@glimmer/reference.js +0 -478
- data/dist/es/@glimmer/runtime.js +0 -4086
- data/dist/es/@glimmer/syntax.js +0 -1424
- data/dist/es/@glimmer/util.js +0 -189
- data/dist/es/@glimmer/vm.js +0 -27
- data/dist/es/@glimmer/wire-format.js +0 -56
- data/dist/es/backburner.js +0 -936
- data/dist/es/container/index.js +0 -8
- data/dist/es/container/lib/container.js +0 -437
- data/dist/es/container/lib/registry.js +0 -646
- data/dist/es/container/tests/container_test.js +0 -872
- data/dist/es/container/tests/owner_test.js +0 -20
- data/dist/es/container/tests/registry_test.js +0 -943
- data/dist/es/dag-map.js +0 -209
- data/dist/es/ember-browser-environment/index.js +0 -8
- data/dist/es/ember-browser-environment/lib/has-dom.js +0 -19
- data/dist/es/ember-console/index.js +0 -177
- data/dist/es/ember-environment/index.js +0 -3
- data/dist/es/ember-environment/lib/context.js +0 -20
- data/dist/es/ember-environment/lib/env.js +0 -185
- data/dist/es/ember-environment/lib/global.js +0 -14
- data/dist/es/ember-error-handling/index.js +0 -22
- data/dist/es/ember-extension-support/index.js +0 -2
- data/dist/es/ember-extension-support/lib/container_debug_adapter.js +0 -99
- data/dist/es/ember-extension-support/lib/data_adapter.js +0 -493
- data/dist/es/ember-extension-support/tests/container_debug_adapter_test.js +0 -73
- data/dist/es/ember-extension-support/tests/data_adapter_test.js +0 -301
- data/dist/es/ember-glimmer/index.js +0 -286
- data/dist/es/ember-glimmer/lib/compile-time-lookup.js +0 -37
- data/dist/es/ember-glimmer/lib/component-managers/abstract.js +0 -49
- data/dist/es/ember-glimmer/lib/component-managers/curly.js +0 -395
- data/dist/es/ember-glimmer/lib/component-managers/custom.js +0 -145
- data/dist/es/ember-glimmer/lib/component-managers/definition-state.js +0 -1
- data/dist/es/ember-glimmer/lib/component-managers/mount.js +0 -103
- data/dist/es/ember-glimmer/lib/component-managers/outlet.js +0 -114
- data/dist/es/ember-glimmer/lib/component-managers/render.js +0 -112
- data/dist/es/ember-glimmer/lib/component-managers/root.js +0 -74
- data/dist/es/ember-glimmer/lib/component-managers/template-only.js +0 -46
- data/dist/es/ember-glimmer/lib/component.js +0 -633
- data/dist/es/ember-glimmer/lib/components/checkbox.js +0 -57
- data/dist/es/ember-glimmer/lib/components/link-to.js +0 -777
- data/dist/es/ember-glimmer/lib/components/text_area.js +0 -236
- data/dist/es/ember-glimmer/lib/components/text_field.js +0 -145
- data/dist/es/ember-glimmer/lib/dom.js +0 -3
- data/dist/es/ember-glimmer/lib/environment.js +0 -102
- data/dist/es/ember-glimmer/lib/helper.js +0 -128
- data/dist/es/ember-glimmer/lib/helpers/-class.js +0 -23
- data/dist/es/ember-glimmer/lib/helpers/-html-safe.js +0 -9
- data/dist/es/ember-glimmer/lib/helpers/-input-type.js +0 -11
- data/dist/es/ember-glimmer/lib/helpers/-normalize-class.js +0 -22
- data/dist/es/ember-glimmer/lib/helpers/action.js +0 -360
- data/dist/es/ember-glimmer/lib/helpers/component.js +0 -135
- data/dist/es/ember-glimmer/lib/helpers/concat.js +0 -38
- data/dist/es/ember-glimmer/lib/helpers/each-in.js +0 -126
- data/dist/es/ember-glimmer/lib/helpers/get.js +0 -100
- data/dist/es/ember-glimmer/lib/helpers/hash.js +0 -44
- data/dist/es/ember-glimmer/lib/helpers/if-unless.js +0 -142
- data/dist/es/ember-glimmer/lib/helpers/loc.js +0 -40
- data/dist/es/ember-glimmer/lib/helpers/log.js +0 -25
- data/dist/es/ember-glimmer/lib/helpers/mut.js +0 -107
- data/dist/es/ember-glimmer/lib/helpers/query-param.js +0 -31
- data/dist/es/ember-glimmer/lib/helpers/readonly.js +0 -104
- data/dist/es/ember-glimmer/lib/helpers/unbound.js +0 -36
- data/dist/es/ember-glimmer/lib/modifiers/action.js +0 -185
- data/dist/es/ember-glimmer/lib/protocol-for-url.js +0 -48
- data/dist/es/ember-glimmer/lib/renderer.js +0 -371
- data/dist/es/ember-glimmer/lib/resolver.js +0 -290
- data/dist/es/ember-glimmer/lib/setup-registry.js +0 -77
- data/dist/es/ember-glimmer/lib/syntax.js +0 -73
- data/dist/es/ember-glimmer/lib/syntax/-text-area.js +0 -8
- data/dist/es/ember-glimmer/lib/syntax/input.js +0 -173
- data/dist/es/ember-glimmer/lib/syntax/let.js +0 -50
- data/dist/es/ember-glimmer/lib/syntax/mount.js +0 -101
- data/dist/es/ember-glimmer/lib/syntax/outlet.js +0 -120
- data/dist/es/ember-glimmer/lib/syntax/render.js +0 -140
- data/dist/es/ember-glimmer/lib/syntax/utils.js +0 -6
- data/dist/es/ember-glimmer/lib/template-compiler.js +0 -7
- data/dist/es/ember-glimmer/lib/template.js +0 -16
- data/dist/es/ember-glimmer/lib/template_registry.js +0 -18
- data/dist/es/ember-glimmer/lib/templates/component.js +0 -2
- data/dist/es/ember-glimmer/lib/templates/empty.js +0 -2
- data/dist/es/ember-glimmer/lib/templates/link-to.js +0 -2
- data/dist/es/ember-glimmer/lib/templates/outlet.js +0 -2
- data/dist/es/ember-glimmer/lib/templates/root.js +0 -2
- data/dist/es/ember-glimmer/lib/utils/bindings.js +0 -180
- data/dist/es/ember-glimmer/lib/utils/curly-component-state-bucket.js +0 -36
- data/dist/es/ember-glimmer/lib/utils/custom-component-manager.js +0 -20
- data/dist/es/ember-glimmer/lib/utils/debug-stack.js +0 -57
- data/dist/es/ember-glimmer/lib/utils/iterable.js +0 -358
- data/dist/es/ember-glimmer/lib/utils/outlet.js +0 -89
- data/dist/es/ember-glimmer/lib/utils/process-args.js +0 -40
- data/dist/es/ember-glimmer/lib/utils/references.js +0 -325
- data/dist/es/ember-glimmer/lib/utils/serialization-first-node-helpers.js +0 -1
- data/dist/es/ember-glimmer/lib/utils/string.js +0 -98
- data/dist/es/ember-glimmer/lib/utils/to-bool.js +0 -9
- data/dist/es/ember-glimmer/lib/views/outlet.js +0 -71
- data/dist/es/ember-glimmer/tests/integration/application/actions-test.js +0 -107
- data/dist/es/ember-glimmer/tests/integration/application/engine-test.js +0 -912
- data/dist/es/ember-glimmer/tests/integration/application/rendering-test.js +0 -530
- data/dist/es/ember-glimmer/tests/integration/components/angle-bracket-invocation-test.js +0 -852
- data/dist/es/ember-glimmer/tests/integration/components/append-test.js +0 -742
- data/dist/es/ember-glimmer/tests/integration/components/attribute-bindings-test.js +0 -999
- data/dist/es/ember-glimmer/tests/integration/components/attrs-lookup-test.js +0 -268
- data/dist/es/ember-glimmer/tests/integration/components/class-bindings-test.js +0 -849
- data/dist/es/ember-glimmer/tests/integration/components/contextual-components-test.js +0 -1493
- data/dist/es/ember-glimmer/tests/integration/components/curly-components-test.js +0 -3705
- data/dist/es/ember-glimmer/tests/integration/components/destroy-test.js +0 -33
- data/dist/es/ember-glimmer/tests/integration/components/dynamic-components-test.js +0 -896
- data/dist/es/ember-glimmer/tests/integration/components/error-handling-test.js +0 -164
- data/dist/es/ember-glimmer/tests/integration/components/fragment-components-test.js +0 -285
- data/dist/es/ember-glimmer/tests/integration/components/instrumentation-compile-test.js +0 -108
- data/dist/es/ember-glimmer/tests/integration/components/instrumentation-test.js +0 -157
- data/dist/es/ember-glimmer/tests/integration/components/life-cycle-test.js +0 -1653
- data/dist/es/ember-glimmer/tests/integration/components/link-to-test.js +0 -218
- data/dist/es/ember-glimmer/tests/integration/components/local-lookup-test.js +0 -414
- data/dist/es/ember-glimmer/tests/integration/components/namespaced-lookup-test.js +0 -185
- data/dist/es/ember-glimmer/tests/integration/components/render-to-element-test.js +0 -0
- data/dist/es/ember-glimmer/tests/integration/components/target-action-test.js +0 -779
- data/dist/es/ember-glimmer/tests/integration/components/template-only-components-test.js +0 -225
- data/dist/es/ember-glimmer/tests/integration/components/to-string-test.js +0 -27
- data/dist/es/ember-glimmer/tests/integration/components/utils-test.js +0 -401
- data/dist/es/ember-glimmer/tests/integration/components/web-component-fallback-test.js +0 -35
- data/dist/es/ember-glimmer/tests/integration/components/will-destroy-element-hook-test.js +0 -40
- data/dist/es/ember-glimmer/tests/integration/content-test.js +0 -1759
- data/dist/es/ember-glimmer/tests/integration/custom-component-manager-test.js +0 -508
- data/dist/es/ember-glimmer/tests/integration/event-dispatcher-test.js +0 -607
- data/dist/es/ember-glimmer/tests/integration/helpers/-class-test.js +0 -76
- data/dist/es/ember-glimmer/tests/integration/helpers/closure-action-test.js +0 -1240
- data/dist/es/ember-glimmer/tests/integration/helpers/concat-test.js +0 -106
- data/dist/es/ember-glimmer/tests/integration/helpers/custom-helper-test.js +0 -672
- data/dist/es/ember-glimmer/tests/integration/helpers/element-action-test.js +0 -1595
- data/dist/es/ember-glimmer/tests/integration/helpers/get-test.js +0 -618
- data/dist/es/ember-glimmer/tests/integration/helpers/hash-test.js +0 -188
- data/dist/es/ember-glimmer/tests/integration/helpers/if-unless-test.js +0 -149
- data/dist/es/ember-glimmer/tests/integration/helpers/input-test.js +0 -827
- data/dist/es/ember-glimmer/tests/integration/helpers/loc-test.js +0 -103
- data/dist/es/ember-glimmer/tests/integration/helpers/log-test.js +0 -61
- data/dist/es/ember-glimmer/tests/integration/helpers/mut-test.js +0 -580
- data/dist/es/ember-glimmer/tests/integration/helpers/partial-test.js +0 -386
- data/dist/es/ember-glimmer/tests/integration/helpers/readonly-test.js +0 -293
- data/dist/es/ember-glimmer/tests/integration/helpers/render-test.js +0 -522
- data/dist/es/ember-glimmer/tests/integration/helpers/text-area-test.js +0 -166
- data/dist/es/ember-glimmer/tests/integration/helpers/unbound-test.js +0 -650
- data/dist/es/ember-glimmer/tests/integration/helpers/yield-test.js +0 -275
- data/dist/es/ember-glimmer/tests/integration/input-test.js +0 -242
- data/dist/es/ember-glimmer/tests/integration/mount-test.js +0 -424
- data/dist/es/ember-glimmer/tests/integration/outlet-test.js +0 -318
- data/dist/es/ember-glimmer/tests/integration/refinements-test.js +0 -74
- data/dist/es/ember-glimmer/tests/integration/render-settled-test.js +0 -72
- data/dist/es/ember-glimmer/tests/integration/svg-test.js +0 -158
- data/dist/es/ember-glimmer/tests/integration/syntax/each-in-test.js +0 -697
- data/dist/es/ember-glimmer/tests/integration/syntax/each-test.js +0 -1251
- data/dist/es/ember-glimmer/tests/integration/syntax/experimental-syntax-test.js +0 -42
- data/dist/es/ember-glimmer/tests/integration/syntax/if-unless-test.js +0 -108
- data/dist/es/ember-glimmer/tests/integration/syntax/in-element-test.js +0 -119
- data/dist/es/ember-glimmer/tests/integration/syntax/let-test.js +0 -390
- data/dist/es/ember-glimmer/tests/integration/syntax/with-dynamic-var-test.js +0 -36
- data/dist/es/ember-glimmer/tests/integration/syntax/with-test.js +0 -422
- data/dist/es/ember-glimmer/tests/unit/outlet-test.js +0 -48
- data/dist/es/ember-glimmer/tests/unit/runtime-resolver-cache-test.js +0 -263
- data/dist/es/ember-glimmer/tests/unit/template-factory-test.js +0 -67
- data/dist/es/ember-glimmer/tests/unit/utils/debug-stack-test.js +0 -38
- data/dist/es/ember-glimmer/tests/utils/abstract-test-case.js +0 -1
- data/dist/es/ember-glimmer/tests/utils/helpers.js +0 -15
- data/dist/es/ember-glimmer/tests/utils/shared-conditional-tests.js +0 -965
- data/dist/es/ember-glimmer/tests/utils/string-test.js +0 -47
- data/dist/es/ember-glimmer/tests/utils/test-case.js +0 -6
- data/dist/es/ember-glimmer/tests/utils/test-helpers.js +0 -1
- data/dist/es/ember-meta/index.js +0 -1
- data/dist/es/ember-meta/lib/meta.js +0 -623
- data/dist/es/ember-meta/tests/meta_test.js +0 -169
- data/dist/es/ember-metal/index.js +0 -33
- data/dist/es/ember-metal/lib/alias.js +0 -80
- data/dist/es/ember-metal/lib/array.js +0 -55
- data/dist/es/ember-metal/lib/array_events.js +0 -65
- data/dist/es/ember-metal/lib/chains.js +0 -315
- data/dist/es/ember-metal/lib/change_event.js +0 -4
- data/dist/es/ember-metal/lib/computed.js +0 -526
- data/dist/es/ember-metal/lib/computed_cache.js +0 -58
- data/dist/es/ember-metal/lib/dependent_keys.js +0 -34
- data/dist/es/ember-metal/lib/deprecate_property.js +0 -34
- data/dist/es/ember-metal/lib/descriptor.js +0 -28
- data/dist/es/ember-metal/lib/each_proxy.js +0 -106
- data/dist/es/ember-metal/lib/each_proxy_events.js +0 -13
- data/dist/es/ember-metal/lib/events.js +0 -174
- data/dist/es/ember-metal/lib/expand_properties.js +0 -64
- data/dist/es/ember-metal/lib/get_properties.js +0 -45
- data/dist/es/ember-metal/lib/injected_property.js +0 -53
- data/dist/es/ember-metal/lib/is_blank.js +0 -34
- data/dist/es/ember-metal/lib/is_empty.js +0 -63
- data/dist/es/ember-metal/lib/is_none.js +0 -27
- data/dist/es/ember-metal/lib/is_present.js +0 -38
- data/dist/es/ember-metal/lib/libraries.js +0 -80
- data/dist/es/ember-metal/lib/mixin.js +0 -646
- data/dist/es/ember-metal/lib/namespace_search.js +0 -166
- data/dist/es/ember-metal/lib/observer.js +0 -34
- data/dist/es/ember-metal/lib/observer_set.js +0 -48
- data/dist/es/ember-metal/lib/path_cache.js +0 -5
- data/dist/es/ember-metal/lib/properties.js +0 -192
- data/dist/es/ember-metal/lib/property_events.js +0 -198
- data/dist/es/ember-metal/lib/property_get.js +0 -160
- data/dist/es/ember-metal/lib/property_set.js +0 -157
- data/dist/es/ember-metal/lib/set_properties.js +0 -43
- data/dist/es/ember-metal/lib/tags.js +0 -81
- data/dist/es/ember-metal/lib/tracked.js +0 -201
- data/dist/es/ember-metal/lib/transaction.js +0 -137
- data/dist/es/ember-metal/lib/watch_key.js +0 -113
- data/dist/es/ember-metal/lib/watch_path.js +0 -24
- data/dist/es/ember-metal/lib/watching.js +0 -54
- data/dist/es/ember-metal/tests/accessors/get_path_test.js +0 -82
- data/dist/es/ember-metal/tests/accessors/get_properties_test.js +0 -36
- data/dist/es/ember-metal/tests/accessors/get_test.js +0 -335
- data/dist/es/ember-metal/tests/accessors/mandatory_setters_test.js +0 -470
- data/dist/es/ember-metal/tests/accessors/set_path_test.js +0 -97
- data/dist/es/ember-metal/tests/accessors/set_test.js +0 -128
- data/dist/es/ember-metal/tests/alias_test.js +0 -167
- data/dist/es/ember-metal/tests/chains_test.js +0 -210
- data/dist/es/ember-metal/tests/computed_test.js +0 -1040
- data/dist/es/ember-metal/tests/descriptor_test.js +0 -368
- data/dist/es/ember-metal/tests/events_test.js +0 -210
- data/dist/es/ember-metal/tests/expand_properties_test.js +0 -119
- data/dist/es/ember-metal/tests/injected_property_test.js +0 -76
- data/dist/es/ember-metal/tests/is_blank_test.js +0 -29
- data/dist/es/ember-metal/tests/is_empty_test.js +0 -55
- data/dist/es/ember-metal/tests/is_none_test.js +0 -23
- data/dist/es/ember-metal/tests/is_present_test.js +0 -30
- data/dist/es/ember-metal/tests/libraries_test.js +0 -99
- data/dist/es/ember-metal/tests/main_test.js +0 -31
- data/dist/es/ember-metal/tests/mixin/alias_method_test.js +0 -91
- data/dist/es/ember-metal/tests/mixin/apply_test.js +0 -40
- data/dist/es/ember-metal/tests/mixin/computed_test.js +0 -166
- data/dist/es/ember-metal/tests/mixin/concatenated_properties_test.js +0 -117
- data/dist/es/ember-metal/tests/mixin/detect_test.js +0 -40
- data/dist/es/ember-metal/tests/mixin/introspection_test.js +0 -75
- data/dist/es/ember-metal/tests/mixin/merged_properties_test.js +0 -200
- data/dist/es/ember-metal/tests/mixin/method_test.js +0 -252
- data/dist/es/ember-metal/tests/mixin/observer_test.js +0 -202
- data/dist/es/ember-metal/tests/mixin/reopen_test.js +0 -53
- data/dist/es/ember-metal/tests/mixin/without_test.js +0 -22
- data/dist/es/ember-metal/tests/namespace_search_test.js +0 -16
- data/dist/es/ember-metal/tests/observer_test.js +0 -961
- data/dist/es/ember-metal/tests/performance_test.js +0 -81
- data/dist/es/ember-metal/tests/properties_test.js +0 -120
- data/dist/es/ember-metal/tests/property_did_change_hook.js +0 -73
- data/dist/es/ember-metal/tests/set_properties_test.js +0 -49
- data/dist/es/ember-metal/tests/tracked/computed_test.js +0 -67
- data/dist/es/ember-metal/tests/tracked/get_test.js +0 -86
- data/dist/es/ember-metal/tests/tracked/set_test.js +0 -44
- data/dist/es/ember-metal/tests/tracked/support.js +0 -37
- data/dist/es/ember-metal/tests/tracked/validation_test.js +0 -233
- data/dist/es/ember-metal/tests/watching/is_watching_test.js +0 -97
- data/dist/es/ember-metal/tests/watching/unwatch_test.js +0 -109
- data/dist/es/ember-metal/tests/watching/watch_test.js +0 -255
- data/dist/es/ember-owner/index.js +0 -66
- data/dist/es/ember-routing/index.js +0 -21
- data/dist/es/ember-routing/lib/ext/controller.js +0 -222
- data/dist/es/ember-routing/lib/location/api.js +0 -118
- data/dist/es/ember-routing/lib/location/auto_location.js +0 -323
- data/dist/es/ember-routing/lib/location/hash_location.js +0 -171
- data/dist/es/ember-routing/lib/location/history_location.js +0 -298
- data/dist/es/ember-routing/lib/location/none_location.js +0 -122
- data/dist/es/ember-routing/lib/location/util.js +0 -114
- data/dist/es/ember-routing/lib/services/router.js +0 -243
- data/dist/es/ember-routing/lib/services/routing.js +0 -101
- data/dist/es/ember-routing/lib/system/cache.js +0 -40
- data/dist/es/ember-routing/lib/system/controller_for.js +0 -14
- data/dist/es/ember-routing/lib/system/dsl.js +0 -208
- data/dist/es/ember-routing/lib/system/generate_controller.js +0 -54
- data/dist/es/ember-routing/lib/system/query_params.js +0 -6
- data/dist/es/ember-routing/lib/system/route.js +0 -2476
- data/dist/es/ember-routing/lib/system/router.js +0 -1607
- data/dist/es/ember-routing/lib/system/router_state.js +0 -26
- data/dist/es/ember-routing/lib/system/transition.js +0 -153
- data/dist/es/ember-routing/lib/utils.js +0 -230
- data/dist/es/ember-routing/tests/ext/controller_test.js +0 -85
- data/dist/es/ember-routing/tests/location/auto_location_test.js +0 -379
- data/dist/es/ember-routing/tests/location/hash_location_test.js +0 -207
- data/dist/es/ember-routing/tests/location/history_location_test.js +0 -322
- data/dist/es/ember-routing/tests/location/none_location_test.js +0 -88
- data/dist/es/ember-routing/tests/location/util_test.js +0 -159
- data/dist/es/ember-routing/tests/system/cache_test.js +0 -54
- data/dist/es/ember-routing/tests/system/controller_for_test.js +0 -75
- data/dist/es/ember-routing/tests/system/dsl_test.js +0 -413
- data/dist/es/ember-routing/tests/system/route_test.js +0 -587
- data/dist/es/ember-routing/tests/system/router_test.js +0 -287
- data/dist/es/ember-routing/tests/utils_test.js +0 -37
- data/dist/es/ember-runtime/.gitignore +0 -1
- data/dist/es/ember-runtime/README +0 -12
- data/dist/es/ember-runtime/index.js +0 -35
- data/dist/es/ember-runtime/lib/compare.js +0 -149
- data/dist/es/ember-runtime/lib/copy.js +0 -106
- data/dist/es/ember-runtime/lib/ext/function.js +0 -154
- data/dist/es/ember-runtime/lib/ext/rsvp.js +0 -59
- data/dist/es/ember-runtime/lib/is-equal.js +0 -60
- data/dist/es/ember-runtime/lib/mixins/-proxy.js +0 -109
- data/dist/es/ember-runtime/lib/mixins/action_handler.js +0 -222
- data/dist/es/ember-runtime/lib/mixins/array.js +0 -1661
- data/dist/es/ember-runtime/lib/mixins/comparable.js +0 -38
- data/dist/es/ember-runtime/lib/mixins/container_proxy.js +0 -154
- data/dist/es/ember-runtime/lib/mixins/copyable.js +0 -34
- data/dist/es/ember-runtime/lib/mixins/enumerable.js +0 -16
- data/dist/es/ember-runtime/lib/mixins/evented.js +0 -149
- data/dist/es/ember-runtime/lib/mixins/mutable_enumerable.js +0 -18
- data/dist/es/ember-runtime/lib/mixins/observable.js +0 -482
- data/dist/es/ember-runtime/lib/mixins/promise_proxy.js +0 -224
- data/dist/es/ember-runtime/lib/mixins/registry_proxy.js +0 -265
- data/dist/es/ember-runtime/lib/mixins/target_action_support.js +0 -172
- data/dist/es/ember-runtime/lib/system/array_proxy.js +0 -298
- data/dist/es/ember-runtime/lib/system/core_object.js +0 -1037
- data/dist/es/ember-runtime/lib/system/namespace.js +0 -69
- data/dist/es/ember-runtime/lib/system/object.js +0 -73
- data/dist/es/ember-runtime/lib/system/object_proxy.js +0 -81
- data/dist/es/ember-runtime/lib/type-of.js +0 -107
- data/dist/es/ember-runtime/tests/array/any-test.js +0 -55
- data/dist/es/ember-runtime/tests/array/compact-test.js +0 -12
- data/dist/es/ember-runtime/tests/array/every-test.js +0 -82
- data/dist/es/ember-runtime/tests/array/filter-test.js +0 -123
- data/dist/es/ember-runtime/tests/array/find-test.js +0 -86
- data/dist/es/ember-runtime/tests/array/firstObject-test.js +0 -27
- data/dist/es/ember-runtime/tests/array/forEach-test.js +0 -68
- data/dist/es/ember-runtime/tests/array/includes-test.js +0 -46
- data/dist/es/ember-runtime/tests/array/indexOf-test.js +0 -27
- data/dist/es/ember-runtime/tests/array/invoke-test.js +0 -60
- data/dist/es/ember-runtime/tests/array/isAny-test.js +0 -53
- data/dist/es/ember-runtime/tests/array/lastIndexOf-test.js +0 -78
- data/dist/es/ember-runtime/tests/array/lastObject-test.js +0 -31
- data/dist/es/ember-runtime/tests/array/map-test.js +0 -68
- data/dist/es/ember-runtime/tests/array/mapBy-test.js +0 -16
- data/dist/es/ember-runtime/tests/array/objectAt-test.js +0 -34
- data/dist/es/ember-runtime/tests/array/reduce-test.js +0 -24
- data/dist/es/ember-runtime/tests/array/reject-test.js +0 -134
- data/dist/es/ember-runtime/tests/array/sortBy-test.js +0 -23
- data/dist/es/ember-runtime/tests/array/toArray-test.js +0 -11
- data/dist/es/ember-runtime/tests/array/uniq-test.js +0 -27
- data/dist/es/ember-runtime/tests/array/uniqBy-test.js +0 -33
- data/dist/es/ember-runtime/tests/array/without-test.js +0 -39
- data/dist/es/ember-runtime/tests/copyable-array/copy-test.js +0 -12
- data/dist/es/ember-runtime/tests/core/compare_test.js +0 -89
- data/dist/es/ember-runtime/tests/core/copy_test.js +0 -47
- data/dist/es/ember-runtime/tests/core/isEqual_test.js +0 -65
- data/dist/es/ember-runtime/tests/core/is_array_test.js +0 -59
- data/dist/es/ember-runtime/tests/core/is_empty_test.js +0 -15
- data/dist/es/ember-runtime/tests/core/type_of_test.js +0 -54
- data/dist/es/ember-runtime/tests/ext/function_test.js +0 -121
- data/dist/es/ember-runtime/tests/ext/rsvp_test.js +0 -269
- data/dist/es/ember-runtime/tests/helpers/array.js +0 -336
- data/dist/es/ember-runtime/tests/inject_test.js +0 -51
- data/dist/es/ember-runtime/tests/legacy_1x/mixins/observable/chained_test.js +0 -63
- data/dist/es/ember-runtime/tests/legacy_1x/mixins/observable/observable_test.js +0 -892
- data/dist/es/ember-runtime/tests/legacy_1x/mixins/observable/propertyChanges_test.js +0 -142
- data/dist/es/ember-runtime/tests/legacy_1x/system/object/base_test.js +0 -98
- data/dist/es/ember-runtime/tests/legacy_1x/system/object/concatenated_test.js +0 -131
- data/dist/es/ember-runtime/tests/mixins/array_test.js +0 -400
- data/dist/es/ember-runtime/tests/mixins/comparable_test.js +0 -37
- data/dist/es/ember-runtime/tests/mixins/container_proxy_test.js +0 -48
- data/dist/es/ember-runtime/tests/mixins/enumerable_test.js +0 -17
- data/dist/es/ember-runtime/tests/mixins/evented_test.js +0 -23
- data/dist/es/ember-runtime/tests/mixins/mutable_enumerable_test.js +0 -17
- data/dist/es/ember-runtime/tests/mixins/observable_test.js +0 -137
- data/dist/es/ember-runtime/tests/mixins/promise_proxy_test.js +0 -593
- data/dist/es/ember-runtime/tests/mixins/target_action_support_test.js +0 -237
- data/dist/es/ember-runtime/tests/mutable-array/addObject-test.js +0 -76
- data/dist/es/ember-runtime/tests/mutable-array/clear-test.js +0 -64
- data/dist/es/ember-runtime/tests/mutable-array/insertAt-test.js +0 -216
- data/dist/es/ember-runtime/tests/mutable-array/popObject-test.js +0 -91
- data/dist/es/ember-runtime/tests/mutable-array/pushObject-test.js +0 -98
- data/dist/es/ember-runtime/tests/mutable-array/pushObjects-test.js +0 -12
- data/dist/es/ember-runtime/tests/mutable-array/removeAt-test.js +0 -187
- data/dist/es/ember-runtime/tests/mutable-array/removeObject-test.js +0 -77
- data/dist/es/ember-runtime/tests/mutable-array/removeObjects-test.js +0 -202
- data/dist/es/ember-runtime/tests/mutable-array/replace-test.js +0 -221
- data/dist/es/ember-runtime/tests/mutable-array/reverseObjects-test.js +0 -35
- data/dist/es/ember-runtime/tests/mutable-array/setObjects-test.js +0 -63
- data/dist/es/ember-runtime/tests/mutable-array/shiftObject-test.js +0 -105
- data/dist/es/ember-runtime/tests/mutable-array/unshiftObject-test.js +0 -99
- data/dist/es/ember-runtime/tests/mutable-array/unshiftObjects-test.js +0 -102
- data/dist/es/ember-runtime/tests/system/array_proxy/arranged_content_test.js +0 -275
- data/dist/es/ember-runtime/tests/system/array_proxy/array_observer_test.js +0 -51
- data/dist/es/ember-runtime/tests/system/array_proxy/content_change_test.js +0 -85
- data/dist/es/ember-runtime/tests/system/array_proxy/length_test.js +0 -201
- data/dist/es/ember-runtime/tests/system/array_proxy/watching_and_listening_test.js +0 -157
- data/dist/es/ember-runtime/tests/system/core_object_test.js +0 -114
- data/dist/es/ember-runtime/tests/system/namespace/base_test.js +0 -175
- data/dist/es/ember-runtime/tests/system/native_array/a_test.js +0 -16
- data/dist/es/ember-runtime/tests/system/native_array/copyable_suite_test.js +0 -19
- data/dist/es/ember-runtime/tests/system/native_array/replace_test.js +0 -17
- data/dist/es/ember-runtime/tests/system/object/computed_test.js +0 -352
- data/dist/es/ember-runtime/tests/system/object/create_test.js +0 -135
- data/dist/es/ember-runtime/tests/system/object/destroy_test.js +0 -146
- data/dist/es/ember-runtime/tests/system/object/detectInstance_test.js +0 -38
- data/dist/es/ember-runtime/tests/system/object/detect_test.js +0 -33
- data/dist/es/ember-runtime/tests/system/object/es-compatibility-test.js +0 -469
- data/dist/es/ember-runtime/tests/system/object/events_test.js +0 -156
- data/dist/es/ember-runtime/tests/system/object/extend_test.js +0 -153
- data/dist/es/ember-runtime/tests/system/object/observer_test.js +0 -216
- data/dist/es/ember-runtime/tests/system/object/reopenClass_test.js +0 -36
- data/dist/es/ember-runtime/tests/system/object/reopen_test.js +0 -48
- data/dist/es/ember-runtime/tests/system/object/strict-mode-test.js +0 -31
- data/dist/es/ember-runtime/tests/system/object/toString_test.js +0 -125
- data/dist/es/ember-runtime/tests/system/object_proxy_test.js +0 -314
- data/dist/es/ember-template-compiler/index.js +0 -26
- data/dist/es/ember-template-compiler/lib/compat.js +0 -16
- data/dist/es/ember-template-compiler/lib/plugins/assert-if-helper-without-arguments.js +0 -38
- data/dist/es/ember-template-compiler/lib/plugins/assert-input-helper-without-block.js +0 -20
- data/dist/es/ember-template-compiler/lib/plugins/assert-reserved-named-arguments.js +0 -26
- data/dist/es/ember-template-compiler/lib/plugins/assert-splattribute-expression.js +0 -27
- data/dist/es/ember-template-compiler/lib/plugins/deprecate-render-model.js +0 -38
- data/dist/es/ember-template-compiler/lib/plugins/deprecate-render.js +0 -41
- data/dist/es/ember-template-compiler/lib/plugins/deprecate-send-action.js +0 -42
- data/dist/es/ember-template-compiler/lib/plugins/index.js +0 -50
- data/dist/es/ember-template-compiler/lib/plugins/transform-action-syntax.js +0 -52
- data/dist/es/ember-template-compiler/lib/plugins/transform-angle-bracket-components.js +0 -10
- data/dist/es/ember-template-compiler/lib/plugins/transform-attrs-into-args.js +0 -62
- data/dist/es/ember-template-compiler/lib/plugins/transform-dot-component-invocation.js +0 -88
- data/dist/es/ember-template-compiler/lib/plugins/transform-each-in-into-each.js +0 -48
- data/dist/es/ember-template-compiler/lib/plugins/transform-has-block-syntax.js +0 -46
- data/dist/es/ember-template-compiler/lib/plugins/transform-in-element.js +0 -83
- data/dist/es/ember-template-compiler/lib/plugins/transform-inline-link-to.js +0 -31
- data/dist/es/ember-template-compiler/lib/plugins/transform-input-type-syntax.js +0 -52
- data/dist/es/ember-template-compiler/lib/plugins/transform-old-binding-syntax.js +0 -48
- data/dist/es/ember-template-compiler/lib/plugins/transform-old-class-binding-syntax.js +0 -102
- data/dist/es/ember-template-compiler/lib/plugins/transform-quoted-bindings-into-just-bindings.js +0 -34
- data/dist/es/ember-template-compiler/lib/plugins/transform-top-level-components.js +0 -41
- data/dist/es/ember-template-compiler/lib/system/bootstrap.js +0 -44
- data/dist/es/ember-template-compiler/lib/system/calculate-location-display.js +0 -20
- data/dist/es/ember-template-compiler/lib/system/compile-options.js +0 -71
- data/dist/es/ember-template-compiler/lib/system/compile.js +0 -28
- data/dist/es/ember-template-compiler/lib/system/dasherize-component-name.js +0 -13
- data/dist/es/ember-template-compiler/lib/system/initializer.js +0 -22
- data/dist/es/ember-template-compiler/lib/system/precompile.js +0 -18
- data/dist/es/ember-template-compiler/tests/plugins/assert-if-helper-without-arguments-test.js +0 -51
- data/dist/es/ember-template-compiler/tests/plugins/assert-input-helper-without-block-test.js +0 -17
- data/dist/es/ember-template-compiler/tests/plugins/assert-reserved-named-arguments-test.js +0 -416
- data/dist/es/ember-template-compiler/tests/plugins/assert-splattribute-expression-test.js +0 -57
- data/dist/es/ember-template-compiler/tests/plugins/deprecate-render-model-test.js +0 -19
- data/dist/es/ember-template-compiler/tests/plugins/deprecate-render-test.js +0 -19
- data/dist/es/ember-template-compiler/tests/plugins/deprecate-send-action-test.js +0 -29
- data/dist/es/ember-template-compiler/tests/plugins/transform-dot-component-invocation-test.js +0 -27
- data/dist/es/ember-template-compiler/tests/plugins/transform-inline-link-to-test.js +0 -15
- data/dist/es/ember-template-compiler/tests/plugins/transform-input-type-syntax-test.js +0 -25
- data/dist/es/ember-template-compiler/tests/system/bootstrap-test.js +0 -155
- data/dist/es/ember-template-compiler/tests/system/compile_options_test.js +0 -115
- data/dist/es/ember-template-compiler/tests/system/dasherize-component-name-test.js +0 -19
- data/dist/es/ember-testing/index.js +0 -10
- data/dist/es/ember-testing/lib/adapters/adapter.js +0 -58
- data/dist/es/ember-testing/lib/adapters/qunit.js +0 -47
- data/dist/es/ember-testing/lib/events.js +0 -136
- data/dist/es/ember-testing/lib/ext/application.js +0 -191
- data/dist/es/ember-testing/lib/ext/rsvp.js +0 -19
- data/dist/es/ember-testing/lib/helpers.js +0 -30
- data/dist/es/ember-testing/lib/helpers/-is-form-control.js +0 -16
- data/dist/es/ember-testing/lib/helpers/and_then.js +0 -3
- data/dist/es/ember-testing/lib/helpers/click.js +0 -36
- data/dist/es/ember-testing/lib/helpers/current_path.js +0 -27
- data/dist/es/ember-testing/lib/helpers/current_route_name.js +0 -25
- data/dist/es/ember-testing/lib/helpers/current_url.js +0 -27
- data/dist/es/ember-testing/lib/helpers/fill_in.js +0 -46
- data/dist/es/ember-testing/lib/helpers/find.js +0 -41
- data/dist/es/ember-testing/lib/helpers/find_with_assert.js +0 -34
- data/dist/es/ember-testing/lib/helpers/key_event.js +0 -36
- data/dist/es/ember-testing/lib/helpers/pause_test.js +0 -65
- data/dist/es/ember-testing/lib/helpers/trigger_event.js +0 -62
- data/dist/es/ember-testing/lib/helpers/visit.js +0 -42
- data/dist/es/ember-testing/lib/helpers/wait.js +0 -72
- data/dist/es/ember-testing/lib/initializers.js +0 -17
- data/dist/es/ember-testing/lib/setup_for_testing.js +0 -44
- data/dist/es/ember-testing/lib/support.js +0 -62
- data/dist/es/ember-testing/lib/test.js +0 -70
- data/dist/es/ember-testing/lib/test/adapter.js +0 -33
- data/dist/es/ember-testing/lib/test/helpers.js +0 -125
- data/dist/es/ember-testing/lib/test/on_inject_helpers.js +0 -38
- data/dist/es/ember-testing/lib/test/pending_requests.js +0 -24
- data/dist/es/ember-testing/lib/test/promise.js +0 -79
- data/dist/es/ember-testing/lib/test/run.js +0 -9
- data/dist/es/ember-testing/lib/test/waiters.js +0 -117
- data/dist/es/ember-testing/tests/acceptance_test.js +0 -478
- data/dist/es/ember-testing/tests/adapters/adapter_test.js +0 -31
- data/dist/es/ember-testing/tests/adapters/qunit_test.js +0 -50
- data/dist/es/ember-testing/tests/adapters_test.js +0 -405
- data/dist/es/ember-testing/tests/ext/rsvp_test.js +0 -124
- data/dist/es/ember-testing/tests/helper_registration_test.js +0 -98
- data/dist/es/ember-testing/tests/helpers_test.js +0 -1228
- data/dist/es/ember-testing/tests/integration_test.js +0 -106
- data/dist/es/ember-testing/tests/reexports_test.js +0 -26
- data/dist/es/ember-testing/tests/test/waiters-test.js +0 -145
- data/dist/es/ember-utils/index.js +0 -28
- data/dist/es/ember-utils/lib/cache.js +0 -36
- data/dist/es/ember-utils/lib/dictionary.js +0 -11
- data/dist/es/ember-utils/lib/guid.js +0 -120
- data/dist/es/ember-utils/lib/inspect.js +0 -112
- data/dist/es/ember-utils/lib/intern.js +0 -49
- data/dist/es/ember-utils/lib/invoke.js +0 -53
- data/dist/es/ember-utils/lib/is_proxy.js +0 -14
- data/dist/es/ember-utils/lib/lookup-descriptor.js +0 -11
- data/dist/es/ember-utils/lib/make-array.js +0 -7
- data/dist/es/ember-utils/lib/name.js +0 -9
- data/dist/es/ember-utils/lib/proxy-utils.js +0 -1
- data/dist/es/ember-utils/lib/spec.js +0 -14
- data/dist/es/ember-utils/lib/super.js +0 -83
- data/dist/es/ember-utils/lib/symbol-utils.js +0 -8
- data/dist/es/ember-utils/lib/symbol.js +0 -15
- data/dist/es/ember-utils/lib/to-string.js +0 -35
- data/dist/es/ember-utils/lib/weak_set.js +0 -18
- data/dist/es/ember-utils/tests/cache_test.js +0 -77
- data/dist/es/ember-utils/tests/can_invoke_test.js +0 -46
- data/dist/es/ember-utils/tests/checkHasSuper_test.js +0 -17
- data/dist/es/ember-utils/tests/generate_guid_test.js +0 -13
- data/dist/es/ember-utils/tests/guid_for_test.js +0 -101
- data/dist/es/ember-utils/tests/inspect_test.js +0 -146
- data/dist/es/ember-utils/tests/is_proxy_test.js +0 -18
- data/dist/es/ember-utils/tests/make_array_test.js +0 -41
- data/dist/es/ember-utils/tests/to-string-test.js +0 -32
- data/dist/es/ember-utils/tests/try_invoke_test.js +0 -48
- data/dist/es/ember-views/index.js +0 -28
- data/dist/es/ember-views/lib/compat/attrs.js +0 -3
- data/dist/es/ember-views/lib/compat/fallback-view-registry.js +0 -3
- data/dist/es/ember-views/lib/component_lookup.js +0 -27
- data/dist/es/ember-views/lib/mixins/action_support.js +0 -189
- data/dist/es/ember-views/lib/mixins/child_views_support.js +0 -27
- data/dist/es/ember-views/lib/mixins/class_names_support.js +0 -102
- data/dist/es/ember-views/lib/mixins/text_support.js +0 -333
- data/dist/es/ember-views/lib/mixins/view_state_support.js +0 -19
- data/dist/es/ember-views/lib/mixins/view_support.js +0 -452
- data/dist/es/ember-views/lib/system/action_manager.js +0 -14
- data/dist/es/ember-views/lib/system/event_dispatcher.js +0 -454
- data/dist/es/ember-views/lib/system/jquery.js +0 -29
- data/dist/es/ember-views/lib/system/jquery_event_deprecation.js +0 -61
- data/dist/es/ember-views/lib/system/lookup_partial.js +0 -55
- data/dist/es/ember-views/lib/system/utils.js +0 -201
- data/dist/es/ember-views/lib/utils/lookup-component.js +0 -58
- data/dist/es/ember-views/lib/views/core_view.js +0 -83
- data/dist/es/ember-views/lib/views/states.js +0 -48
- data/dist/es/ember-views/lib/views/states/default.js +0 -17
- data/dist/es/ember-views/lib/views/states/destroying.js +0 -16
- data/dist/es/ember-views/lib/views/states/has_element.js +0 -31
- data/dist/es/ember-views/lib/views/states/in_dom.js +0 -28
- data/dist/es/ember-views/lib/views/states/pre_render.js +0 -3
- data/dist/es/ember/index.js +0 -645
- data/dist/es/ember/tests/application_lifecycle_test.js +0 -188
- data/dist/es/ember/tests/component_context_test.js +0 -255
- data/dist/es/ember/tests/component_registration_test.js +0 -252
- data/dist/es/ember/tests/controller_test.js +0 -44
- data/dist/es/ember/tests/error_handler_test.js +0 -581
- data/dist/es/ember/tests/helpers/helper_registration_test.js +0 -103
- data/dist/es/ember/tests/helpers/link_to_test.js +0 -2103
- data/dist/es/ember/tests/helpers/link_to_test/link_to_transitioning_classes_test.js +0 -342
- data/dist/es/ember/tests/helpers/link_to_test/link_to_with_query_params_test.js +0 -694
- data/dist/es/ember/tests/homepage_example_test.js +0 -47
- data/dist/es/ember/tests/integration/multiple-app-test.js +0 -101
- data/dist/es/ember/tests/production_build_test.js +0 -34
- data/dist/es/ember/tests/reexports_test.js +0 -307
- data/dist/es/ember/tests/routing/decoupled_basic_test.js +0 -4506
- data/dist/es/ember/tests/routing/query_params_test.js +0 -1579
- data/dist/es/ember/tests/routing/query_params_test/model_dependent_state_with_query_params_test.js +0 -1117
- data/dist/es/ember/tests/routing/query_params_test/overlapping_query_params_test.js +0 -185
- data/dist/es/ember/tests/routing/query_params_test/query_param_async_get_handler_test.js +0 -327
- data/dist/es/ember/tests/routing/query_params_test/query_params_paramless_link_to_test.js +0 -37
- data/dist/es/ember/tests/routing/query_params_test/shared_state_test.js +0 -84
- data/dist/es/ember/tests/routing/router_map_test.js +0 -46
- data/dist/es/ember/tests/routing/router_service_test/basic_test.js +0 -95
- data/dist/es/ember/tests/routing/router_service_test/currenturl_lifecycle_test.js +0 -149
- data/dist/es/ember/tests/routing/router_service_test/isActive_test.js +0 -113
- data/dist/es/ember/tests/routing/router_service_test/replaceWith_test.js +0 -144
- data/dist/es/ember/tests/routing/router_service_test/transitionTo_test.js +0 -370
- data/dist/es/ember/tests/routing/router_service_test/urlFor_test.js +0 -307
- data/dist/es/ember/tests/routing/substates_test.js +0 -1110
- data/dist/es/ember/tests/routing/toplevel_dom_test.js +0 -37
- data/dist/es/ember/tests/service_injection_test.js +0 -278
- data/dist/es/ember/tests/view_instrumentation_test.js +0 -47
- data/dist/es/ember/version.js +0 -1
- data/dist/es/handlebars.js +0 -1268
- data/dist/es/internal-test-helpers/index.js +0 -31
- data/dist/es/internal-test-helpers/lib/.gitkeep +0 -0
- data/dist/es/internal-test-helpers/lib/apply-mixins.js +0 -37
- data/dist/es/internal-test-helpers/lib/browser-detect.js +0 -4
- data/dist/es/internal-test-helpers/lib/build-owner.js +0 -49
- data/dist/es/internal-test-helpers/lib/confirm-export.js +0 -45
- data/dist/es/internal-test-helpers/lib/ember-dev/assertion.js +0 -87
- data/dist/es/internal-test-helpers/lib/ember-dev/containers.js +0 -34
- data/dist/es/internal-test-helpers/lib/ember-dev/debug.js +0 -47
- data/dist/es/internal-test-helpers/lib/ember-dev/deprecation.js +0 -71
- data/dist/es/internal-test-helpers/lib/ember-dev/index.js +0 -19
- data/dist/es/internal-test-helpers/lib/ember-dev/method-call-tracker.js +0 -127
- data/dist/es/internal-test-helpers/lib/ember-dev/namespaces.js +0 -34
- data/dist/es/internal-test-helpers/lib/ember-dev/run-loop.js +0 -28
- data/dist/es/internal-test-helpers/lib/ember-dev/setup-qunit.js +0 -26
- data/dist/es/internal-test-helpers/lib/ember-dev/utils.js +0 -33
- data/dist/es/internal-test-helpers/lib/ember-dev/warning.js +0 -71
- data/dist/es/internal-test-helpers/lib/equal-inner-html.js +0 -37
- data/dist/es/internal-test-helpers/lib/equal-tokens.js +0 -53
- data/dist/es/internal-test-helpers/lib/factory.js +0 -65
- data/dist/es/internal-test-helpers/lib/get-all-property-names.js +0 -12
- data/dist/es/internal-test-helpers/lib/get-text-of.js +0 -3
- data/dist/es/internal-test-helpers/lib/matchers.js +0 -167
- data/dist/es/internal-test-helpers/lib/module-for.js +0 -89
- data/dist/es/internal-test-helpers/lib/registry-check.js +0 -28
- data/dist/es/internal-test-helpers/lib/run.js +0 -11
- data/dist/es/internal-test-helpers/lib/strip.js +0 -12
- data/dist/es/internal-test-helpers/lib/system/synthetic-events.js +0 -183
- data/dist/es/internal-test-helpers/lib/test-cases/abstract-application.js +0 -70
- data/dist/es/internal-test-helpers/lib/test-cases/abstract-rendering.js +0 -203
- data/dist/es/internal-test-helpers/lib/test-cases/abstract.js +0 -222
- data/dist/es/internal-test-helpers/lib/test-cases/application.js +0 -39
- data/dist/es/internal-test-helpers/lib/test-cases/autoboot-application.js +0 -34
- data/dist/es/internal-test-helpers/lib/test-cases/default-resolver-application.js +0 -43
- data/dist/es/internal-test-helpers/lib/test-cases/node-query.js +0 -120
- data/dist/es/internal-test-helpers/lib/test-cases/query-param.js +0 -124
- data/dist/es/internal-test-helpers/lib/test-cases/rendering.js +0 -14
- data/dist/es/internal-test-helpers/lib/test-cases/router.js +0 -26
- data/dist/es/internal-test-helpers/lib/test-cases/test-resolver-application.js +0 -40
- data/dist/es/internal-test-helpers/lib/test-resolver.js +0 -86
- data/dist/es/internal-test-helpers/tests/index-test.js +0 -10
- data/dist/es/route-recognizer.js +0 -685
- data/dist/es/router.js +0 -2454
- data/dist/es/rsvp.js +0 -2394
- data/dist/es/simple-html-tokenizer.js +0 -638
- data/dist/jquery/jquery.js +0 -10364
- data/dist/node/app-boot-test.js +0 -146
- data/dist/node/build-info-test.js +0 -177
- data/dist/node/component-rendering-test.js +0 -34
- data/dist/node/helpers/app-module.js +0 -198
- data/dist/node/helpers/assert-html-matches.js +0 -25
- data/dist/node/helpers/build-owner.js +0 -28
- data/dist/node/helpers/component-module.js +0 -137
- data/dist/node/sourcemap-test.js +0 -27
- data/dist/node/template-compiler-test.js +0 -45
- data/dist/node/visit-test.js +0 -349
- data/dist/qunit/qunit.css +0 -436
- data/dist/qunit/qunit.js +0 -5188
- data/dist/tests/index.html +0 -254
- data/ember-source.gemspec +0 -28
- data/node_modules/.yarn-integrity +0 -10
- 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
|
-
);
|