ember-source 2.16.0.beta.1 → 2.16.0.beta.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.
@@ -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.16.0-beta.1
9
+ * @version 2.16.0-beta.2
10
10
  */
11
11
 
12
12
  var enifed, requireModule, Ember;
@@ -112,7 +112,7 @@ var mainContext = this; // Used in ember-environment/lib/global.js
112
112
  }
113
113
  })();
114
114
 
115
- enifed('container/tests/container_test', ['ember-utils', 'ember-environment', 'ember-metal', 'container', 'internal-test-helpers'], function (_emberUtils, _emberEnvironment, _emberMetal, _container, _internalTestHelpers) {
115
+ enifed('container/tests/container_test', ['ember-utils', 'ember-metal', 'container', 'internal-test-helpers'], function (_emberUtils, _emberMetal, _container, _internalTestHelpers) {
116
116
  'use strict';
117
117
 
118
118
  QUnit.module('Container');
@@ -7767,7 +7767,7 @@ enifed('ember-glimmer/tests/integration/application/engine-test', ['ember-babel'
7767
7767
  return this.visit('/').then(function () {
7768
7768
  _this12.assertText('Application');
7769
7769
  return _this12.transitionTo('blog.post');
7770
- }).catch(function () {
7770
+ }).then(function () {
7771
7771
  _this12.assertText('ApplicationError! Oh, noes!');
7772
7772
  });
7773
7773
  };
@@ -7790,7 +7790,7 @@ enifed('ember-glimmer/tests/integration/application/engine-test', ['ember-babel'
7790
7790
  return this.visit('/').then(function () {
7791
7791
  _this13.assertText('Application');
7792
7792
  return _this13.transitionTo('blog.post');
7793
- }).catch(function () {
7793
+ }).then(function () {
7794
7794
  _this13.assertText('ApplicationEngineError! Oh, noes!');
7795
7795
  });
7796
7796
  };
@@ -7813,7 +7813,7 @@ enifed('ember-glimmer/tests/integration/application/engine-test', ['ember-babel'
7813
7813
  return this.visit('/').then(function () {
7814
7814
  _this14.assertText('Application');
7815
7815
  return _this14.transitionTo('blog.post');
7816
- }).catch(function () {
7816
+ }).then(function () {
7817
7817
  _this14.assertText('ApplicationEngineError! Oh, noes!');
7818
7818
  });
7819
7819
  };
@@ -7836,7 +7836,7 @@ enifed('ember-glimmer/tests/integration/application/engine-test', ['ember-babel'
7836
7836
  return this.visit('/').then(function () {
7837
7837
  _this15.assertText('Application');
7838
7838
  return _this15.transitionTo('blog.post.comments');
7839
- }).catch(function () {
7839
+ }).then(function () {
7840
7840
  _this15.assertText('ApplicationEngineError! Oh, noes!');
7841
7841
  });
7842
7842
  };
@@ -25510,9 +25510,31 @@ enifed('ember-glimmer/tests/integration/helpers/get-test', ['ember-babel', 'embe
25510
25510
  this.assertText('[First][Second][Third]');
25511
25511
  };
25512
25512
 
25513
- _class.prototype['@test should be able to get an object value with a bound/dynamic key'] = function () {
25513
+ _class.prototype['@test should be able to get an array value with numeric keys'] = function () {
25514
25514
  var _this5 = this;
25515
25515
 
25516
+ this.render('{{#each numbers as |num index|}}[{{get numbers index}}]{{/each}}', {
25517
+ numbers: [1, 2, 3]
25518
+ });
25519
+
25520
+ this.assertText('[1][2][3]');
25521
+
25522
+ this.runTask(function () {
25523
+ return _this5.rerender();
25524
+ });
25525
+
25526
+ this.assertText('[1][2][3]');
25527
+
25528
+ this.runTask(function () {
25529
+ return (0, _emberMetal.set)(_this5.context, 'numbers', [3, 2, 1]);
25530
+ });
25531
+
25532
+ this.assertText('[3][2][1]');
25533
+ };
25534
+
25535
+ _class.prototype['@test should be able to get an object value with a bound/dynamic key'] = function () {
25536
+ var _this6 = this;
25537
+
25516
25538
  this.render('[{{get colors key}}] [{{if true (get colors key)}}]', {
25517
25539
  colors: { apple: 'red', banana: 'yellow' },
25518
25540
  key: 'apple'
@@ -25521,39 +25543,39 @@ enifed('ember-glimmer/tests/integration/helpers/get-test', ['ember-babel', 'embe
25521
25543
  this.assertText('[red] [red]');
25522
25544
 
25523
25545
  this.runTask(function () {
25524
- return _this5.rerender();
25546
+ return _this6.rerender();
25525
25547
  });
25526
25548
 
25527
25549
  this.assertText('[red] [red]');
25528
25550
 
25529
25551
  this.runTask(function () {
25530
- return (0, _emberMetal.set)(_this5.context, 'key', 'banana');
25552
+ return (0, _emberMetal.set)(_this6.context, 'key', 'banana');
25531
25553
  });
25532
25554
 
25533
25555
  this.assertText('[yellow] [yellow]');
25534
25556
 
25535
25557
  this.runTask(function () {
25536
- (0, _emberMetal.set)(_this5.context, 'colors.apple', 'green');
25537
- (0, _emberMetal.set)(_this5.context, 'colors.banana', 'purple');
25558
+ (0, _emberMetal.set)(_this6.context, 'colors.apple', 'green');
25559
+ (0, _emberMetal.set)(_this6.context, 'colors.banana', 'purple');
25538
25560
  });
25539
25561
 
25540
25562
  this.assertText('[purple] [purple]');
25541
25563
 
25542
25564
  this.runTask(function () {
25543
- return (0, _emberMetal.set)(_this5.context, 'key', 'apple');
25565
+ return (0, _emberMetal.set)(_this6.context, 'key', 'apple');
25544
25566
  });
25545
25567
 
25546
25568
  this.assertText('[green] [green]');
25547
25569
 
25548
25570
  this.runTask(function () {
25549
- return (0, _emberMetal.set)(_this5.context, 'colors', { apple: 'red' });
25571
+ return (0, _emberMetal.set)(_this6.context, 'colors', { apple: 'red' });
25550
25572
  });
25551
25573
 
25552
25574
  this.assertText('[red] [red]');
25553
25575
  };
25554
25576
 
25555
25577
  _class.prototype['@test should be able to get an object value with nested dynamic key'] = function () {
25556
- var _this6 = this;
25578
+ var _this7 = this;
25557
25579
 
25558
25580
  this.render('[{{get colors key}}] [{{if true (get colors key)}}]', {
25559
25581
  colors: {
@@ -25569,32 +25591,32 @@ enifed('ember-glimmer/tests/integration/helpers/get-test', ['ember-babel', 'embe
25569
25591
  this.assertText('[red and yellow] [red and yellow]');
25570
25592
 
25571
25593
  this.runTask(function () {
25572
- return _this6.rerender();
25594
+ return _this7.rerender();
25573
25595
  });
25574
25596
 
25575
25597
  this.assertText('[red and yellow] [red and yellow]');
25576
25598
 
25577
25599
  this.runTask(function () {
25578
- return (0, _emberMetal.set)(_this6.context, 'key', 'apple.mcintosh');
25600
+ return (0, _emberMetal.set)(_this7.context, 'key', 'apple.mcintosh');
25579
25601
  });
25580
25602
 
25581
25603
  this.assertText('[red] [red]');
25582
25604
 
25583
25605
  this.runTask(function () {
25584
- return (0, _emberMetal.set)(_this6.context, 'key', 'banana');
25606
+ return (0, _emberMetal.set)(_this7.context, 'key', 'banana');
25585
25607
  });
25586
25608
 
25587
25609
  this.assertText('[yellow] [yellow]');
25588
25610
 
25589
25611
  this.runTask(function () {
25590
- return (0, _emberMetal.set)(_this6.context, 'key', 'apple.gala');
25612
+ return (0, _emberMetal.set)(_this7.context, 'key', 'apple.gala');
25591
25613
  });
25592
25614
 
25593
25615
  this.assertText('[red and yellow] [red and yellow]');
25594
25616
  };
25595
25617
 
25596
25618
  _class.prototype['@test should be able to get an object value with subexpression returning nested key'] = function () {
25597
- var _this7 = this;
25619
+ var _this8 = this;
25598
25620
 
25599
25621
  this.render('[{{get colors (concat \'apple\' \'.\' \'gala\')}}] [{{if true (get colors (concat \'apple\' \'.\' \'gala\'))}}]', {
25600
25622
  colors: {
@@ -25609,25 +25631,25 @@ enifed('ember-glimmer/tests/integration/helpers/get-test', ['ember-babel', 'embe
25609
25631
  this.assertText('[red and yellow] [red and yellow]');
25610
25632
 
25611
25633
  this.runTask(function () {
25612
- return _this7.rerender();
25634
+ return _this8.rerender();
25613
25635
  });
25614
25636
 
25615
25637
  this.assertText('[red and yellow] [red and yellow]');
25616
25638
 
25617
25639
  this.runTask(function () {
25618
- return (0, _emberMetal.set)(_this7.context, 'colors.apple.gala', 'yellow and red striped');
25640
+ return (0, _emberMetal.set)(_this8.context, 'colors.apple.gala', 'yellow and red striped');
25619
25641
  });
25620
25642
 
25621
25643
  this.assertText('[yellow and red striped] [yellow and red striped]');
25622
25644
 
25623
25645
  this.runTask(function () {
25624
- return (0, _emberMetal.set)(_this7.context, 'colors.apple.gala', 'yellow-redish');
25646
+ return (0, _emberMetal.set)(_this8.context, 'colors.apple.gala', 'yellow-redish');
25625
25647
  });
25626
25648
 
25627
25649
  this.assertText('[yellow-redish] [yellow-redish]');
25628
25650
 
25629
25651
  this.runTask(function () {
25630
- return (0, _emberMetal.set)(_this7.context, 'colors', {
25652
+ return (0, _emberMetal.set)(_this8.context, 'colors', {
25631
25653
  apple: {
25632
25654
  gala: 'red and yellow',
25633
25655
  mcintosh: 'red'
@@ -25639,7 +25661,7 @@ enifed('ember-glimmer/tests/integration/helpers/get-test', ['ember-babel', 'embe
25639
25661
  };
25640
25662
 
25641
25663
  _class.prototype['@test should be able to get an object value with a get helper as the key'] = function () {
25642
- var _this8 = this;
25664
+ var _this9 = this;
25643
25665
 
25644
25666
  this.render('[{{get colors (get possibleKeys key)}}] [{{if true (get colors (get possibleKeys key))}}]', {
25645
25667
  colors: { apple: 'red', banana: 'yellow' },
@@ -25650,39 +25672,39 @@ enifed('ember-glimmer/tests/integration/helpers/get-test', ['ember-babel', 'embe
25650
25672
  this.assertText('[red] [red]');
25651
25673
 
25652
25674
  this.runTask(function () {
25653
- return _this8.rerender();
25675
+ return _this9.rerender();
25654
25676
  });
25655
25677
 
25656
25678
  this.assertText('[red] [red]');
25657
25679
 
25658
25680
  this.runTask(function () {
25659
- return (0, _emberMetal.set)(_this8.context, 'key', 'key2');
25681
+ return (0, _emberMetal.set)(_this9.context, 'key', 'key2');
25660
25682
  });
25661
25683
 
25662
25684
  this.assertText('[yellow] [yellow]');
25663
25685
 
25664
25686
  this.runTask(function () {
25665
- (0, _emberMetal.set)(_this8.context, 'colors.apple', 'green');
25666
- (0, _emberMetal.set)(_this8.context, 'colors.banana', 'purple');
25687
+ (0, _emberMetal.set)(_this9.context, 'colors.apple', 'green');
25688
+ (0, _emberMetal.set)(_this9.context, 'colors.banana', 'purple');
25667
25689
  });
25668
25690
 
25669
25691
  this.assertText('[purple] [purple]');
25670
25692
 
25671
25693
  this.runTask(function () {
25672
- return (0, _emberMetal.set)(_this8.context, 'key', 'key1');
25694
+ return (0, _emberMetal.set)(_this9.context, 'key', 'key1');
25673
25695
  });
25674
25696
 
25675
25697
  this.assertText('[green] [green]');
25676
25698
 
25677
25699
  this.runTask(function () {
25678
- return (0, _emberMetal.set)(_this8.context, 'colors', { apple: 'red', banana: 'yellow' });
25700
+ return (0, _emberMetal.set)(_this9.context, 'colors', { apple: 'red', banana: 'yellow' });
25679
25701
  });
25680
25702
 
25681
25703
  this.assertText('[red] [red]');
25682
25704
  };
25683
25705
 
25684
25706
  _class.prototype['@test should be able to get an object value with a get helper value as a bound/dynamic key'] = function () {
25685
- var _this9 = this;
25707
+ var _this10 = this;
25686
25708
 
25687
25709
  this.render('[{{get (get possibleValues objectKey) key}}] [{{if true (get (get possibleValues objectKey) key)}}]', {
25688
25710
  possibleValues: {
@@ -25696,48 +25718,48 @@ enifed('ember-glimmer/tests/integration/helpers/get-test', ['ember-babel', 'embe
25696
25718
  this.assertText('[red] [red]');
25697
25719
 
25698
25720
  this.runTask(function () {
25699
- return _this9.rerender();
25721
+ return _this10.rerender();
25700
25722
  });
25701
25723
 
25702
25724
  this.assertText('[red] [red]');
25703
25725
 
25704
25726
  this.runTask(function () {
25705
- return (0, _emberMetal.set)(_this9.context, 'objectKey', 'colors2');
25727
+ return (0, _emberMetal.set)(_this10.context, 'objectKey', 'colors2');
25706
25728
  });
25707
25729
 
25708
25730
  this.assertText('[green] [green]');
25709
25731
 
25710
25732
  this.runTask(function () {
25711
- return (0, _emberMetal.set)(_this9.context, 'objectKey', 'colors1');
25733
+ return (0, _emberMetal.set)(_this10.context, 'objectKey', 'colors1');
25712
25734
  });
25713
25735
 
25714
25736
  this.assertText('[red] [red]');
25715
25737
 
25716
25738
  this.runTask(function () {
25717
- return (0, _emberMetal.set)(_this9.context, 'key', 'banana');
25739
+ return (0, _emberMetal.set)(_this10.context, 'key', 'banana');
25718
25740
  });
25719
25741
 
25720
25742
  this.assertText('[yellow] [yellow]');
25721
25743
 
25722
25744
  this.runTask(function () {
25723
- return (0, _emberMetal.set)(_this9.context, 'objectKey', 'colors2');
25745
+ return (0, _emberMetal.set)(_this10.context, 'objectKey', 'colors2');
25724
25746
  });
25725
25747
 
25726
25748
  this.assertText('[purple] [purple]');
25727
25749
 
25728
25750
  this.runTask(function () {
25729
- return (0, _emberMetal.set)(_this9.context, 'objectKey', 'colors1');
25751
+ return (0, _emberMetal.set)(_this10.context, 'objectKey', 'colors1');
25730
25752
  });
25731
25753
 
25732
25754
  this.assertText('[yellow] [yellow]');
25733
25755
 
25734
25756
  this.runTask(function () {
25735
- return (0, _emberMetal.set)(_this9.context, 'key', 'apple');
25757
+ return (0, _emberMetal.set)(_this10.context, 'key', 'apple');
25736
25758
  });
25737
25759
  };
25738
25760
 
25739
25761
  _class.prototype['@test should be able to get an object value with a get helper as the value and a get helper as the key'] = function () {
25740
- var _this10 = this;
25762
+ var _this11 = this;
25741
25763
 
25742
25764
  this.render('[{{get (get possibleValues objectKey) (get possibleKeys key)}}] [{{if true (get (get possibleValues objectKey) (get possibleKeys key))}}]', {
25743
25765
  possibleValues: {
@@ -25755,45 +25777,45 @@ enifed('ember-glimmer/tests/integration/helpers/get-test', ['ember-babel', 'embe
25755
25777
  this.assertText('[red] [red]');
25756
25778
 
25757
25779
  this.runTask(function () {
25758
- return _this10.rerender();
25780
+ return _this11.rerender();
25759
25781
  });
25760
25782
 
25761
25783
  this.assertText('[red] [red]');
25762
25784
 
25763
25785
  this.runTask(function () {
25764
- return (0, _emberMetal.set)(_this10.context, 'objectKey', 'colors2');
25786
+ return (0, _emberMetal.set)(_this11.context, 'objectKey', 'colors2');
25765
25787
  });
25766
25788
 
25767
25789
  this.assertText('[green] [green]');
25768
25790
 
25769
25791
  this.runTask(function () {
25770
- return (0, _emberMetal.set)(_this10.context, 'objectKey', 'colors1');
25792
+ return (0, _emberMetal.set)(_this11.context, 'objectKey', 'colors1');
25771
25793
  });
25772
25794
 
25773
25795
  this.assertText('[red] [red]');
25774
25796
 
25775
25797
  this.runTask(function () {
25776
- return (0, _emberMetal.set)(_this10.context, 'key', 'key2');
25798
+ return (0, _emberMetal.set)(_this11.context, 'key', 'key2');
25777
25799
  });
25778
25800
 
25779
25801
  this.assertText('[yellow] [yellow]');
25780
25802
 
25781
25803
  this.runTask(function () {
25782
- return (0, _emberMetal.set)(_this10.context, 'objectKey', 'colors2');
25804
+ return (0, _emberMetal.set)(_this11.context, 'objectKey', 'colors2');
25783
25805
  });
25784
25806
 
25785
25807
  this.assertText('[purple] [purple]');
25786
25808
 
25787
25809
  this.runTask(function () {
25788
- (0, _emberMetal.set)(_this10.context, 'objectKey', 'colors1');
25789
- (0, _emberMetal.set)(_this10.context, 'key', 'key1');
25810
+ (0, _emberMetal.set)(_this11.context, 'objectKey', 'colors1');
25811
+ (0, _emberMetal.set)(_this11.context, 'key', 'key1');
25790
25812
  });
25791
25813
 
25792
25814
  this.assertText('[red] [red]');
25793
25815
  };
25794
25816
 
25795
25817
  _class.prototype['@test the result of a get helper can be yielded'] = function () {
25796
- var _this11 = this;
25818
+ var _this12 = this;
25797
25819
 
25798
25820
  var fooBarInstance = void 0;
25799
25821
  var FooBarComponent = _helpers.Component.extend({
@@ -25818,28 +25840,28 @@ enifed('ember-glimmer/tests/integration/helpers/get-test', ['ember-babel', 'embe
25818
25840
  this.assertText('banana');
25819
25841
 
25820
25842
  this.runTask(function () {
25821
- return _this11.rerender();
25843
+ return _this12.rerender();
25822
25844
  });
25823
25845
 
25824
25846
  this.assertText('banana');
25825
25847
 
25826
25848
  this.runTask(function () {
25827
25849
  (0, _emberMetal.set)(fooBarInstance, 'mcintosh', 'yellow');
25828
- (0, _emberMetal.set)(_this11.context, 'colors', { yellow: 'bus' });
25850
+ (0, _emberMetal.set)(_this12.context, 'colors', { yellow: 'bus' });
25829
25851
  });
25830
25852
 
25831
25853
  this.assertText('bus');
25832
25854
 
25833
25855
  this.runTask(function () {
25834
25856
  (0, _emberMetal.set)(fooBarInstance, 'mcintosh', 'red');
25835
- (0, _emberMetal.set)(_this11.context, 'colors', { red: 'banana' });
25857
+ (0, _emberMetal.set)(_this12.context, 'colors', { red: 'banana' });
25836
25858
  });
25837
25859
 
25838
25860
  this.assertText('banana');
25839
25861
  };
25840
25862
 
25841
25863
  _class.prototype['@test should handle object values as nulls'] = function () {
25842
- var _this12 = this;
25864
+ var _this13 = this;
25843
25865
 
25844
25866
  this.render('[{{get colors \'apple\'}}] [{{if true (get colors \'apple\')}}]', {
25845
25867
  colors: null
@@ -25848,26 +25870,26 @@ enifed('ember-glimmer/tests/integration/helpers/get-test', ['ember-babel', 'embe
25848
25870
  this.assertText('[] []');
25849
25871
 
25850
25872
  this.runTask(function () {
25851
- return _this12.rerender();
25873
+ return _this13.rerender();
25852
25874
  });
25853
25875
 
25854
25876
  this.assertText('[] []');
25855
25877
 
25856
25878
  this.runTask(function () {
25857
- return (0, _emberMetal.set)(_this12.context, 'colors', { apple: 'green', banana: 'purple' });
25879
+ return (0, _emberMetal.set)(_this13.context, 'colors', { apple: 'green', banana: 'purple' });
25858
25880
  });
25859
25881
 
25860
25882
  this.assertText('[green] [green]');
25861
25883
 
25862
25884
  this.runTask(function () {
25863
- return (0, _emberMetal.set)(_this12.context, 'colors', null);
25885
+ return (0, _emberMetal.set)(_this13.context, 'colors', null);
25864
25886
  });
25865
25887
 
25866
25888
  this.assertText('[] []');
25867
25889
  };
25868
25890
 
25869
25891
  _class.prototype['@test should handle object keys as nulls'] = function () {
25870
- var _this13 = this;
25892
+ var _this14 = this;
25871
25893
 
25872
25894
  this.render('[{{get colors key}}] [{{if true (get colors key)}}]', {
25873
25895
  colors: {
@@ -25880,19 +25902,19 @@ enifed('ember-glimmer/tests/integration/helpers/get-test', ['ember-babel', 'embe
25880
25902
  this.assertText('[] []');
25881
25903
 
25882
25904
  this.runTask(function () {
25883
- return _this13.rerender();
25905
+ return _this14.rerender();
25884
25906
  });
25885
25907
 
25886
25908
  this.assertText('[] []');
25887
25909
 
25888
25910
  this.runTask(function () {
25889
- return (0, _emberMetal.set)(_this13.context, 'key', 'banana');
25911
+ return (0, _emberMetal.set)(_this14.context, 'key', 'banana');
25890
25912
  });
25891
25913
 
25892
25914
  this.assertText('[yellow] [yellow]');
25893
25915
 
25894
25916
  this.runTask(function () {
25895
- return (0, _emberMetal.set)(_this13.context, 'key', null);
25917
+ return (0, _emberMetal.set)(_this14.context, 'key', null);
25896
25918
  });
25897
25919
 
25898
25920
  this.assertText('[] []');
@@ -25908,7 +25930,7 @@ enifed('ember-glimmer/tests/integration/helpers/get-test', ['ember-babel', 'embe
25908
25930
  };
25909
25931
 
25910
25932
  _class.prototype['@test get helper value should be updatable using {{input}} and (mut) - static key'] = function (assert) {
25911
- var _this14 = this;
25933
+ var _this15 = this;
25912
25934
 
25913
25935
  this.render('{{input type=\'text\' value=(mut (get source \'banana\')) id=\'get-input\'}}', {
25914
25936
  source: {
@@ -25919,33 +25941,33 @@ enifed('ember-glimmer/tests/integration/helpers/get-test', ['ember-babel', 'embe
25919
25941
  assert.strictEqual(this.$('#get-input').val(), 'banana');
25920
25942
 
25921
25943
  this.runTask(function () {
25922
- return _this14.rerender();
25944
+ return _this15.rerender();
25923
25945
  });
25924
25946
 
25925
25947
  assert.strictEqual(this.$('#get-input').val(), 'banana');
25926
25948
 
25927
25949
  this.runTask(function () {
25928
- return (0, _emberMetal.set)(_this14.context, 'source.banana', 'yellow');
25950
+ return (0, _emberMetal.set)(_this15.context, 'source.banana', 'yellow');
25929
25951
  });
25930
25952
 
25931
25953
  assert.strictEqual(this.$('#get-input').val(), 'yellow');
25932
25954
 
25933
25955
  this.runTask(function () {
25934
- return _this14.$('#get-input').val('some value').trigger('change');
25956
+ return _this15.$('#get-input').val('some value').trigger('change');
25935
25957
  });
25936
25958
 
25937
25959
  assert.strictEqual(this.$('#get-input').val(), 'some value');
25938
25960
  assert.strictEqual((0, _emberMetal.get)(this.context, 'source.banana'), 'some value');
25939
25961
 
25940
25962
  this.runTask(function () {
25941
- return (0, _emberMetal.set)(_this14.context, 'source', { banana: 'banana' });
25963
+ return (0, _emberMetal.set)(_this15.context, 'source', { banana: 'banana' });
25942
25964
  });
25943
25965
 
25944
25966
  assert.strictEqual(this.$('#get-input').val(), 'banana');
25945
25967
  };
25946
25968
 
25947
25969
  _class.prototype['@test get helper value should be updatable using {{input}} and (mut) - dynamic key'] = function (assert) {
25948
- var _this15 = this;
25970
+ var _this16 = this;
25949
25971
 
25950
25972
  this.render('{{input type=\'text\' value=(mut (get source key)) id=\'get-input\'}}', {
25951
25973
  source: {
@@ -25958,47 +25980,47 @@ enifed('ember-glimmer/tests/integration/helpers/get-test', ['ember-babel', 'embe
25958
25980
  assert.strictEqual(this.$('#get-input').val(), 'banana');
25959
25981
 
25960
25982
  this.runTask(function () {
25961
- return _this15.rerender();
25983
+ return _this16.rerender();
25962
25984
  });
25963
25985
 
25964
25986
  assert.strictEqual(this.$('#get-input').val(), 'banana');
25965
25987
 
25966
25988
  this.runTask(function () {
25967
- return (0, _emberMetal.set)(_this15.context, 'source.banana', 'yellow');
25989
+ return (0, _emberMetal.set)(_this16.context, 'source.banana', 'yellow');
25968
25990
  });
25969
25991
 
25970
25992
  assert.strictEqual(this.$('#get-input').val(), 'yellow');
25971
25993
 
25972
25994
  this.runTask(function () {
25973
- return _this15.$('#get-input').val('some value').trigger('change');
25995
+ return _this16.$('#get-input').val('some value').trigger('change');
25974
25996
  });
25975
25997
 
25976
25998
  assert.strictEqual(this.$('#get-input').val(), 'some value');
25977
25999
  assert.strictEqual((0, _emberMetal.get)(this.context, 'source.banana'), 'some value');
25978
26000
 
25979
26001
  this.runTask(function () {
25980
- return (0, _emberMetal.set)(_this15.context, 'key', 'apple');
26002
+ return (0, _emberMetal.set)(_this16.context, 'key', 'apple');
25981
26003
  });
25982
26004
 
25983
26005
  assert.strictEqual(this.$('#get-input').val(), 'apple');
25984
26006
 
25985
26007
  this.runTask(function () {
25986
- return _this15.$('#get-input').val('some other value').trigger('change');
26008
+ return _this16.$('#get-input').val('some other value').trigger('change');
25987
26009
  });
25988
26010
 
25989
26011
  assert.strictEqual(this.$('#get-input').val(), 'some other value');
25990
26012
  assert.strictEqual((0, _emberMetal.get)(this.context, 'source.apple'), 'some other value');
25991
26013
 
25992
26014
  this.runTask(function () {
25993
- (0, _emberMetal.set)(_this15.context, 'key', 'banana');
25994
- (0, _emberMetal.set)(_this15.context, 'source', { banana: 'banana' });
26015
+ (0, _emberMetal.set)(_this16.context, 'key', 'banana');
26016
+ (0, _emberMetal.set)(_this16.context, 'source', { banana: 'banana' });
25995
26017
  });
25996
26018
 
25997
26019
  assert.strictEqual(this.$('#get-input').val(), 'banana');
25998
26020
  };
25999
26021
 
26000
26022
  _class.prototype['@test get helper value should be updatable using {{input}} and (mut) - dynamic nested key'] = function (assert) {
26001
- var _this16 = this;
26023
+ var _this17 = this;
26002
26024
 
26003
26025
  this.render('{{input type=\'text\' value=(mut (get source key)) id=\'get-input\'}}', {
26004
26026
  source: {
@@ -26014,53 +26036,53 @@ enifed('ember-glimmer/tests/integration/helpers/get-test', ['ember-babel', 'embe
26014
26036
  assert.strictEqual(this.$('#get-input').val(), 'mcintosh');
26015
26037
 
26016
26038
  this.runTask(function () {
26017
- return _this16.rerender();
26039
+ return _this17.rerender();
26018
26040
  });
26019
26041
 
26020
26042
  assert.strictEqual(this.$('#get-input').val(), 'mcintosh');
26021
26043
 
26022
26044
  this.runTask(function () {
26023
- return (0, _emberMetal.set)(_this16.context, 'source.apple.mcintosh', 'red');
26045
+ return (0, _emberMetal.set)(_this17.context, 'source.apple.mcintosh', 'red');
26024
26046
  });
26025
26047
 
26026
26048
  assert.strictEqual(this.$('#get-input').val(), 'red');
26027
26049
 
26028
26050
  this.runTask(function () {
26029
- return _this16.$('#get-input').val('some value').trigger('change');
26051
+ return _this17.$('#get-input').val('some value').trigger('change');
26030
26052
  });
26031
26053
 
26032
26054
  assert.strictEqual(this.$('#get-input').val(), 'some value');
26033
26055
  assert.strictEqual((0, _emberMetal.get)(this.context, 'source.apple.mcintosh'), 'some value');
26034
26056
 
26035
26057
  this.runTask(function () {
26036
- return (0, _emberMetal.set)(_this16.context, 'key', 'apple.gala');
26058
+ return (0, _emberMetal.set)(_this17.context, 'key', 'apple.gala');
26037
26059
  });
26038
26060
 
26039
26061
  assert.strictEqual(this.$('#get-input').val(), 'gala');
26040
26062
 
26041
26063
  this.runTask(function () {
26042
- return _this16.$('#get-input').val('some other value').trigger('change');
26064
+ return _this17.$('#get-input').val('some other value').trigger('change');
26043
26065
  });
26044
26066
 
26045
26067
  assert.strictEqual(this.$('#get-input').val(), 'some other value');
26046
26068
  assert.strictEqual((0, _emberMetal.get)(this.context, 'source.apple.gala'), 'some other value');
26047
26069
 
26048
26070
  this.runTask(function () {
26049
- return (0, _emberMetal.set)(_this16.context, 'key', 'banana');
26071
+ return (0, _emberMetal.set)(_this17.context, 'key', 'banana');
26050
26072
  });
26051
26073
 
26052
26074
  assert.strictEqual(this.$('#get-input').val(), 'banana');
26053
26075
 
26054
26076
  this.runTask(function () {
26055
- return _this16.$('#get-input').val('yet another value').trigger('change');
26077
+ return _this17.$('#get-input').val('yet another value').trigger('change');
26056
26078
  });
26057
26079
 
26058
26080
  assert.strictEqual(this.$('#get-input').val(), 'yet another value');
26059
26081
  assert.strictEqual((0, _emberMetal.get)(this.context, 'source.banana'), 'yet another value');
26060
26082
 
26061
26083
  this.runTask(function () {
26062
- (0, _emberMetal.set)(_this16.context, 'key', 'apple.mcintosh');
26063
- (0, _emberMetal.set)(_this16.context, 'source', {
26084
+ (0, _emberMetal.set)(_this17.context, 'key', 'apple.mcintosh');
26085
+ (0, _emberMetal.set)(_this17.context, 'source', {
26064
26086
  apple: {
26065
26087
  gala: 'gala',
26066
26088
  mcintosh: 'mcintosh'
@@ -27279,6 +27301,62 @@ enifed('ember-glimmer/tests/integration/helpers/input-test', ['ember-babel', 'em
27279
27301
 
27280
27302
  return _class4;
27281
27303
  }(InputRenderingTest));
27304
+
27305
+ // These are the permutations of the set:
27306
+ // ['type="range"', 'min="-5" max="50"', 'value="%x"']
27307
+ ['type="range" min="-5" max="50" value="%x"', 'type="range" value="%x" min="-5" max="50"', 'min="-5" max="50" type="range" value="%x"', 'min="-5" max="50" value="%x" type="range"', 'value="%x" min="-5" max="50" type="range"', 'value="%x" type="range" min="-5" max="50"'].forEach(function (attrs) {
27308
+ (0, _testCase.moduleFor)('[GH#15675] Helpers test: {{input ' + attrs + '}}', function (_InputRenderingTest5) {
27309
+ (0, _emberBabel.inherits)(_class5, _InputRenderingTest5);
27310
+
27311
+ function _class5() {
27312
+ return (0, _emberBabel.possibleConstructorReturn)(this, _InputRenderingTest5.apply(this, arguments));
27313
+ }
27314
+
27315
+ _class5.prototype.renderInput = function () {
27316
+ var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 25;
27317
+
27318
+ this.render('{{input ' + attrs.replace("%x", value) + '}}');
27319
+ };
27320
+
27321
+ _class5.prototype.assertValue = function (expected) {
27322
+ var type = this.$input().attr('type');
27323
+
27324
+ if (type !== 'range') {
27325
+ this.assert.ok(true, 'IE9 does not support range items');
27326
+ return;
27327
+ }
27328
+
27329
+ _InputRenderingTest5.prototype.assertValue.call(this, expected);
27330
+ };
27331
+
27332
+ _class5.prototype['@test value over default max but below set max is kept'] = function () {
27333
+ this.renderInput("25");
27334
+ this.assertValue("25");
27335
+ };
27336
+
27337
+ _class5.prototype['@test value below default min but above set min is kept'] = function () {
27338
+ this.renderInput("-2");
27339
+ this.assertValue("-2");
27340
+ };
27341
+
27342
+ _class5.prototype['@test in the valid default range is kept'] = function () {
27343
+ this.renderInput("5");
27344
+ this.assertValue("5");
27345
+ };
27346
+
27347
+ _class5.prototype['@test value above max is reset to max'] = function () {
27348
+ this.renderInput("55");
27349
+ this.assertValue("50");
27350
+ };
27351
+
27352
+ _class5.prototype['@test value below min is reset to min'] = function () {
27353
+ this.renderInput("-10");
27354
+ this.assertValue("-5");
27355
+ };
27356
+
27357
+ return _class5;
27358
+ }(InputRenderingTest));
27359
+ });
27282
27360
  });
27283
27361
  enifed('ember-glimmer/tests/integration/helpers/loc-test', ['ember-babel', 'ember-glimmer/tests/utils/test-case', 'ember-metal', 'ember'], function (_emberBabel, _testCase, _emberMetal, _ember) {
27284
27362
  'use strict';
@@ -38257,6 +38335,20 @@ enifed('ember-metal/tests/events_test', ['ember-metal'], function (_emberMetal)
38257
38335
  equal(triggered, 2, 'should invoke listeners');
38258
38336
  });
38259
38337
 
38338
+ QUnit.test('Ember.on asserts for invalid arguments', function () {
38339
+ expectAssertion(function () {
38340
+ _emberMetal.Mixin.create({
38341
+ foo1: (0, _emberMetal.on)('bar')
38342
+ });
38343
+ }, 'Ember.on expects function as last argument');
38344
+
38345
+ expectAssertion(function () {
38346
+ _emberMetal.Mixin.create({
38347
+ foo1: (0, _emberMetal.on)(function () {})
38348
+ });
38349
+ }, 'Ember.on called without valid event names');
38350
+ });
38351
+
38260
38352
  QUnit.test('a listener added as part of a mixin may be overridden', function () {
38261
38353
  var triggered = 0;
38262
38354
  var FirstMixin = _emberMetal.Mixin.create({
@@ -42369,7 +42461,7 @@ enifed('ember-metal/tests/run_loop/debounce_test', ['ember-metal'], function (_e
42369
42461
  ok(wasCalled, 'Ember.run.debounce used');
42370
42462
  });
42371
42463
  });
42372
- enifed('ember-metal/tests/run_loop/later_test', ['ember-metal'], function (_emberMetal) {
42464
+ enifed('ember-metal/tests/run_loop/later_test', ['ember-utils', 'ember-metal'], function (_emberUtils, _emberMetal) {
42373
42465
  'use strict';
42374
42466
 
42375
42467
  var originalSetTimeout = window.setTimeout;
@@ -42576,7 +42668,7 @@ enifed('ember-metal/tests/run_loop/later_test', ['ember-metal'], function (_embe
42576
42668
  // happens when an expired timer callback takes a while to run,
42577
42669
  // which is what we simulate here.
42578
42670
  var newSetTimeoutUsed = void 0;
42579
- _emberMetal.run.backburner._platform = {
42671
+ _emberMetal.run.backburner._platform = (0, _emberUtils.assign)({}, originalPlatform, {
42580
42672
  setTimeout: function () {
42581
42673
  var wait = arguments[arguments.length - 1];
42582
42674
  newSetTimeoutUsed = true;
@@ -42584,7 +42676,7 @@ enifed('ember-metal/tests/run_loop/later_test', ['ember-metal'], function (_embe
42584
42676
 
42585
42677
  return originalPlatform.setTimeout.apply(originalPlatform, arguments);
42586
42678
  }
42587
- };
42679
+ });
42588
42680
 
42589
42681
  var count = 0;
42590
42682
  (0, _emberMetal.run)(function () {
@@ -51988,7 +52080,6 @@ enifed('ember-runtime/tests/mixins/promise_proxy_test', ['ember-metal', 'ember-r
51988
52080
 
51989
52081
  PromiseSubclass.prototype = Object.create(_rsvp2.Promise.prototype);
51990
52082
  PromiseSubclass.prototype.constructor = PromiseSubclass;
51991
- PromiseSubclass.cast = _rsvp2.Promise.cast;
51992
52083
 
51993
52084
  var proxy = ObjectPromiseProxy.create({
51994
52085
  promise: new PromiseSubclass(function () {})
@@ -56979,17 +57070,6 @@ enifed('ember-runtime/tests/system/object/create_test', ['ember-metal', 'ember-r
56979
57070
  }, 'Ember.Object.create no longer supports mixing in other definitions, use .extend & .create separately instead.');
56980
57071
  });
56981
57072
 
56982
- // This test is for IE8.
56983
- QUnit.test('property name is the same as own prototype property', function () {
56984
- var MyClass = _object.default.extend({
56985
- toString: function () {
56986
- return 'MyClass';
56987
- }
56988
- });
56989
-
56990
- equal(MyClass.create().toString(), 'MyClass', 'should inherit property from the arguments of `EmberObject.create`');
56991
- });
56992
-
56993
57073
  QUnit.test('inherits properties from passed in EmberObject', function () {
56994
57074
  var baseObj = _object.default.create({ foo: 'bar' });
56995
57075
  var secondaryObj = _object.default.create(baseObj);
@@ -56999,9 +57079,9 @@ enifed('ember-runtime/tests/system/object/create_test', ['ember-metal', 'ember-r
56999
57079
 
57000
57080
  QUnit.test('throws if you try to pass anything a string as a parameter', function () {
57001
57081
 
57002
- throws(function () {
57082
+ expectAssertion(function () {
57003
57083
  return _object.default.create('some-string');
57004
- }, 'EmberObject.create only accepts an objects.');
57084
+ }, 'Ember.Object.create only accepts objects.');
57005
57085
  });
57006
57086
 
57007
57087
  QUnit.test('EmberObject.create can take undefined as a parameter', function () {
@@ -60964,15 +61044,6 @@ enifed('ember-testing/tests/adapters/adapter_test', ['ember-metal', 'ember-testi
60964
61044
  }
60965
61045
  });
60966
61046
 
60967
- // Can't test these this way anymore since we have nothing to compare to
60968
- // test("asyncStart is a noop", function() {
60969
- // equal(adapter.asyncStart, K);
60970
- // });
60971
-
60972
- // test("asyncEnd is a noop", function() {
60973
- // equal(adapter.asyncEnd, K);
60974
- // });
60975
-
60976
61047
  QUnit.test('exception throws', function () {
60977
61048
  var error = 'Hai';
60978
61049
  var thrown;
@@ -63691,6 +63762,65 @@ enifed('ember/tests/controller_test', ['ember-babel', 'ember-runtime', 'internal
63691
63762
  return _class;
63692
63763
  }(_internalTestHelpers.ApplicationTestCase));
63693
63764
  });
63765
+ enifed('ember/tests/error_handler_test', ['ember', 'ember-metal'], function (_ember, _emberMetal) {
63766
+ 'use strict';
63767
+
63768
+ var ONERROR = _ember.default.onerror;
63769
+ var ADAPTER = _ember.default.Test && _ember.default.Test.adapter;
63770
+ var TESTING = _ember.default.testing;
63771
+
63772
+ QUnit.module('error_handler', {
63773
+ teardown: function () {
63774
+ _ember.default.onerror = ONERROR;
63775
+ _ember.default.testing = TESTING;
63776
+ if (_ember.default.Test) {
63777
+ _ember.default.Test.adapter = ADAPTER;
63778
+ }
63779
+ }
63780
+ });
63781
+
63782
+ function runThatThrows(message) {
63783
+ return (0, _emberMetal.run)(function () {
63784
+ throw new Error(message);
63785
+ });
63786
+ }
63787
+
63788
+ test('by default there is no onerror', function (assert) {
63789
+ _ember.default.onerror = undefined;
63790
+ assert.throws(runThatThrows, Error);
63791
+ assert.equal(_ember.default.onerror, undefined);
63792
+ });
63793
+
63794
+ test('when Ember.onerror is registered', function (assert) {
63795
+ assert.expect(2);
63796
+ _ember.default.onerror = function (error) {
63797
+ assert.ok(true, 'onerror called');
63798
+ throw error;
63799
+ };
63800
+ assert.throws(runThatThrows, Error);
63801
+ // Ember.onerror = ONERROR;
63802
+ });
63803
+
63804
+ QUnit.test('Ember.run does not swallow exceptions by default (Ember.testing = true)', function () {
63805
+ _ember.default.testing = true;
63806
+ var error = new Error('the error');
63807
+ throws(function () {
63808
+ _ember.default.run(function () {
63809
+ throw error;
63810
+ });
63811
+ }, error);
63812
+ });
63813
+
63814
+ QUnit.test('Ember.run does not swallow exceptions by default (Ember.testing = false)', function () {
63815
+ _ember.default.testing = false;
63816
+ var error = new Error('the error');
63817
+ throws(function () {
63818
+ _ember.default.run(function () {
63819
+ throw error;
63820
+ });
63821
+ }, error);
63822
+ });
63823
+ });
63694
63824
  enifed('ember/tests/global-api-test', ['ember-metal', 'ember-runtime'], function (_emberMetal, _emberRuntime) {
63695
63825
  'use strict';
63696
63826
 
@@ -65869,7 +65999,7 @@ enifed('ember/tests/helpers/link_to_test/link_to_with_query_params_test', ['embe
65869
65999
 
65870
66000
  assert.expect(1);
65871
66001
 
65872
- assert.throws(function () {
66002
+ expectAssertion(function () {
65873
66003
  _this19.runTask(function () {
65874
66004
  _this19.createApplication();
65875
66005
 
@@ -65879,7 +66009,7 @@ enifed('ember/tests/helpers/link_to_test/link_to_with_query_params_test', ['embe
65879
66009
 
65880
66010
  _this19.addTemplate('application', '{{#link-to id=\'the-link\'}}Index{{/link-to}}');
65881
66011
  });
65882
- }, /(You must provide one or more parameters to the link-to component.|undefined is not an object)/);
66012
+ }, /You must provide one or more parameters to the link-to component/);
65883
66013
  };
65884
66014
 
65885
66015
  return _class2;
@@ -66191,341 +66321,6 @@ enifed('ember/tests/routing/basic_test', ['ember-utils', 'ember-console', 'ember
66191
66321
  }
66192
66322
  });
66193
66323
 
66194
- QUnit.test('warn on URLs not included in the route set', function () {
66195
- Router.map(function () {
66196
- this.route('home', { path: '/' });
66197
- });
66198
-
66199
- bootApplication();
66200
-
66201
- expectAssertion(function () {
66202
- return (0, _emberMetal.run)(function () {
66203
- return router.handleURL('/what-is-this-i-dont-even');
66204
- });
66205
- }, 'The URL \'/what-is-this-i-dont-even\' did not match any routes in your application');
66206
- });
66207
-
66208
- QUnit.test('The Homepage', function () {
66209
- Router.map(function () {
66210
- this.route('home', { path: '/' });
66211
- });
66212
-
66213
- App.HomeRoute = _emberRouting.Route.extend({});
66214
-
66215
- var currentPath = void 0;
66216
-
66217
- App.ApplicationController = _emberRuntime.Controller.extend({
66218
- currentPathDidChange: (0, _emberMetal.observer)('currentPath', function () {
66219
- currentPath = (0, _emberMetal.get)(this, 'currentPath');
66220
- })
66221
- });
66222
-
66223
- bootApplication();
66224
-
66225
- equal(currentPath, 'home');
66226
- equal((0, _emberViews.jQuery)('h3:contains(Hours)', '#qunit-fixture').length, 1, 'The home template was rendered');
66227
- });
66228
-
66229
- QUnit.test('The Home page and the Camelot page with multiple Router.map calls', function () {
66230
- Router.map(function () {
66231
- this.route('home', { path: '/' });
66232
- });
66233
-
66234
- Router.map(function () {
66235
- this.route('camelot', { path: '/camelot' });
66236
- });
66237
-
66238
- App.HomeRoute = _emberRouting.Route.extend({});
66239
-
66240
- App.CamelotRoute = _emberRouting.Route.extend({});
66241
-
66242
- var currentPath = void 0;
66243
-
66244
- App.ApplicationController = _emberRuntime.Controller.extend({
66245
- currentPathDidChange: (0, _emberMetal.observer)('currentPath', function () {
66246
- currentPath = (0, _emberMetal.get)(this, 'currentPath');
66247
- })
66248
- });
66249
-
66250
- App.CamelotController = _emberRuntime.Controller.extend({
66251
- currentPathDidChange: (0, _emberMetal.observer)('currentPath', function () {
66252
- currentPath = (0, _emberMetal.get)(this, 'currentPath');
66253
- })
66254
- });
66255
-
66256
- bootApplication();
66257
-
66258
- handleURL('/camelot');
66259
-
66260
- equal(currentPath, 'camelot');
66261
- equal((0, _emberViews.jQuery)('h3:contains(silly)', '#qunit-fixture').length, 1, 'The camelot template was rendered');
66262
-
66263
- handleURL('/');
66264
-
66265
- equal(currentPath, 'home');
66266
- equal((0, _emberViews.jQuery)('h3:contains(Hours)', '#qunit-fixture').length, 1, 'The home template was rendered');
66267
- });
66268
-
66269
- QUnit.test('The Homepage with explicit template name in renderTemplate', function () {
66270
- Router.map(function () {
66271
- this.route('home', { path: '/' });
66272
- });
66273
-
66274
- App.HomeRoute = _emberRouting.Route.extend({
66275
- renderTemplate: function () {
66276
- this.render('homepage');
66277
- }
66278
- });
66279
-
66280
- bootApplication();
66281
-
66282
- equal((0, _emberViews.jQuery)('h3:contains(Megatroll)', '#qunit-fixture').length, 1, 'The homepage template was rendered');
66283
- });
66284
-
66285
- QUnit.test('An alternate template will pull in an alternate controller', function () {
66286
- Router.map(function () {
66287
- this.route('home', { path: '/' });
66288
- });
66289
-
66290
- App.HomeRoute = _emberRouting.Route.extend({
66291
- renderTemplate: function () {
66292
- this.render('homepage');
66293
- }
66294
- });
66295
-
66296
- App.HomepageController = _emberRuntime.Controller.extend({
66297
- model: {
66298
- home: 'Comes from homepage'
66299
- }
66300
- });
66301
-
66302
- bootApplication();
66303
-
66304
- equal((0, _emberViews.jQuery)('h3:contains(Megatroll) + p:contains(Comes from homepage)', '#qunit-fixture').length, 1, 'The homepage template was rendered');
66305
- });
66306
-
66307
- QUnit.test('An alternate template will pull in an alternate controller instead of controllerName', function () {
66308
- Router.map(function () {
66309
- this.route('home', { path: '/' });
66310
- });
66311
-
66312
- App.HomeRoute = _emberRouting.Route.extend({
66313
- controllerName: 'foo',
66314
- renderTemplate: function () {
66315
- this.render('homepage');
66316
- }
66317
- });
66318
-
66319
- App.FooController = _emberRuntime.Controller.extend({
66320
- model: {
66321
- home: 'Comes from Foo'
66322
- }
66323
- });
66324
-
66325
- App.HomepageController = _emberRuntime.Controller.extend({
66326
- model: {
66327
- home: 'Comes from homepage'
66328
- }
66329
- });
66330
-
66331
- bootApplication();
66332
-
66333
- equal((0, _emberViews.jQuery)('h3:contains(Megatroll) + p:contains(Comes from homepage)', '#qunit-fixture').length, 1, 'The homepage template was rendered');
66334
- });
66335
-
66336
- QUnit.test('The template will pull in an alternate controller via key/value', function () {
66337
- Router.map(function () {
66338
- this.route('homepage', { path: '/' });
66339
- });
66340
-
66341
- App.HomepageRoute = _emberRouting.Route.extend({
66342
- renderTemplate: function () {
66343
- this.render({ controller: 'home' });
66344
- }
66345
- });
66346
-
66347
- App.HomeController = _emberRuntime.Controller.extend({
66348
- model: {
66349
- home: 'Comes from home.'
66350
- }
66351
- });
66352
-
66353
- bootApplication();
66354
-
66355
- equal((0, _emberViews.jQuery)('h3:contains(Megatroll) + p:contains(Comes from home.)', '#qunit-fixture').length, 1, 'The homepage template was rendered from data from the HomeController');
66356
- });
66357
-
66358
- QUnit.test('The Homepage with explicit template name in renderTemplate and controller', function () {
66359
- Router.map(function () {
66360
- this.route('home', { path: '/' });
66361
- });
66362
-
66363
- App.HomeController = _emberRuntime.Controller.extend({
66364
- model: {
66365
- home: 'YES I AM HOME'
66366
- }
66367
- });
66368
-
66369
- App.HomeRoute = _emberRouting.Route.extend({
66370
- renderTemplate: function () {
66371
- this.render('homepage');
66372
- }
66373
- });
66374
-
66375
- bootApplication();
66376
-
66377
- equal((0, _emberViews.jQuery)('h3:contains(Megatroll) + p:contains(YES I AM HOME)', '#qunit-fixture').length, 1, 'The homepage template was rendered');
66378
- });
66379
-
66380
- QUnit.test('Model passed via renderTemplate model is set as controller\'s model', function () {
66381
- (0, _emberGlimmer.setTemplate)('bio', (0, _emberTemplateCompiler.compile)('<p>{{model.name}}</p>'));
66382
-
66383
- App.BioController = _emberRuntime.Controller.extend();
66384
-
66385
- Router.map(function () {
66386
- this.route('home', { path: '/' });
66387
- });
66388
-
66389
- App.HomeRoute = _emberRouting.Route.extend({
66390
- renderTemplate: function () {
66391
- this.render('bio', {
66392
- model: { name: 'emberjs' }
66393
- });
66394
- }
66395
- });
66396
-
66397
- bootApplication();
66398
-
66399
- equal((0, _emberViews.jQuery)('p:contains(emberjs)', '#qunit-fixture').length, 1, 'Passed model was set as controllers model');
66400
- });
66401
-
66402
- QUnit.test('render uses templateName from route', function () {
66403
- Router.map(function () {
66404
- this.route('home', { path: '/' });
66405
- });
66406
-
66407
- (0, _emberGlimmer.setTemplate)('the_real_home_template', (0, _emberTemplateCompiler.compile)('<p>THIS IS THE REAL HOME</p>'));
66408
-
66409
- App.HomeController = _emberRuntime.Controller.extend();
66410
- App.HomeRoute = _emberRouting.Route.extend({
66411
- templateName: 'the_real_home_template'
66412
- });
66413
-
66414
- bootApplication();
66415
-
66416
- equal((0, _emberViews.jQuery)('p', '#qunit-fixture').text(), 'THIS IS THE REAL HOME', 'The homepage template was rendered');
66417
- });
66418
-
66419
- QUnit.test('defining templateName allows other templates to be rendered', function () {
66420
- Router.map(function () {
66421
- this.route('home', { path: '/' });
66422
- });
66423
-
66424
- (0, _emberGlimmer.setTemplate)('alert', (0, _emberTemplateCompiler.compile)('<div class=\'alert-box\'>Invader!</div>'));
66425
- (0, _emberGlimmer.setTemplate)('the_real_home_template', (0, _emberTemplateCompiler.compile)('<p>THIS IS THE REAL HOME</p>{{outlet \'alert\'}}'));
66426
-
66427
- App.HomeController = _emberRuntime.Controller.extend();
66428
- App.HomeRoute = _emberRouting.Route.extend({
66429
- templateName: 'the_real_home_template',
66430
- actions: {
66431
- showAlert: function () {
66432
- this.render('alert', {
66433
- into: 'home',
66434
- outlet: 'alert'
66435
- });
66436
- }
66437
- }
66438
- });
66439
-
66440
- bootApplication();
66441
-
66442
- equal((0, _emberViews.jQuery)('p', '#qunit-fixture').text(), 'THIS IS THE REAL HOME', 'The homepage template was rendered');
66443
-
66444
- (0, _emberMetal.run)(function () {
66445
- return router.send('showAlert');
66446
- });
66447
-
66448
- equal((0, _emberViews.jQuery)('.alert-box', '#qunit-fixture').text(), 'Invader!', 'Template for alert was render into outlet');
66449
- });
66450
-
66451
- QUnit.test('templateName is still used when calling render with no name and options', function () {
66452
- Router.map(function () {
66453
- this.route('home', { path: '/' });
66454
- });
66455
-
66456
- (0, _emberGlimmer.setTemplate)('alert', (0, _emberTemplateCompiler.compile)('<div class=\'alert-box\'>Invader!</div>'));
66457
- (0, _emberGlimmer.setTemplate)('home', (0, _emberTemplateCompiler.compile)('<p>THIS IS THE REAL HOME</p>{{outlet \'alert\'}}'));
66458
-
66459
- App.HomeRoute = _emberRouting.Route.extend({
66460
- templateName: 'alert',
66461
- renderTemplate: function () {
66462
- this.render({});
66463
- }
66464
- });
66465
-
66466
- bootApplication();
66467
-
66468
- equal((0, _emberViews.jQuery)('.alert-box', '#qunit-fixture').text(), 'Invader!', 'default templateName was rendered into outlet');
66469
- });
66470
-
66471
- QUnit.test('The Homepage with a `setupController` hook', function () {
66472
- Router.map(function () {
66473
- this.route('home', { path: '/' });
66474
- });
66475
-
66476
- App.HomeRoute = _emberRouting.Route.extend({
66477
- setupController: function (controller) {
66478
- (0, _emberMetal.set)(controller, 'hours', (0, _emberRuntime.A)(['Monday through Friday: 9am to 5pm', 'Saturday: Noon to Midnight', 'Sunday: Noon to 6pm']));
66479
- }
66480
- });
66481
-
66482
- (0, _emberGlimmer.setTemplate)('home', (0, _emberTemplateCompiler.compile)('<ul>{{#each hours as |entry|}}<li>{{entry}}</li>{{/each}}</ul>'));
66483
-
66484
- bootApplication();
66485
-
66486
- equal((0, _emberViews.jQuery)('ul li', '#qunit-fixture').eq(2).text(), 'Sunday: Noon to 6pm', 'The template was rendered with the hours context');
66487
- });
66488
-
66489
- QUnit.test('The route controller is still set when overriding the setupController hook', function () {
66490
- Router.map(function () {
66491
- this.route('home', { path: '/' });
66492
- });
66493
-
66494
- App.HomeRoute = _emberRouting.Route.extend({
66495
- setupController: function () {
66496
- // no-op
66497
- // importantly, we are not calling this._super here
66498
- }
66499
- });
66500
-
66501
- registry.register('controller:home', _emberRuntime.Controller.extend());
66502
-
66503
- bootApplication();
66504
-
66505
- deepEqual(container.lookup('route:home').controller, container.lookup('controller:home'), 'route controller is the home controller');
66506
- });
66507
-
66508
- QUnit.test('The route controller can be specified via controllerName', function () {
66509
- Router.map(function () {
66510
- this.route('home', { path: '/' });
66511
- });
66512
-
66513
- (0, _emberGlimmer.setTemplate)('home', (0, _emberTemplateCompiler.compile)('<p>{{myValue}}</p>'));
66514
-
66515
- App.HomeRoute = _emberRouting.Route.extend({
66516
- controllerName: 'myController'
66517
- });
66518
-
66519
- registry.register('controller:myController', _emberRuntime.Controller.extend({
66520
- myValue: 'foo'
66521
- }));
66522
-
66523
- bootApplication();
66524
-
66525
- deepEqual(container.lookup('route:home').controller, container.lookup('controller:myController'), 'route controller is set by controllerName');
66526
- equal((0, _emberViews.jQuery)('p', '#qunit-fixture').text(), 'foo', 'The homepage template was rendered with data from the custom controller');
66527
- });
66528
-
66529
66324
  QUnit.test('The route controller specified via controllerName is used in render', function () {
66530
66325
  Router.map(function () {
66531
66326
  this.route('home', { path: '/' });
@@ -69101,9 +68896,7 @@ enifed('ember/tests/routing/basic_test', ['ember-utils', 'ember-console', 'ember
69101
68896
  }
69102
68897
  });
69103
68898
 
69104
- throws(function () {
69105
- return bootApplication();
69106
- }, /More context objects were passed/);
68899
+ bootApplication();
69107
68900
 
69108
68901
  equal((0, _emberViews.jQuery)('#error').length, 1, 'Error template was rendered.');
69109
68902
  });
@@ -69886,6 +69679,334 @@ enifed('ember/tests/routing/basic_test', ['ember-utils', 'ember-console', 'ember
69886
69679
  equal(router._toplevelView, null, 'the toplevelView was not reinitialized');
69887
69680
  });
69888
69681
  });
69682
+ enifed('ember/tests/routing/decoupled_basic_test', ['ember-babel', 'ember-routing', 'ember-runtime', 'internal-test-helpers'], function (_emberBabel, _emberRouting, _emberRuntime, _internalTestHelpers) {
69683
+ 'use strict';
69684
+
69685
+ (0, _internalTestHelpers.moduleFor)('Basic Routing - Decoupled from global resovler', function (_ApplicationTestCase) {
69686
+ (0, _emberBabel.inherits)(_class, _ApplicationTestCase);
69687
+
69688
+ function _class() {
69689
+
69690
+ var _this = (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.call(this));
69691
+
69692
+ _this.addTemplate('home', '<h3 id="app">Hours</h3>');
69693
+ _this.addTemplate('camelot', '<section id="camelot"><h3>Is a silly place</h3></section>');
69694
+ _this.addTemplate('homepage', '<h3 id="troll">Megatroll</h3><p>{{model.home}}</p>');
69695
+
69696
+ _this.router.map(function () {
69697
+ this.route('home', { path: '/' });
69698
+ });
69699
+ return _this;
69700
+ }
69701
+
69702
+ _class.prototype.getController = function (name) {
69703
+ return this.applicationInstance.lookup('controller:' + name);
69704
+ };
69705
+
69706
+ _class.prototype['@test warn on URLs not included in the route set'] = function () {
69707
+ var _this2 = this;
69708
+
69709
+ return this.visit('/').then(function () {
69710
+ expectAssertion(function () {
69711
+ _this2.visit('/what-is-this-i-dont-even');
69712
+ }, /'\/what-is-this-i-dont-even' did not match any routes/);
69713
+ });
69714
+ };
69715
+
69716
+ _class.prototype['@test The Homepage'] = function (assert) {
69717
+ var _this3 = this;
69718
+
69719
+ return this.visit('/').then(function () {
69720
+ assert.equal(_this3.currentPath, 'home', 'currently on the home route');
69721
+
69722
+ var text = _this3.$('#app').text();
69723
+ assert.equal(text, "Hours", 'the home template was rendered');
69724
+ });
69725
+ };
69726
+
69727
+ _class.prototype['@test The Homepage and the Camelot page with multiple Router.map calls'] = function (assert) {
69728
+ var _this4 = this;
69729
+
69730
+ this.router.map(function () {
69731
+ this.route('camelot', { path: '/camelot' });
69732
+ });
69733
+
69734
+ return this.visit('/camelot').then(function () {
69735
+ assert.equal(_this4.currentPath, 'camelot');
69736
+
69737
+ var text = _this4.$('#camelot').text();
69738
+ assert.equal(text, "Is a silly place", 'the camelot template was rendered');
69739
+
69740
+ return _this4.visit('/');
69741
+ }).then(function () {
69742
+ assert.equal(_this4.currentPath, 'home');
69743
+
69744
+ var text = _this4.$('#app').text();
69745
+ assert.equal(text, "Hours", 'the home template was rendered');
69746
+ });
69747
+ };
69748
+
69749
+ _class.prototype['@test The Homepage with explicit template name in renderTemplate'] = function (assert) {
69750
+ var _this5 = this;
69751
+
69752
+ this.add('route:home', _emberRouting.Route.extend({
69753
+ renderTemplate: function () {
69754
+ this.render('homepage');
69755
+ }
69756
+ }));
69757
+
69758
+ return this.visit('/').then(function () {
69759
+ var text = _this5.$('#troll').text();
69760
+ assert.equal(text, "Megatroll", 'the homepage template was rendered');
69761
+ });
69762
+ };
69763
+
69764
+ _class.prototype['@test an alternate template will pull in an alternate controller'] = function (assert) {
69765
+ var _this6 = this;
69766
+
69767
+ this.add('route:home', _emberRouting.Route.extend({
69768
+ renderTemplate: function () {
69769
+ this.render('homepage');
69770
+ }
69771
+ }));
69772
+ this.add('controller:homepage', _emberRuntime.Controller.extend({
69773
+ model: {
69774
+ home: 'Comes from homepage'
69775
+ }
69776
+ }));
69777
+
69778
+ return this.visit('/').then(function () {
69779
+ var text = _this6.$('p').text();
69780
+
69781
+ assert.equal(text, 'Comes from homepage', 'the homepage template was rendered');
69782
+ });
69783
+ };
69784
+
69785
+ _class.prototype['@test An alternate template will pull in an alternate controller instead of controllerName'] = function (assert) {
69786
+ var _this7 = this;
69787
+
69788
+ this.add('route:home', _emberRouting.Route.extend({
69789
+ controllerName: 'foo',
69790
+ renderTemplate: function () {
69791
+ this.render('homepage');
69792
+ }
69793
+ }));
69794
+ this.add('controller:foo', _emberRuntime.Controller.extend({
69795
+ model: {
69796
+ home: 'Comes from foo'
69797
+ }
69798
+ }));
69799
+ this.add('controller:homepage', _emberRuntime.Controller.extend({
69800
+ model: {
69801
+ home: 'Comes from homepage'
69802
+ }
69803
+ }));
69804
+
69805
+ return this.visit('/').then(function () {
69806
+ var text = _this7.$('p').text();
69807
+
69808
+ assert.equal(text, 'Comes from homepage', 'the homepage template was rendered');
69809
+ });
69810
+ };
69811
+
69812
+ _class.prototype['@test The template will pull in an alternate controller via key/value'] = function (assert) {
69813
+ var _this8 = this;
69814
+
69815
+ this.router.map(function () {
69816
+ this.route('homepage', { path: '/' });
69817
+ });
69818
+
69819
+ this.add('route:homepage', _emberRouting.Route.extend({
69820
+ renderTemplate: function () {
69821
+ this.render({ controller: 'home' });
69822
+ }
69823
+ }));
69824
+ this.add('controller:home', _emberRuntime.Controller.extend({
69825
+ model: {
69826
+ home: 'Comes from home.'
69827
+ }
69828
+ }));
69829
+
69830
+ return this.visit('/').then(function () {
69831
+ var text = _this8.$('p').text();
69832
+
69833
+ assert.equal(text, 'Comes from home.', 'the homepage template was rendered from data from the HomeController');
69834
+ });
69835
+ };
69836
+
69837
+ _class.prototype['@test The Homepage with explicit template name in renderTemplate and controller'] = function (assert) {
69838
+ var _this9 = this;
69839
+
69840
+ this.add('controller:home', _emberRuntime.Controller.extend({
69841
+ model: {
69842
+ home: 'YES I AM HOME'
69843
+ }
69844
+ }));
69845
+ this.add('route:home', _emberRouting.Route.extend({
69846
+ renderTemplate: function () {
69847
+ this.render('homepage');
69848
+ }
69849
+ }));
69850
+
69851
+ return this.visit('/').then(function () {
69852
+ var text = _this9.$('p').text();
69853
+
69854
+ assert.equal(text, 'YES I AM HOME', 'The homepage template was rendered');
69855
+ });
69856
+ };
69857
+
69858
+ _class.prototype['@test Model passed via renderTemplate model is set as controller\'s model'] = function (assert) {
69859
+ var _this10 = this;
69860
+
69861
+ this.addTemplate('bio', '<p>{{model.name}}</p>');
69862
+ this.add('route:home', _emberRouting.Route.extend({
69863
+ renderTemplate: function () {
69864
+ this.render('bio', {
69865
+ model: { name: 'emberjs' }
69866
+ });
69867
+ }
69868
+ }));
69869
+
69870
+ return this.visit('/').then(function () {
69871
+ var text = _this10.$('p').text();
69872
+
69873
+ assert.equal(text, 'emberjs', 'Passed model was set as controller\'s model');
69874
+ });
69875
+ };
69876
+
69877
+ _class.prototype['@test render uses templateName from route'] = function (assert) {
69878
+ var _this11 = this;
69879
+
69880
+ this.addTemplate('the_real_home_template', '<p>THIS IS THE REAL HOME</p>');
69881
+ this.add('route:home', _emberRouting.Route.extend({
69882
+ templateName: 'the_real_home_template'
69883
+ }));
69884
+
69885
+ return this.visit('/').then(function () {
69886
+ var text = _this11.$('p').text();
69887
+
69888
+ assert.equal(text, 'THIS IS THE REAL HOME', 'the homepage template was rendered');
69889
+ });
69890
+ };
69891
+
69892
+ _class.prototype['@test defining templateName allows other templates to be rendered'] = function (assert) {
69893
+ var _this12 = this;
69894
+
69895
+ this.addTemplate('alert', '<div class=\'alert-box\'>Invader!</div>');
69896
+ this.addTemplate('the_real_home_template', '<p>THIS IS THE REAL HOME</p>{{outlet \'alert\'}}');
69897
+ this.add('route:home', _emberRouting.Route.extend({
69898
+ templateName: 'the_real_home_template',
69899
+ actions: {
69900
+ showAlert: function () {
69901
+ this.render('alert', {
69902
+ into: 'home',
69903
+ outlet: 'alert'
69904
+ });
69905
+ }
69906
+ }
69907
+ }));
69908
+
69909
+ return this.visit('/').then(function () {
69910
+ var text = _this12.$('p').text();
69911
+ assert.equal(text, 'THIS IS THE REAL HOME', 'the homepage template was rendered');
69912
+
69913
+ return _this12.runTask(function () {
69914
+ return _this12.appRouter.send('showAlert');
69915
+ });
69916
+ }).then(function () {
69917
+ var text = _this12.$('.alert-box').text();
69918
+
69919
+ assert.equal(text, 'Invader!', 'Template for alert was rendered into the outlet');
69920
+ });
69921
+ };
69922
+
69923
+ _class.prototype['@test templateName is still used when calling render with no name and options'] = function (assert) {
69924
+ var _this13 = this;
69925
+
69926
+ this.addTemplate('alert', '<div class=\'alert-box\'>Invader!</div>');
69927
+ this.addTemplate('home', '<p>THIS IS THE REAL HOME</p>{{outlet \'alert\'}}');
69928
+
69929
+ this.add('route:home', _emberRouting.Route.extend({
69930
+ templateName: 'alert',
69931
+ renderTemplate: function () {
69932
+ this.render({});
69933
+ }
69934
+ }));
69935
+
69936
+ return this.visit('/').then(function () {
69937
+ var text = _this13.$('.alert-box').text();
69938
+
69939
+ assert.equal(text, 'Invader!', 'default templateName was rendered into outlet');
69940
+ });
69941
+ };
69942
+
69943
+ _class.prototype['@test The Homepage with a `setupController` hook'] = function (assert) {
69944
+ var _this14 = this;
69945
+
69946
+ this.addTemplate('home', '<ul>{{#each hours as |entry|}}\n <li>{{entry}}</li>\n {{/each}}\n </ul>\n ');
69947
+
69948
+ this.add('route:home', _emberRouting.Route.extend({
69949
+ setupController: function (controller) {
69950
+ controller.set('hours', (0, _emberRuntime.A)(['Monday through Friday: 9am to 5pm', 'Saturday: Noon to Midnight', 'Sunday: Noon to 6pm']));
69951
+ }
69952
+ }));
69953
+ return this.visit('/').then(function () {
69954
+ var text = _this14.$('ul li').eq(2).text();
69955
+
69956
+ assert.equal(text, 'Sunday: Noon to 6pm', 'The template was rendered with the hours context');
69957
+ });
69958
+ };
69959
+
69960
+ _class.prototype['@test The route controller is still set when overriding the setupController hook'] = function (assert) {
69961
+ var _this15 = this;
69962
+
69963
+ this.add('route:home', _emberRouting.Route.extend({
69964
+ setupController: function () {
69965
+ // no-op
69966
+ // importantly, we are not calling this._super
69967
+ }
69968
+ }));
69969
+
69970
+ this.add('controller:home', _emberRuntime.Controller.extend());
69971
+
69972
+ return this.visit('/').then(function () {
69973
+ var homeRoute = _this15.applicationInstance.lookup('route:home');
69974
+ var homeController = _this15.applicationInstance.lookup('controller:home');
69975
+
69976
+ assert.equal(homeRoute.controller, homeController, 'route controller is the home controller');
69977
+ });
69978
+ };
69979
+
69980
+ _class.prototype['@test the route controller can be specified via controllerName'] = function (assert) {
69981
+ var _this16 = this;
69982
+
69983
+ this.addTemplate('home', '<p>{{myValue}}</p>');
69984
+ this.add('route:home', _emberRouting.Route.extend({
69985
+ controllerName: 'myController'
69986
+ }));
69987
+ this.add('controller:myController', _emberRuntime.Controller.extend({
69988
+ myValue: 'foo'
69989
+ }));
69990
+
69991
+ return this.visit('/').then(function () {
69992
+ var homeRoute = _this16.applicationInstance.lookup('route:home');
69993
+ var myController = _this16.applicationInstance.lookup('controller:myController');
69994
+ var text = _this16.$('p').text();
69995
+
69996
+ assert.deepEqual(homeRoute.controller, myController, 'route controller is set by controllerName');
69997
+ assert.equal(text, 'foo', 'The homepage template was rendered with data from the custom controller');
69998
+ });
69999
+ };
70000
+
70001
+ (0, _emberBabel.createClass)(_class, [{
70002
+ key: 'currentPath',
70003
+ get: function () {
70004
+ return this.getController('application').get('currentPath');
70005
+ }
70006
+ }]);
70007
+ return _class;
70008
+ }(_internalTestHelpers.ApplicationTestCase));
70009
+ });
69889
70010
  enifed('ember/tests/routing/query_params_test', ['ember-babel', 'ember-runtime', 'ember-metal', 'ember-routing', 'ember-views', 'internal-test-helpers'], function (_emberBabel, _emberRuntime, _emberMetal, _emberRouting, _emberViews, _internalTestHelpers) {
69890
70011
  'use strict';
69891
70012
 
@@ -73790,1063 +73911,972 @@ enifed('ember/tests/routing/router_service_test/urlFor_test', ['ember-babel', 'e
73790
73911
  return _class;
73791
73912
  }(_internalTestHelpers.RouterTestCase));
73792
73913
  });
73793
- enifed('ember/tests/routing/substates_test', ['ember-runtime', 'ember-routing', 'ember-metal', 'ember-template-compiler', 'ember-application', 'ember-views', 'ember-glimmer'], function (_emberRuntime, _emberRouting, _emberMetal, _emberTemplateCompiler, _emberApplication, _emberViews, _emberGlimmer) {
73914
+ enifed('ember/tests/routing/substates_test', ['ember-babel', 'ember-runtime', 'ember-routing', 'internal-test-helpers'], function (_emberBabel, _emberRuntime, _emberRouting, _internalTestHelpers) {
73794
73915
  'use strict';
73795
73916
 
73796
- var Router = void 0,
73797
- App = void 0,
73798
- templates = void 0,
73799
- router = void 0,
73800
- container = void 0,
73801
- counter = void 0;
73917
+ var counter = void 0;
73802
73918
 
73803
73919
  function step(expectedValue, description) {
73804
73920
  equal(counter, expectedValue, 'Step ' + expectedValue + ': ' + description);
73805
73921
  counter++;
73806
73922
  }
73807
73923
 
73808
- function bootApplication(startingURL) {
73809
- for (var name in templates) {
73810
- (0, _emberGlimmer.setTemplate)(name, (0, _emberTemplateCompiler.compile)(templates[name]));
73811
- }
73924
+ (0, _internalTestHelpers.moduleFor)('Loading/Error Substates', function (_ApplicationTestCase) {
73925
+ (0, _emberBabel.inherits)(_class, _ApplicationTestCase);
73812
73926
 
73813
- if (startingURL) {
73814
- _emberRouting.NoneLocation.reopen({
73815
- path: startingURL
73816
- });
73817
- }
73927
+ function _class() {
73818
73928
 
73819
- startingURL = startingURL || '';
73820
- router = container.lookup('router:main');
73821
- (0, _emberMetal.run)(App, 'advanceReadiness');
73822
- }
73929
+ var _this = (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.call(this));
73823
73930
 
73824
- QUnit.module('Loading/Error Substates', {
73825
- setup: function () {
73826
73931
  counter = 1;
73827
73932
 
73828
- (0, _emberMetal.run)(function () {
73829
- App = _emberApplication.Application.create({
73830
- name: 'App',
73831
- rootElement: '#qunit-fixture',
73832
- // fake a modules resolver
73833
- Resolver: _emberApplication.Resolver.extend({ moduleBasedResolver: true })
73834
- });
73835
-
73836
- App.deferReadiness();
73837
-
73838
- App.Router.reopen({
73839
- location: 'none'
73840
- });
73841
-
73842
- Router = App.Router;
73933
+ _this.addTemplate('application', '<div id="app">{{outlet}}</div>');
73934
+ _this.addTemplate('index', 'INDEX');
73935
+ return _this;
73936
+ }
73843
73937
 
73844
- container = App.__container__;
73938
+ _class.prototype.getController = function (name) {
73939
+ return this.applicationInstance.lookup('controller:' + name);
73940
+ };
73845
73941
 
73846
- templates = {
73847
- application: '<div id="app">{{outlet}}</div>',
73848
- index: 'INDEX',
73849
- loading: 'LOADING',
73850
- bro: 'BRO',
73851
- sis: 'SIS'
73852
- };
73853
- });
73854
- },
73855
- teardown: function () {
73856
- (0, _emberMetal.run)(function () {
73857
- App.destroy();
73858
- App = null;
73942
+ _class.prototype['@test Slow promise from a child route of application enters nested loading state'] = function (assert) {
73943
+ var _this2 = this;
73859
73944
 
73860
- (0, _emberGlimmer.setTemplates)({});
73861
- });
73945
+ var turtleDeferred = _emberRuntime.RSVP.defer();
73862
73946
 
73863
- _emberRouting.NoneLocation.reopen({
73864
- path: ''
73947
+ this.router.map(function () {
73948
+ this.route('turtle');
73865
73949
  });
73866
- }
73867
- });
73868
-
73869
- QUnit.test('Slow promise from a child route of application enters nested loading state', function () {
73870
- var broDeferred = _emberRuntime.RSVP.defer();
73871
73950
 
73872
- Router.map(function () {
73873
- this.route('bro');
73874
- });
73951
+ this.add('route:application', _emberRouting.Route.extend({
73952
+ setupController: function () {
73953
+ step(2, 'ApplicationRoute#setupController');
73954
+ }
73955
+ }));
73875
73956
 
73876
- App.ApplicationRoute = _emberRouting.Route.extend({
73877
- setupController: function () {
73878
- step(2, 'ApplicationRoute#setup');
73879
- }
73880
- });
73957
+ this.add('route:turtle', _emberRouting.Route.extend({
73958
+ model: function () {
73959
+ step(1, 'TurtleRoute#model');
73960
+ return turtleDeferred.promise;
73961
+ }
73962
+ }));
73963
+ this.addTemplate('turtle', 'TURTLE');
73964
+ this.addTemplate('loading', 'LOADING');
73881
73965
 
73882
- App.BroRoute = _emberRouting.Route.extend({
73883
- model: function () {
73884
- step(1, 'BroRoute#model');
73885
- return broDeferred.promise;
73886
- }
73887
- });
73966
+ var promise = this.visit('/turtle').then(function () {
73967
+ text = _this2.$('#app').text();
73968
+ assert.equal(text, 'TURTLE', 'turtle template has loaded and replaced the loading template');
73969
+ });
73888
73970
 
73889
- bootApplication('/bro');
73971
+ var text = this.$('#app').text();
73972
+ assert.equal(text, 'LOADING', 'The Loading template is nested in application template\'s outlet');
73890
73973
 
73891
- equal((0, _emberViews.jQuery)('#app', '#qunit-fixture').text(), 'LOADING', 'The Loading template is nested in application template\'s outlet');
73974
+ turtleDeferred.resolve();
73975
+ return promise;
73976
+ };
73892
73977
 
73893
- (0, _emberMetal.run)(broDeferred, 'resolve', {});
73978
+ _class.prototype['@test Slow promises returned from ApplicationRoute#model don\'t enter LoadingRoute'] = function (assert) {
73979
+ var _this3 = this;
73894
73980
 
73895
- equal((0, _emberViews.jQuery)('#app', '#qunit-fixture').text(), 'BRO', 'bro template has loaded and replaced loading template');
73896
- });
73981
+ var appDeferred = _emberRuntime.RSVP.defer();
73897
73982
 
73898
- QUnit.test('Slow promises waterfall on startup', function () {
73899
- expect(7);
73983
+ this.add('route:application', _emberRouting.Route.extend({
73984
+ model: function () {
73985
+ return appDeferred.promise;
73986
+ }
73987
+ }));
73988
+ this.add('route:loading', _emberRouting.Route.extend({
73989
+ setupController: function () {
73990
+ ok(false, 'shouldn\'t get here');
73991
+ }
73992
+ }));
73900
73993
 
73901
- var grandmaDeferred = _emberRuntime.RSVP.defer();
73902
- var sallyDeferred = _emberRuntime.RSVP.defer();
73994
+ var promise = this.visit('/').then(function () {
73995
+ text = _this3.$('#app').text();
73903
73996
 
73904
- Router.map(function () {
73905
- this.route('grandma', function () {
73906
- this.route('mom', { resetNamespace: true }, function () {
73907
- this.route('sally');
73908
- });
73997
+ assert.equal(text, 'INDEX', 'index template has been rendered');
73909
73998
  });
73910
- });
73911
73999
 
73912
- templates.grandma = 'GRANDMA {{outlet}}';
73913
- templates.mom = 'MOM {{outlet}}';
73914
- templates['mom/loading'] = 'MOMLOADING';
73915
- templates['mom/sally'] = 'SALLY';
74000
+ var text = this.$('#app').text();
73916
74001
 
73917
- App.GrandmaRoute = _emberRouting.Route.extend({
73918
- model: function () {
73919
- step(1, 'GrandmaRoute#model');
73920
- return grandmaDeferred.promise;
73921
- }
73922
- });
74002
+ assert.equal(text, '', 'nothing has been rendered yet');
74003
+ appDeferred.resolve();
73923
74004
 
73924
- App.MomRoute = _emberRouting.Route.extend({
73925
- model: function () {
73926
- step(2, 'Mom#model');
73927
- return {};
73928
- }
73929
- });
73930
-
73931
- App.MomSallyRoute = _emberRouting.Route.extend({
73932
- model: function () {
73933
- step(3, 'SallyRoute#model');
73934
- return sallyDeferred.promise;
73935
- },
73936
- setupController: function () {
73937
- step(4, 'SallyRoute#setupController');
73938
- }
73939
- });
73940
-
73941
- bootApplication('/grandma/mom/sally');
73942
-
73943
- equal((0, _emberViews.jQuery)('#app', '#qunit-fixture').text(), 'LOADING', 'The Loading template is nested in application template\'s outlet');
73944
-
73945
- (0, _emberMetal.run)(grandmaDeferred, 'resolve', {});
73946
- equal((0, _emberViews.jQuery)('#app', '#qunit-fixture').text(), 'GRANDMA MOM MOMLOADING', 'Mom\'s child loading route is displayed due to sally\'s slow promise');
73947
-
73948
- (0, _emberMetal.run)(sallyDeferred, 'resolve', {});
73949
- equal((0, _emberViews.jQuery)('#app', '#qunit-fixture').text(), 'GRANDMA MOM SALLY', 'Sally template displayed');
73950
- });
74005
+ return promise;
74006
+ };
73951
74007
 
73952
- QUnit.test('ApplicationRoute#currentPath reflects loading state path', function () {
73953
- expect(4);
74008
+ _class.prototype['@test Don\'t enter loading route unless either route or template defined'] = function (assert) {
74009
+ var _this4 = this;
73954
74010
 
73955
- var momDeferred = _emberRuntime.RSVP.defer();
74011
+ var deferred = _emberRuntime.RSVP.defer();
73956
74012
 
73957
- Router.map(function () {
73958
- this.route('grandma', function () {
73959
- this.route('mom');
74013
+ this.router.map(function () {
74014
+ this.route('dummy');
73960
74015
  });
73961
- });
73962
-
73963
- templates.grandma = 'GRANDMA {{outlet}}';
73964
- templates['grandma/loading'] = 'GRANDMALOADING';
73965
- templates['grandma/mom'] = 'MOM';
73966
-
73967
- App.GrandmaMomRoute = _emberRouting.Route.extend({
73968
- model: function () {
73969
- return momDeferred.promise;
73970
- }
73971
- });
73972
-
73973
- bootApplication('/grandma/mom');
73974
-
73975
- equal((0, _emberViews.jQuery)('#app', '#qunit-fixture').text(), 'GRANDMA GRANDMALOADING');
74016
+ this.add('route:dummy', _emberRouting.Route.extend({
74017
+ model: function () {
74018
+ return deferred.promise;
74019
+ }
74020
+ }));
74021
+ this.addTemplate('dummy', 'DUMMY');
73976
74022
 
73977
- var appController = container.lookup('controller:application');
73978
- equal(appController.get('currentPath'), 'grandma.loading', 'currentPath reflects loading state');
74023
+ return this.visit('/').then(function () {
74024
+ var promise = _this4.visit('/dummy').then(function () {
74025
+ var text = _this4.$('#app').text();
73979
74026
 
73980
- (0, _emberMetal.run)(momDeferred, 'resolve', {});
73981
- equal((0, _emberViews.jQuery)('#app', '#qunit-fixture').text(), 'GRANDMA MOM');
73982
- equal(appController.get('currentPath'), 'grandma.mom', 'currentPath reflects final state');
73983
- });
74027
+ assert.equal(text, 'DUMMY', 'dummy template has been rendered');
74028
+ });
73984
74029
 
73985
- QUnit.test('Slow promises returned from ApplicationRoute#model don\'t enter LoadingRoute', function () {
73986
- expect(2);
74030
+ assert.ok(_this4.currentPath !== 'loading', '\n loading state not entered\n ');
74031
+ deferred.resolve();
73987
74032
 
73988
- var appDeferred = _emberRuntime.RSVP.defer();
74033
+ return promise;
74034
+ });
74035
+ };
73989
74036
 
73990
- App.ApplicationRoute = _emberRouting.Route.extend({
73991
- model: function () {
73992
- return appDeferred.promise;
73993
- }
73994
- });
74037
+ _class.prototype['@test Enter loading route only if loadingRoute is defined'] = function (assert) {
74038
+ var _this5 = this;
73995
74039
 
73996
- App.LoadingRoute = _emberRouting.Route.extend({
73997
- setupController: function () {
73998
- ok(false, 'shouldn\'t get here');
73999
- }
74000
- });
74040
+ var deferred = _emberRuntime.RSVP.defer();
74001
74041
 
74002
- bootApplication();
74042
+ this.router.map(function () {
74043
+ this.route('dummy');
74044
+ });
74003
74045
 
74004
- equal((0, _emberViews.jQuery)('#app', '#qunit-fixture').text(), '', 'nothing has been rendered yet');
74046
+ this.add('route:dummy', _emberRouting.Route.extend({
74047
+ model: function () {
74048
+ step(1, 'DummyRoute#model');
74049
+ return deferred.promise;
74050
+ }
74051
+ }));
74052
+ this.add('route:loading', _emberRouting.Route.extend({
74053
+ setupController: function () {
74054
+ step(2, 'LoadingRoute#setupController');
74055
+ }
74056
+ }));
74057
+ this.addTemplate('dummy', 'DUMMY');
74005
74058
 
74006
- (0, _emberMetal.run)(appDeferred, 'resolve', {});
74007
- equal((0, _emberViews.jQuery)('#app', '#qunit-fixture').text(), 'INDEX');
74008
- });
74059
+ return this.visit('/').then(function () {
74060
+ var promise = _this5.visit('/dummy').then(function () {
74061
+ var text = _this5.$('#app').text();
74009
74062
 
74010
- QUnit.test('Don\'t enter loading route unless either route or template defined', function () {
74011
- delete templates.loading;
74063
+ assert.equal(text, 'DUMMY', 'dummy template has been rendered');
74064
+ });
74012
74065
 
74013
- expect(2);
74066
+ assert.equal(_this5.currentPath, 'loading', 'loading state entered');
74067
+ deferred.resolve();
74014
74068
 
74015
- var indexDeferred = _emberRuntime.RSVP.defer();
74069
+ return promise;
74070
+ });
74071
+ };
74016
74072
 
74017
- App.ApplicationController = _emberRuntime.Controller.extend();
74073
+ _class.prototype['@test Slow promises returned from ApplicationRoute#model enter ApplicationLoadingRoute if present'] = function (assert) {
74074
+ var _this6 = this;
74018
74075
 
74019
- App.IndexRoute = _emberRouting.Route.extend({
74020
- model: function () {
74021
- return indexDeferred.promise;
74022
- }
74023
- });
74076
+ var appDeferred = _emberRuntime.RSVP.defer();
74024
74077
 
74025
- bootApplication();
74078
+ this.add('route:application', _emberRouting.Route.extend({
74079
+ model: function () {
74080
+ return appDeferred.promise;
74081
+ }
74082
+ }));
74083
+ var loadingRouteEntered = false;
74084
+ this.add('route:application_loading', _emberRouting.Route.extend({
74085
+ setupController: function () {
74086
+ loadingRouteEntered = true;
74087
+ }
74088
+ }));
74026
74089
 
74027
- var appController = container.lookup('controller:application');
74028
- ok(appController.get('currentPath') !== 'loading', 'loading state not entered');
74090
+ var promise = this.visit('/').then(function () {
74091
+ assert.equal(_this6.$('#app').text(), 'INDEX', 'index route loaded');
74092
+ });
74093
+ assert.ok(loadingRouteEntered, 'ApplicationLoadingRoute was entered');
74094
+ appDeferred.resolve();
74029
74095
 
74030
- (0, _emberMetal.run)(indexDeferred, 'resolve', {});
74031
- equal((0, _emberViews.jQuery)('#app', '#qunit-fixture').text(), 'INDEX');
74032
- });
74096
+ return promise;
74097
+ };
74033
74098
 
74034
- QUnit.test('Enter loading route if only LoadingRoute defined', function () {
74035
- delete templates.loading;
74099
+ _class.prototype['@test Slow promises returned from ApplicationRoute#model enter application_loading if template present'] = function (assert) {
74100
+ var _this7 = this;
74036
74101
 
74037
- expect(4);
74102
+ var appDeferred = _emberRuntime.RSVP.defer();
74038
74103
 
74039
- var indexDeferred = _emberRuntime.RSVP.defer();
74104
+ this.addTemplate('application_loading', '\n <div id="toplevel-loading">TOPLEVEL LOADING</div>\n ');
74105
+ this.add('route:application', _emberRouting.Route.extend({
74106
+ model: function () {
74107
+ return appDeferred.promise;
74108
+ }
74109
+ }));
74040
74110
 
74041
- App.IndexRoute = _emberRouting.Route.extend({
74042
- model: function () {
74043
- step(1, 'IndexRoute#model');
74044
- return indexDeferred.promise;
74045
- }
74046
- });
74111
+ var promise = this.visit('/').then(function () {
74112
+ var length = _this7.$('#toplevel-loading').length;
74113
+ text = _this7.$('#app').text();
74047
74114
 
74048
- App.LoadingRoute = _emberRouting.Route.extend({
74049
- setupController: function () {
74050
- step(2, 'LoadingRoute#setupController');
74051
- }
74052
- });
74115
+ assert.equal(length, 0, 'top-level loading view has been entirely removed from the DOM');
74116
+ assert.equal(text, 'INDEX', 'index has fully rendered');
74117
+ });
74118
+ var text = this.$('#toplevel-loading').text();
74053
74119
 
74054
- bootApplication();
74120
+ assert.equal(text, 'TOPLEVEL LOADING', 'still loading the top level');
74121
+ appDeferred.resolve();
74055
74122
 
74056
- var appController = container.lookup('controller:application');
74057
- equal(appController.get('currentPath'), 'loading', 'loading state entered');
74123
+ return promise;
74124
+ };
74058
74125
 
74059
- (0, _emberMetal.run)(indexDeferred, 'resolve', {});
74060
- equal((0, _emberViews.jQuery)('#app', '#qunit-fixture').text(), 'INDEX');
74061
- });
74126
+ _class.prototype['@test Prioritized substate entry works with preserved-namespace nested routes'] = function (assert) {
74127
+ var _this8 = this;
74062
74128
 
74063
- QUnit.test('Enter child loading state of pivot route', function () {
74064
- expect(4);
74129
+ var deferred = _emberRuntime.RSVP.defer();
74065
74130
 
74066
- var deferred = _emberRuntime.RSVP.defer();
74131
+ this.addTemplate('foo.bar_loading', 'FOOBAR LOADING');
74132
+ this.addTemplate('foo.bar.index', 'YAY');
74067
74133
 
74068
- Router.map(function () {
74069
- this.route('grandma', function () {
74070
- this.route('mom', { resetNamespace: true }, function () {
74071
- this.route('sally');
74134
+ this.router.map(function () {
74135
+ this.route('foo', function () {
74136
+ this.route('bar', { path: '/bar' }, function () {});
74072
74137
  });
74073
- this.route('smells');
74074
74138
  });
74075
- });
74076
-
74077
- templates['grandma/loading'] = 'GMONEYLOADING';
74078
-
74079
- App.ApplicationController = _emberRuntime.Controller.extend();
74080
-
74081
- App.MomSallyRoute = _emberRouting.Route.extend({
74082
- setupController: function () {
74083
- step(1, 'SallyRoute#setupController');
74084
- }
74085
- });
74086
-
74087
- App.GrandmaSmellsRoute = _emberRouting.Route.extend({
74088
- model: function () {
74089
- return deferred.promise;
74090
- }
74091
- });
74092
74139
 
74093
- bootApplication('/grandma/mom/sally');
74140
+ this.add('route:foo.bar', _emberRouting.Route.extend({
74141
+ model: function () {
74142
+ return deferred.promise;
74143
+ }
74144
+ }));
74094
74145
 
74095
- var appController = container.lookup('controller:application');
74096
- equal(appController.get('currentPath'), 'grandma.mom.sally', 'Initial route fully loaded');
74146
+ return this.visit('/').then(function () {
74147
+ var promise = _this8.visit('/foo/bar').then(function () {
74148
+ text = _this8.$('#app').text();
74097
74149
 
74098
- (0, _emberMetal.run)(router, 'transitionTo', 'grandma.smells');
74099
- equal(appController.get('currentPath'), 'grandma.loading', 'in pivot route\'s child loading state');
74150
+ assert.equal(text, 'YAY', 'foo.bar.index fully loaded');
74151
+ });
74152
+ var text = _this8.$('#app').text();
74100
74153
 
74101
- (0, _emberMetal.run)(deferred, 'resolve', {});
74154
+ assert.equal(text, 'FOOBAR LOADING', 'foo.bar_loading was entered (as opposed to something like foo/foo/bar_loading)');
74155
+ deferred.resolve();
74102
74156
 
74103
- equal(appController.get('currentPath'), 'grandma.smells', 'Finished transition');
74104
- });
74157
+ return promise;
74158
+ });
74159
+ };
74105
74160
 
74106
- QUnit.test('Loading actions bubble to root, but don\'t enter substates above pivot', function () {
74107
- expect(6);
74161
+ _class.prototype['@test Prioritized substate entry works with reset-namespace nested routes'] = function (assert) {
74162
+ var _this9 = this;
74108
74163
 
74109
- delete templates.loading;
74164
+ var deferred = _emberRuntime.RSVP.defer();
74110
74165
 
74111
- var sallyDeferred = _emberRuntime.RSVP.defer();
74112
- var smellsDeferred = _emberRuntime.RSVP.defer();
74166
+ this.addTemplate('bar_loading', 'BAR LOADING');
74167
+ this.addTemplate('bar.index', 'YAY');
74113
74168
 
74114
- Router.map(function () {
74115
- this.route('grandma', function () {
74116
- this.route('mom', { resetNamespace: true }, function () {
74117
- this.route('sally');
74169
+ this.router.map(function () {
74170
+ this.route('foo', function () {
74171
+ this.route('bar', { path: '/bar', resetNamespace: true }, function () {});
74118
74172
  });
74119
- this.route('smells');
74120
74173
  });
74121
- });
74122
74174
 
74123
- App.ApplicationController = _emberRuntime.Controller.extend();
74124
-
74125
- App.ApplicationRoute = _emberRouting.Route.extend({
74126
- actions: {
74127
- loading: function () {
74128
- ok(true, 'loading action received on ApplicationRoute');
74175
+ this.add('route:bar', _emberRouting.Route.extend({
74176
+ model: function () {
74177
+ return deferred.promise;
74129
74178
  }
74130
- }
74131
- });
74132
-
74133
- App.MomSallyRoute = _emberRouting.Route.extend({
74134
- model: function () {
74135
- return sallyDeferred.promise;
74136
- }
74137
- });
74138
-
74139
- App.GrandmaSmellsRoute = _emberRouting.Route.extend({
74140
- model: function () {
74141
- return smellsDeferred.promise;
74142
- }
74143
- });
74179
+ }));
74144
74180
 
74145
- bootApplication('/grandma/mom/sally');
74181
+ return this.visit('/').then(function () {
74182
+ var promise = _this9.visit('/foo/bar').then(function () {
74183
+ text = _this9.$('#app').text();
74146
74184
 
74147
- var appController = container.lookup('controller:application');
74148
- ok(!appController.get('currentPath'), 'Initial route fully loaded');
74149
- (0, _emberMetal.run)(sallyDeferred, 'resolve', {});
74185
+ assert.equal(text, 'YAY', 'bar.index fully loaded');
74186
+ });
74150
74187
 
74151
- equal(appController.get('currentPath'), 'grandma.mom.sally', 'transition completed');
74188
+ var text = _this9.$('#app').text();
74152
74189
 
74153
- (0, _emberMetal.run)(router, 'transitionTo', 'grandma.smells');
74154
- equal(appController.get('currentPath'), 'grandma.mom.sally', 'still in initial state because the only loading state is above the pivot route');
74190
+ assert.equal(text, 'BAR LOADING', 'foo.bar_loading was entered (as opposed to something likefoo/foo/bar_loading)');
74191
+ deferred.resolve();
74155
74192
 
74156
- (0, _emberMetal.run)(smellsDeferred, 'resolve', {});
74193
+ return promise;
74194
+ });
74195
+ };
74157
74196
 
74158
- equal(appController.get('currentPath'), 'grandma.smells', 'Finished transition');
74159
- });
74197
+ _class.prototype['@test Prioritized loading substate entry works with preserved-namespace nested routes'] = function (assert) {
74198
+ var _this10 = this;
74160
74199
 
74161
- QUnit.test('Default error event moves into nested route', function () {
74162
- expect(6);
74200
+ var deferred = _emberRuntime.RSVP.defer();
74163
74201
 
74164
- templates['grandma'] = 'GRANDMA {{outlet}}';
74165
- templates['grandma/error'] = 'ERROR: {{model.msg}}';
74202
+ this.addTemplate('foo.bar_loading', 'FOOBAR LOADING');
74203
+ this.addTemplate('foo.bar', 'YAY');
74166
74204
 
74167
- Router.map(function () {
74168
- this.route('grandma', function () {
74169
- this.route('mom', { resetNamespace: true }, function () {
74170
- this.route('sally');
74205
+ this.router.map(function () {
74206
+ this.route('foo', function () {
74207
+ this.route('bar');
74171
74208
  });
74172
74209
  });
74173
- });
74174
74210
 
74175
- App.ApplicationController = _emberRuntime.Controller.extend();
74176
-
74177
- App.MomSallyRoute = _emberRouting.Route.extend({
74178
- model: function () {
74179
- step(1, 'MomSallyRoute#model');
74180
-
74181
- return _emberRuntime.RSVP.reject({
74182
- msg: 'did it broke?'
74183
- });
74184
- },
74185
-
74186
- actions: {
74187
- error: function () {
74188
- step(2, 'MomSallyRoute#actions.error');
74189
- return true;
74211
+ this.add('route:foo.bar', _emberRouting.Route.extend({
74212
+ model: function () {
74213
+ return deferred.promise;
74190
74214
  }
74191
- }
74192
- });
74215
+ }));
74193
74216
 
74194
- throws(function () {
74195
- bootApplication('/grandma/mom/sally');
74196
- }, function (err) {
74197
- return err.msg === 'did it broke?';
74198
- });
74217
+ var promise = this.visit('/foo/bar').then(function () {
74218
+ text = _this10.$('#app').text();
74199
74219
 
74200
- step(3, 'App finished booting');
74220
+ assert.equal(text, 'YAY', 'foo.bar has rendered');
74221
+ });
74222
+ var text = this.$('#app').text();
74201
74223
 
74202
- equal((0, _emberViews.jQuery)('#app', '#qunit-fixture').text(), 'GRANDMA ERROR: did it broke?', 'error bubbles');
74224
+ assert.equal(text, 'FOOBAR LOADING', 'foo.bar_loading was entered (as opposed to something like foo/foo/bar_loading)');
74225
+ deferred.resolve();
74203
74226
 
74204
- var appController = container.lookup('controller:application');
74205
- equal(appController.get('currentPath'), 'grandma.error', 'Initial route fully loaded');
74206
- });
74227
+ return promise;
74228
+ };
74207
74229
 
74208
- QUnit.test('Error events that aren\'t bubbled don\t throw application assertions', function () {
74209
- expect(2);
74230
+ _class.prototype['@test Prioritized error substate entry works with preserved-namespaec nested routes'] = function (assert) {
74231
+ var _this11 = this;
74210
74232
 
74211
- templates['grandma'] = 'GRANDMA {{outlet}}';
74233
+ this.addTemplate('foo.bar_error', 'FOOBAR ERROR: {{model.msg}}');
74234
+ this.addTemplate('foo.bar', 'YAY');
74212
74235
 
74213
- Router.map(function () {
74214
- this.route('grandma', function () {
74215
- this.route('mom', { resetNamespace: true }, function () {
74216
- this.route('sally');
74236
+ this.router.map(function () {
74237
+ this.route('foo', function () {
74238
+ this.route('bar');
74217
74239
  });
74218
74240
  });
74219
- });
74220
-
74221
- App.ApplicationController = _emberRuntime.Controller.extend();
74222
74241
 
74223
- App.MomSallyRoute = _emberRouting.Route.extend({
74224
- model: function () {
74225
- step(1, 'MomSallyRoute#model');
74226
-
74227
- return _emberRuntime.RSVP.reject({
74228
- msg: 'did it broke?'
74229
- });
74230
- },
74231
-
74232
- actions: {
74233
- error: function (err) {
74234
- equal(err.msg, 'did it broke?');
74235
- return false;
74242
+ this.add('route:foo.bar', _emberRouting.Route.extend({
74243
+ model: function () {
74244
+ return _emberRuntime.RSVP.reject({
74245
+ msg: 'did it broke?'
74246
+ });
74236
74247
  }
74237
- }
74238
- });
74239
-
74240
- bootApplication('/grandma/mom/sally');
74241
- });
74242
-
74243
- QUnit.test('Non-bubbled errors that re-throw aren\'t swallowed', function () {
74244
- expect(2);
74248
+ }));
74245
74249
 
74246
- templates['grandma'] = 'GRANDMA {{outlet}}';
74250
+ return this.visit('/').then(function () {
74251
+ return _this11.visit('/foo/bar').then(function () {
74247
74252
 
74248
- Router.map(function () {
74249
- this.route('grandma', function () {
74250
- this.route('mom', { resetNamespace: true }, function () {
74251
- this.route('sally');
74253
+ var text = _this11.$('#app').text();
74254
+ assert.equal(text, 'FOOBAR ERROR: did it broke?', 'foo.bar_error was entered (as opposed to something like foo/foo/bar_error)');
74252
74255
  });
74253
74256
  });
74254
- });
74257
+ };
74255
74258
 
74256
- App.ApplicationController = _emberRuntime.Controller.extend();
74259
+ _class.prototype['@test Prioritized loading substate entry works with auto-generated index routes'] = function (assert) {
74260
+ var _this12 = this;
74257
74261
 
74258
- App.MomSallyRoute = _emberRouting.Route.extend({
74259
- model: function () {
74260
- step(1, 'MomSallyRoute#model');
74262
+ var deferred = _emberRuntime.RSVP.defer();
74263
+ this.addTemplate('foo.index_loading', 'FOO LOADING');
74264
+ this.addTemplate('foo.index', 'YAY');
74265
+ this.addTemplate('foo', '{{outlet}}');
74261
74266
 
74262
- return _emberRuntime.RSVP.reject({
74263
- msg: 'did it broke?'
74267
+ this.router.map(function () {
74268
+ this.route('foo', function () {
74269
+ this.route('bar');
74264
74270
  });
74265
- },
74271
+ });
74266
74272
 
74267
- actions: {
74268
- error: function (err) {
74269
- // returns undefined which is falsey
74270
- throw err;
74273
+ this.add('route:foo.index', _emberRouting.Route.extend({
74274
+ model: function () {
74275
+ return deferred.promise;
74271
74276
  }
74272
- }
74273
- });
74274
-
74275
- throws(function () {
74276
- bootApplication('/grandma/mom/sally');
74277
- }, function (err) {
74278
- return err.msg === 'did it broke?';
74279
- });
74280
- });
74281
-
74282
- QUnit.test('Handled errors that re-throw aren\'t swallowed', function () {
74283
- expect(4);
74284
-
74285
- var handledError = void 0;
74277
+ }));
74278
+ this.add('route:foo', _emberRouting.Route.extend({
74279
+ model: function () {
74280
+ return true;
74281
+ }
74282
+ }));
74286
74283
 
74287
- templates['grandma'] = 'GRANDMA {{outlet}}';
74284
+ var promise = this.visit('/foo').then(function () {
74285
+ text = _this12.$('#app').text();
74288
74286
 
74289
- Router.map(function () {
74290
- this.route('grandma', function () {
74291
- this.route('mom', { resetNamespace: true }, function () {
74292
- this.route('sally');
74293
- this.route('this-route-throws');
74294
- });
74287
+ assert.equal(text, 'YAY', 'foo.index was rendered');
74295
74288
  });
74296
- });
74289
+ var text = this.$('#app').text();
74290
+ assert.equal(text, 'FOO LOADING', 'foo.index_loading was entered');
74297
74291
 
74298
- App.ApplicationController = _emberRuntime.Controller.extend();
74299
-
74300
- App.MomSallyRoute = _emberRouting.Route.extend({
74301
- model: function () {
74302
- step(1, 'MomSallyRoute#model');
74292
+ deferred.resolve();
74303
74293
 
74304
- return _emberRuntime.RSVP.reject({
74305
- msg: 'did it broke?'
74306
- });
74307
- },
74294
+ return promise;
74295
+ };
74308
74296
 
74309
- actions: {
74310
- error: function (err) {
74311
- step(2, 'MomSallyRoute#error');
74297
+ _class.prototype['@test Prioritized error substate entry works with auto-generated index routes'] = function (assert) {
74298
+ var _this13 = this;
74312
74299
 
74313
- handledError = err;
74300
+ this.addTemplate('foo.index_error', 'FOO ERROR: {{model.msg}}');
74301
+ this.addTemplate('foo.index', 'YAY');
74302
+ this.addTemplate('foo', '{{outlet}}');
74314
74303
 
74315
- this.transitionTo('mom.this-route-throws');
74304
+ this.router.map(function () {
74305
+ this.route('foo', function () {
74306
+ this.route('bar');
74307
+ });
74308
+ });
74316
74309
 
74317
- // Marks error as handled
74318
- return false;
74310
+ this.add('route:foo.index', _emberRouting.Route.extend({
74311
+ model: function () {
74312
+ return _emberRuntime.RSVP.reject({
74313
+ msg: 'did it broke?'
74314
+ });
74319
74315
  }
74320
- }
74321
- });
74322
-
74323
- App.MomThisRouteThrowsRoute = _emberRouting.Route.extend({
74324
- model: function () {
74325
- step(3, 'MomThisRouteThrows#model');
74326
-
74327
- throw handledError;
74328
- }
74329
- });
74330
-
74331
- throws(function () {
74332
- bootApplication('/grandma/mom/sally');
74333
- }, function (err) {
74334
- return err.msg === 'did it broke?';
74335
- });
74336
- });
74337
-
74338
- QUnit.test('Handled errors that bubble can be handled at a higher level', function () {
74339
- expect(4);
74316
+ }));
74317
+ this.add('route:foo', _emberRouting.Route.extend({
74318
+ model: function () {
74319
+ return true;
74320
+ }
74321
+ }));
74340
74322
 
74341
- var handledError = void 0;
74323
+ return this.visit('/').then(function () {
74342
74324
 
74343
- templates['grandma'] = 'GRANDMA {{outlet}}';
74325
+ return _this13.visit('/foo').then(function () {
74326
+ var text = _this13.$('#app').text();
74344
74327
 
74345
- Router.map(function () {
74346
- this.route('grandma', function () {
74347
- this.route('mom', { resetNamespace: true }, function () {
74348
- this.route('sally');
74328
+ assert.equal(text, 'FOO ERROR: did it broke?', 'foo.index_error was entered');
74349
74329
  });
74350
74330
  });
74351
- });
74352
-
74353
- App.ApplicationController = _emberRuntime.Controller.extend();
74354
-
74355
- App.MomRoute = _emberRouting.Route.extend({
74356
- actions: {
74357
- error: function (err) {
74358
- step(3, 'MomRoute#error');
74331
+ };
74359
74332
 
74360
- equal(err, handledError, 'error handled and rebubbled is handleable at higher route');
74361
- }
74333
+ (0, _emberBabel.createClass)(_class, [{
74334
+ key: 'currentPath',
74335
+ get: function () {
74336
+ return this.getController('application').get('currentPath');
74362
74337
  }
74363
- });
74364
-
74365
- App.MomSallyRoute = _emberRouting.Route.extend({
74366
- model: function () {
74367
- step(1, 'MomSallyRoute#model');
74338
+ }]);
74339
+ return _class;
74340
+ }(_internalTestHelpers.ApplicationTestCase));
74368
74341
 
74369
- return _emberRuntime.RSVP.reject({
74370
- msg: 'did it broke?'
74371
- });
74372
- },
74342
+ (0, _internalTestHelpers.moduleFor)('Loading/Error Substates - globals mode app', function (_AutobootApplicationT) {
74343
+ (0, _emberBabel.inherits)(_class2, _AutobootApplicationT);
74373
74344
 
74374
- actions: {
74375
- error: function (err) {
74376
- step(2, 'MomSallyRoute#error');
74345
+ function _class2() {
74346
+ return (0, _emberBabel.possibleConstructorReturn)(this, _AutobootApplicationT.apply(this, arguments));
74347
+ }
74377
74348
 
74378
- handledError = err;
74349
+ _class2.prototype['@test Rejected promises returned from ApplicationRoute transition into top-level application_error'] = function (assert) {
74350
+ var _this15 = this;
74379
74351
 
74380
- return true;
74381
- }
74382
- }
74383
- });
74352
+ var reject = true;
74384
74353
 
74385
- bootApplication('/grandma/mom/sally');
74386
- });
74354
+ this.runTask(function () {
74355
+ _this15.createApplication();
74356
+ _this15.addTemplate('index', '<div id="app">INDEX</div>');
74357
+ _this15.add('route:application', _emberRouting.Route.extend({
74358
+ init: function () {
74359
+ this._super.apply(this, arguments);
74360
+ },
74361
+ model: function () {
74362
+ if (reject) {
74363
+ return _emberRuntime.RSVP.reject({ msg: 'BAD NEWS BEARS' });
74364
+ } else {
74365
+ return {};
74366
+ }
74367
+ }
74368
+ }));
74387
74369
 
74388
- QUnit.test('errors that are bubbled are thrown at a higher level if not handled', function () {
74389
- expect(3);
74370
+ _this15.addTemplate('application_error', '\n <p id="toplevel-error">TOPLEVEL ERROR: {{model.msg}}</p>\n ');
74371
+ });
74390
74372
 
74391
- templates['grandma'] = 'GRANDMA {{outlet}}';
74373
+ var text = this.$('#toplevel-error').text();
74374
+ assert.equal(text, 'TOPLEVEL ERROR: BAD NEWS BEARS', 'toplevel error rendered');
74392
74375
 
74393
- Router.map(function () {
74394
- this.route('grandma', function () {
74395
- this.route('mom', { resetNamespace: true }, function () {
74396
- this.route('sally');
74397
- });
74398
- });
74399
- });
74376
+ reject = false;
74400
74377
 
74401
- App.ApplicationController = _emberRuntime.Controller.extend();
74378
+ return this.visit('/').then(function () {
74379
+ var text = _this15.$('#app').text();
74402
74380
 
74403
- App.MomSallyRoute = _emberRouting.Route.extend({
74404
- model: function () {
74405
- step(1, 'MomSallyRoute#model');
74381
+ assert.equal(text, 'INDEX', 'the index route resolved');
74382
+ });
74383
+ };
74406
74384
 
74407
- return _emberRuntime.RSVP.reject({
74408
- msg: 'did it broke?'
74409
- });
74410
- },
74385
+ return _class2;
74386
+ }(_internalTestHelpers.AutobootApplicationTestCase));
74411
74387
 
74412
- actions: {
74413
- error: function () {
74414
- step(2, 'MomSallyRoute#error');
74415
- return true;
74416
- }
74417
- }
74418
- });
74388
+ (0, _internalTestHelpers.moduleFor)('Loading/Error Substates - nested routes', function (_ApplicationTestCase2) {
74389
+ (0, _emberBabel.inherits)(_class3, _ApplicationTestCase2);
74419
74390
 
74420
- throws(function () {
74421
- bootApplication('/grandma/mom/sally');
74422
- }, function (err) {
74423
- return err.msg === 'did it broke?';
74424
- }, 'Correct error was thrown');
74425
- });
74391
+ function _class3() {
74426
74392
 
74427
- QUnit.test('Handled errors that are thrown through rejection aren\'t swallowed', function () {
74428
- expect(4);
74393
+ var _this16 = (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase2.call(this));
74429
74394
 
74430
- var handledError = void 0;
74395
+ counter = 1;
74431
74396
 
74432
- templates['grandma'] = 'GRANDMA {{outlet}}';
74397
+ _this16.addTemplate('application', '<div id="app">{{outlet}}</div>');
74398
+ _this16.addTemplate('index', 'INDEX');
74399
+ _this16.addTemplate('grandma', 'GRANDMA {{outlet}}');
74400
+ _this16.addTemplate('mom', 'MOM');
74433
74401
 
74434
- Router.map(function () {
74435
- this.route('grandma', function () {
74436
- this.route('mom', { resetNamespace: true }, function () {
74437
- this.route('sally');
74438
- this.route('this-route-throws');
74402
+ _this16.router.map(function () {
74403
+ this.route('grandma', function () {
74404
+ this.route('mom', { resetNamespace: true }, function () {
74405
+ this.route('sally');
74406
+ this.route('this-route-throws');
74407
+ });
74408
+ this.route('puppies');
74439
74409
  });
74410
+ this.route('memere', { path: '/memere/:seg' }, function () {});
74440
74411
  });
74441
- });
74442
-
74443
- App.ApplicationController = _emberRuntime.Controller.extend();
74444
74412
 
74445
- App.MomSallyRoute = _emberRouting.Route.extend({
74446
- model: function () {
74447
- step(1, 'MomSallyRoute#model');
74413
+ _this16.visit('/');
74414
+ return _this16;
74415
+ }
74448
74416
 
74449
- return _emberRuntime.RSVP.reject({
74450
- msg: 'did it broke?'
74451
- });
74452
- },
74417
+ _class3.prototype.getController = function (name) {
74418
+ return this.applicationInstance.lookup('controller:' + name);
74419
+ };
74453
74420
 
74454
- actions: {
74455
- error: function (err) {
74456
- step(2, 'MomSallyRoute#error');
74421
+ _class3.prototype['@test ApplicationRoute#currentPath reflects loading state path'] = function (assert) {
74422
+ var _this17 = this;
74457
74423
 
74458
- handledError = err;
74424
+ var momDeferred = _emberRuntime.RSVP.defer();
74459
74425
 
74460
- this.transitionTo('mom.this-route-throws');
74426
+ this.addTemplate('grandma.loading', 'GRANDMALOADING');
74461
74427
 
74462
- // Marks error as handled
74463
- return false;
74428
+ this.add('route:mom', _emberRouting.Route.extend({
74429
+ model: function () {
74430
+ return momDeferred.promise;
74464
74431
  }
74465
- }
74466
- });
74432
+ }));
74467
74433
 
74468
- App.MomThisRouteThrowsRoute = _emberRouting.Route.extend({
74469
- model: function () {
74470
- step(3, 'MomThisRouteThrows#model');
74434
+ var promise = this.visit('/grandma/mom').then(function () {
74435
+ text = _this17.$('#app').text();
74471
74436
 
74472
- return _emberRuntime.RSVP.reject(handledError);
74473
- }
74474
- });
74437
+ assert.equal(text, 'GRANDMA MOM', 'Grandma.mom loaded text is displayed');
74438
+ assert.equal(_this17.currentPath, 'grandma.mom.index', 'currentPath reflects final state');
74439
+ });
74440
+ var text = this.$('#app').text();
74475
74441
 
74476
- throws(function () {
74477
- bootApplication('/grandma/mom/sally');
74478
- }, function (err) {
74479
- return err.msg === 'did it broke?';
74480
- });
74481
- });
74442
+ assert.equal(text, 'GRANDMA GRANDMALOADING', 'Grandma.mom loading text displayed');
74482
74443
 
74483
- QUnit.test('Setting a query param during a slow transition should work', function () {
74484
- var deferred = _emberRuntime.RSVP.defer();
74444
+ assert.equal(this.currentPath, 'grandma.loading', 'currentPath reflects loading state');
74485
74445
 
74486
- Router.map(function () {
74487
- this.route('grandma', { path: '/grandma/:seg' }, function () {});
74488
- });
74446
+ momDeferred.resolve();
74489
74447
 
74490
- templates['grandma/loading'] = 'GMONEYLOADING';
74448
+ return promise;
74449
+ };
74491
74450
 
74492
- App.ApplicationController = _emberRuntime.Controller.extend();
74451
+ _class3.prototype['@test Loading actions bubble to root but don\'t enter substates above pivot '] = function (assert) {
74452
+ var _this18 = this;
74493
74453
 
74494
- App.IndexRoute = _emberRouting.Route.extend({
74495
- beforeModel: function () {
74496
- this.transitionTo('grandma', 1);
74497
- }
74498
- });
74454
+ var sallyDeferred = _emberRuntime.RSVP.defer();
74455
+ var puppiesDeferred = _emberRuntime.RSVP.defer();
74499
74456
 
74500
- App.GrandmaRoute = _emberRouting.Route.extend({
74501
- queryParams: {
74502
- test: { defaultValue: 1 }
74503
- }
74504
- });
74457
+ this.add('route:application', _emberRouting.Route.extend({
74458
+ actions: {
74459
+ loading: function () {
74460
+ assert.ok(true, 'loading action received on ApplicationRoute');
74461
+ }
74462
+ }
74463
+ }));
74505
74464
 
74506
- App.GrandmaIndexRoute = _emberRouting.Route.extend({
74507
- model: function () {
74508
- return deferred.promise;
74509
- }
74510
- });
74465
+ this.add('route:mom.sally', _emberRouting.Route.extend({
74466
+ model: function () {
74467
+ return sallyDeferred.promise;
74468
+ }
74469
+ }));
74511
74470
 
74512
- bootApplication('/');
74471
+ this.add('route:grandma.puppies', _emberRouting.Route.extend({
74472
+ model: function () {
74473
+ return puppiesDeferred.promise;
74474
+ }
74475
+ }));
74513
74476
 
74514
- var appController = container.lookup('controller:application');
74515
- var grandmaController = container.lookup('controller:grandma');
74477
+ var promise = this.visit('/grandma/mom/sally');
74478
+ assert.equal(this.currentPath, 'index', 'Initial route fully loaded');
74516
74479
 
74517
- equal(appController.get('currentPath'), 'grandma.loading', 'Initial route should be loading');
74480
+ sallyDeferred.resolve();
74518
74481
 
74519
- (0, _emberMetal.run)(function () {
74520
- grandmaController.set('test', 3);
74521
- });
74482
+ promise.then(function () {
74483
+ assert.equal(_this18.currentPath, 'grandma.mom.sally', 'transition completed');
74522
74484
 
74523
- equal(appController.get('currentPath'), 'grandma.loading', 'Route should still be loading');
74524
- equal(grandmaController.get('test'), 3, 'Controller query param value should have changed');
74485
+ var visit = _this18.visit('/grandma/puppies');
74486
+ assert.equal(_this18.currentPath, 'grandma.mom.sally', 'still in initial state because the only loading state is above the pivot route');
74525
74487
 
74526
- (0, _emberMetal.run)(deferred, 'resolve', {});
74488
+ return visit;
74489
+ }).then(function () {
74490
+ _this18.runTask(function () {
74491
+ return puppiesDeferred.resolve();
74492
+ });
74527
74493
 
74528
- equal(appController.get('currentPath'), 'grandma.index', 'Transition should be complete');
74529
- });
74494
+ assert.equal(_this18.currentPath, 'grandma.puppies', 'Finished transition');
74495
+ });
74530
74496
 
74531
- QUnit.test('Slow promises returned from ApplicationRoute#model enter ApplicationLoadingRoute if present', function () {
74532
- expect(2);
74497
+ return promise;
74498
+ };
74533
74499
 
74534
- var appDeferred = _emberRuntime.RSVP.defer();
74500
+ _class3.prototype['@test Default error event moves into nested route'] = function (assert) {
74501
+ var _this19 = this;
74535
74502
 
74536
- App.ApplicationRoute = _emberRouting.Route.extend({
74537
- model: function () {
74538
- return appDeferred.promise;
74539
- }
74540
- });
74503
+ this.addTemplate('grandma.error', 'ERROR: {{model.msg}}');
74541
74504
 
74542
- var loadingRouteEntered = false;
74543
- App.ApplicationLoadingRoute = _emberRouting.Route.extend({
74544
- setupController: function () {
74545
- loadingRouteEntered = true;
74546
- }
74547
- });
74505
+ this.add('route:mom.sally', _emberRouting.Route.extend({
74506
+ model: function () {
74507
+ step(1, 'MomSallyRoute#model');
74508
+ return _emberRuntime.RSVP.reject({
74509
+ msg: 'did it broke?'
74510
+ });
74511
+ },
74548
74512
 
74549
- bootApplication();
74513
+ actions: {
74514
+ error: function () {
74515
+ step(2, 'MomSallyRoute#actions.error');
74516
+ return true;
74517
+ }
74518
+ }
74519
+ }));
74550
74520
 
74551
- ok(loadingRouteEntered, 'ApplicationLoadingRoute was entered');
74521
+ return this.visit('/grandma/mom/sally').then(function () {
74522
+ step(3, 'App finished loading');
74552
74523
 
74553
- (0, _emberMetal.run)(appDeferred, 'resolve', {});
74554
- equal((0, _emberViews.jQuery)('#app', '#qunit-fixture').text(), 'INDEX');
74555
- });
74524
+ var text = _this19.$('#app').text();
74556
74525
 
74557
- QUnit.test('Slow promises returned from ApplicationRoute#model enter application_loading if template present', function () {
74558
- expect(3);
74526
+ assert.equal(text, 'GRANDMA ERROR: did it broke?', 'error bubbles');
74527
+ assert.equal(_this19.currentPath, 'grandma.error', 'Initial route fully loaded');
74528
+ });
74529
+ };
74559
74530
 
74560
- templates['application_loading'] = '<div id="toplevel-loading">TOPLEVEL LOADING</div>';
74531
+ _class3.prototype['@test Non-bubbled errors that re-throw aren\'t swallowed'] = function (assert) {
74532
+ var _this20 = this;
74561
74533
 
74562
- var appDeferred = _emberRuntime.RSVP.defer();
74563
- App.ApplicationRoute = _emberRouting.Route.extend({
74564
- model: function () {
74565
- return appDeferred.promise;
74566
- }
74567
- });
74534
+ this.add('route:mom.sally', _emberRouting.Route.extend({
74535
+ model: function () {
74536
+ return _emberRuntime.RSVP.reject({
74537
+ msg: 'did it broke?'
74538
+ });
74539
+ },
74568
74540
 
74569
- bootApplication();
74541
+ actions: {
74542
+ error: function (err) {
74543
+ // returns undefined which is falsey
74544
+ throw err;
74545
+ }
74546
+ }
74547
+ }));
74570
74548
 
74571
- equal((0, _emberViews.jQuery)('#qunit-fixture #toplevel-loading').text(), 'TOPLEVEL LOADING');
74549
+ assert.throws(function () {
74550
+ _this20.visit('/grandma/mom/sally');
74551
+ }, function (err) {
74552
+ return err.msg === 'did it broke?';
74553
+ }, 'it broke');
74554
+ };
74572
74555
 
74573
- (0, _emberMetal.run)(appDeferred, 'resolve', {});
74556
+ _class3.prototype['@test Handled errors that re-throw aren\'t swallowed'] = function (assert) {
74557
+ var _this21 = this;
74574
74558
 
74575
- equal((0, _emberViews.jQuery)('#toplevel-loading', '#qunit-fixture').length, 0, 'top-level loading View has been entirely removed from DOM');
74576
- equal((0, _emberViews.jQuery)('#app', '#qunit-fixture').text(), 'INDEX');
74577
- });
74559
+ var handledError = void 0;
74578
74560
 
74579
- QUnit.test('Default error event moves into nested route, prioritizing more specifically named error route', function () {
74580
- expect(6);
74561
+ this.add('route:mom.sally', _emberRouting.Route.extend({
74562
+ model: function () {
74563
+ step(1, 'MomSallyRoute#model');
74564
+ return _emberRuntime.RSVP.reject({
74565
+ msg: 'did it broke?'
74566
+ });
74567
+ },
74581
74568
 
74582
- templates['grandma'] = 'GRANDMA {{outlet}}';
74583
- templates['grandma/error'] = 'ERROR: {{model.msg}}';
74584
- templates['mom_error'] = 'MOM ERROR: {{model.msg}}';
74569
+ actions: {
74570
+ error: function (err) {
74571
+ step(2, 'MomSallyRoute#actions.error');
74572
+ handledError = err;
74573
+ this.transitionTo('mom.this-route-throws');
74585
74574
 
74586
- Router.map(function () {
74587
- this.route('grandma', function () {
74588
- this.route('mom', { resetNamespace: true }, function () {
74589
- this.route('sally');
74590
- });
74591
- });
74592
- });
74575
+ return false;
74576
+ }
74577
+ }
74578
+ }));
74593
74579
 
74594
- App.ApplicationController = _emberRuntime.Controller.extend();
74580
+ this.add('route:mom.this-route-throws', _emberRouting.Route.extend({
74581
+ model: function () {
74582
+ step(3, 'MomThisRouteThrows#model');
74583
+ throw handledError;
74584
+ }
74585
+ }));
74595
74586
 
74596
- App.MomSallyRoute = _emberRouting.Route.extend({
74597
- model: function () {
74598
- step(1, 'MomSallyRoute#model');
74587
+ assert.throws(function () {
74588
+ _this21.visit('/grandma/mom/sally');
74589
+ }, function (err) {
74590
+ return err.msg === 'did it broke?';
74591
+ }, 'it broke');
74592
+ };
74599
74593
 
74600
- return _emberRuntime.RSVP.reject({
74601
- msg: 'did it broke?'
74602
- });
74603
- },
74594
+ _class3.prototype['@test errors that are bubbled are thrown at a higher level if not handled'] = function (assert) {
74595
+ var _this22 = this;
74604
74596
 
74605
- actions: {
74606
- error: function () {
74607
- step(2, 'MomSallyRoute#actions.error');
74608
- return true;
74609
- }
74610
- }
74611
- });
74597
+ this.add('route:mom.sally', _emberRouting.Route.extend({
74598
+ model: function () {
74599
+ step(1, 'MomSallyRoute#model');
74600
+ return _emberRuntime.RSVP.reject({
74601
+ msg: 'did it broke?'
74602
+ });
74603
+ },
74612
74604
 
74613
- throws(function () {
74614
- bootApplication('/grandma/mom/sally');
74615
- }, function (err) {
74616
- return err.msg === 'did it broke?';
74617
- });
74605
+ actions: {
74606
+ error: function () {
74607
+ step(2, 'MomSallyRoute#actions.error');
74608
+ return true;
74609
+ }
74610
+ }
74611
+ }));
74618
74612
 
74619
- step(3, 'App finished booting');
74613
+ assert.throws(function () {
74614
+ _this22.visit('/grandma/mom/sally');
74615
+ }, function (err) {
74616
+ return err.msg == "did it broke?";
74617
+ }, 'Correct error was thrown');
74618
+ };
74620
74619
 
74621
- equal((0, _emberViews.jQuery)('#app', '#qunit-fixture').text(), 'GRANDMA MOM ERROR: did it broke?', 'the more specifically-named mom error substate was entered over the other error route');
74620
+ _class3.prototype['@test Handled errors that are thrown through rejection aren\'t swallowed'] = function (assert) {
74621
+ var _this23 = this;
74622
74622
 
74623
- var appController = container.lookup('controller:application');
74624
- equal(appController.get('currentPath'), 'grandma.mom_error', 'Initial route fully loaded');
74625
- });
74623
+ var handledError = void 0;
74626
74624
 
74627
- QUnit.test('Prioritized substate entry works with preserved-namespace nested routes', function () {
74628
- expect(2);
74625
+ this.add('route:mom.sally', _emberRouting.Route.extend({
74626
+ model: function () {
74627
+ step(1, 'MomSallyRoute#model');
74628
+ return _emberRuntime.RSVP.reject({
74629
+ msg: 'did it broke?'
74630
+ });
74631
+ },
74629
74632
 
74630
- templates['foo/bar_loading'] = 'FOOBAR LOADING';
74631
- templates['foo/bar/index'] = 'YAY';
74633
+ actions: {
74634
+ error: function (err) {
74635
+ step(2, 'MomSallyRoute#actions.error');
74636
+ handledError = err;
74637
+ this.transitionTo('mom.this-route-throws');
74632
74638
 
74633
- Router.map(function () {
74634
- this.route('foo', function () {
74635
- this.route('bar', { path: '/bar' }, function () {});
74636
- });
74637
- });
74639
+ return false;
74640
+ }
74641
+ }
74642
+ }));
74638
74643
 
74639
- App.ApplicationController = _emberRuntime.Controller.extend();
74644
+ this.add('route:mom.this-route-throws', _emberRouting.Route.extend({
74645
+ model: function () {
74646
+ step(3, 'MomThisRouteThrows#model');
74647
+ return _emberRuntime.RSVP.reject(handledError);
74648
+ }
74649
+ }));
74640
74650
 
74641
- var deferred = _emberRuntime.RSVP.defer();
74642
- App.FooBarRoute = _emberRouting.Route.extend({
74643
- model: function () {
74644
- return deferred.promise;
74645
- }
74646
- });
74651
+ assert.throws(function () {
74652
+ _this23.visit('/grandma/mom/sally');
74653
+ }, function (err) {
74654
+ return err.msg === 'did it broke?';
74655
+ }, 'it broke');
74656
+ };
74647
74657
 
74648
- bootApplication('/foo/bar');
74658
+ _class3.prototype['@test Default error events move into nested route, prioritizing more specifically named error routes - NEW'] = function (assert) {
74659
+ var _this24 = this;
74649
74660
 
74650
- equal((0, _emberViews.jQuery)('#app', '#qunit-fixture').text(), 'FOOBAR LOADING', 'foo.bar_loading was entered (as opposed to something like foo/foo/bar_loading)');
74661
+ this.addTemplate('grandma.error', 'ERROR: {{model.msg}}');
74662
+ this.addTemplate('mom_error', 'MOM ERROR: {{model.msg}}');
74651
74663
 
74652
- (0, _emberMetal.run)(deferred, 'resolve');
74664
+ this.add('route:mom.sally', _emberRouting.Route.extend({
74665
+ model: function () {
74666
+ step(1, 'MomSallyRoute#model');
74667
+ return _emberRuntime.RSVP.reject({
74668
+ msg: 'did it broke?'
74669
+ });
74670
+ },
74653
74671
 
74654
- equal((0, _emberViews.jQuery)('#app', '#qunit-fixture').text(), 'YAY');
74655
- });
74672
+ actions: {
74673
+ error: function () {
74674
+ step(2, 'MomSallyRoute#actions.error');
74675
+ return true;
74676
+ }
74677
+ }
74678
+ }));
74656
74679
 
74657
- QUnit.test('Prioritized substate entry works with reset-namespace nested routes', function () {
74658
- expect(2);
74680
+ return this.visit('/grandma/mom/sally').then(function () {
74681
+ step(3, 'Application finished booting');
74659
74682
 
74660
- templates['bar_loading'] = 'BAR LOADING';
74661
- templates['bar/index'] = 'YAY';
74683
+ assert.equal(_this24.$('#app').text(), 'GRANDMA MOM ERROR: did it broke?', 'the more specifically named mome error substate was entered over the other error route');
74662
74684
 
74663
- Router.map(function () {
74664
- this.route('foo', function () {
74665
- this.route('bar', { path: '/bar', resetNamespace: true }, function () {});
74685
+ assert.equal(_this24.currentPath, 'grandma.mom_error', 'Initial route fully loaded');
74666
74686
  });
74667
- });
74668
-
74669
- App.ApplicationController = _emberRuntime.Controller.extend();
74687
+ };
74670
74688
 
74671
- var deferred = _emberRuntime.RSVP.defer();
74672
- App.BarRoute = _emberRouting.Route.extend({
74673
- model: function () {
74674
- return deferred.promise;
74675
- }
74676
- });
74689
+ _class3.prototype['@test Slow promises waterfall on startup'] = function (assert) {
74690
+ var _this25 = this;
74677
74691
 
74678
- bootApplication('/foo/bar');
74692
+ var grandmaDeferred = _emberRuntime.RSVP.defer();
74693
+ var sallyDeferred = _emberRuntime.RSVP.defer();
74679
74694
 
74680
- equal((0, _emberViews.jQuery)('#app', '#qunit-fixture').text(), 'BAR LOADING', 'foo.bar_loading was entered (as opposed to something like foo/foo/bar_loading)');
74695
+ this.addTemplate('loading', 'LOADING');
74696
+ this.addTemplate('mom', 'MOM {{outlet}}');
74697
+ this.addTemplate('mom.loading', 'MOMLOADING');
74698
+ this.addTemplate('mom.sally', 'SALLY');
74681
74699
 
74682
- (0, _emberMetal.run)(deferred, 'resolve');
74700
+ this.add('route:grandma', _emberRouting.Route.extend({
74701
+ model: function () {
74702
+ step(1, 'GrandmaRoute#model');
74703
+ return grandmaDeferred.promise;
74704
+ }
74705
+ }));
74683
74706
 
74684
- equal((0, _emberViews.jQuery)('#app', '#qunit-fixture').text(), 'YAY');
74685
- });
74707
+ this.add('route:mom', _emberRouting.Route.extend({
74708
+ model: function () {
74709
+ step(2, 'MomRoute#model');
74710
+ return {};
74711
+ }
74712
+ }));
74686
74713
 
74687
- QUnit.test('Prioritized loading substate entry works with preserved-namespace nested routes', function () {
74688
- expect(2);
74714
+ this.add('route:mom.sally', _emberRouting.Route.extend({
74715
+ model: function () {
74716
+ step(3, 'SallyRoute#model');
74717
+ return sallyDeferred.promise;
74718
+ },
74719
+ setupController: function () {
74720
+ step(4, 'SallyRoute#setupController');
74721
+ }
74722
+ }));
74689
74723
 
74690
- templates['foo/bar_loading'] = 'FOOBAR LOADING';
74691
- templates['foo/bar'] = 'YAY';
74724
+ var promise = this.visit('/grandma/mom/sally').then(function () {
74725
+ text = _this25.$('#app').text();
74692
74726
 
74693
- Router.map(function () {
74694
- this.route('foo', function () {
74695
- this.route('bar');
74727
+ assert.equal(text, 'GRANDMA MOM SALLY', 'Sally template displayed');
74696
74728
  });
74697
- });
74729
+ var text = this.$('#app').text();
74698
74730
 
74699
- App.ApplicationController = _emberRuntime.Controller.extend();
74731
+ assert.equal(text, 'LOADING', 'The loading template is nested in application template\'s outlet');
74700
74732
 
74701
- var deferred = _emberRuntime.RSVP.defer();
74702
- App.FooBarRoute = _emberRouting.Route.extend({
74703
- model: function () {
74704
- return deferred.promise;
74705
- }
74706
- });
74733
+ this.runTask(function () {
74734
+ return grandmaDeferred.resolve();
74735
+ });
74736
+ text = this.$('#app').text();
74707
74737
 
74708
- bootApplication('/foo/bar');
74738
+ assert.equal(text, 'GRANDMA MOM MOMLOADING', 'Mom\'s child loading route is displayed due to sally\'s slow promise');
74709
74739
 
74710
- equal((0, _emberViews.jQuery)('#app', '#qunit-fixture').text(), 'FOOBAR LOADING', 'foo.bar_loading was entered (as opposed to something like foo/foo/bar_loading)');
74740
+ sallyDeferred.resolve();
74711
74741
 
74712
- (0, _emberMetal.run)(deferred, 'resolve');
74742
+ return promise;
74743
+ };
74713
74744
 
74714
- equal((0, _emberViews.jQuery)('#app', '#qunit-fixture').text(), 'YAY');
74715
- });
74745
+ _class3.prototype['@test Enter child loading state of pivot route'] = function (assert) {
74746
+ var _this26 = this;
74716
74747
 
74717
- QUnit.test('Prioritized error substate entry works with preserved-namespace nested routes', function () {
74718
- expect(2);
74748
+ var deferred = _emberRuntime.RSVP.defer();
74749
+ this.addTemplate('grandma.loading', 'GMONEYLOADING');
74719
74750
 
74720
- templates['foo/bar_error'] = 'FOOBAR ERROR: {{model.msg}}';
74721
- templates['foo/bar'] = 'YAY';
74751
+ this.add('route:mom.sally', _emberRouting.Route.extend({
74752
+ setupController: function () {
74753
+ step(1, 'SallyRoute#setupController');
74754
+ }
74755
+ }));
74722
74756
 
74723
- Router.map(function () {
74724
- this.route('foo', function () {
74725
- this.route('bar');
74726
- });
74727
- });
74757
+ this.add('route:grandma.puppies', _emberRouting.Route.extend({
74758
+ model: function () {
74759
+ return deferred.promise;
74760
+ }
74761
+ }));
74728
74762
 
74729
- App.ApplicationController = _emberRuntime.Controller.extend();
74763
+ return this.visit('/grandma/mom/sally').then(function () {
74764
+ assert.equal(_this26.currentPath, 'grandma.mom.sally', 'Initial route fully loaded');
74730
74765
 
74731
- App.FooBarRoute = _emberRouting.Route.extend({
74732
- model: function () {
74733
- return _emberRuntime.RSVP.reject({
74734
- msg: 'did it broke?'
74766
+ var promise = _this26.visit('/grandma/puppies').then(function () {
74767
+ assert.equal(_this26.currentPath, 'grandma.puppies', 'Finished transition');
74735
74768
  });
74736
- }
74737
- });
74738
74769
 
74739
- throws(function () {
74740
- bootApplication('/foo/bar');
74741
- }, function (err) {
74742
- return err.msg === 'did it broke?';
74743
- });
74770
+ assert.equal(_this26.currentPath, 'grandma.loading', 'in pivot route\'s child loading state');
74771
+ deferred.resolve();
74744
74772
 
74745
- equal((0, _emberViews.jQuery)('#app', '#qunit-fixture').text(), 'FOOBAR ERROR: did it broke?', 'foo.bar_error was entered (as opposed to something like foo/foo/bar_error)');
74746
- });
74747
-
74748
- QUnit.test('Prioritized loading substate entry works with auto-generated index routes', function () {
74749
- expect(2);
74750
-
74751
- templates['foo/index_loading'] = 'FOO LOADING';
74752
- templates['foo/index'] = 'YAY';
74753
- templates['foo'] = '{{outlet}}';
74754
-
74755
- Router.map(function () {
74756
- this.route('foo', function () {
74757
- this.route('bar');
74773
+ return promise;
74758
74774
  });
74759
- });
74775
+ };
74760
74776
 
74761
- App.ApplicationController = _emberRuntime.Controller.extend();
74777
+ _class3.prototype['@test Error events that aren\'t bubbled don\'t throw application assertions'] = function (assert) {
74778
+ this.add('route:mom.sally', _emberRouting.Route.extend({
74779
+ model: function () {
74780
+ step(1, 'MomSallyRoute#model');
74781
+ return _emberRuntime.RSVP.reject({
74782
+ msg: 'did it broke?'
74783
+ });
74784
+ },
74762
74785
 
74763
- var deferred = _emberRuntime.RSVP.defer();
74764
- App.FooIndexRoute = _emberRouting.Route.extend({
74765
- model: function () {
74766
- return deferred.promise;
74767
- }
74768
- });
74769
- App.FooRoute = _emberRouting.Route.extend({
74770
- model: function () {
74771
- return true;
74772
- }
74773
- });
74786
+ actions: {
74787
+ error: function (err) {
74788
+ step(2, 'MomSallyRoute#actions.error');
74789
+ assert.equal(err.msg, 'did it broke?', 'it didn\'t break');
74790
+ return false;
74791
+ }
74792
+ }
74793
+ }));
74774
74794
 
74775
- bootApplication('/foo');
74795
+ return this.visit('/grandma/mom/sally');
74796
+ };
74776
74797
 
74777
- equal((0, _emberViews.jQuery)('#app', '#qunit-fixture').text(), 'FOO LOADING', 'foo.index_loading was entered');
74798
+ _class3.prototype['@test Handled errors that bubble can be handled at a higher level'] = function (assert) {
74799
+ var handledError = void 0;
74778
74800
 
74779
- (0, _emberMetal.run)(deferred, 'resolve');
74801
+ this.add('route:mom', _emberRouting.Route.extend({
74802
+ actions: {
74803
+ error: function (err) {
74804
+ step(3, 'MomRoute#actions.error');
74805
+ assert.equal(err, handledError, 'error handled and rebubbled is handleable at higher route');
74806
+ }
74807
+ }
74808
+ }));
74780
74809
 
74781
- equal((0, _emberViews.jQuery)('#app', '#qunit-fixture').text(), 'YAY');
74782
- });
74810
+ this.add('route:mom.sally', _emberRouting.Route.extend({
74811
+ model: function () {
74812
+ step(1, 'MomSallyRoute#model');
74813
+ return _emberRuntime.RSVP.reject({
74814
+ msg: 'did it broke?'
74815
+ });
74816
+ },
74783
74817
 
74784
- QUnit.test('Prioritized error substate entry works with auto-generated index routes', function () {
74785
- expect(2);
74818
+ actions: {
74819
+ error: function (err) {
74820
+ step(2, 'MomSallyRoute#actions.error');
74821
+ handledError = err;
74786
74822
 
74787
- templates['foo/index_error'] = 'FOO ERROR: {{model.msg}}';
74788
- templates['foo/index'] = 'YAY';
74789
- templates['foo'] = '{{outlet}}';
74823
+ return true;
74824
+ }
74825
+ }
74826
+ }));
74790
74827
 
74791
- Router.map(function () {
74792
- this.route('foo', function () {
74793
- this.route('bar');
74794
- });
74795
- });
74828
+ return this.visit('/grandma/mom/sally');
74829
+ };
74796
74830
 
74797
- App.ApplicationController = _emberRuntime.Controller.extend();
74831
+ _class3.prototype['@test Setting a query param during a slow transition should work'] = function (assert) {
74832
+ var _this27 = this;
74798
74833
 
74799
- App.FooIndexRoute = _emberRouting.Route.extend({
74800
- model: function () {
74801
- return _emberRuntime.RSVP.reject({
74802
- msg: 'did it broke?'
74803
- });
74804
- }
74805
- });
74806
- App.FooRoute = _emberRouting.Route.extend({
74807
- model: function () {
74808
- return true;
74809
- }
74810
- });
74834
+ var deferred = _emberRuntime.RSVP.defer();
74835
+ this.addTemplate('memere.loading', 'MMONEYLOADING');
74811
74836
 
74812
- throws(function () {
74813
- return bootApplication('/foo');
74814
- }, function (err) {
74815
- return err.msg === 'did it broke?';
74816
- });
74837
+ this.add('route:grandma', _emberRouting.Route.extend({
74838
+ beforeModel: function () {
74839
+ this.transitionTo('memere', 1);
74840
+ }
74841
+ }));
74817
74842
 
74818
- equal((0, _emberViews.jQuery)('#app', '#qunit-fixture').text(), 'FOO ERROR: did it broke?', 'foo.index_error was entered');
74819
- });
74843
+ this.add('route:memere', _emberRouting.Route.extend({
74844
+ queryParams: {
74845
+ test: { defaultValue: 1 }
74846
+ }
74847
+ }));
74820
74848
 
74821
- QUnit.test('Rejected promises returned from ApplicationRoute transition into top-level application_error', function () {
74822
- expect(3);
74849
+ this.add('route:memere.index', _emberRouting.Route.extend({
74850
+ model: function () {
74851
+ return deferred.promise;
74852
+ }
74853
+ }));
74823
74854
 
74824
- templates['application_error'] = '<p id="toplevel-error">TOPLEVEL ERROR: {{model.msg}}</p>';
74855
+ var promise = this.visit('/grandma').then(function () {
74856
+ assert.equal(_this27.currentPath, 'memere.index', 'Transition should be complete');
74857
+ });
74858
+ var memereController = this.getController('memere');
74825
74859
 
74826
- var reject = true;
74827
- App.ApplicationRoute = _emberRouting.Route.extend({
74828
- model: function () {
74829
- if (reject) {
74830
- return _emberRuntime.RSVP.reject({ msg: 'BAD NEWS BEARS' });
74831
- } else {
74832
- return {};
74833
- }
74834
- }
74835
- });
74860
+ assert.equal(this.currentPath, 'memere.loading', 'Initial route should be loading');
74836
74861
 
74837
- throws(function () {
74838
- return bootApplication();
74839
- }, function (err) {
74840
- return err.msg === 'BAD NEWS BEARS';
74841
- });
74862
+ memereController.set('test', 3);
74842
74863
 
74843
- equal((0, _emberViews.jQuery)('#toplevel-error', '#qunit-fixture').text(), 'TOPLEVEL ERROR: BAD NEWS BEARS');
74864
+ assert.equal(this.currentPath, 'memere.loading', 'Initial route should still be loading');
74844
74865
 
74845
- reject = false;
74846
- (0, _emberMetal.run)(router, 'transitionTo', 'index');
74866
+ assert.equal(memereController.get('test'), 3, 'Controller query param value should have changed');
74867
+ deferred.resolve();
74847
74868
 
74848
- equal((0, _emberViews.jQuery)('#app', '#qunit-fixture').text(), 'INDEX');
74849
- });
74869
+ return promise;
74870
+ };
74871
+
74872
+ (0, _emberBabel.createClass)(_class3, [{
74873
+ key: 'currentPath',
74874
+ get: function () {
74875
+ return this.getController('application').get('currentPath');
74876
+ }
74877
+ }]);
74878
+ return _class3;
74879
+ }(_internalTestHelpers.ApplicationTestCase));
74850
74880
  });
74851
74881
  enifed('ember/tests/routing/toplevel_dom_test', ['ember-babel', 'internal-test-helpers'], function (_emberBabel, _internalTestHelpers) {
74852
74882
  'use strict';