ember-source 1.10.0.beta.4 → 1.10.0

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.

Potentially problematic release.


This version of ember-source might be problematic. Click here for more details.

@@ -5,7 +5,7 @@
5
5
  * Portions Copyright 2008-2011 Apple Inc. All rights reserved.
6
6
  * @license Licensed under MIT license
7
7
  * See https://raw.github.com/emberjs/ember.js/master/LICENSE
8
- * @version 1.10.0-beta.4
8
+ * @version 1.10.0
9
9
  */
10
10
 
11
11
  (function() {
@@ -530,7 +530,7 @@ enifed("ember-testing/helpers",
530
530
  var $el = app.testHelpers.findWithAssert(selector, context);
531
531
  run($el, 'mousedown');
532
532
 
533
- if ($el.is(':input')) {
533
+ if ($el.is(':input, [contenteditable=true]')) {
534
534
  var type = $el.prop('type');
535
535
  if (type !== 'checkbox' && type !== 'radio' && type !== 'hidden') {
536
536
  run($el, function(){
@@ -648,8 +648,10 @@ enifed("ember-testing/helpers",
648
648
 
649
649
  // Every 10ms, poll for the async thing to have finished
650
650
  var watcher = setInterval(function() {
651
+ var router = app.__container__.lookup('router:main');
652
+
651
653
  // 1. If the router is loading, keep polling
652
- var routerIsLoading = !!app.__container__.lookup('router:main').router.activeTransition;
654
+ var routerIsLoading = router.router && !!router.router.activeTransition;
653
655
  if (routerIsLoading) { return; }
654
656
 
655
657
  // 2. If there are pending Ajax requests, keep polling
@@ -885,6 +887,7 @@ enifed("ember-testing/helpers",
885
887
  click('.btn');
886
888
  ```
887
889
 
890
+ @since 1.9.0
888
891
  @method pauseTest
889
892
  @return {Object} A promise that will never resolve
890
893
  */
@@ -1055,16 +1058,15 @@ enifed("ember-testing/support",
1055
1058
  });
1056
1059
  });
1057
1060
  enifed("ember-testing/test",
1058
- ["ember-metal/core","ember-metal/run_loop","ember-metal/platform","ember-runtime/compare","ember-runtime/ext/rsvp","ember-testing/setup_for_testing","ember-application/system/application","exports"],
1059
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __exports__) {
1061
+ ["ember-metal/core","ember-metal/run_loop","ember-metal/platform","ember-runtime/ext/rsvp","ember-testing/setup_for_testing","ember-application/system/application","exports"],
1062
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __exports__) {
1060
1063
  "use strict";
1061
1064
  var Ember = __dependency1__["default"];
1062
1065
  var emberRun = __dependency2__["default"];
1063
1066
  var create = __dependency3__.create;
1064
- var compare = __dependency4__["default"];
1065
- var RSVP = __dependency5__["default"];
1066
- var setupForTesting = __dependency6__["default"];
1067
- var EmberApplication = __dependency7__["default"];
1067
+ var RSVP = __dependency4__["default"];
1068
+ var setupForTesting = __dependency5__["default"];
1069
+ var EmberApplication = __dependency6__["default"];
1068
1070
 
1069
1071
  /**
1070
1072
  @module ember
@@ -1325,15 +1327,13 @@ enifed("ember-testing/test",
1325
1327
  @since 1.2.0
1326
1328
  */
1327
1329
  unregisterWaiter: function(context, callback) {
1328
- var pair;
1329
1330
  if (!this.waiters) { return; }
1330
1331
  if (arguments.length === 1) {
1331
1332
  callback = context;
1332
1333
  context = null;
1333
1334
  }
1334
- pair = [context, callback];
1335
1335
  this.waiters = Ember.A(this.waiters.filter(function(elt) {
1336
- return compare(elt, pair)!==0;
1336
+ return !(elt[0] === context && elt[1] === callback);
1337
1337
  }));
1338
1338
  }
1339
1339
  };
@@ -5,7 +5,7 @@
5
5
  * Portions Copyright 2008-2011 Apple Inc. All rights reserved.
6
6
  * @license Licensed under MIT license
7
7
  * See https://raw.github.com/emberjs/ember.js/master/LICENSE
8
- * @version 1.10.0-beta.4
8
+ * @version 1.10.0
9
9
  */
10
10
 
11
11
  (function() {
@@ -4034,7 +4034,7 @@ enifed("ember-htmlbars.jshint",
4034
4034
  "use strict";
4035
4035
  module('JSHint - .');
4036
4036
  test('ember-htmlbars.js should pass jshint', function() {
4037
- ok(false, 'ember-htmlbars.js should pass jshint.\nember-htmlbars.js: line 26, col 3, \'helper\' is defined but never used.\n\n1 error');
4037
+ ok(true, 'ember-htmlbars.js should pass jshint.');
4038
4038
  });
4039
4039
  });
4040
4040
  enifed("ember-htmlbars/compat.jshint",
@@ -4073,15 +4073,6 @@ enifed("ember-htmlbars/compat/make-bound-helper.jshint",
4073
4073
  ok(true, 'ember-htmlbars/compat/make-bound-helper.js should pass jshint.');
4074
4074
  });
4075
4075
  });
4076
- enifed("ember-htmlbars/compat/precompile.jshint",
4077
- [],
4078
- function() {
4079
- "use strict";
4080
- module('JSHint - ember-htmlbars/compat');
4081
- test('ember-htmlbars/compat/precompile.js should pass jshint', function() {
4082
- ok(true, 'ember-htmlbars/compat/precompile.js should pass jshint.');
4083
- });
4084
- });
4085
4076
  enifed("ember-htmlbars/compat/register-bound-helper.jshint",
4086
4077
  [],
4087
4078
  function() {
@@ -4482,14 +4473,13 @@ enifed("ember-htmlbars/tests/attr_nodes/href_test.jshint",
4482
4473
  ok(true, 'ember-htmlbars/tests/attr_nodes/href_test.js should pass jshint.');
4483
4474
  });
4484
4475
  });
4485
- enifed("ember-htmlbars/tests/attr_nodes/nonmatching_reflection_test",
4486
- ["ember-views/views/view","ember-metal/run_loop","ember-template-compiler/system/compile","htmlbars-test-helpers"],
4487
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__) {
4476
+ enifed("ember-htmlbars/tests/attr_nodes/property_test",
4477
+ ["ember-views/views/view","ember-metal/run_loop","ember-template-compiler/system/compile"],
4478
+ function(__dependency1__, __dependency2__, __dependency3__) {
4488
4479
  "use strict";
4489
4480
  var EmberView = __dependency1__["default"];
4490
4481
  var run = __dependency2__["default"];
4491
4482
  var compile = __dependency3__["default"];
4492
- var equalInnerHTML = __dependency4__.equalInnerHTML;
4493
4483
 
4494
4484
  var view;
4495
4485
 
@@ -4505,13 +4495,13 @@ enifed("ember-htmlbars/tests/attr_nodes/nonmatching_reflection_test",
4505
4495
  }
4506
4496
 
4507
4497
  });
4508
- enifed("ember-htmlbars/tests/attr_nodes/nonmatching_reflection_test.jshint",
4498
+ enifed("ember-htmlbars/tests/attr_nodes/property_test.jshint",
4509
4499
  [],
4510
4500
  function() {
4511
4501
  "use strict";
4512
4502
  module('JSHint - ember-htmlbars/tests/attr_nodes');
4513
- test('ember-htmlbars/tests/attr_nodes/nonmatching_reflection_test.js should pass jshint', function() {
4514
- ok(true, 'ember-htmlbars/tests/attr_nodes/nonmatching_reflection_test.js should pass jshint.');
4503
+ test('ember-htmlbars/tests/attr_nodes/property_test.js should pass jshint', function() {
4504
+ ok(true, 'ember-htmlbars/tests/attr_nodes/property_test.js should pass jshint.');
4515
4505
  });
4516
4506
  });
4517
4507
  enifed("ember-htmlbars/tests/attr_nodes/sanitized_test",
@@ -4570,13 +4560,12 @@ enifed("ember-htmlbars/tests/attr_nodes/svg_test.jshint",
4570
4560
  });
4571
4561
  });
4572
4562
  enifed("ember-htmlbars/tests/attr_nodes/value_test",
4573
- ["ember-views/views/view","ember-metal/run_loop","ember-template-compiler/system/compile","htmlbars-test-helpers"],
4574
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__) {
4563
+ ["ember-views/views/view","ember-metal/run_loop","ember-template-compiler/system/compile"],
4564
+ function(__dependency1__, __dependency2__, __dependency3__) {
4575
4565
  "use strict";
4576
4566
  var EmberView = __dependency1__["default"];
4577
4567
  var run = __dependency2__["default"];
4578
4568
  var compile = __dependency3__["default"];
4579
- var equalInnerHTML = __dependency4__.equalInnerHTML;
4580
4569
 
4581
4570
  var view;
4582
4571
 
@@ -4857,6 +4846,32 @@ enifed("ember-htmlbars/tests/compat/helper_test",
4857
4846
  runAppend(view);
4858
4847
  });
4859
4848
 
4849
+ test('allows unbound usage within an element', function() {
4850
+ expect(4);
4851
+
4852
+ function someHelper(param1, param2, options) {
4853
+ equal(param1, 'blammo');
4854
+ equal(param2, 'blazzico');
4855
+
4856
+ return "class='foo'";
4857
+ }
4858
+
4859
+ registerHandlebarsCompatibleHelper('test', someHelper);
4860
+
4861
+ view = EmberView.create({
4862
+ controller: {
4863
+ value: 'foo'
4864
+ },
4865
+ template: compile('<div {{test "blammo" "blazzico"}}>Bar</div>')
4866
+ });
4867
+
4868
+ expectDeprecation(function() {
4869
+ runAppend(view);
4870
+ }, 'Returning a string of attributes from a helper inside an element is deprecated.');
4871
+
4872
+ equal(view.$('.foo').length, 1, 'class attribute was added by helper');
4873
+ });
4874
+
4860
4875
  test('registering a helper created from `Ember.Handlebars.makeViewHelper` does not double wrap the helper', function() {
4861
4876
  expect(1);
4862
4877
 
@@ -4876,6 +4891,111 @@ enifed("ember-htmlbars/tests/compat/helper_test",
4876
4891
  equal(view.$().text(), 'woot!');
4877
4892
  });
4878
4893
 
4894
+ test('does not add `options.fn` if no block was specified', function() {
4895
+ expect(1);
4896
+
4897
+ function someHelper(options) {
4898
+ ok(!options.fn, '`options.fn` is not present when block is not specified');
4899
+ }
4900
+
4901
+ registerHandlebarsCompatibleHelper('test', someHelper);
4902
+
4903
+ view = EmberView.create({
4904
+ controller: {
4905
+ value: 'foo'
4906
+ },
4907
+ template: compile('{{test}}')
4908
+ });
4909
+
4910
+ runAppend(view);
4911
+ });
4912
+
4913
+ test('does not return helper result if block was specified', function() {
4914
+ expect(1);
4915
+
4916
+ function someHelper(options) {
4917
+ return 'asdf';
4918
+ }
4919
+
4920
+ registerHandlebarsCompatibleHelper('test', someHelper);
4921
+
4922
+ view = EmberView.create({
4923
+ controller: {
4924
+ value: 'foo'
4925
+ },
4926
+ template: compile('{{#test}}lkj;{{/test}}')
4927
+ });
4928
+
4929
+ runAppend(view);
4930
+
4931
+ equal(view.$().text(), '');
4932
+ });
4933
+
4934
+ test('allows usage of the template fn', function() {
4935
+ expect(1);
4936
+
4937
+ function someHelper(options) {
4938
+ options.fn();
4939
+ }
4940
+
4941
+ registerHandlebarsCompatibleHelper('test', someHelper);
4942
+
4943
+ view = EmberView.create({
4944
+ controller: {
4945
+ value: 'foo'
4946
+ },
4947
+ template: compile('{{#test}}foo{{/test}}')
4948
+ });
4949
+
4950
+ runAppend(view);
4951
+
4952
+ equal(view.$().text(), 'foo');
4953
+ });
4954
+
4955
+ QUnit.test('ordered param types are added to options.types', function() {
4956
+ expect(3);
4957
+
4958
+ function someHelper(param1, param2, param3, options) {
4959
+ equal(options.types[0], 'NUMBER');
4960
+ equal(options.types[1], 'ID');
4961
+ equal(options.types[2], 'STRING');
4962
+ }
4963
+
4964
+ registerHandlebarsCompatibleHelper('test', someHelper);
4965
+
4966
+ view = EmberView.create({
4967
+ controller: {
4968
+ first: 'blammo',
4969
+ second: 'blazzico'
4970
+ },
4971
+ template: compile('{{test 1 two "3"}}')
4972
+ });
4973
+
4974
+ runAppend(view);
4975
+ });
4976
+
4977
+ QUnit.test('`hash` params are to options.hashTypes', function() {
4978
+ expect(3);
4979
+
4980
+ function someHelper(options) {
4981
+ equal(options.hashTypes.string, 'STRING');
4982
+ equal(options.hashTypes.number, 'NUMBER');
4983
+ equal(options.hashTypes.id, 'ID');
4984
+ }
4985
+
4986
+ registerHandlebarsCompatibleHelper('test', someHelper);
4987
+
4988
+ view = EmberView.create({
4989
+ controller: {
4990
+ value: 'Jacquie'
4991
+ },
4992
+ template: compile('{{test string="foo" number=42 id=someBoundThing}}')
4993
+ });
4994
+
4995
+ runAppend(view);
4996
+ });
4997
+
4998
+ // jscs:enable validateIndentation
4879
4999
 
4880
5000
  });
4881
5001
  enifed("ember-htmlbars/tests/compat/helper_test.jshint",
@@ -5585,8 +5705,8 @@ enifed("ember-htmlbars/tests/compat/precompile_test.jshint",
5585
5705
  });
5586
5706
  });
5587
5707
  enifed("ember-htmlbars/tests/helpers/bind_attr_test",
5588
- ["ember-metal/core","ember-metal/run_loop","ember-runtime/system/namespace","ember-views/views/view","ember-views/views/metamorph_view","ember-runtime/system/object","ember-runtime/system/native_array","ember-metal/computed","ember-metal/observer","ember-runtime/system/container","ember-metal/property_set","ember-runtime/tests/utils","htmlbars-test-helpers","ember-htmlbars/helpers","ember-template-compiler/system/compile"],
5589
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __dependency15__) {
5708
+ ["ember-metal/core","ember-metal/run_loop","ember-runtime/system/namespace","ember-views/views/view","ember-views/views/metamorph_view","ember-runtime/system/object","ember-runtime/system/native_array","ember-metal/computed","ember-metal/observer","ember-runtime/system/container","ember-metal/property_set","ember-runtime/tests/utils","ember-htmlbars/helpers","ember-template-compiler/system/compile"],
5709
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__) {
5590
5710
  "use strict";
5591
5711
  /*jshint newcap:false*/
5592
5712
  var Ember = __dependency1__["default"];
@@ -5603,10 +5723,9 @@ enifed("ember-htmlbars/tests/helpers/bind_attr_test",
5603
5723
  var set = __dependency11__.set;
5604
5724
  var runAppend = __dependency12__.runAppend;
5605
5725
  var runDestroy = __dependency12__.runDestroy;
5606
- var equalInnerHTML = __dependency13__.equalInnerHTML;
5607
5726
 
5608
- var helpers = __dependency14__["default"];
5609
- var compile = __dependency15__["default"];
5727
+ var helpers = __dependency13__["default"];
5728
+ var compile = __dependency14__["default"];
5610
5729
  var view;
5611
5730
 
5612
5731
  var originalLookup = Ember.lookup;
@@ -5872,13 +5991,13 @@ enifed("ember-htmlbars/tests/helpers/bind_attr_test",
5872
5991
 
5873
5992
  runAppend(view);
5874
5993
 
5875
- equalInnerHTML(view.element, '<img class="bar">', 'renders class');
5994
+ equal(view.element.firstChild.className, 'bar', 'renders class');
5876
5995
 
5877
5996
  run(function() {
5878
5997
  set(view, 'foo', 'baz');
5879
5998
  });
5880
5999
 
5881
- equalInnerHTML(view.element, '<img class="baz">', 'updates rendered class');
6000
+ equal(view.element.firstChild.className, 'baz', 'updates rendered class');
5882
6001
  });
5883
6002
 
5884
6003
  test("should be able to bind unquoted class attribute with {{bind-attr}}", function() {
@@ -5910,13 +6029,13 @@ enifed("ember-htmlbars/tests/helpers/bind_attr_test",
5910
6029
 
5911
6030
  runAppend(view);
5912
6031
 
5913
- equalInnerHTML(view.element, '<img class="is-truthy">', 'renders class');
6032
+ equal(view.element.firstChild.className, 'is-truthy', 'renders class');
5914
6033
 
5915
6034
  run(function() {
5916
6035
  set(view, 'isNumber', 0);
5917
6036
  });
5918
6037
 
5919
- equalInnerHTML(view.element.firstChild.className, undefined, 'removes class');
6038
+ ok(view.element.firstChild.className !== 'is-truthy', 'removes class');
5920
6039
  });
5921
6040
 
5922
6041
  test("should be able to bind class to view attribute with {{bind-attr}}", function() {
@@ -9583,6 +9702,9 @@ enifed("ember-htmlbars/tests/helpers/sanitized_bind_attr_test",
9583
9702
  { tag: 'a', attr: 'href',
9584
9703
  template: compile('<a {{bind-attr href=view.badValue}}></a>') },
9585
9704
  { tag: 'body', attr: 'background',
9705
+ // IE8 crashes when setting background with
9706
+ // a javascript: protocol
9707
+ skip: (document.documentMode && document.documentMode <= 8),
9586
9708
  template: compile('<body {{bind-attr background=view.badValue}}></body>') },
9587
9709
  { tag: 'link', attr: 'href',
9588
9710
  template: compile('<link {{bind-attr href=view.badValue}}>') },
@@ -9596,6 +9718,10 @@ enifed("ember-htmlbars/tests/helpers/sanitized_bind_attr_test",
9596
9718
  var attr = badTags[i].attr;
9597
9719
  var template = badTags[i].template;
9598
9720
 
9721
+ if (badTags[i].skip) {
9722
+ return;
9723
+ }
9724
+
9599
9725
  test("XSS - should not bind unsafe "+tagName+" "+attr+" values", function() {
9600
9726
  view = EmberView.create({
9601
9727
  template: template,
@@ -10230,7 +10356,7 @@ enifed("ember-htmlbars/tests/helpers/unbound_test.jshint",
10230
10356
  });
10231
10357
  });
10232
10358
  enifed("ember-htmlbars/tests/helpers/view_test",
10233
- ["ember-metal/property_set","ember-views/views/view","container/container","ember-metal/run_loop","ember-views/system/jquery","ember-views/views/text_field","ember-runtime/system/namespace","ember-runtime/system/object","ember-views/views/container_view","ember-views/views/metamorph_view","htmlbars-util/safe-string","ember-htmlbars/compat/precompile","ember-template-compiler/system/compile","ember-template-compiler/system/template","ember-metal/observer","ember-runtime/controllers/object_controller","ember-runtime/tests/utils","ember-metal/property_get","ember-metal/computed"],
10359
+ ["ember-metal/property_set","ember-views/views/view","container/container","ember-metal/run_loop","ember-views/system/jquery","ember-views/views/text_field","ember-runtime/system/namespace","ember-runtime/system/object","ember-views/views/container_view","ember-views/views/metamorph_view","htmlbars-util/safe-string","ember-template-compiler/compat/precompile","ember-template-compiler/system/compile","ember-template-compiler/system/template","ember-metal/observer","ember-runtime/controllers/object_controller","ember-runtime/tests/utils","ember-metal/property_get","ember-metal/computed"],
10234
10360
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __dependency15__, __dependency16__, __dependency17__, __dependency18__, __dependency19__) {
10235
10361
  "use strict";
10236
10362
  /*globals EmberDev */
@@ -12517,6 +12643,95 @@ enifed("ember-htmlbars/tests/hooks/component_test.jshint",
12517
12643
  ok(true, 'ember-htmlbars/tests/hooks/component_test.js should pass jshint.');
12518
12644
  });
12519
12645
  });
12646
+ enifed("ember-htmlbars/tests/hooks/element_test",
12647
+ ["ember-views/views/view","ember-htmlbars/helpers","ember-runtime/tests/utils","ember-template-compiler/system/compile"],
12648
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__) {
12649
+ "use strict";
12650
+ var EmberView = __dependency1__["default"];
12651
+ var helpers = __dependency2__["default"];
12652
+ var registerHelper = __dependency2__.registerHelper;
12653
+ var runAppend = __dependency3__.runAppend;
12654
+ var runDestroy = __dependency3__.runDestroy;
12655
+ var compile = __dependency4__["default"];
12656
+
12657
+ var view;
12658
+
12659
+ QUnit.module('ember-htmlbars: element hook', {
12660
+ teardown: function() {
12661
+ runDestroy(view);
12662
+ delete helpers.test;
12663
+ }
12664
+ });
12665
+
12666
+ test('allows unbound usage within an element', function() {
12667
+ expect(4);
12668
+
12669
+ function someHelper(params, hash, options, env) {
12670
+ equal(params[0], 'blammo');
12671
+ equal(params[1], 'blazzico');
12672
+
12673
+ return "class='foo'";
12674
+ }
12675
+
12676
+ registerHelper('test', someHelper);
12677
+
12678
+ view = EmberView.create({
12679
+ controller: {
12680
+ value: 'foo'
12681
+ },
12682
+ template: compile('<div {{test "blammo" "blazzico"}}>Bar</div>')
12683
+ });
12684
+
12685
+ expectDeprecation(function() {
12686
+ runAppend(view);
12687
+ }, 'Returning a string of attributes from a helper inside an element is deprecated.');
12688
+
12689
+ equal(view.$('.foo').length, 1, 'class attribute was added by helper');
12690
+ });
12691
+
12692
+ test('allows unbound usage within an element from property', function() {
12693
+ expect(2);
12694
+
12695
+ view = EmberView.create({
12696
+ controller: {
12697
+ someProp: 'class="foo"'
12698
+ },
12699
+ template: compile('<div {{someProp}}>Bar</div>')
12700
+ });
12701
+
12702
+ expectDeprecation(function() {
12703
+ runAppend(view);
12704
+ }, 'Returning a string of attributes from a helper inside an element is deprecated.');
12705
+
12706
+ equal(view.$('.foo').length, 1, 'class attribute was added by helper');
12707
+ });
12708
+
12709
+ test('allows unbound usage within an element creating multiple attributes', function() {
12710
+ expect(2);
12711
+
12712
+ view = EmberView.create({
12713
+ controller: {
12714
+ someProp: 'class="foo" data-foo="bar"'
12715
+ },
12716
+ template: compile('<div {{someProp}}>Bar</div>')
12717
+ });
12718
+
12719
+ expectDeprecation(function() {
12720
+ runAppend(view);
12721
+ }, 'Returning a string of attributes from a helper inside an element is deprecated.');
12722
+
12723
+ equal(view.$('.foo[data-foo="bar"]').length, 1, 'attributes added by helper');
12724
+ });
12725
+ });
12726
+ enifed("ember-htmlbars/tests/hooks/element_test.jshint",
12727
+ [],
12728
+ function() {
12729
+ "use strict";
12730
+ module('JSHint - ember-htmlbars/tests/hooks');
12731
+ test('ember-htmlbars/tests/hooks/element_test.js should pass jshint', function() {
12732
+ ok(true, 'ember-htmlbars/tests/hooks/element_test.js should pass jshint.');
12733
+ });
12734
+ });
12520
12735
  enifed("ember-htmlbars/tests/hooks/text_node_test",
12521
12736
  ["ember-views/views/view","ember-metal/run_loop","ember-runtime/system/object","ember-template-compiler/system/compile","htmlbars-test-helpers","ember-runtime/tests/utils"],
12522
12737
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__) {
@@ -12854,7 +13069,18 @@ enifed("ember-htmlbars/tests/integration/block_params_test",
12854
13069
  }
12855
13070
  });
12856
13071
 
12857
- test("basic block params usage", function() {
13072
+ QUnit.test("should raise error if helper not available", function() {
13073
+ view = View.create({
13074
+ template: compile('{{#shouldfail}}{{/shouldfail}}')
13075
+ });
13076
+
13077
+ expectAssertion(function() {
13078
+ runAppend(view);
13079
+ }, 'A helper named `shouldfail` could not be found');
13080
+
13081
+ });
13082
+
13083
+ QUnit.test("basic block params usage", function() {
12858
13084
  view = View.create({
12859
13085
  committer: { name: "rwjblue" },
12860
13086
  template: compile('{{#alias view.committer.name as |name|}}name: {{name}}, length: {{name.length}}{{/alias}}')
@@ -23342,12 +23568,12 @@ enifed("ember-metal/tests/run_loop/schedule_test",
23342
23568
  test('makes sure it does not trigger an autorun during testing', function() {
23343
23569
  expectAssertion(function() {
23344
23570
  run.schedule('actions', function() {});
23345
- }, /wrap any code with asynchronous side-effects in an run/);
23571
+ }, /wrap any code with asynchronous side-effects in a run/);
23346
23572
 
23347
23573
  // make sure not just the first violation is asserted.
23348
23574
  expectAssertion(function() {
23349
23575
  run.schedule('actions', function() {});
23350
- }, /wrap any code with asynchronous side-effects in an run/);
23576
+ }, /wrap any code with asynchronous side-effects in a run/);
23351
23577
  });
23352
23578
  });
23353
23579
  enifed("ember-metal/tests/run_loop/schedule_test.jshint",
@@ -33249,6 +33475,32 @@ enifed("ember-runtime/tests/ext/rsvp_test",
33249
33475
  Ember.testing = wasEmberTesting ;
33250
33476
  }
33251
33477
  });
33478
+
33479
+
33480
+ test('rejections where the errorThrown is a string should wrap the sting in an error object', function() {
33481
+ expect(2);
33482
+
33483
+ var wasEmberTesting = Ember.testing;
33484
+ var wasOnError = Ember.onerror;
33485
+
33486
+ try {
33487
+ Ember.testing = false;
33488
+ Ember.onerror = function(error) {
33489
+ equal(error.message, actualError, 'expected the real error on the jqXHR');
33490
+ equal(error.__reason_with_error_thrown__, jqXHR, 'also retains a helpful reference to the rejection reason');
33491
+ };
33492
+
33493
+ var actualError = "OMG what really happened";
33494
+ var jqXHR = {
33495
+ errorThrown: actualError
33496
+ };
33497
+
33498
+ run(RSVP, 'reject', jqXHR);
33499
+ } finally {
33500
+ Ember.onerror = wasOnError;
33501
+ Ember.testing = wasEmberTesting;
33502
+ }
33503
+ });
33252
33504
  });
33253
33505
  enifed("ember-runtime/tests/ext/rsvp_test.jshint",
33254
33506
  [],
@@ -46214,6 +46466,24 @@ enifed("ember-template-compiler.jshint",
46214
46466
  ok(true, 'ember-template-compiler.js should pass jshint.');
46215
46467
  });
46216
46468
  });
46469
+ enifed("ember-template-compiler/compat.jshint",
46470
+ [],
46471
+ function() {
46472
+ "use strict";
46473
+ module('JSHint - ember-template-compiler');
46474
+ test('ember-template-compiler/compat.js should pass jshint', function() {
46475
+ ok(true, 'ember-template-compiler/compat.js should pass jshint.');
46476
+ });
46477
+ });
46478
+ enifed("ember-template-compiler/compat/precompile.jshint",
46479
+ [],
46480
+ function() {
46481
+ "use strict";
46482
+ module('JSHint - ember-template-compiler/compat');
46483
+ test('ember-template-compiler/compat/precompile.js should pass jshint', function() {
46484
+ ok(true, 'ember-template-compiler/compat/precompile.js should pass jshint.');
46485
+ });
46486
+ });
46217
46487
  enifed("ember-template-compiler/plugins.jshint",
46218
46488
  [],
46219
46489
  function() {
@@ -47160,6 +47430,7 @@ enifed("ember-testing/tests/helpers_test",
47160
47430
  jQuery(document).off('ajaxComplete');
47161
47431
  });
47162
47432
  Test.pendingAjaxRequests = null;
47433
+ Test.waiters = null;
47163
47434
 
47164
47435
  // Other cleanup
47165
47436
 
@@ -47379,25 +47650,34 @@ enifed("ember-testing/tests/helpers_test",
47379
47650
  });
47380
47651
 
47381
47652
  test("`wait` respects registerWaiters", function() {
47382
- expect(2);
47653
+ expect(3);
47383
47654
 
47384
47655
  var counter=0;
47385
47656
  function waiter() {
47386
47657
  return ++counter > 2;
47387
47658
  }
47388
47659
 
47660
+ var other=0;
47661
+ function otherWaiter() {
47662
+ return ++other > 2;
47663
+ }
47664
+
47389
47665
  run(App, App.advanceReadiness);
47390
47666
  Test.registerWaiter(waiter);
47667
+ Test.registerWaiter(otherWaiter);
47391
47668
 
47392
47669
  App.testHelpers.wait().then(function() {
47393
47670
  equal(waiter(), true, 'should not resolve until our waiter is ready');
47394
47671
  Test.unregisterWaiter(waiter);
47395
- equal(Test.waiters.length, 0, 'should not leave a waiter registered');
47672
+ equal(Test.waiters.length, 1, 'should not leave the waiter registered');
47673
+ other = 0;
47674
+ return App.testHelpers.wait();
47675
+ }).then(function() {
47676
+ equal(otherWaiter(), true, 'other waiter is still registered');
47396
47677
  });
47397
47678
  });
47398
47679
 
47399
-
47400
- test("`visit` advances readiness.", function(){
47680
+ test("`visit` advances readiness.", function() {
47401
47681
  expect(2);
47402
47682
 
47403
47683
  equal(App._readinessDeferrals, 1, "App is in deferred state after setupForTesting.");
@@ -47436,7 +47716,7 @@ enifed("ember-testing/tests/helpers_test",
47436
47716
  });
47437
47717
 
47438
47718
  test("`click` triggers appropriate events in order", function() {
47439
- expect(4);
47719
+ expect(5);
47440
47720
 
47441
47721
  var click, wait, events;
47442
47722
 
@@ -47460,7 +47740,7 @@ enifed("ember-testing/tests/helpers_test",
47460
47740
  })
47461
47741
  });
47462
47742
 
47463
- Ember.TEMPLATES.index = compile('{{input type="text"}} {{view view.Checkbox}} {{textarea}}');
47743
+ Ember.TEMPLATES.index = compile('{{input type="text"}} {{view view.Checkbox}} {{textarea}} <div contenteditable="true"> </div>');
47464
47744
 
47465
47745
  run(App, App.advanceReadiness);
47466
47746
 
@@ -47488,6 +47768,13 @@ enifed("ember-testing/tests/helpers_test",
47488
47768
  deepEqual(events,
47489
47769
  ['mousedown', 'focusin', 'mouseup', 'click'],
47490
47770
  'fires focus events on textareas');
47771
+ }).then(function() {
47772
+ events = [];
47773
+ return click('.index-view div');
47774
+ }).then(function() {
47775
+ deepEqual(events,
47776
+ ['mousedown', 'focusin', 'mouseup', 'click'],
47777
+ 'fires focus events on contenteditable');
47491
47778
  }).then(function() {
47492
47779
  // In IE (< 8), the change event only fires when the value changes before element focused.
47493
47780
  jQuery('.index-view input[type=checkbox]').focus();
@@ -47519,7 +47806,7 @@ enifed("ember-testing/tests/helpers_test",
47519
47806
 
47520
47807
 
47521
47808
  test("`wait` respects registerWaiters with optional context", function() {
47522
- expect(2);
47809
+ expect(3);
47523
47810
 
47524
47811
  var obj = {
47525
47812
  counter: 0,
@@ -47528,17 +47815,34 @@ enifed("ember-testing/tests/helpers_test",
47528
47815
  }
47529
47816
  };
47530
47817
 
47818
+ var other=0;
47819
+ function otherWaiter() {
47820
+ return ++other > 2;
47821
+ }
47822
+
47531
47823
  run(App, App.advanceReadiness);
47532
47824
  Test.registerWaiter(obj, obj.ready);
47825
+ Test.registerWaiter(otherWaiter);
47533
47826
 
47534
47827
  App.testHelpers.wait().then(function() {
47535
47828
  equal(obj.ready(), true, 'should not resolve until our waiter is ready');
47536
47829
  Test.unregisterWaiter(obj, obj.ready);
47537
- equal(Test.waiters.length, 0, 'should not leave a waiter registered');
47830
+ equal(Test.waiters.length, 1, 'should not leave the waiter registered');
47831
+ return App.testHelpers.wait();
47832
+ }).then(function() {
47833
+ equal(otherWaiter(), true, 'other waiter should still be registered');
47834
+ });
47835
+ });
47836
+
47837
+ test("`wait` does not error if routing has not begun", function() {
47838
+ expect(1);
47839
+
47840
+ App.testHelpers.wait().then(function() {
47841
+ ok(true, 'should not error without `visit`');
47538
47842
  });
47539
47843
  });
47540
47844
 
47541
- test("`triggerEvent accepts an optional options hash without context", function(){
47845
+ test("`triggerEvent accepts an optional options hash without context", function() {
47542
47846
  expect(3);
47543
47847
 
47544
47848
  var triggerEvent, wait, event;
@@ -50690,17 +50994,18 @@ enifed("ember-views/tests/views/component_test.jshint",
50690
50994
  });
50691
50995
  });
50692
50996
  enifed("ember-views/tests/views/container_view_test",
50693
- ["ember-metal/property_get","ember-metal/property_set","ember-metal/run_loop","ember-metal/computed","ember-runtime/controllers/controller","ember-views/system/jquery","ember-views/views/view","ember-views/views/container_view"],
50694
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__) {
50997
+ ["ember-metal/property_get","ember-metal/property_set","ember-metal/run_loop","ember-metal/computed","ember-metal/streams/utils","ember-runtime/controllers/controller","ember-views/system/jquery","ember-views/views/view","ember-views/views/container_view"],
50998
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__) {
50695
50999
  "use strict";
50696
51000
  var get = __dependency1__.get;
50697
51001
  var set = __dependency2__.set;
50698
51002
  var run = __dependency3__["default"];
50699
51003
  var computed = __dependency4__.computed;
50700
- var Controller = __dependency5__["default"];
50701
- var jQuery = __dependency6__["default"];
50702
- var View = __dependency7__["default"];
50703
- var ContainerView = __dependency8__["default"];
51004
+ var read = __dependency5__.read;
51005
+ var Controller = __dependency6__["default"];
51006
+ var jQuery = __dependency7__["default"];
51007
+ var View = __dependency8__["default"];
51008
+ var ContainerView = __dependency9__["default"];
50704
51009
 
50705
51010
  var trim = jQuery.trim;
50706
51011
  var container, view, otherContainer;
@@ -50995,8 +51300,8 @@ enifed("ember-views/tests/views/container_view_test",
50995
51300
  equal(container.objectAt(0), mainView, "should have the currentView as the only child view");
50996
51301
  equal(mainView.get('parentView'), container, "parentView is setup");
50997
51302
  equal(context, container.get('context'), 'context preserved');
50998
- equal(mainView._keywords.controller.value(), controller, 'controller keyword is setup');
50999
- equal(mainView._keywords.view.value(), mainView, 'view keyword is setup');
51303
+ equal(read(mainView._keywords.controller), controller, 'controller keyword is setup');
51304
+ equal(read(mainView._keywords.view), mainView, 'view keyword is setup');
51000
51305
  });
51001
51306
 
51002
51307
  test("if a ContainerView is created with a currentView, it is rendered as a child view", function() {
@@ -51024,8 +51329,8 @@ enifed("ember-views/tests/views/container_view_test",
51024
51329
  equal(container.objectAt(0), mainView, "should have the currentView as the only child view");
51025
51330
  equal(mainView.get('parentView'), container, "parentView is setup");
51026
51331
  equal(context, container.get('context'), 'context preserved');
51027
- equal(mainView._keywords.controller.value(), controller, 'controller keyword is setup');
51028
- equal(mainView._keywords.view.value(), mainView, 'view keyword is setup');
51332
+ equal(read(mainView._keywords.controller), controller, 'controller keyword is setup');
51333
+ equal(read(mainView._keywords.view), mainView, 'view keyword is setup');
51029
51334
  });
51030
51335
 
51031
51336
  test("if a ContainerView starts with no currentView and then one is set, the ContainerView is updated", function() {
@@ -51059,8 +51364,8 @@ enifed("ember-views/tests/views/container_view_test",
51059
51364
  equal(container.objectAt(0), mainView, "should have the currentView as the only child view");
51060
51365
  equal(mainView.get('parentView'), container, "parentView is setup");
51061
51366
  equal(context, container.get('context'), 'context preserved');
51062
- equal(mainView._keywords.controller.value(), controller, 'controller keyword is setup');
51063
- equal(mainView._keywords.view.value(), mainView, 'view keyword is setup');
51367
+ equal(read(mainView._keywords.controller), controller, 'controller keyword is setup');
51368
+ equal(read(mainView._keywords.view), mainView, 'view keyword is setup');
51064
51369
  });
51065
51370
 
51066
51371
  test("if a ContainerView starts with a currentView and then is set to null, the ContainerView is updated", function() {
@@ -51089,8 +51394,8 @@ enifed("ember-views/tests/views/container_view_test",
51089
51394
  equal(container.objectAt(0), mainView, "should have the currentView as the only child view");
51090
51395
  equal(mainView.get('parentView'), container, "parentView is setup");
51091
51396
  equal(context, container.get('context'), 'context preserved');
51092
- equal(mainView._keywords.controller.value(), controller, 'controller keyword is setup');
51093
- equal(mainView._keywords.view.value(), mainView, 'view keyword is setup');
51397
+ equal(read(mainView._keywords.controller), controller, 'controller keyword is setup');
51398
+ equal(read(mainView._keywords.view), mainView, 'view keyword is setup');
51094
51399
 
51095
51400
  run(function() {
51096
51401
  set(container, 'currentView', null);
@@ -51126,8 +51431,8 @@ enifed("ember-views/tests/views/container_view_test",
51126
51431
  equal(container.objectAt(0), mainView, "should have the currentView as the only child view");
51127
51432
  equal(mainView.get('parentView'), container, "parentView is setup");
51128
51433
  equal(context, container.get('context'), 'context preserved');
51129
- equal(mainView._keywords.controller.value(), controller, 'controller keyword is setup');
51130
- equal(mainView._keywords.view.value(), mainView, 'view keyword is setup');
51434
+ equal(read(mainView._keywords.controller), controller, 'controller keyword is setup');
51435
+ equal(read(mainView._keywords.view), mainView, 'view keyword is setup');
51131
51436
 
51132
51437
  run(function() {
51133
51438
  set(container, 'currentView', null);
@@ -51865,23 +52170,26 @@ enifed("ember-views/tests/views/select_test",
51865
52170
  ok(select.$().is(":disabled"));
51866
52171
  });
51867
52172
 
51868
- test("should begin required if the required attribute is true", function() {
51869
- select.set('required', true);
51870
- append();
52173
+ // Browsers before IE10 do not support the required property.
52174
+ if (document && ('required' in document.createElement('input'))) {
52175
+ test("should begin required if the required attribute is true", function() {
52176
+ select.set('required', true);
52177
+ append();
51871
52178
 
51872
- ok(select.element.required, 'required property is truthy');
51873
- });
52179
+ ok(select.element.required, 'required property is truthy');
52180
+ });
51874
52181
 
51875
- test("should become required if the required attribute is changed", function() {
51876
- append();
51877
- ok(!select.element.required, 'required property is falsy');
52182
+ test("should become required if the required attribute is changed", function() {
52183
+ append();
52184
+ ok(!select.element.required, 'required property is falsy');
51878
52185
 
51879
- run(function() { select.set('required', true); });
51880
- ok(select.element.required, 'required property is truthy');
52186
+ run(function() { select.set('required', true); });
52187
+ ok(select.element.required, 'required property is truthy');
51881
52188
 
51882
- run(function() { select.set('required', false); });
51883
- ok(!select.element.required, 'required property is falsy');
51884
- });
52189
+ run(function() { select.set('required', false); });
52190
+ ok(!select.element.required, 'required property is falsy');
52191
+ });
52192
+ }
51885
52193
 
51886
52194
  test("should become disabled if the disabled attribute is changed", function() {
51887
52195
  append();
@@ -52922,7 +53230,7 @@ enifed("ember-views/tests/views/text_field_test",
52922
53230
  }
52923
53231
  });
52924
53232
 
52925
- test("should become disabled if the disabled attribute is true", function() {
53233
+ test("should become disabled if the disabled attribute is true before append", function() {
52926
53234
  textField.set('disabled', true);
52927
53235
  append();
52928
53236
 
@@ -53887,6 +54195,21 @@ enifed("ember-views/tests/views/view/attribute_bindings_test",
53887
54195
  ok(!view.$().attr('notNumber'), "removes notNumber attribute when NaN");
53888
54196
  });
53889
54197
 
54198
+ test("should normalize case for attribute bindings", function() {
54199
+ view = EmberView.create({
54200
+ tagName: 'input',
54201
+ attributeBindings: ['disAbled'],
54202
+
54203
+ disAbled: true
54204
+ });
54205
+
54206
+ run(function() {
54207
+ view.createElement();
54208
+ });
54209
+
54210
+ ok(view.$().prop('disabled'), "sets property with correct case");
54211
+ });
54212
+
53890
54213
  test("should update attribute bindings", function() {
53891
54214
  view = EmberView.create({
53892
54215
  classNameBindings: ['priority', 'isUrgent', 'isClassified:classified', 'canIgnore'],
@@ -65639,4 +65962,116 @@ enifed("ember/tests/routing/substates_test.jshint",
65639
65962
  ok(true, 'ember/tests/routing/substates_test.js should pass jshint.');
65640
65963
  });
65641
65964
  });
65965
+ enifed("htmlbars-test-helpers",
65966
+ ["exports"],
65967
+ function(__exports__) {
65968
+ "use strict";
65969
+ function equalInnerHTML(fragment, html) {
65970
+ var actualHTML = normalizeInnerHTML(fragment.innerHTML);
65971
+ QUnit.push(actualHTML === html, actualHTML, html);
65972
+ }
65973
+
65974
+ __exports__.equalInnerHTML = equalInnerHTML;function equalHTML(node, html) {
65975
+ var fragment;
65976
+ if (!node.nodeType && node.length) {
65977
+ fragment = document.createDocumentFragment();
65978
+ while (node[0]) {
65979
+ fragment.appendChild(node[0]);
65980
+ }
65981
+ } else {
65982
+ fragment = node;
65983
+ }
65984
+
65985
+ var div = document.createElement("div");
65986
+ div.appendChild(fragment.cloneNode(true));
65987
+
65988
+ equalInnerHTML(div, html);
65989
+ }
65990
+
65991
+ __exports__.equalHTML = equalHTML;// detect weird IE8 html strings
65992
+ var ie8InnerHTMLTestElement = document.createElement('div');
65993
+ ie8InnerHTMLTestElement.setAttribute('id', 'womp');
65994
+ var ie8InnerHTML = (ie8InnerHTMLTestElement.outerHTML.indexOf('id=womp') > -1);
65995
+
65996
+ // detect side-effects of cloning svg elements in IE9-11
65997
+ var ieSVGInnerHTML = (function () {
65998
+ if (!document.createElementNS) {
65999
+ return false;
66000
+ }
66001
+ var div = document.createElement('div');
66002
+ var node = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
66003
+ div.appendChild(node);
66004
+ var clone = div.cloneNode(true);
66005
+ return clone.innerHTML === '<svg xmlns="http://www.w3.org/2000/svg" />';
66006
+ })();
66007
+
66008
+ function normalizeInnerHTML(actualHTML) {
66009
+ if (ie8InnerHTML) {
66010
+ // drop newlines in IE8
66011
+ actualHTML = actualHTML.replace(/\r\n/gm, '');
66012
+ // downcase ALLCAPS tags in IE8
66013
+ actualHTML = actualHTML.replace(/<\/?[A-Z\-]+/gi, function(tag){
66014
+ return tag.toLowerCase();
66015
+ });
66016
+ // quote ids in IE8
66017
+ actualHTML = actualHTML.replace(/id=([^ >]+)/gi, function(match, id){
66018
+ return 'id="'+id+'"';
66019
+ });
66020
+ // IE8 adds ':' to some tags
66021
+ // <keygen> becomes <:keygen>
66022
+ actualHTML = actualHTML.replace(/<(\/?):([^ >]+)/gi, function(match, slash, tag){
66023
+ return '<'+slash+tag;
66024
+ });
66025
+
66026
+ // Normalize the style attribute
66027
+ actualHTML = actualHTML.replace(/style="(.+?)"/gi, function(match, val){
66028
+ return 'style="'+val.toLowerCase()+';"';
66029
+ });
66030
+
66031
+ }
66032
+ if (ieSVGInnerHTML) {
66033
+ // Replace `<svg xmlns="http://www.w3.org/2000/svg" height="50%" />` with `<svg height="50%"></svg>`, etc.
66034
+ // drop namespace attribute
66035
+ actualHTML = actualHTML.replace(/ xmlns="[^"]+"/, '');
66036
+ // replace self-closing elements
66037
+ actualHTML = actualHTML.replace(/<([^ >]+) [^\/>]*\/>/gi, function(tag, tagName) {
66038
+ return tag.slice(0, tag.length - 3) + '></' + tagName + '>';
66039
+ });
66040
+ }
66041
+
66042
+ return actualHTML;
66043
+ }
66044
+
66045
+ __exports__.normalizeInnerHTML = normalizeInnerHTML;// detect weird IE8 checked element string
66046
+ var checkedInput = document.createElement('input');
66047
+ checkedInput.setAttribute('checked', 'checked');
66048
+ var checkedInputString = checkedInput.outerHTML;
66049
+ function isCheckedInputHTML(element) {
66050
+ equal(element.outerHTML, checkedInputString);
66051
+ }
66052
+
66053
+ __exports__.isCheckedInputHTML = isCheckedInputHTML;// check which property has the node's text content
66054
+ var textProperty = document.createElement('div').textContent === undefined ? 'innerText' : 'textContent';
66055
+ function getTextContent(el) {
66056
+ // textNode
66057
+ if (el.nodeType === 3) {
66058
+ return el.nodeValue;
66059
+ } else {
66060
+ return el[textProperty];
66061
+ }
66062
+ }
66063
+
66064
+ __exports__.getTextContent = getTextContent;// IE8 does not have Object.create, so use a polyfill if needed.
66065
+ // Polyfill based on Mozilla's (MDN)
66066
+ function createObject(obj) {
66067
+ if (typeof Object.create === 'function') {
66068
+ return Object.create(obj);
66069
+ } else {
66070
+ var Temp = function() {};
66071
+ Temp.prototype = obj;
66072
+ return new Temp();
66073
+ }
66074
+ }
66075
+ __exports__.createObject = createObject;
66076
+ });
65642
66077
  })();