ember-source 2.6.2 → 2.7.0.beta.1

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.
@@ -6,7 +6,7 @@
6
6
  * Portions Copyright 2008-2011 Apple Inc. All rights reserved.
7
7
  * @license Licensed under MIT license
8
8
  * See https://raw.github.com/emberjs/ember.js/master/LICENSE
9
- * @version 2.6.2
9
+ * @version 2.7.0-beta.1
10
10
  */
11
11
 
12
12
  var enifed, requireModule, require, Ember;
@@ -82,10 +82,9 @@ var mainContext = this;
82
82
 
83
83
  var deps = mod.deps;
84
84
  var callback = mod.callback;
85
- var length = deps.length;
86
- var reified = new Array(length);
85
+ var reified = new Array(deps.length);
87
86
 
88
- for (var i = 0; i < length; i++) {
87
+ for (var i = 0; i < deps.length; i++) {
89
88
  if (deps[i] === 'exports') {
90
89
  reified[i] = exports;
91
90
  } else if (deps[i] === 'require') {
@@ -113,7 +112,7 @@ var mainContext = this;
113
112
  }
114
113
  })();
115
114
 
116
- enifed('ember-debug/deprecate', ['exports', 'ember-metal/core', 'ember-metal/error', 'ember-metal/logger', 'ember-debug/handlers'], function (exports, _emberMetalCore, _emberMetalError, _emberMetalLogger, _emberDebugHandlers) {
115
+ enifed('ember-debug/deprecate', ['exports', 'ember-metal/error', 'ember-console', 'ember-environment', 'ember-debug/handlers'], function (exports, _emberMetalError, _emberConsole, _emberEnvironment, _emberDebugHandlers) {
117
116
  /*global __fail__*/
118
117
 
119
118
  'use strict';
@@ -143,7 +142,7 @@ enifed('ember-debug/deprecate', ['exports', 'ember-metal/core', 'ember-metal/err
143
142
  registerHandler(function logDeprecationToConsole(message, options) {
144
143
  var updatedMessage = formatMessage(message, options);
145
144
 
146
- _emberMetalLogger.default.warn('DEPRECATION: ' + updatedMessage);
145
+ _emberConsole.default.warn('DEPRECATION: ' + updatedMessage);
147
146
  });
148
147
 
149
148
  var captureErrorForStack = undefined;
@@ -163,7 +162,7 @@ enifed('ember-debug/deprecate', ['exports', 'ember-metal/core', 'ember-metal/err
163
162
  }
164
163
 
165
164
  registerHandler(function logDeprecationStackTrace(message, options, next) {
166
- if (_emberMetalCore.default.LOG_STACKTRACE_ON_DEPRECATION) {
165
+ if (_emberEnvironment.ENV.LOG_STACKTRACE_ON_DEPRECATION) {
167
166
  var stackStr = '';
168
167
  var error = captureErrorForStack();
169
168
  var stack = undefined;
@@ -183,14 +182,14 @@ enifed('ember-debug/deprecate', ['exports', 'ember-metal/core', 'ember-metal/err
183
182
 
184
183
  var updatedMessage = formatMessage(message, options);
185
184
 
186
- _emberMetalLogger.default.warn('DEPRECATION: ' + updatedMessage + stackStr);
185
+ _emberConsole.default.warn('DEPRECATION: ' + updatedMessage + stackStr);
187
186
  } else {
188
187
  next.apply(undefined, arguments);
189
188
  }
190
189
  });
191
190
 
192
191
  registerHandler(function raiseOnDeprecation(message, options, next) {
193
- if (_emberMetalCore.default.ENV.RAISE_ON_DEPRECATION) {
192
+ if (_emberEnvironment.ENV.RAISE_ON_DEPRECATION) {
194
193
  var updatedMessage = formatMessage(message);
195
194
 
196
195
  throw new _emberMetalError.default(updatedMessage);
@@ -292,7 +291,7 @@ enifed("ember-debug/handlers", ["exports"], function (exports) {
292
291
  }
293
292
  }
294
293
  });
295
- enifed('ember-debug/index', ['exports', 'ember-metal/core', 'ember-metal/debug', 'ember-metal/features', 'ember-metal/error', 'ember-metal/logger', 'ember-metal/environment', 'ember-debug/deprecate', 'ember-debug/warn'], function (exports, _emberMetalCore, _emberMetalDebug, _emberMetalFeatures, _emberMetalError, _emberMetalLogger, _emberMetalEnvironment, _emberDebugDeprecate, _emberDebugWarn) {
294
+ enifed('ember-debug/index', ['exports', 'ember-metal/core', 'ember-environment', 'ember-metal/testing', 'ember-metal/debug', 'ember-metal/features', 'ember-metal/error', 'ember-console', 'ember-debug/deprecate', 'ember-debug/warn'], function (exports, _emberMetalCore, _emberEnvironment, _emberMetalTesting, _emberMetalDebug, _emberMetalFeatures, _emberMetalError, _emberConsole, _emberDebugDeprecate, _emberDebugWarn) {
296
295
  'use strict';
297
296
 
298
297
  exports._warnIfUsingStrippedFeatureFlags = _warnIfUsingStrippedFeatureFlags;
@@ -349,7 +348,7 @@ enifed('ember-debug/index', ['exports', 'ember-metal/core', 'ember-metal/debug',
349
348
  @public
350
349
  */
351
350
  _emberMetalDebug.setDebugFunction('debug', function debug(message) {
352
- _emberMetalLogger.default.debug('DEBUG: ' + message);
351
+ _emberConsole.default.debug('DEBUG: ' + message);
353
352
  });
354
353
 
355
354
  /**
@@ -362,7 +361,7 @@ enifed('ember-debug/index', ['exports', 'ember-metal/core', 'ember-metal/debug',
362
361
  @private
363
362
  */
364
363
  _emberMetalDebug.setDebugFunction('info', function info() {
365
- _emberMetalLogger.default.info.apply(undefined, arguments);
364
+ _emberConsole.default.info.apply(undefined, arguments);
366
365
  });
367
366
 
368
367
  /**
@@ -467,7 +466,7 @@ enifed('ember-debug/index', ['exports', 'ember-metal/core', 'ember-metal/debug',
467
466
 
468
467
  function _warnIfUsingStrippedFeatureFlags(FEATURES, knownFeatures, featuresWereStripped) {
469
468
  if (featuresWereStripped) {
470
- _emberMetalDebug.warn('Ember.ENV.ENABLE_OPTIONAL_FEATURES is only available in canary builds.', !_emberMetalCore.default.ENV.ENABLE_OPTIONAL_FEATURES, { id: 'ember-debug.feature-flag-with-features-stripped' });
469
+ _emberMetalDebug.warn('Ember.ENV.ENABLE_OPTIONAL_FEATURES is only available in canary builds.', !_emberEnvironment.ENV.ENABLE_OPTIONAL_FEATURES, { id: 'ember-debug.feature-flag-with-features-stripped' });
471
470
 
472
471
  var keys = Object.keys(FEATURES || {});
473
472
  for (var i = 0; i < keys.length; i++) {
@@ -481,17 +480,17 @@ enifed('ember-debug/index', ['exports', 'ember-metal/core', 'ember-metal/debug',
481
480
  }
482
481
  }
483
482
 
484
- if (!_emberMetalCore.default.testing) {
483
+ if (!_emberMetalTesting.isTesting()) {
485
484
  // Complain if they're using FEATURE flags in builds other than canary
486
485
  _emberMetalFeatures.FEATURES['features-stripped-test'] = true;
487
486
  var featuresWereStripped = true;
488
487
 
489
488
  delete _emberMetalFeatures.FEATURES['features-stripped-test'];
490
- _warnIfUsingStrippedFeatureFlags(_emberMetalCore.default.ENV.FEATURES, _emberMetalFeatures.KNOWN_FEATURES, featuresWereStripped);
489
+ _warnIfUsingStrippedFeatureFlags(_emberEnvironment.ENV.FEATURES, _emberMetalFeatures.DEFAULT_FEATURES, featuresWereStripped);
491
490
 
492
491
  // Inform the developer about the Ember Inspector if not installed.
493
- var isFirefox = _emberMetalEnvironment.default.isFirefox;
494
- var isChrome = _emberMetalEnvironment.default.isChrome;
492
+ var isFirefox = _emberEnvironment.environment.isFirefox;
493
+ var isChrome = _emberEnvironment.environment.isChrome;
495
494
 
496
495
  if (typeof window !== 'undefined' && (isFirefox || isChrome) && window.addEventListener) {
497
496
  window.addEventListener('load', function () {
@@ -595,7 +594,8 @@ enifed('ember-debug/index', ['exports', 'ember-metal/core', 'ember-metal/debug',
595
594
  _emberMetalDebug.warn('Please use `ember.debug.js` instead of `ember.js` for development and debugging.');
596
595
  }
597
596
  });
598
- enifed('ember-debug/warn', ['exports', 'ember-metal/logger', 'ember-metal/debug', 'ember-debug/handlers'], function (exports, _emberMetalLogger, _emberMetalDebug, _emberDebugHandlers) {
597
+ // reexports
598
+ enifed('ember-debug/warn', ['exports', 'ember-console', 'ember-metal/debug', 'ember-debug/handlers'], function (exports, _emberConsole, _emberMetalDebug, _emberDebugHandlers) {
599
599
  'use strict';
600
600
 
601
601
  var _slice = Array.prototype.slice;
@@ -607,9 +607,9 @@ enifed('ember-debug/warn', ['exports', 'ember-metal/logger', 'ember-metal/debug'
607
607
  }
608
608
 
609
609
  registerHandler(function logWarning(message, options) {
610
- _emberMetalLogger.default.warn('WARNING: ' + message);
611
- if ('trace' in _emberMetalLogger.default) {
612
- _emberMetalLogger.default.trace();
610
+ _emberConsole.default.warn('WARNING: ' + message);
611
+ if ('trace' in _emberConsole.default) {
612
+ _emberConsole.default.trace();
613
613
  }
614
614
  });
615
615
 
@@ -743,70 +743,49 @@ enifed('ember-testing/adapters/qunit', ['exports', 'ember-testing/adapters/adapt
743
743
  }
744
744
  });
745
745
  });
746
- enifed('ember-testing/helpers', ['exports', 'ember-metal/property_get', 'ember-metal/error', 'ember-metal/run_loop', 'ember-views/system/jquery', 'ember-testing/test', 'ember-runtime/ext/rsvp', 'ember-metal/features'], function (exports, _emberMetalProperty_get, _emberMetalError, _emberMetalRun_loop, _emberViewsSystemJquery, _emberTestingTest, _emberRuntimeExtRsvp, _emberMetalFeatures) {
746
+ enifed('ember-testing/events', ['exports', 'ember-views/system/jquery', 'ember-metal/run_loop'], function (exports, _emberViewsSystemJquery, _emberMetalRun_loop) {
747
747
  'use strict';
748
748
 
749
- /**
750
- @module ember
751
- @submodule ember-testing
752
- */
749
+ exports.focus = focus;
750
+ exports.fireEvent = fireEvent;
753
751
 
754
- var helper = _emberTestingTest.default.registerHelper;
755
- var asyncHelper = _emberTestingTest.default.registerAsyncHelper;
756
-
757
- var keyboardEventTypes, mouseEventTypes, buildKeyboardEvent, buildMouseEvent, buildBasicEvent, fireEvent, focus;
758
-
759
- var defaultEventOptions = { canBubble: true, cancelable: true };
760
- keyboardEventTypes = ['keydown', 'keypress', 'keyup'];
761
- mouseEventTypes = ['click', 'mousedown', 'mouseup', 'dblclick', 'mouseenter', 'mouseleave', 'mousemove', 'mouseout', 'mouseover'];
762
-
763
- buildKeyboardEvent = function buildKeyboardEvent(type) {
764
- var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
752
+ var DEFAULT_EVENT_OPTIONS = { canBubble: true, cancelable: true };
753
+ var KEYBOARD_EVENT_TYPES = ['keydown', 'keypress', 'keyup'];
754
+ var MOUSE_EVENT_TYPES = ['click', 'mousedown', 'mouseup', 'dblclick', 'mouseenter', 'mouseleave', 'mousemove', 'mouseout', 'mouseover'];
765
755
 
766
- var event = undefined;
767
- try {
768
- event = document.createEvent('KeyEvents');
769
- var eventOpts = _emberViewsSystemJquery.default.extend({}, defaultEventOptions, options);
770
- event.initKeyEvent(type, eventOpts.canBubble, eventOpts.cancelable, window, eventOpts.ctrlKey, eventOpts.altKey, eventOpts.shiftKey, eventOpts.metaKey, eventOpts.keyCode, eventOpts.charCode);
771
- } catch (e) {
772
- event = buildBasicEvent(type, options);
756
+ function focus(el) {
757
+ if (!el) {
758
+ return;
773
759
  }
774
- return event;
775
- };
776
-
777
- buildMouseEvent = function buildMouseEvent(type) {
778
- var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
760
+ var $el = _emberViewsSystemJquery.default(el);
761
+ if ($el.is(':input, [contenteditable=true]')) {
762
+ var type = $el.prop('type');
763
+ if (type !== 'checkbox' && type !== 'radio' && type !== 'hidden') {
764
+ _emberMetalRun_loop.default(null, function () {
765
+ // Firefox does not trigger the `focusin` event if the window
766
+ // does not have focus. If the document doesn't have focus just
767
+ // use trigger('focusin') instead.
779
768
 
780
- var event = undefined;
781
- try {
782
- event = document.createEvent('MouseEvents');
783
- var eventOpts = _emberViewsSystemJquery.default.extend({}, defaultEventOptions, options);
784
- event.initMouseEvent(type, eventOpts.canBubble, eventOpts.cancelable, window, eventOpts.detail, eventOpts.screenX, eventOpts.screenY, eventOpts.clientX, eventOpts.clientY, eventOpts.ctrlKey, eventOpts.altKey, eventOpts.shiftKey, eventOpts.metaKey, eventOpts.button, eventOpts.relatedTarget);
785
- } catch (e) {
786
- event = buildBasicEvent(type, options);
769
+ if (!document.hasFocus || document.hasFocus()) {
770
+ el.focus();
771
+ } else {
772
+ $el.trigger('focusin');
773
+ }
774
+ });
775
+ }
787
776
  }
788
- return event;
789
- };
790
-
791
- buildBasicEvent = function buildBasicEvent(type) {
792
- var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
793
-
794
- var event = document.createEvent('Events');
795
- event.initEvent(type, true, true);
796
- _emberViewsSystemJquery.default.extend(event, options);
797
- return event;
798
- };
777
+ }
799
778
 
800
- fireEvent = function fireEvent(element, type) {
779
+ function fireEvent(element, type) {
801
780
  var options = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];
802
781
 
803
782
  if (!element) {
804
783
  return;
805
784
  }
806
785
  var event = undefined;
807
- if (keyboardEventTypes.indexOf(type) > -1) {
786
+ if (KEYBOARD_EVENT_TYPES.indexOf(type) > -1) {
808
787
  event = buildKeyboardEvent(type, options);
809
- } else if (mouseEventTypes.indexOf(type) > -1) {
788
+ } else if (MOUSE_EVENT_TYPES.indexOf(type) > -1) {
810
789
  var rect = element.getBoundingClientRect();
811
790
  var x = rect.left + 1;
812
791
  var y = rect.top + 1;
@@ -821,144 +800,317 @@ enifed('ember-testing/helpers', ['exports', 'ember-metal/property_get', 'ember-m
821
800
  event = buildBasicEvent(type, options);
822
801
  }
823
802
  element.dispatchEvent(event);
824
- };
825
-
826
- focus = function focus(el) {
827
- if (!el) {
828
- return;
829
- }
830
- var $el = _emberViewsSystemJquery.default(el);
831
- if ($el.is(':input, [contenteditable=true]')) {
832
- var type = $el.prop('type');
833
- if (type !== 'checkbox' && type !== 'radio' && type !== 'hidden') {
834
- _emberMetalRun_loop.default(null, function () {
835
- // Firefox does not trigger the `focusin` event if the window
836
- // does not have focus. If the document doesn't have focus just
837
- // use trigger('focusin') instead.
838
-
839
- if (!document.hasFocus || document.hasFocus()) {
840
- el.focus();
841
- } else {
842
- $el.trigger('focusin');
843
- }
844
- });
845
- }
846
- }
847
- };
803
+ }
848
804
 
849
- function currentRouteName(app) {
850
- var routingService = app.__container__.lookup('service:-routing');
805
+ function buildBasicEvent(type) {
806
+ var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
851
807
 
852
- return _emberMetalProperty_get.get(routingService, 'currentRouteName');
808
+ var event = document.createEvent('Events');
809
+ event.initEvent(type, true, true);
810
+ _emberViewsSystemJquery.default.extend(event, options);
811
+ return event;
853
812
  }
854
813
 
855
- function currentPath(app) {
856
- var routingService = app.__container__.lookup('service:-routing');
814
+ function buildMouseEvent(type) {
815
+ var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
857
816
 
858
- return _emberMetalProperty_get.get(routingService, 'currentPath');
817
+ var event = undefined;
818
+ try {
819
+ event = document.createEvent('MouseEvents');
820
+ var eventOpts = _emberViewsSystemJquery.default.extend({}, DEFAULT_EVENT_OPTIONS, options);
821
+ event.initMouseEvent(type, eventOpts.canBubble, eventOpts.cancelable, window, eventOpts.detail, eventOpts.screenX, eventOpts.screenY, eventOpts.clientX, eventOpts.clientY, eventOpts.ctrlKey, eventOpts.altKey, eventOpts.shiftKey, eventOpts.metaKey, eventOpts.button, eventOpts.relatedTarget);
822
+ } catch (e) {
823
+ event = buildBasicEvent(type, options);
824
+ }
825
+ return event;
859
826
  }
860
827
 
861
- function currentURL(app) {
862
- var router = app.__container__.lookup('router:main');
828
+ function buildKeyboardEvent(type) {
829
+ var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
863
830
 
864
- return _emberMetalProperty_get.get(router, 'location').getURL();
831
+ var event = undefined;
832
+ try {
833
+ event = document.createEvent('KeyEvents');
834
+ var eventOpts = _emberViewsSystemJquery.default.extend({}, DEFAULT_EVENT_OPTIONS, options);
835
+ event.initKeyEvent(type, eventOpts.canBubble, eventOpts.cancelable, window, eventOpts.ctrlKey, eventOpts.altKey, eventOpts.shiftKey, eventOpts.metaKey, eventOpts.keyCode, eventOpts.charCode);
836
+ } catch (e) {
837
+ event = buildBasicEvent(type, options);
838
+ }
839
+ return event;
865
840
  }
841
+ });
842
+ enifed('ember-testing/ext/application', ['exports', 'ember-application/system/application', 'ember-testing/setup_for_testing', 'ember-testing/test/helpers', 'ember-testing/test/promise', 'ember-testing/test/run', 'ember-testing/test/on_inject_helpers', 'ember-testing/test/adapter'], function (exports, _emberApplicationSystemApplication, _emberTestingSetup_for_testing, _emberTestingTestHelpers, _emberTestingTestPromise, _emberTestingTestRun, _emberTestingTestOn_inject_helpers, _emberTestingTestAdapter) {
843
+ 'use strict';
866
844
 
867
- function pauseTest() {
868
- _emberTestingTest.default.adapter.asyncStart();
869
- return new _emberRuntimeExtRsvp.default.Promise(function () {}, 'TestAdapter paused promise');
870
- }
845
+ _emberApplicationSystemApplication.default.reopen({
846
+ /**
847
+ This property contains the testing helpers for the current application. These
848
+ are created once you call `injectTestHelpers` on your `Ember.Application`
849
+ instance. The included helpers are also available on the `window` object by
850
+ default, but can be used from this object on the individual application also.
851
+ @property testHelpers
852
+ @type {Object}
853
+ @default {}
854
+ @public
855
+ */
856
+ testHelpers: {},
871
857
 
872
- function visit(app, url) {
873
- var router = app.__container__.lookup('router:main');
874
- var shouldHandleURL = false;
858
+ /**
859
+ This property will contain the original methods that were registered
860
+ on the `helperContainer` before `injectTestHelpers` is called.
861
+ When `removeTestHelpers` is called, these methods are restored to the
862
+ `helperContainer`.
863
+ @property originalMethods
864
+ @type {Object}
865
+ @default {}
866
+ @private
867
+ @since 1.3.0
868
+ */
869
+ originalMethods: {},
875
870
 
876
- app.boot().then(function () {
877
- router.location.setURL(url);
871
+ /**
872
+ This property indicates whether or not this application is currently in
873
+ testing mode. This is set when `setupForTesting` is called on the current
874
+ application.
875
+ @property testing
876
+ @type {Boolean}
877
+ @default false
878
+ @since 1.3.0
879
+ @public
880
+ */
881
+ testing: false,
878
882
 
879
- if (shouldHandleURL) {
880
- _emberMetalRun_loop.default(app.__deprecatedInstance__, 'handleURL', url);
881
- }
882
- });
883
+ /**
884
+ This hook defers the readiness of the application, so that you can start
885
+ the app when your tests are ready to run. It also sets the router's
886
+ location to 'none', so that the window's location will not be modified
887
+ (preventing both accidental leaking of state between tests and interference
888
+ with your testing framework).
889
+ Example:
890
+ ```
891
+ App.setupForTesting();
892
+ ```
893
+ @method setupForTesting
894
+ @public
895
+ */
896
+ setupForTesting: function () {
897
+ _emberTestingSetup_for_testing.default();
883
898
 
884
- if (app._readinessDeferrals > 0) {
885
- router['initialURL'] = url;
886
- _emberMetalRun_loop.default(app, 'advanceReadiness');
887
- delete router['initialURL'];
888
- } else {
889
- shouldHandleURL = true;
890
- }
899
+ this.testing = true;
891
900
 
892
- return app.testHelpers.wait();
893
- }
901
+ this.Router.reopen({
902
+ location: 'none'
903
+ });
904
+ },
894
905
 
895
- function click(app, selector, context) {
896
- var $el = app.testHelpers.findWithAssert(selector, context);
897
- var el = $el[0];
906
+ /**
907
+ This will be used as the container to inject the test helpers into. By
908
+ default the helpers are injected into `window`.
909
+ @property helperContainer
910
+ @type {Object} The object to be used for test helpers.
911
+ @default window
912
+ @since 1.2.0
913
+ @private
914
+ */
915
+ helperContainer: null,
898
916
 
899
- _emberMetalRun_loop.default(null, fireEvent, el, 'mousedown');
917
+ /**
918
+ This injects the test helpers into the `helperContainer` object. If an object is provided
919
+ it will be used as the helperContainer. If `helperContainer` is not set it will default
920
+ to `window`. If a function of the same name has already been defined it will be cached
921
+ (so that it can be reset if the helper is removed with `unregisterHelper` or
922
+ `removeTestHelpers`).
923
+ Any callbacks registered with `onInjectHelpers` will be called once the
924
+ helpers have been injected.
925
+ Example:
926
+ ```
927
+ App.injectTestHelpers();
928
+ ```
929
+ @method injectTestHelpers
930
+ @public
931
+ */
932
+ injectTestHelpers: function (helperContainer) {
933
+ if (helperContainer) {
934
+ this.helperContainer = helperContainer;
935
+ } else {
936
+ this.helperContainer = window;
937
+ }
900
938
 
901
- focus(el);
939
+ this.reopen({
940
+ willDestroy: function () {
941
+ this._super.apply(this, arguments);
942
+ this.removeTestHelpers();
943
+ }
944
+ });
902
945
 
903
- _emberMetalRun_loop.default(null, fireEvent, el, 'mouseup');
904
- _emberMetalRun_loop.default(null, fireEvent, el, 'click');
946
+ this.testHelpers = {};
947
+ for (var name in _emberTestingTestHelpers.helpers) {
948
+ this.originalMethods[name] = this.helperContainer[name];
949
+ this.testHelpers[name] = this.helperContainer[name] = helper(this, name);
950
+ protoWrap(_emberTestingTestPromise.default.prototype, name, helper(this, name), _emberTestingTestHelpers.helpers[name].meta.wait);
951
+ }
905
952
 
906
- return app.testHelpers.wait();
907
- }
953
+ _emberTestingTestOn_inject_helpers.invokeInjectHelpersCallbacks(this);
954
+ },
908
955
 
909
- function triggerEvent(app, selector, contextOrType, typeOrOptions, possibleOptions) {
910
- var arity = arguments.length;
911
- var context, type, options;
956
+ /**
957
+ This removes all helpers that have been registered, and resets and functions
958
+ that were overridden by the helpers.
959
+ Example:
960
+ ```javascript
961
+ App.removeTestHelpers();
962
+ ```
963
+ @public
964
+ @method removeTestHelpers
965
+ */
966
+ removeTestHelpers: function () {
967
+ if (!this.helperContainer) {
968
+ return;
969
+ }
912
970
 
913
- if (arity === 3) {
914
- // context and options are optional, so this is
915
- // app, selector, type
916
- context = null;
917
- type = contextOrType;
918
- options = {};
919
- } else if (arity === 4) {
920
- // context and options are optional, so this is
921
- if (typeof typeOrOptions === 'object') {
922
- // either
923
- // app, selector, type, options
924
- context = null;
925
- type = contextOrType;
926
- options = typeOrOptions;
971
+ for (var name in _emberTestingTestHelpers.helpers) {
972
+ this.helperContainer[name] = this.originalMethods[name];
973
+ delete _emberTestingTestPromise.default.prototype[name];
974
+ delete this.testHelpers[name];
975
+ delete this.originalMethods[name];
976
+ }
977
+ }
978
+ });
979
+
980
+ // This method is no longer needed
981
+ // But still here for backwards compatibility
982
+ // of helper chaining
983
+ function protoWrap(proto, name, callback, isAsync) {
984
+ proto[name] = function () {
985
+ for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
986
+ args[_key] = arguments[_key];
987
+ }
988
+
989
+ if (isAsync) {
990
+ return callback.apply(this, args);
927
991
  } else {
928
- // or
929
- // app, selector, context, type
930
- context = contextOrType;
931
- type = typeOrOptions;
932
- options = {};
992
+ return this.then(function () {
993
+ return callback.apply(this, args);
994
+ });
995
+ }
996
+ };
997
+ }
998
+
999
+ function helper(app, name) {
1000
+ var fn = _emberTestingTestHelpers.helpers[name].method;
1001
+ var meta = _emberTestingTestHelpers.helpers[name].meta;
1002
+ if (!meta.wait) {
1003
+ return function () {
1004
+ for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
1005
+ args[_key2] = arguments[_key2];
1006
+ }
1007
+
1008
+ return fn.apply(app, [app].concat(args));
1009
+ };
1010
+ }
1011
+
1012
+ return function () {
1013
+ for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
1014
+ args[_key3] = arguments[_key3];
933
1015
  }
1016
+
1017
+ var lastPromise = _emberTestingTestRun.default(function () {
1018
+ return _emberTestingTestPromise.resolve(_emberTestingTestPromise.getLastPromise());
1019
+ });
1020
+
1021
+ // wait for last helper's promise to resolve and then
1022
+ // execute. To be safe, we need to tell the adapter we're going
1023
+ // asynchronous here, because fn may not be invoked before we
1024
+ // return.
1025
+ _emberTestingTestAdapter.asyncStart();
1026
+ return lastPromise.then(function () {
1027
+ return fn.apply(app, [app].concat(args));
1028
+ }).finally(_emberTestingTestAdapter.asyncEnd);
1029
+ };
1030
+ }
1031
+ });
1032
+ enifed('ember-testing/ext/rsvp', ['exports', 'ember-runtime/ext/rsvp', 'ember-metal/run_loop', 'ember-metal/testing', 'ember-testing/test/adapter'], function (exports, _emberRuntimeExtRsvp, _emberMetalRun_loop, _emberMetalTesting, _emberTestingTestAdapter) {
1033
+ 'use strict';
1034
+
1035
+ _emberRuntimeExtRsvp.default.configure('async', function (callback, promise) {
1036
+ // if schedule will cause autorun, we need to inform adapter
1037
+ if (_emberMetalTesting.isTesting() && !_emberMetalRun_loop.default.backburner.currentInstance) {
1038
+ _emberTestingTestAdapter.asyncStart();
1039
+ _emberMetalRun_loop.default.backburner.schedule('actions', function () {
1040
+ _emberTestingTestAdapter.asyncEnd();
1041
+ callback(promise);
1042
+ });
934
1043
  } else {
935
- context = contextOrType;
936
- type = typeOrOptions;
937
- options = possibleOptions;
1044
+ _emberMetalRun_loop.default.backburner.schedule('actions', function () {
1045
+ return callback(promise);
1046
+ });
938
1047
  }
1048
+ });
1049
+
1050
+ exports.default = _emberRuntimeExtRsvp.default;
1051
+ });
1052
+ enifed("ember-testing/helpers/and_then", ["exports"], function (exports) {
1053
+ "use strict";
1054
+
1055
+ exports.default = andThen;
1056
+
1057
+ function andThen(app, callback) {
1058
+ return app.testHelpers.wait(callback(app));
1059
+ }
1060
+ });
1061
+ enifed('ember-testing/helpers/click', ['exports', 'ember-metal/run_loop', 'ember-testing/events'], function (exports, _emberMetalRun_loop, _emberTestingEvents) {
1062
+ 'use strict';
1063
+
1064
+ exports.default = click;
939
1065
 
1066
+ function click(app, selector, context) {
940
1067
  var $el = app.testHelpers.findWithAssert(selector, context);
941
1068
  var el = $el[0];
942
1069
 
943
- _emberMetalRun_loop.default(null, fireEvent, el, type, options);
1070
+ _emberMetalRun_loop.default(null, _emberTestingEvents.fireEvent, el, 'mousedown');
1071
+
1072
+ _emberTestingEvents.focus(el);
1073
+
1074
+ _emberMetalRun_loop.default(null, _emberTestingEvents.fireEvent, el, 'mouseup');
1075
+ _emberMetalRun_loop.default(null, _emberTestingEvents.fireEvent, el, 'click');
944
1076
 
945
1077
  return app.testHelpers.wait();
946
1078
  }
1079
+ });
1080
+ enifed('ember-testing/helpers/current_path', ['exports', 'ember-metal/property_get'], function (exports, _emberMetalProperty_get) {
1081
+ 'use strict';
947
1082
 
948
- function keyEvent(app, selector, contextOrType, typeOrKeyCode, keyCode) {
949
- var context, type;
1083
+ exports.default = currentPath;
950
1084
 
951
- if (typeof keyCode === 'undefined') {
952
- context = null;
953
- keyCode = typeOrKeyCode;
954
- type = contextOrType;
955
- } else {
956
- context = contextOrType;
957
- type = typeOrKeyCode;
958
- }
1085
+ function currentPath(app) {
1086
+ var routingService = app.__container__.lookup('service:-routing');
1087
+ return _emberMetalProperty_get.get(routingService, 'currentPath');
1088
+ }
1089
+ });
1090
+ enifed('ember-testing/helpers/current_route_name', ['exports', 'ember-metal/property_get'], function (exports, _emberMetalProperty_get) {
1091
+ 'use strict';
959
1092
 
960
- return app.testHelpers.triggerEvent(selector, context, type, { keyCode: keyCode, which: keyCode });
1093
+ exports.default = currentRouteName;
1094
+
1095
+ function currentRouteName(app) {
1096
+ var routingService = app.__container__.lookup('service:-routing');
1097
+ return _emberMetalProperty_get.get(routingService, 'currentRouteName');
1098
+ }
1099
+ });
1100
+ enifed('ember-testing/helpers/current_url', ['exports', 'ember-metal/property_get'], function (exports, _emberMetalProperty_get) {
1101
+ 'use strict';
1102
+
1103
+ exports.default = currentURL;
1104
+
1105
+ function currentURL(app) {
1106
+ var router = app.__container__.lookup('router:main');
1107
+ return _emberMetalProperty_get.get(router, 'location').getURL();
961
1108
  }
1109
+ });
1110
+ enifed('ember-testing/helpers/fill_in', ['exports', 'ember-metal/run_loop', 'ember-testing/events'], function (exports, _emberMetalRun_loop, _emberTestingEvents) {
1111
+ 'use strict';
1112
+
1113
+ exports.default = fillIn;
962
1114
 
963
1115
  function fillIn(app, selector, contextOrText, text) {
964
1116
  var $el, el, context;
@@ -969,34 +1121,146 @@ enifed('ember-testing/helpers', ['exports', 'ember-metal/property_get', 'ember-m
969
1121
  }
970
1122
  $el = app.testHelpers.findWithAssert(selector, context);
971
1123
  el = $el[0];
972
- focus(el);
1124
+ _emberTestingEvents.focus(el);
973
1125
  _emberMetalRun_loop.default(function () {
974
1126
  $el.val(text);
975
- fireEvent(el, 'input');
976
- fireEvent(el, 'change');
1127
+ _emberTestingEvents.fireEvent(el, 'input');
1128
+ _emberTestingEvents.fireEvent(el, 'change');
977
1129
  });
978
1130
  return app.testHelpers.wait();
979
1131
  }
1132
+ });
1133
+ enifed('ember-testing/helpers/find', ['exports', 'ember-metal/property_get'], function (exports, _emberMetalProperty_get) {
1134
+ 'use strict';
1135
+
1136
+ exports.default = find;
1137
+
1138
+ function find(app, selector, context) {
1139
+ var $el = undefined;
1140
+ context = context || _emberMetalProperty_get.get(app, 'rootElement');
1141
+ $el = app.$(selector, context);
1142
+ return $el;
1143
+ }
1144
+ });
1145
+ enifed('ember-testing/helpers/find_with_assert', ['exports'], function (exports) {
1146
+ 'use strict';
1147
+
1148
+ exports.default = findWithAssert;
980
1149
 
981
1150
  function findWithAssert(app, selector, context) {
982
1151
  var $el = app.testHelpers.find(selector, context);
983
1152
  if ($el.length === 0) {
984
- throw new _emberMetalError.default('Element ' + selector + ' not found.');
1153
+ throw new Error('Element ' + selector + ' not found.');
985
1154
  }
986
1155
  return $el;
987
1156
  }
1157
+ });
1158
+ enifed('ember-testing/helpers/key_event', ['exports'], function (exports) {
1159
+ 'use strict';
988
1160
 
989
- function find(app, selector, context) {
990
- var $el;
991
- context = context || _emberMetalProperty_get.get(app, 'rootElement');
992
- $el = app.$(selector, context);
1161
+ exports.default = keyEvent;
993
1162
 
994
- return $el;
1163
+ function keyEvent(app, selector, contextOrType, typeOrKeyCode, keyCode) {
1164
+ var context, type;
1165
+
1166
+ if (typeof keyCode === 'undefined') {
1167
+ context = null;
1168
+ keyCode = typeOrKeyCode;
1169
+ type = contextOrType;
1170
+ } else {
1171
+ context = contextOrType;
1172
+ type = typeOrKeyCode;
1173
+ }
1174
+
1175
+ return app.testHelpers.triggerEvent(selector, context, type, { keyCode: keyCode, which: keyCode });
995
1176
  }
1177
+ });
1178
+ enifed('ember-testing/helpers/pause_test', ['exports', 'ember-runtime/ext/rsvp', 'ember-testing/test'], function (exports, _emberRuntimeExtRsvp, _emberTestingTest) {
1179
+ 'use strict';
996
1180
 
997
- function andThen(app, callback) {
998
- return app.testHelpers.wait(callback(app));
1181
+ exports.default = pauseTest;
1182
+
1183
+ function pauseTest() {
1184
+ _emberTestingTest.default.adapter.asyncStart();
1185
+ return new _emberRuntimeExtRsvp.default.Promise(function () {}, 'TestAdapter paused promise');
1186
+ }
1187
+ });
1188
+ enifed('ember-testing/helpers/trigger_event', ['exports', 'ember-metal/run_loop', 'ember-testing/events'], function (exports, _emberMetalRun_loop, _emberTestingEvents) {
1189
+ 'use strict';
1190
+
1191
+ exports.default = triggerEvent;
1192
+
1193
+ function triggerEvent(app, selector, contextOrType, typeOrOptions, possibleOptions) {
1194
+ var arity = arguments.length;
1195
+ var context, type, options;
1196
+
1197
+ if (arity === 3) {
1198
+ // context and options are optional, so this is
1199
+ // app, selector, type
1200
+ context = null;
1201
+ type = contextOrType;
1202
+ options = {};
1203
+ } else if (arity === 4) {
1204
+ // context and options are optional, so this is
1205
+ if (typeof typeOrOptions === 'object') {
1206
+ // either
1207
+ // app, selector, type, options
1208
+ context = null;
1209
+ type = contextOrType;
1210
+ options = typeOrOptions;
1211
+ } else {
1212
+ // or
1213
+ // app, selector, context, type
1214
+ context = contextOrType;
1215
+ type = typeOrOptions;
1216
+ options = {};
1217
+ }
1218
+ } else {
1219
+ context = contextOrType;
1220
+ type = typeOrOptions;
1221
+ options = possibleOptions;
1222
+ }
1223
+
1224
+ var $el = app.testHelpers.findWithAssert(selector, context);
1225
+ var el = $el[0];
1226
+
1227
+ _emberMetalRun_loop.default(null, _emberTestingEvents.fireEvent, el, type, options);
1228
+
1229
+ return app.testHelpers.wait();
1230
+ }
1231
+ });
1232
+ enifed('ember-testing/helpers/visit', ['exports', 'ember-metal/run_loop'], function (exports, _emberMetalRun_loop) {
1233
+ 'use strict';
1234
+
1235
+ exports.default = visit;
1236
+
1237
+ function visit(app, url) {
1238
+ var router = app.__container__.lookup('router:main');
1239
+ var shouldHandleURL = false;
1240
+
1241
+ app.boot().then(function () {
1242
+ router.location.setURL(url);
1243
+
1244
+ if (shouldHandleURL) {
1245
+ _emberMetalRun_loop.default(app.__deprecatedInstance__, 'handleURL', url);
1246
+ }
1247
+ });
1248
+
1249
+ if (app._readinessDeferrals > 0) {
1250
+ router['initialURL'] = url;
1251
+ _emberMetalRun_loop.default(app, 'advanceReadiness');
1252
+ delete router['initialURL'];
1253
+ } else {
1254
+ shouldHandleURL = true;
1255
+ }
1256
+
1257
+ return app.testHelpers.wait();
999
1258
  }
1259
+ });
1260
+ enifed('ember-testing/helpers/wait', ['exports', 'ember-testing/test/waiters', 'ember-runtime/ext/rsvp', 'ember-metal/run_loop', 'ember-testing/test/pending_requests'], function (exports, _emberTestingTestWaiters, _emberRuntimeExtRsvp, _emberMetalRun_loop, _emberTestingTestPending_requests) {
1261
+ 'use strict';
1262
+
1263
+ exports.default = wait;
1000
1264
 
1001
1265
  function wait(app, value) {
1002
1266
  return new _emberRuntimeExtRsvp.default.Promise(function (resolve) {
@@ -1011,7 +1275,7 @@ enifed('ember-testing/helpers', ['exports', 'ember-metal/property_get', 'ember-m
1011
1275
  }
1012
1276
 
1013
1277
  // 2. If there are pending Ajax requests, keep polling
1014
- if (_emberTestingTest.default.pendingAjaxRequests) {
1278
+ if (_emberTestingTestPending_requests.pendingRequests()) {
1015
1279
  return;
1016
1280
  }
1017
1281
 
@@ -1019,13 +1283,11 @@ enifed('ember-testing/helpers', ['exports', 'ember-metal/property_get', 'ember-m
1019
1283
  if (_emberMetalRun_loop.default.hasScheduledTimers() || _emberMetalRun_loop.default.currentRunLoop) {
1020
1284
  return;
1021
1285
  }
1022
- if (_emberTestingTest.default.waiters && _emberTestingTest.default.waiters.any(function (waiter) {
1023
- var context = waiter[0];
1024
- var callback = waiter[1];
1025
- return !callback.call(context);
1026
- })) {
1286
+
1287
+ if (_emberTestingTestWaiters.checkWaiters()) {
1027
1288
  return;
1028
1289
  }
1290
+
1029
1291
  // Stop polling
1030
1292
  clearInterval(watcher);
1031
1293
 
@@ -1034,6 +1296,14 @@ enifed('ember-testing/helpers', ['exports', 'ember-metal/property_get', 'ember-m
1034
1296
  }, 10);
1035
1297
  });
1036
1298
  }
1299
+ });
1300
+ enifed('ember-testing/helpers', ['exports', 'ember-testing/test/helpers', 'ember-testing/helpers/and_then', 'ember-testing/helpers/click', 'ember-testing/helpers/current_path', 'ember-testing/helpers/current_route_name', 'ember-testing/helpers/current_url', 'ember-testing/helpers/fill_in', 'ember-testing/helpers/find', 'ember-testing/helpers/find_with_assert', 'ember-testing/helpers/key_event', 'ember-testing/helpers/pause_test', 'ember-testing/helpers/trigger_event', 'ember-testing/helpers/visit', 'ember-testing/helpers/wait'], function (exports, _emberTestingTestHelpers, _emberTestingHelpersAnd_then, _emberTestingHelpersClick, _emberTestingHelpersCurrent_path, _emberTestingHelpersCurrent_route_name, _emberTestingHelpersCurrent_url, _emberTestingHelpersFill_in, _emberTestingHelpersFind, _emberTestingHelpersFind_with_assert, _emberTestingHelpersKey_event, _emberTestingHelpersPause_test, _emberTestingHelpersTrigger_event, _emberTestingHelpersVisit, _emberTestingHelpersWait) {
1301
+ 'use strict';
1302
+
1303
+ /**
1304
+ @module ember
1305
+ @submodule ember-testing
1306
+ */
1037
1307
 
1038
1308
  /**
1039
1309
  Loads a route, sets up any controllers, and renders any templates associated
@@ -1053,7 +1323,7 @@ enifed('ember-testing/helpers', ['exports', 'ember-metal/property_get', 'ember-m
1053
1323
  @return {RSVP.Promise}
1054
1324
  @public
1055
1325
  */
1056
- asyncHelper('visit', visit);
1326
+ _emberTestingTestHelpers.registerAsyncHelper('visit', _emberTestingHelpersVisit.default);
1057
1327
 
1058
1328
  /**
1059
1329
  Clicks an element and triggers any actions triggered by the element's `click`
@@ -1072,7 +1342,7 @@ enifed('ember-testing/helpers', ['exports', 'ember-metal/property_get', 'ember-m
1072
1342
  @return {RSVP.Promise}
1073
1343
  @public
1074
1344
  */
1075
- asyncHelper('click', click);
1345
+ _emberTestingTestHelpers.registerAsyncHelper('click', _emberTestingHelpersClick.default);
1076
1346
 
1077
1347
  /**
1078
1348
  Simulates a key event, e.g. `keypress`, `keydown`, `keyup` with the desired keyCode
@@ -1093,7 +1363,7 @@ enifed('ember-testing/helpers', ['exports', 'ember-metal/property_get', 'ember-m
1093
1363
  @since 1.5.0
1094
1364
  @public
1095
1365
  */
1096
- asyncHelper('keyEvent', keyEvent);
1366
+ _emberTestingTestHelpers.registerAsyncHelper('keyEvent', _emberTestingHelpersKey_event.default);
1097
1367
 
1098
1368
  /**
1099
1369
  Fills in an input element with some text.
@@ -1113,7 +1383,7 @@ enifed('ember-testing/helpers', ['exports', 'ember-metal/property_get', 'ember-m
1113
1383
  @return {RSVP.Promise}
1114
1384
  @public
1115
1385
  */
1116
- asyncHelper('fillIn', fillIn);
1386
+ _emberTestingTestHelpers.registerAsyncHelper('fillIn', _emberTestingHelpersFill_in.default);
1117
1387
 
1118
1388
  /**
1119
1389
  Finds an element in the context of the app's container element. A simple alias
@@ -1130,7 +1400,7 @@ enifed('ember-testing/helpers', ['exports', 'ember-metal/property_get', 'ember-m
1130
1400
  @return {Object} jQuery object representing the results of the query
1131
1401
  @public
1132
1402
  */
1133
- helper('find', find);
1403
+ _emberTestingTestHelpers.registerHelper('find', _emberTestingHelpersFind.default);
1134
1404
 
1135
1405
  /**
1136
1406
  Like `find`, but throws an error if the element selector returns no results.
@@ -1148,7 +1418,7 @@ enifed('ember-testing/helpers', ['exports', 'ember-metal/property_get', 'ember-m
1148
1418
  @throws {Error} throws error if jQuery object returned has a length of 0
1149
1419
  @public
1150
1420
  */
1151
- helper('findWithAssert', findWithAssert);
1421
+ _emberTestingTestHelpers.registerHelper('findWithAssert', _emberTestingHelpersFind_with_assert.default);
1152
1422
 
1153
1423
  /**
1154
1424
  Causes the run loop to process any pending events. This is used to ensure that
@@ -1174,8 +1444,8 @@ enifed('ember-testing/helpers', ['exports', 'ember-metal/property_get', 'ember-m
1174
1444
  @return {RSVP.Promise}
1175
1445
  @public
1176
1446
  */
1177
- asyncHelper('wait', wait);
1178
- asyncHelper('andThen', andThen);
1447
+ _emberTestingTestHelpers.registerAsyncHelper('wait', _emberTestingHelpersWait.default);
1448
+ _emberTestingTestHelpers.registerAsyncHelper('andThen', _emberTestingHelpersAnd_then.default);
1179
1449
 
1180
1450
  /**
1181
1451
  Returns the currently active route name.
@@ -1195,7 +1465,7 @@ enifed('ember-testing/helpers', ['exports', 'ember-metal/property_get', 'ember-m
1195
1465
  @since 1.5.0
1196
1466
  @public
1197
1467
  */
1198
- helper('currentRouteName', currentRouteName);
1468
+ _emberTestingTestHelpers.registerHelper('currentRouteName', _emberTestingHelpersCurrent_route_name.default);
1199
1469
 
1200
1470
  /**
1201
1471
  Returns the current path.
@@ -1215,7 +1485,7 @@ enifed('ember-testing/helpers', ['exports', 'ember-metal/property_get', 'ember-m
1215
1485
  @since 1.5.0
1216
1486
  @public
1217
1487
  */
1218
- helper('currentPath', currentPath);
1488
+ _emberTestingTestHelpers.registerHelper('currentPath', _emberTestingHelpersCurrent_path.default);
1219
1489
 
1220
1490
  /**
1221
1491
  Returns the current URL.
@@ -1235,7 +1505,7 @@ enifed('ember-testing/helpers', ['exports', 'ember-metal/property_get', 'ember-m
1235
1505
  @since 1.5.0
1236
1506
  @public
1237
1507
  */
1238
- helper('currentURL', currentURL);
1508
+ _emberTestingTestHelpers.registerHelper('currentURL', _emberTestingHelpersCurrent_url.default);
1239
1509
 
1240
1510
  /**
1241
1511
  Pauses the current test - this is useful for debugging while testing or for test-driving.
@@ -1255,7 +1525,7 @@ enifed('ember-testing/helpers', ['exports', 'ember-metal/property_get', 'ember-m
1255
1525
  @return {Object} A promise that will never resolve
1256
1526
  @public
1257
1527
  */
1258
- helper('pauseTest', pauseTest);
1528
+ _emberTestingTestHelpers.registerHelper('pauseTest', _emberTestingHelpersPause_test.default);
1259
1529
 
1260
1530
  /**
1261
1531
  Triggers the given DOM event on the element identified by the provided selector.
@@ -1282,16 +1552,12 @@ enifed('ember-testing/helpers', ['exports', 'ember-metal/property_get', 'ember-m
1282
1552
  @since 1.5.0
1283
1553
  @public
1284
1554
  */
1285
- asyncHelper('triggerEvent', triggerEvent);
1555
+ _emberTestingTestHelpers.registerAsyncHelper('triggerEvent', _emberTestingHelpersTrigger_event.default);
1286
1556
  });
1287
-
1288
- // Firefox does not trigger the `focusin` event if the window
1289
- // does not have focus. If the document doesn't have focus just
1290
- // use trigger('focusin') instead.
1291
- enifed('ember-testing/index', ['exports', 'ember-metal/core', 'ember-testing/initializers', 'ember-testing/support', 'ember-testing/setup_for_testing', 'ember-testing/test', 'ember-testing/adapters/adapter', 'ember-testing/adapters/qunit', 'ember-testing/helpers'], function (exports, _emberMetalCore, _emberTestingInitializers, _emberTestingSupport, _emberTestingSetup_for_testing, _emberTestingTest, _emberTestingAdaptersAdapter, _emberTestingAdaptersQunit, _emberTestingHelpers) {
1557
+ enifed('ember-testing/index', ['exports', 'ember-metal/core', 'ember-testing/test', 'ember-testing/adapters/adapter', 'ember-testing/setup_for_testing', 'require', 'ember-testing/support', 'ember-testing/ext/application', 'ember-testing/ext/rsvp', 'ember-testing/helpers', 'ember-testing/initializers'], function (exports, _emberMetalCore, _emberTestingTest, _emberTestingAdaptersAdapter, _emberTestingSetup_for_testing, _require, _emberTestingSupport, _emberTestingExtApplication, _emberTestingExtRsvp, _emberTestingHelpers, _emberTestingInitializers) {
1292
1558
  'use strict';
1293
1559
 
1294
- // adds helpers to helpers object in Test
1560
+ // to setup initializer
1295
1561
 
1296
1562
  /**
1297
1563
  @module ember
@@ -1300,11 +1566,16 @@ enifed('ember-testing/index', ['exports', 'ember-metal/core', 'ember-testing/ini
1300
1566
 
1301
1567
  _emberMetalCore.default.Test = _emberTestingTest.default;
1302
1568
  _emberMetalCore.default.Test.Adapter = _emberTestingAdaptersAdapter.default;
1303
- _emberMetalCore.default.Test.QUnitAdapter = _emberTestingAdaptersQunit.default;
1304
1569
  _emberMetalCore.default.setupForTesting = _emberTestingSetup_for_testing.default;
1570
+ Object.defineProperty(_emberTestingTest.default, 'QUnitAdapter', {
1571
+ get: function () {
1572
+ return _require.default('ember-testing/adapters/qunit').default;
1573
+ }
1574
+ });
1305
1575
  });
1306
- // to setup initializer
1576
+ // reexports
1307
1577
  // to handle various edge cases
1578
+ // adds helpers to helpers object in Test
1308
1579
  enifed('ember-testing/initializers', ['exports', 'ember-runtime/system/lazy_load'], function (exports, _emberRuntimeSystemLazy_load) {
1309
1580
  'use strict';
1310
1581
 
@@ -1324,27 +1595,11 @@ enifed('ember-testing/initializers', ['exports', 'ember-runtime/system/lazy_load
1324
1595
  }
1325
1596
  });
1326
1597
  });
1327
- enifed('ember-testing/setup_for_testing', ['exports', 'ember-metal/core', 'ember-testing/adapters/qunit', 'ember-views/system/jquery'], function (exports, _emberMetalCore, _emberTestingAdaptersQunit, _emberViewsSystemJquery) {
1598
+ enifed('ember-testing/setup_for_testing', ['exports', 'ember-metal/testing', 'ember-views/system/jquery', 'ember-testing/test/adapter', 'ember-testing/test/pending_requests', 'require'], function (exports, _emberMetalTesting, _emberViewsSystemJquery, _emberTestingTestAdapter, _emberTestingTestPending_requests, _require) {
1328
1599
  'use strict';
1329
1600
 
1330
1601
  exports.default = setupForTesting;
1331
1602
 
1332
- var Test, requests;
1333
-
1334
- function incrementAjaxPendingRequests(_, xhr) {
1335
- requests.push(xhr);
1336
- Test.pendingAjaxRequests = requests.length;
1337
- }
1338
-
1339
- function decrementAjaxPendingRequests(_, xhr) {
1340
- for (var i = 0; i < requests.length; i++) {
1341
- if (xhr === requests[i]) {
1342
- requests.splice(i, 1);
1343
- }
1344
- }
1345
- Test.pendingAjaxRequests = requests.length;
1346
- }
1347
-
1348
1603
  /**
1349
1604
  Sets Ember up for testing. This is useful to perform
1350
1605
  basic setup steps in order to unit test.
@@ -1359,29 +1614,25 @@ enifed('ember-testing/setup_for_testing', ['exports', 'ember-metal/core', 'ember
1359
1614
  */
1360
1615
 
1361
1616
  function setupForTesting() {
1362
- if (!Test) {
1363
- Test = requireModule('ember-testing/test')['default'];
1364
- }
1365
-
1366
- _emberMetalCore.default.testing = true;
1617
+ _emberMetalTesting.setTesting(true);
1367
1618
 
1619
+ var adapter = _emberTestingTestAdapter.getAdapter();
1368
1620
  // if adapter is not manually set default to QUnit
1369
- if (!Test.adapter) {
1370
- Test.adapter = _emberTestingAdaptersQunit.default.create();
1621
+ if (!adapter) {
1622
+ var QUnitAdapter = _require.default('ember-testing/adapters/qunit').default;
1623
+ _emberTestingTestAdapter.setAdapter(new QUnitAdapter());
1371
1624
  }
1372
1625
 
1373
- requests = [];
1374
- Test.pendingAjaxRequests = requests.length;
1626
+ _emberViewsSystemJquery.default(document).off('ajaxSend', _emberTestingTestPending_requests.incrementPendingRequests);
1627
+ _emberViewsSystemJquery.default(document).off('ajaxComplete', _emberTestingTestPending_requests.decrementPendingRequests);
1628
+
1629
+ _emberTestingTestPending_requests.clearPendingRequests();
1375
1630
 
1376
- _emberViewsSystemJquery.default(document).off('ajaxSend', incrementAjaxPendingRequests);
1377
- _emberViewsSystemJquery.default(document).off('ajaxComplete', decrementAjaxPendingRequests);
1378
- _emberViewsSystemJquery.default(document).on('ajaxSend', incrementAjaxPendingRequests);
1379
- _emberViewsSystemJquery.default(document).on('ajaxComplete', decrementAjaxPendingRequests);
1631
+ _emberViewsSystemJquery.default(document).on('ajaxSend', _emberTestingTestPending_requests.incrementPendingRequests);
1632
+ _emberViewsSystemJquery.default(document).on('ajaxComplete', _emberTestingTestPending_requests.decrementPendingRequests);
1380
1633
  }
1381
1634
  });
1382
-
1383
- // import Test from "ember-testing/test"; // ES6TODO: fix when cycles are supported
1384
- enifed('ember-testing/support', ['exports', 'ember-metal/debug', 'ember-views/system/jquery', 'ember-metal/environment'], function (exports, _emberMetalDebug, _emberViewsSystemJquery, _emberMetalEnvironment) {
1635
+ enifed('ember-testing/support', ['exports', 'ember-metal/debug', 'ember-views/system/jquery', 'ember-environment'], function (exports, _emberMetalDebug, _emberViewsSystemJquery, _emberEnvironment) {
1385
1636
  'use strict';
1386
1637
 
1387
1638
  /**
@@ -1403,7 +1654,7 @@ enifed('ember-testing/support', ['exports', 'ember-metal/debug', 'ember-views/sy
1403
1654
  $('<input type="checkbox">').css({ position: 'absolute', left: '-1000px', top: '-1000px' }).appendTo('body').on('click', handler).trigger('click').remove();
1404
1655
  }
1405
1656
 
1406
- if (_emberMetalEnvironment.default.hasDOM) {
1657
+ if (_emberEnvironment.environment.hasDOM) {
1407
1658
  $(function () {
1408
1659
  /*
1409
1660
  Determine whether a checkbox checked using jQuery's "click" method will have
@@ -1433,463 +1684,324 @@ enifed('ember-testing/support', ['exports', 'ember-metal/debug', 'ember-views/sy
1433
1684
  });
1434
1685
  }
1435
1686
  });
1436
- enifed('ember-testing/test', ['exports', 'ember-metal/run_loop', 'ember-runtime/ext/rsvp', 'ember-testing/setup_for_testing', 'ember-application/system/application', 'ember-runtime/system/native_array'], function (exports, _emberMetalRun_loop, _emberRuntimeExtRsvp, _emberTestingSetup_for_testing, _emberApplicationSystemApplication, _emberRuntimeSystemNative_array) {
1687
+ enifed('ember-testing/test/adapter', ['exports', 'ember-console', 'ember-metal/error_handler'], function (exports, _emberConsole, _emberMetalError_handler) {
1437
1688
  'use strict';
1438
1689
 
1439
- /**
1440
- @module ember
1441
- @submodule ember-testing
1442
- */
1443
- var helpers = {};
1444
- var injectHelpersCallbacks = [];
1690
+ exports.getAdapter = getAdapter;
1691
+ exports.setAdapter = setAdapter;
1692
+ exports.asyncStart = asyncStart;
1693
+ exports.asyncEnd = asyncEnd;
1445
1694
 
1446
- /**
1447
- This is a container for an assortment of testing related functionality:
1695
+ var adapter = undefined;
1696
+
1697
+ function getAdapter() {
1698
+ return adapter;
1699
+ }
1700
+
1701
+ function setAdapter(value) {
1702
+ adapter = value;
1703
+ if (value) {
1704
+ _emberMetalError_handler.setDispatchOverride(adapterDispatch);
1705
+ } else {
1706
+ _emberMetalError_handler.setDispatchOverride(null);
1707
+ }
1708
+ }
1709
+
1710
+ function asyncStart() {
1711
+ if (adapter) {
1712
+ adapter.asyncStart();
1713
+ }
1714
+ }
1715
+
1716
+ function asyncEnd() {
1717
+ if (adapter) {
1718
+ adapter.asyncEnd();
1719
+ }
1720
+ }
1721
+
1722
+ function adapterDispatch(error) {
1723
+ adapter.exception(error);
1724
+ _emberConsole.default.error(error.stack);
1725
+ }
1726
+ });
1727
+ enifed('ember-testing/test/helpers', ['exports', 'ember-testing/test/promise'], function (exports, _emberTestingTestPromise) {
1728
+ 'use strict';
1729
+
1730
+ exports.registerHelper = registerHelper;
1731
+ exports.registerAsyncHelper = registerAsyncHelper;
1732
+ exports.unregisterHelper = unregisterHelper;
1733
+ var helpers = {};
1734
+
1735
+ exports.helpers = helpers;
1736
+ /**
1737
+ `registerHelper` is used to register a test helper that will be injected
1738
+ when `App.injectTestHelpers` is called.
1448
1739
 
1449
- * Choose your default test adapter (for your framework of choice).
1450
- * Register/Unregister additional test helpers.
1451
- * Setup callbacks to be fired when the test helpers are injected into
1452
- your application.
1740
+ The helper method will always be called with the current Application as
1741
+ the first parameter.
1742
+
1743
+ For example:
1744
+
1745
+ ```javascript
1746
+ Ember.Test.registerHelper('boot', function(app) {
1747
+ Ember.run(app, app.advanceReadiness);
1748
+ });
1749
+ ```
1750
+
1751
+ This helper can later be called without arguments because it will be
1752
+ called with `app` as the first parameter.
1753
+
1754
+ ```javascript
1755
+ App = Ember.Application.create();
1756
+ App.injectTestHelpers();
1757
+ boot();
1758
+ ```
1453
1759
 
1454
- @class Test
1455
- @namespace Ember
1456
1760
  @public
1761
+ @for Ember.Test
1762
+ @method registerHelper
1763
+ @param {String} name The name of the helper method to add.
1764
+ @param {Function} helperMethod
1765
+ @param options {Object}
1457
1766
  */
1458
- var Test = {
1459
- /**
1460
- Hash containing all known test helpers.
1461
- @property _helpers
1462
- @private
1463
- @since 1.7.0
1464
- */
1465
- _helpers: helpers,
1466
1767
 
1467
- /**
1468
- `registerHelper` is used to register a test helper that will be injected
1469
- when `App.injectTestHelpers` is called.
1470
- The helper method will always be called with the current Application as
1471
- the first parameter.
1472
- For example:
1473
- ```javascript
1474
- Ember.Test.registerHelper('boot', function(app) {
1475
- Ember.run(app, app.advanceReadiness);
1476
- });
1477
- ```
1478
- This helper can later be called without arguments because it will be
1479
- called with `app` as the first parameter.
1480
- ```javascript
1481
- App = Ember.Application.create();
1482
- App.injectTestHelpers();
1483
- boot();
1484
- ```
1485
- @public
1486
- @method registerHelper
1487
- @param {String} name The name of the helper method to add.
1488
- @param {Function} helperMethod
1489
- @param options {Object}
1490
- */
1491
- registerHelper: function (name, helperMethod) {
1492
- helpers[name] = {
1493
- method: helperMethod,
1494
- meta: { wait: false }
1495
- };
1496
- },
1768
+ function registerHelper(name, helperMethod) {
1769
+ helpers[name] = {
1770
+ method: helperMethod,
1771
+ meta: { wait: false }
1772
+ };
1773
+ }
1497
1774
 
1498
- /**
1499
- `registerAsyncHelper` is used to register an async test helper that will be injected
1500
- when `App.injectTestHelpers` is called.
1501
- The helper method will always be called with the current Application as
1502
- the first parameter.
1503
- For example:
1504
- ```javascript
1505
- Ember.Test.registerAsyncHelper('boot', function(app) {
1506
- Ember.run(app, app.advanceReadiness);
1507
- });
1508
- ```
1509
- The advantage of an async helper is that it will not run
1510
- until the last async helper has completed. All async helpers
1511
- after it will wait for it complete before running.
1512
- For example:
1513
- ```javascript
1514
- Ember.Test.registerAsyncHelper('deletePost', function(app, postId) {
1515
- click('.delete-' + postId);
1516
- });
1517
- // ... in your test
1518
- visit('/post/2');
1519
- deletePost(2);
1520
- visit('/post/3');
1521
- deletePost(3);
1522
- ```
1523
- @public
1524
- @method registerAsyncHelper
1525
- @param {String} name The name of the helper method to add.
1526
- @param {Function} helperMethod
1527
- @since 1.2.0
1528
- */
1529
- registerAsyncHelper: function (name, helperMethod) {
1530
- helpers[name] = {
1531
- method: helperMethod,
1532
- meta: { wait: true }
1533
- };
1534
- },
1775
+ /**
1776
+ `registerAsyncHelper` is used to register an async test helper that will be injected
1777
+ when `App.injectTestHelpers` is called.
1778
+
1779
+ The helper method will always be called with the current Application as
1780
+ the first parameter.
1781
+
1782
+ For example:
1783
+
1784
+ ```javascript
1785
+ Ember.Test.registerAsyncHelper('boot', function(app) {
1786
+ Ember.run(app, app.advanceReadiness);
1787
+ });
1788
+ ```
1789
+
1790
+ The advantage of an async helper is that it will not run
1791
+ until the last async helper has completed. All async helpers
1792
+ after it will wait for it complete before running.
1793
+
1794
+
1795
+ For example:
1796
+
1797
+ ```javascript
1798
+ Ember.Test.registerAsyncHelper('deletePost', function(app, postId) {
1799
+ click('.delete-' + postId);
1800
+ });
1801
+
1802
+ // ... in your test
1803
+ visit('/post/2');
1804
+ deletePost(2);
1805
+ visit('/post/3');
1806
+ deletePost(3);
1807
+ ```
1808
+
1809
+ @public
1810
+ @for Ember.Test
1811
+ @method registerAsyncHelper
1812
+ @param {String} name The name of the helper method to add.
1813
+ @param {Function} helperMethod
1814
+ @since 1.2.0
1815
+ */
1535
1816
 
1536
- /**
1537
- Remove a previously added helper method.
1538
- Example:
1539
- ```javascript
1540
- Ember.Test.unregisterHelper('wait');
1541
- ```
1542
- @public
1543
- @method unregisterHelper
1544
- @param {String} name The helper to remove.
1545
- */
1546
- unregisterHelper: function (name) {
1547
- delete helpers[name];
1548
- delete Test.Promise.prototype[name];
1549
- },
1817
+ function registerAsyncHelper(name, helperMethod) {
1818
+ helpers[name] = {
1819
+ method: helperMethod,
1820
+ meta: { wait: true }
1821
+ };
1822
+ }
1550
1823
 
1551
- /**
1552
- Used to register callbacks to be fired whenever `App.injectTestHelpers`
1553
- is called.
1554
- The callback will receive the current application as an argument.
1555
- Example:
1556
- ```javascript
1557
- Ember.Test.onInjectHelpers(function() {
1558
- Ember.$(document).ajaxSend(function() {
1559
- Test.pendingAjaxRequests++;
1560
- });
1561
- Ember.$(document).ajaxComplete(function() {
1562
- Test.pendingAjaxRequests--;
1563
- });
1564
- });
1565
- ```
1566
- @public
1567
- @method onInjectHelpers
1568
- @param {Function} callback The function to be called.
1569
- */
1570
- onInjectHelpers: function (callback) {
1571
- injectHelpersCallbacks.push(callback);
1572
- },
1824
+ /**
1825
+ Remove a previously added helper method.
1826
+
1827
+ Example:
1828
+
1829
+ ```javascript
1830
+ Ember.Test.unregisterHelper('wait');
1831
+ ```
1832
+
1833
+ @public
1834
+ @method unregisterHelper
1835
+ @param {String} name The helper to remove.
1836
+ */
1573
1837
 
1574
- /**
1575
- This returns a thenable tailored for testing. It catches failed
1576
- `onSuccess` callbacks and invokes the `Ember.Test.adapter.exception`
1577
- callback in the last chained then.
1578
- This method should be returned by async helpers such as `wait`.
1579
- @public
1580
- @method promise
1581
- @param {Function} resolver The function used to resolve the promise.
1582
- @param {String} label An optional string for identifying the promise.
1583
- */
1584
- promise: function (resolver, label) {
1585
- var fullLabel = 'Ember.Test.promise: ' + (label || '<Unknown Promise>');
1586
- return new Test.Promise(resolver, fullLabel);
1587
- },
1838
+ function unregisterHelper(name) {
1839
+ delete helpers[name];
1840
+ delete _emberTestingTestPromise.default.prototype[name];
1841
+ }
1842
+ });
1843
+ enifed("ember-testing/test/on_inject_helpers", ["exports"], function (exports) {
1844
+ "use strict";
1588
1845
 
1589
- /**
1590
- Used to allow ember-testing to communicate with a specific testing
1591
- framework.
1592
- You can manually set it before calling `App.setupForTesting()`.
1593
- Example:
1594
- ```javascript
1595
- Ember.Test.adapter = MyCustomAdapter.create()
1596
- ```
1597
- If you do not set it, ember-testing will default to `Ember.Test.QUnitAdapter`.
1598
- @public
1599
- @property adapter
1600
- @type {Class} The adapter to be used.
1601
- @default Ember.Test.QUnitAdapter
1602
- */
1603
- adapter: null,
1846
+ exports.onInjectHelpers = onInjectHelpers;
1847
+ exports.invokeInjectHelpersCallbacks = invokeInjectHelpersCallbacks;
1848
+ var callbacks = [];
1604
1849
 
1605
- /**
1606
- Replacement for `Ember.RSVP.resolve`
1607
- The only difference is this uses
1608
- an instance of `Ember.Test.Promise`
1609
- @public
1610
- @method resolve
1611
- @param {Mixed} The value to resolve
1612
- @since 1.2.0
1613
- */
1614
- resolve: function (val) {
1615
- return Test.promise(function (resolve) {
1616
- return resolve(val);
1850
+ exports.callbacks = callbacks;
1851
+ /**
1852
+ Used to register callbacks to be fired whenever `App.injectTestHelpers`
1853
+ is called.
1854
+
1855
+ The callback will receive the current application as an argument.
1856
+
1857
+ Example:
1858
+
1859
+ ```javascript
1860
+ Ember.Test.onInjectHelpers(function() {
1861
+ Ember.$(document).ajaxSend(function() {
1862
+ Test.pendingRequests++;
1617
1863
  });
1618
- },
1619
-
1620
- /**
1621
- This allows ember-testing to play nicely with other asynchronous
1622
- events, such as an application that is waiting for a CSS3
1623
- transition or an IndexDB transaction.
1624
- For example:
1625
- ```javascript
1626
- Ember.Test.registerWaiter(function() {
1627
- return myPendingTransactions() == 0;
1628
- });
1629
- ```
1630
- The `context` argument allows you to optionally specify the `this`
1631
- with which your callback will be invoked.
1632
- For example:
1633
- ```javascript
1634
- Ember.Test.registerWaiter(MyDB, MyDB.hasPendingTransactions);
1635
- ```
1636
- @public
1637
- @method registerWaiter
1638
- @param {Object} context (optional)
1639
- @param {Function} callback
1640
- @since 1.2.0
1641
- */
1642
- registerWaiter: function (context, callback) {
1643
- if (arguments.length === 1) {
1644
- callback = context;
1645
- context = null;
1646
- }
1647
- if (!this.waiters) {
1648
- this.waiters = _emberRuntimeSystemNative_array.A();
1649
- }
1650
- this.waiters.push([context, callback]);
1651
- },
1652
- /**
1653
- `unregisterWaiter` is used to unregister a callback that was
1654
- registered with `registerWaiter`.
1655
- @public
1656
- @method unregisterWaiter
1657
- @param {Object} context (optional)
1658
- @param {Function} callback
1659
- @since 1.2.0
1660
- */
1661
- unregisterWaiter: function (context, callback) {
1662
- if (!this.waiters) {
1663
- return;
1664
- }
1665
- if (arguments.length === 1) {
1666
- callback = context;
1667
- context = null;
1668
- }
1669
- this.waiters = _emberRuntimeSystemNative_array.A(this.waiters.filter(function (elt) {
1670
- return !(elt[0] === context && elt[1] === callback);
1671
- }));
1672
- }
1673
- };
1674
-
1675
- function helper(app, name) {
1676
- var fn = helpers[name].method;
1677
- var meta = helpers[name].meta;
1864
+
1865
+ Ember.$(document).ajaxComplete(function() {
1866
+ Test.pendingRequests--;
1867
+ });
1868
+ });
1869
+ ```
1870
+
1871
+ @public
1872
+ @for Ember.Test
1873
+ @method onInjectHelpers
1874
+ @param {Function} callback The function to be called.
1875
+ */
1678
1876
 
1679
- return function () {
1680
- for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
1681
- args[_key] = arguments[_key];
1682
- }
1877
+ function onInjectHelpers(callback) {
1878
+ callbacks.push(callback);
1879
+ }
1683
1880
 
1684
- var lastPromise;
1881
+ function invokeInjectHelpersCallbacks(app) {
1882
+ for (var i = 0; i < callbacks.length; i++) {
1883
+ callbacks[i](app);
1884
+ }
1885
+ }
1886
+ });
1887
+ enifed("ember-testing/test/pending_requests", ["exports"], function (exports) {
1888
+ "use strict";
1685
1889
 
1686
- args.unshift(app);
1890
+ exports.pendingRequests = pendingRequests;
1891
+ exports.clearPendingRequests = clearPendingRequests;
1892
+ exports.incrementPendingRequests = incrementPendingRequests;
1893
+ exports.decrementPendingRequests = decrementPendingRequests;
1894
+ var requests = [];
1687
1895
 
1688
- // some helpers are not async and
1689
- // need to return a value immediately.
1690
- // example: `find`
1691
- if (!meta.wait) {
1692
- return fn.apply(app, args);
1693
- }
1896
+ function pendingRequests() {
1897
+ return requests.length;
1898
+ }
1694
1899
 
1695
- lastPromise = run(function () {
1696
- return Test.resolve(Test.lastPromise);
1697
- });
1900
+ function clearPendingRequests() {
1901
+ requests.length = 0;
1902
+ }
1698
1903
 
1699
- // wait for last helper's promise to resolve and then
1700
- // execute. To be safe, we need to tell the adapter we're going
1701
- // asynchronous here, because fn may not be invoked before we
1702
- // return.
1703
- Test.adapter.asyncStart();
1704
- return lastPromise.then(function () {
1705
- return fn.apply(app, args);
1706
- }).finally(function () {
1707
- Test.adapter.asyncEnd();
1708
- });
1709
- };
1904
+ function incrementPendingRequests(_, xhr) {
1905
+ requests.push(xhr);
1710
1906
  }
1711
1907
 
1712
- function run(fn) {
1713
- if (!_emberMetalRun_loop.default.currentRunLoop) {
1714
- return _emberMetalRun_loop.default(fn);
1715
- } else {
1716
- return fn();
1908
+ function decrementPendingRequests(_, xhr) {
1909
+ for (var i = 0; i < requests.length; i++) {
1910
+ if (xhr === requests[i]) {
1911
+ requests.splice(i, 1);
1912
+ break;
1913
+ }
1717
1914
  }
1718
1915
  }
1916
+ });
1917
+ enifed('ember-testing/test/promise', ['exports', 'ember-runtime/ext/rsvp', 'ember-testing/test/run'], function (exports, _emberRuntimeExtRsvp, _emberTestingTestRun) {
1918
+ 'use strict';
1719
1919
 
1720
- _emberApplicationSystemApplication.default.reopen({
1721
- /**
1722
- This property contains the testing helpers for the current application. These
1723
- are created once you call `injectTestHelpers` on your `Ember.Application`
1724
- instance. The included helpers are also available on the `window` object by
1725
- default, but can be used from this object on the individual application also.
1726
- @property testHelpers
1727
- @type {Object}
1728
- @default {}
1729
- @public
1730
- */
1731
- testHelpers: {},
1920
+ exports.promise = promise;
1921
+ exports.resolve = resolve;
1922
+ exports.getLastPromise = getLastPromise;
1732
1923
 
1733
- /**
1734
- This property will contain the original methods that were registered
1735
- on the `helperContainer` before `injectTestHelpers` is called.
1736
- When `removeTestHelpers` is called, these methods are restored to the
1737
- `helperContainer`.
1738
- @property originalMethods
1739
- @type {Object}
1740
- @default {}
1741
- @private
1742
- @since 1.3.0
1743
- */
1744
- originalMethods: {},
1924
+ function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }
1745
1925
 
1746
- /**
1747
- This property indicates whether or not this application is currently in
1748
- testing mode. This is set when `setupForTesting` is called on the current
1749
- application.
1750
- @property testing
1751
- @type {Boolean}
1752
- @default false
1753
- @since 1.3.0
1754
- @public
1755
- */
1756
- testing: false,
1926
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
1757
1927
 
1758
- /**
1759
- This hook defers the readiness of the application, so that you can start
1760
- the app when your tests are ready to run. It also sets the router's
1761
- location to 'none', so that the window's location will not be modified
1762
- (preventing both accidental leaking of state between tests and interference
1763
- with your testing framework).
1764
- Example:
1765
- ```
1766
- App.setupForTesting();
1767
- ```
1768
- @method setupForTesting
1769
- @public
1770
- */
1771
- setupForTesting: function () {
1772
- _emberTestingSetup_for_testing.default();
1928
+ function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); }
1773
1929
 
1774
- this.testing = true;
1930
+ var lastPromise = undefined;
1775
1931
 
1776
- this.Router.reopen({
1777
- location: 'none'
1778
- });
1779
- },
1932
+ var TestPromise = (function (_RSVP$Promise) {
1933
+ _inherits(TestPromise, _RSVP$Promise);
1780
1934
 
1781
- /**
1782
- This will be used as the container to inject the test helpers into. By
1783
- default the helpers are injected into `window`.
1784
- @property helperContainer
1785
- @type {Object} The object to be used for test helpers.
1786
- @default window
1787
- @since 1.2.0
1788
- @private
1789
- */
1790
- helperContainer: null,
1935
+ function TestPromise() {
1936
+ _classCallCheck(this, TestPromise);
1937
+
1938
+ _RSVP$Promise.apply(this, arguments);
1939
+ lastPromise = this;
1940
+ }
1791
1941
 
1792
1942
  /**
1793
- This injects the test helpers into the `helperContainer` object. If an object is provided
1794
- it will be used as the helperContainer. If `helperContainer` is not set it will default
1795
- to `window`. If a function of the same name has already been defined it will be cached
1796
- (so that it can be reset if the helper is removed with `unregisterHelper` or
1797
- `removeTestHelpers`).
1798
- Any callbacks registered with `onInjectHelpers` will be called once the
1799
- helpers have been injected.
1800
- Example:
1801
- ```
1802
- App.injectTestHelpers();
1803
- ```
1804
- @method injectTestHelpers
1943
+ This returns a thenable tailored for testing. It catches failed
1944
+ `onSuccess` callbacks and invokes the `Ember.Test.adapter.exception`
1945
+ callback in the last chained then.
1946
+
1947
+ This method should be returned by async helpers such as `wait`.
1948
+
1805
1949
  @public
1950
+ @for Ember.Test
1951
+ @method promise
1952
+ @param {Function} resolver The function used to resolve the promise.
1953
+ @param {String} label An optional string for identifying the promise.
1806
1954
  */
1807
- injectTestHelpers: function (helperContainer) {
1808
- if (helperContainer) {
1809
- this.helperContainer = helperContainer;
1810
- } else {
1811
- this.helperContainer = window;
1812
- }
1813
1955
 
1814
- this.reopen({
1815
- willDestroy: function () {
1816
- this._super.apply(this, arguments);
1817
- this.removeTestHelpers();
1818
- }
1956
+ TestPromise.resolve = function resolve(val) {
1957
+ return new TestPromise(function (resolve) {
1958
+ return resolve(val);
1819
1959
  });
1960
+ };
1820
1961
 
1821
- this.testHelpers = {};
1822
- for (var name in helpers) {
1823
- this.originalMethods[name] = this.helperContainer[name];
1824
- this.testHelpers[name] = this.helperContainer[name] = helper(this, name);
1825
- protoWrap(Test.Promise.prototype, name, helper(this, name), helpers[name].meta.wait);
1826
- }
1962
+ TestPromise.prototype.then = function then(onFulfillment) {
1963
+ var _RSVP$Promise$prototype$then;
1827
1964
 
1828
- for (var i = 0, l = injectHelpersCallbacks.length; i < l; i++) {
1829
- injectHelpersCallbacks[i](this);
1965
+ for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
1966
+ args[_key - 1] = arguments[_key];
1830
1967
  }
1831
- },
1832
1968
 
1833
- /**
1834
- This removes all helpers that have been registered, and resets and functions
1835
- that were overridden by the helpers.
1836
- Example:
1837
- ```javascript
1838
- App.removeTestHelpers();
1839
- ```
1840
- @public
1841
- @method removeTestHelpers
1842
- */
1843
- removeTestHelpers: function () {
1844
- if (!this.helperContainer) {
1845
- return;
1846
- }
1969
+ return (_RSVP$Promise$prototype$then = _RSVP$Promise.prototype.then).call.apply(_RSVP$Promise$prototype$then, [this, function (result) {
1970
+ return isolate(onFulfillment, result);
1971
+ }].concat(args));
1972
+ };
1847
1973
 
1848
- for (var name in helpers) {
1849
- this.helperContainer[name] = this.originalMethods[name];
1850
- delete Test.Promise.prototype[name];
1851
- delete this.testHelpers[name];
1852
- delete this.originalMethods[name];
1853
- }
1854
- }
1855
- });
1974
+ return TestPromise;
1975
+ })(_emberRuntimeExtRsvp.default.Promise);
1856
1976
 
1857
- // This method is no longer needed
1858
- // But still here for backwards compatibility
1859
- // of helper chaining
1860
- function protoWrap(proto, name, callback, isAsync) {
1861
- proto[name] = function () {
1862
- for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
1863
- args[_key2] = arguments[_key2];
1864
- }
1977
+ exports.default = TestPromise;
1865
1978
 
1866
- if (isAsync) {
1867
- return callback.apply(this, args);
1868
- } else {
1869
- return this.then(function () {
1870
- return callback.apply(this, args);
1871
- });
1872
- }
1873
- };
1979
+ function promise(resolver, label) {
1980
+ var fullLabel = 'Ember.Test.promise: ' + (label || '<Unknown Promise>');
1981
+ return new TestPromise(resolver, fullLabel);
1874
1982
  }
1875
1983
 
1876
- Test.Promise = function () {
1877
- _emberRuntimeExtRsvp.default.Promise.apply(this, arguments);
1878
- Test.lastPromise = this;
1879
- };
1984
+ /**
1985
+ Replacement for `Ember.RSVP.resolve`
1986
+ The only difference is this uses
1987
+ an instance of `Ember.Test.Promise`
1988
+
1989
+ @public
1990
+ @for Ember.Test
1991
+ @method resolve
1992
+ @param {Mixed} The value to resolve
1993
+ @since 1.2.0
1994
+ */
1880
1995
 
1881
- Test.Promise.prototype = Object.create(_emberRuntimeExtRsvp.default.Promise.prototype);
1882
- Test.Promise.prototype.constructor = Test.Promise;
1883
- Test.Promise.resolve = Test.resolve;
1884
-
1885
- // Patch `then` to isolate async methods
1886
- // specifically `Ember.Test.lastPromise`
1887
- var originalThen = _emberRuntimeExtRsvp.default.Promise.prototype.then;
1888
- Test.Promise.prototype.then = function (onSuccess, onFailure) {
1889
- return originalThen.call(this, function (val) {
1890
- return isolate(onSuccess, val);
1891
- }, onFailure);
1892
- };
1996
+ function resolve(result) {
1997
+ return new TestPromise(function (resolve) {
1998
+ return resolve(result);
1999
+ });
2000
+ }
2001
+
2002
+ function getLastPromise() {
2003
+ return lastPromise;
2004
+ }
1893
2005
 
1894
2006
  // This method isolates nested async methods
1895
2007
  // so that they don't conflict with other last promises.
@@ -1897,30 +2009,206 @@ enifed('ember-testing/test', ['exports', 'ember-metal/run_loop', 'ember-runtime/
1897
2009
  // 1. Set `Ember.Test.lastPromise` to null
1898
2010
  // 2. Invoke method
1899
2011
  // 3. Return the last promise created during method
1900
- function isolate(fn, val) {
1901
- var value, lastPromise;
1902
-
2012
+ function isolate(onFulfillment, result) {
1903
2013
  // Reset lastPromise for nested helpers
1904
- Test.lastPromise = null;
2014
+ lastPromise = null;
1905
2015
 
1906
- value = fn(val);
2016
+ var value = onFulfillment(result);
1907
2017
 
1908
- lastPromise = Test.lastPromise;
1909
- Test.lastPromise = null;
2018
+ var promise = lastPromise;
2019
+ lastPromise = null;
1910
2020
 
1911
2021
  // If the method returned a promise
1912
2022
  // return that promise. If not,
1913
2023
  // return the last async helper's promise
1914
- if (value && value instanceof Test.Promise || !lastPromise) {
2024
+ if (value && value instanceof TestPromise || !promise) {
1915
2025
  return value;
1916
2026
  } else {
1917
- return run(function () {
1918
- return Test.resolve(lastPromise).then(function () {
2027
+ return _emberTestingTestRun.default(function () {
2028
+ return resolve(promise).then(function () {
1919
2029
  return value;
1920
2030
  });
1921
2031
  });
1922
2032
  }
1923
2033
  }
2034
+ });
2035
+ enifed('ember-testing/test/run', ['exports', 'ember-metal/run_loop'], function (exports, _emberMetalRun_loop) {
2036
+ 'use strict';
2037
+
2038
+ exports.default = run;
2039
+
2040
+ function run(fn) {
2041
+ if (!_emberMetalRun_loop.default.currentRunLoop) {
2042
+ return _emberMetalRun_loop.default(fn);
2043
+ } else {
2044
+ return fn();
2045
+ }
2046
+ }
2047
+ });
2048
+ enifed("ember-testing/test/waiters", ["exports"], function (exports) {
2049
+ "use strict";
2050
+
2051
+ exports.registerWaiter = registerWaiter;
2052
+ exports.unregisterWaiter = unregisterWaiter;
2053
+ exports.checkWaiters = checkWaiters;
2054
+ var contexts = [];
2055
+ var callbacks = [];
2056
+
2057
+ /**
2058
+ This allows ember-testing to play nicely with other asynchronous
2059
+ events, such as an application that is waiting for a CSS3
2060
+ transition or an IndexDB transaction.
2061
+
2062
+ For example:
2063
+
2064
+ ```javascript
2065
+ Ember.Test.registerWaiter(function() {
2066
+ return myPendingTransactions() == 0;
2067
+ });
2068
+ ```
2069
+ The `context` argument allows you to optionally specify the `this`
2070
+ with which your callback will be invoked.
2071
+
2072
+ For example:
2073
+
2074
+ ```javascript
2075
+ Ember.Test.registerWaiter(MyDB, MyDB.hasPendingTransactions);
2076
+ ```
2077
+
2078
+ @public
2079
+ @for Ember.Test
2080
+ @method registerWaiter
2081
+ @param {Object} context (optional)
2082
+ @param {Function} callback
2083
+ @since 1.2.0
2084
+ */
2085
+
2086
+ function registerWaiter(context, callback) {
2087
+ if (arguments.length === 1) {
2088
+ callback = context;
2089
+ context = null;
2090
+ }
2091
+ if (indexOf(context, callback) > -1) {
2092
+ return;
2093
+ }
2094
+ contexts.push(context);
2095
+ callbacks.push(callback);
2096
+ }
2097
+
2098
+ /**
2099
+ `unregisterWaiter` is used to unregister a callback that was
2100
+ registered with `registerWaiter`.
2101
+
2102
+ @public
2103
+ @for Ember.Test
2104
+ @method unregisterWaiter
2105
+ @param {Object} context (optional)
2106
+ @param {Function} callback
2107
+ @since 1.2.0
2108
+ */
2109
+
2110
+ function unregisterWaiter(context, callback) {
2111
+ if (!callbacks.length) {
2112
+ return;
2113
+ }
2114
+ if (arguments.length === 1) {
2115
+ callback = context;
2116
+ context = null;
2117
+ }
2118
+ var i = indexOf(context, callback);
2119
+ if (i === -1) {
2120
+ return;
2121
+ }
2122
+ contexts.splice(i, 1);
2123
+ callbacks.splice(i, 1);
2124
+ }
2125
+
2126
+ function checkWaiters() {
2127
+ if (!callbacks.length) {
2128
+ return false;
2129
+ }
2130
+ for (var i = 0; i < callbacks.length; i++) {
2131
+ var context = contexts[i];
2132
+ var callback = callbacks[i];
2133
+ if (!callback.call(context)) {
2134
+ return true;
2135
+ }
2136
+ }
2137
+ return false;
2138
+ }
2139
+
2140
+ function indexOf(context, callback) {
2141
+ for (var i = 0; i < callbacks.length; i++) {
2142
+ if (callbacks[i] === callback && contexts[i] === context) {
2143
+ return i;
2144
+ }
2145
+ }
2146
+ return -1;
2147
+ }
2148
+ });
2149
+ enifed('ember-testing/test', ['exports', 'ember-testing/test/helpers', 'ember-testing/test/on_inject_helpers', 'ember-testing/test/promise', 'ember-testing/test/waiters', 'ember-testing/test/adapter'], function (exports, _emberTestingTestHelpers, _emberTestingTestOn_inject_helpers, _emberTestingTestPromise, _emberTestingTestWaiters, _emberTestingTestAdapter) {
2150
+ /**
2151
+ @module ember
2152
+ @submodule ember-testing
2153
+ */
2154
+ 'use strict';
2155
+
2156
+ /**
2157
+ This is a container for an assortment of testing related functionality:
2158
+
2159
+ * Choose your default test adapter (for your framework of choice).
2160
+ * Register/Unregister additional test helpers.
2161
+ * Setup callbacks to be fired when the test helpers are injected into
2162
+ your application.
2163
+
2164
+ @class Test
2165
+ @namespace Ember
2166
+ @public
2167
+ */
2168
+ var Test = {
2169
+ /**
2170
+ Hash containing all known test helpers.
2171
+ @property _helpers
2172
+ @private
2173
+ @since 1.7.0
2174
+ */
2175
+ _helpers: _emberTestingTestHelpers.helpers,
2176
+
2177
+ registerHelper: _emberTestingTestHelpers.registerHelper,
2178
+ registerAsyncHelper: _emberTestingTestHelpers.registerAsyncHelper,
2179
+ unregisterHelper: _emberTestingTestHelpers.unregisterHelper,
2180
+ onInjectHelpers: _emberTestingTestOn_inject_helpers.onInjectHelpers,
2181
+ Promise: _emberTestingTestPromise.default,
2182
+ promise: _emberTestingTestPromise.promise,
2183
+ resolve: _emberTestingTestPromise.resolve,
2184
+ registerWaiter: _emberTestingTestWaiters.registerWaiter,
2185
+ unregisterWaiter: _emberTestingTestWaiters.unregisterWaiter
2186
+ };
2187
+
2188
+ /**
2189
+ Used to allow ember-testing to communicate with a specific testing
2190
+ framework.
2191
+
2192
+ You can manually set it before calling `App.setupForTesting()`.
2193
+
2194
+ Example:
2195
+
2196
+ ```javascript
2197
+ Ember.Test.adapter = MyCustomAdapter.create()
2198
+ ```
2199
+
2200
+ If you do not set it, ember-testing will default to `Ember.Test.QUnitAdapter`.
2201
+
2202
+ @public
2203
+ @for Ember.Test
2204
+ @property adapter
2205
+ @type {Class} The adapter to be used.
2206
+ @default Ember.Test.QUnitAdapter
2207
+ */
2208
+ Object.defineProperty(Test, 'adapter', {
2209
+ get: _emberTestingTestAdapter.getAdapter,
2210
+ set: _emberTestingTestAdapter.setAdapter
2211
+ });
1924
2212
 
1925
2213
  exports.default = Test;
1926
2214
  });