ember-source 1.10.0.beta.4 → 1.10.0

Sign up to get free protection for your applications and to get access to all the features.

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() {
@@ -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}}')
@@ -23235,12 +23461,12 @@ enifed("ember-metal/tests/run_loop/schedule_test",
23235
23461
  test('makes sure it does not trigger an autorun during testing', function() {
23236
23462
  expectAssertion(function() {
23237
23463
  run.schedule('actions', function() {});
23238
- }, /wrap any code with asynchronous side-effects in an run/);
23464
+ }, /wrap any code with asynchronous side-effects in a run/);
23239
23465
 
23240
23466
  // make sure not just the first violation is asserted.
23241
23467
  expectAssertion(function() {
23242
23468
  run.schedule('actions', function() {});
23243
- }, /wrap any code with asynchronous side-effects in an run/);
23469
+ }, /wrap any code with asynchronous side-effects in a run/);
23244
23470
  });
23245
23471
  });
23246
23472
  enifed("ember-metal/tests/run_loop/schedule_test.jshint",
@@ -33142,6 +33368,32 @@ enifed("ember-runtime/tests/ext/rsvp_test",
33142
33368
  Ember.testing = wasEmberTesting ;
33143
33369
  }
33144
33370
  });
33371
+
33372
+
33373
+ test('rejections where the errorThrown is a string should wrap the sting in an error object', function() {
33374
+ expect(2);
33375
+
33376
+ var wasEmberTesting = Ember.testing;
33377
+ var wasOnError = Ember.onerror;
33378
+
33379
+ try {
33380
+ Ember.testing = false;
33381
+ Ember.onerror = function(error) {
33382
+ equal(error.message, actualError, 'expected the real error on the jqXHR');
33383
+ equal(error.__reason_with_error_thrown__, jqXHR, 'also retains a helpful reference to the rejection reason');
33384
+ };
33385
+
33386
+ var actualError = "OMG what really happened";
33387
+ var jqXHR = {
33388
+ errorThrown: actualError
33389
+ };
33390
+
33391
+ run(RSVP, 'reject', jqXHR);
33392
+ } finally {
33393
+ Ember.onerror = wasOnError;
33394
+ Ember.testing = wasEmberTesting;
33395
+ }
33396
+ });
33145
33397
  });
33146
33398
  enifed("ember-runtime/tests/ext/rsvp_test.jshint",
33147
33399
  [],
@@ -46081,6 +46333,24 @@ enifed("ember-template-compiler.jshint",
46081
46333
  ok(true, 'ember-template-compiler.js should pass jshint.');
46082
46334
  });
46083
46335
  });
46336
+ enifed("ember-template-compiler/compat.jshint",
46337
+ [],
46338
+ function() {
46339
+ "use strict";
46340
+ module('JSHint - ember-template-compiler');
46341
+ test('ember-template-compiler/compat.js should pass jshint', function() {
46342
+ ok(true, 'ember-template-compiler/compat.js should pass jshint.');
46343
+ });
46344
+ });
46345
+ enifed("ember-template-compiler/compat/precompile.jshint",
46346
+ [],
46347
+ function() {
46348
+ "use strict";
46349
+ module('JSHint - ember-template-compiler/compat');
46350
+ test('ember-template-compiler/compat/precompile.js should pass jshint', function() {
46351
+ ok(true, 'ember-template-compiler/compat/precompile.js should pass jshint.');
46352
+ });
46353
+ });
46084
46354
  enifed("ember-template-compiler/plugins.jshint",
46085
46355
  [],
46086
46356
  function() {
@@ -47027,6 +47297,7 @@ enifed("ember-testing/tests/helpers_test",
47027
47297
  jQuery(document).off('ajaxComplete');
47028
47298
  });
47029
47299
  Test.pendingAjaxRequests = null;
47300
+ Test.waiters = null;
47030
47301
 
47031
47302
  // Other cleanup
47032
47303
 
@@ -47246,25 +47517,34 @@ enifed("ember-testing/tests/helpers_test",
47246
47517
  });
47247
47518
 
47248
47519
  test("`wait` respects registerWaiters", function() {
47249
- expect(2);
47520
+ expect(3);
47250
47521
 
47251
47522
  var counter=0;
47252
47523
  function waiter() {
47253
47524
  return ++counter > 2;
47254
47525
  }
47255
47526
 
47527
+ var other=0;
47528
+ function otherWaiter() {
47529
+ return ++other > 2;
47530
+ }
47531
+
47256
47532
  run(App, App.advanceReadiness);
47257
47533
  Test.registerWaiter(waiter);
47534
+ Test.registerWaiter(otherWaiter);
47258
47535
 
47259
47536
  App.testHelpers.wait().then(function() {
47260
47537
  equal(waiter(), true, 'should not resolve until our waiter is ready');
47261
47538
  Test.unregisterWaiter(waiter);
47262
- equal(Test.waiters.length, 0, 'should not leave a waiter registered');
47539
+ equal(Test.waiters.length, 1, 'should not leave the waiter registered');
47540
+ other = 0;
47541
+ return App.testHelpers.wait();
47542
+ }).then(function() {
47543
+ equal(otherWaiter(), true, 'other waiter is still registered');
47263
47544
  });
47264
47545
  });
47265
47546
 
47266
-
47267
- test("`visit` advances readiness.", function(){
47547
+ test("`visit` advances readiness.", function() {
47268
47548
  expect(2);
47269
47549
 
47270
47550
  equal(App._readinessDeferrals, 1, "App is in deferred state after setupForTesting.");
@@ -47303,7 +47583,7 @@ enifed("ember-testing/tests/helpers_test",
47303
47583
  });
47304
47584
 
47305
47585
  test("`click` triggers appropriate events in order", function() {
47306
- expect(4);
47586
+ expect(5);
47307
47587
 
47308
47588
  var click, wait, events;
47309
47589
 
@@ -47327,7 +47607,7 @@ enifed("ember-testing/tests/helpers_test",
47327
47607
  })
47328
47608
  });
47329
47609
 
47330
- Ember.TEMPLATES.index = compile('{{input type="text"}} {{view view.Checkbox}} {{textarea}}');
47610
+ Ember.TEMPLATES.index = compile('{{input type="text"}} {{view view.Checkbox}} {{textarea}} <div contenteditable="true"> </div>');
47331
47611
 
47332
47612
  run(App, App.advanceReadiness);
47333
47613
 
@@ -47355,6 +47635,13 @@ enifed("ember-testing/tests/helpers_test",
47355
47635
  deepEqual(events,
47356
47636
  ['mousedown', 'focusin', 'mouseup', 'click'],
47357
47637
  'fires focus events on textareas');
47638
+ }).then(function() {
47639
+ events = [];
47640
+ return click('.index-view div');
47641
+ }).then(function() {
47642
+ deepEqual(events,
47643
+ ['mousedown', 'focusin', 'mouseup', 'click'],
47644
+ 'fires focus events on contenteditable');
47358
47645
  }).then(function() {
47359
47646
  // In IE (< 8), the change event only fires when the value changes before element focused.
47360
47647
  jQuery('.index-view input[type=checkbox]').focus();
@@ -47386,7 +47673,7 @@ enifed("ember-testing/tests/helpers_test",
47386
47673
 
47387
47674
 
47388
47675
  test("`wait` respects registerWaiters with optional context", function() {
47389
- expect(2);
47676
+ expect(3);
47390
47677
 
47391
47678
  var obj = {
47392
47679
  counter: 0,
@@ -47395,17 +47682,34 @@ enifed("ember-testing/tests/helpers_test",
47395
47682
  }
47396
47683
  };
47397
47684
 
47685
+ var other=0;
47686
+ function otherWaiter() {
47687
+ return ++other > 2;
47688
+ }
47689
+
47398
47690
  run(App, App.advanceReadiness);
47399
47691
  Test.registerWaiter(obj, obj.ready);
47692
+ Test.registerWaiter(otherWaiter);
47400
47693
 
47401
47694
  App.testHelpers.wait().then(function() {
47402
47695
  equal(obj.ready(), true, 'should not resolve until our waiter is ready');
47403
47696
  Test.unregisterWaiter(obj, obj.ready);
47404
- equal(Test.waiters.length, 0, 'should not leave a waiter registered');
47697
+ equal(Test.waiters.length, 1, 'should not leave the waiter registered');
47698
+ return App.testHelpers.wait();
47699
+ }).then(function() {
47700
+ equal(otherWaiter(), true, 'other waiter should still be registered');
47405
47701
  });
47406
47702
  });
47407
47703
 
47408
- test("`triggerEvent accepts an optional options hash without context", function(){
47704
+ test("`wait` does not error if routing has not begun", function() {
47705
+ expect(1);
47706
+
47707
+ App.testHelpers.wait().then(function() {
47708
+ ok(true, 'should not error without `visit`');
47709
+ });
47710
+ });
47711
+
47712
+ test("`triggerEvent accepts an optional options hash without context", function() {
47409
47713
  expect(3);
47410
47714
 
47411
47715
  var triggerEvent, wait, event;
@@ -50557,17 +50861,18 @@ enifed("ember-views/tests/views/component_test.jshint",
50557
50861
  });
50558
50862
  });
50559
50863
  enifed("ember-views/tests/views/container_view_test",
50560
- ["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"],
50561
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__) {
50864
+ ["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"],
50865
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__) {
50562
50866
  "use strict";
50563
50867
  var get = __dependency1__.get;
50564
50868
  var set = __dependency2__.set;
50565
50869
  var run = __dependency3__["default"];
50566
50870
  var computed = __dependency4__.computed;
50567
- var Controller = __dependency5__["default"];
50568
- var jQuery = __dependency6__["default"];
50569
- var View = __dependency7__["default"];
50570
- var ContainerView = __dependency8__["default"];
50871
+ var read = __dependency5__.read;
50872
+ var Controller = __dependency6__["default"];
50873
+ var jQuery = __dependency7__["default"];
50874
+ var View = __dependency8__["default"];
50875
+ var ContainerView = __dependency9__["default"];
50571
50876
 
50572
50877
  var trim = jQuery.trim;
50573
50878
  var container, view, otherContainer;
@@ -50862,8 +51167,8 @@ enifed("ember-views/tests/views/container_view_test",
50862
51167
  equal(container.objectAt(0), mainView, "should have the currentView as the only child view");
50863
51168
  equal(mainView.get('parentView'), container, "parentView is setup");
50864
51169
  equal(context, container.get('context'), 'context preserved');
50865
- equal(mainView._keywords.controller.value(), controller, 'controller keyword is setup');
50866
- equal(mainView._keywords.view.value(), mainView, 'view keyword is setup');
51170
+ equal(read(mainView._keywords.controller), controller, 'controller keyword is setup');
51171
+ equal(read(mainView._keywords.view), mainView, 'view keyword is setup');
50867
51172
  });
50868
51173
 
50869
51174
  test("if a ContainerView is created with a currentView, it is rendered as a child view", function() {
@@ -50891,8 +51196,8 @@ enifed("ember-views/tests/views/container_view_test",
50891
51196
  equal(container.objectAt(0), mainView, "should have the currentView as the only child view");
50892
51197
  equal(mainView.get('parentView'), container, "parentView is setup");
50893
51198
  equal(context, container.get('context'), 'context preserved');
50894
- equal(mainView._keywords.controller.value(), controller, 'controller keyword is setup');
50895
- equal(mainView._keywords.view.value(), mainView, 'view keyword is setup');
51199
+ equal(read(mainView._keywords.controller), controller, 'controller keyword is setup');
51200
+ equal(read(mainView._keywords.view), mainView, 'view keyword is setup');
50896
51201
  });
50897
51202
 
50898
51203
  test("if a ContainerView starts with no currentView and then one is set, the ContainerView is updated", function() {
@@ -50926,8 +51231,8 @@ enifed("ember-views/tests/views/container_view_test",
50926
51231
  equal(container.objectAt(0), mainView, "should have the currentView as the only child view");
50927
51232
  equal(mainView.get('parentView'), container, "parentView is setup");
50928
51233
  equal(context, container.get('context'), 'context preserved');
50929
- equal(mainView._keywords.controller.value(), controller, 'controller keyword is setup');
50930
- equal(mainView._keywords.view.value(), mainView, 'view keyword is setup');
51234
+ equal(read(mainView._keywords.controller), controller, 'controller keyword is setup');
51235
+ equal(read(mainView._keywords.view), mainView, 'view keyword is setup');
50931
51236
  });
50932
51237
 
50933
51238
  test("if a ContainerView starts with a currentView and then is set to null, the ContainerView is updated", function() {
@@ -50956,8 +51261,8 @@ enifed("ember-views/tests/views/container_view_test",
50956
51261
  equal(container.objectAt(0), mainView, "should have the currentView as the only child view");
50957
51262
  equal(mainView.get('parentView'), container, "parentView is setup");
50958
51263
  equal(context, container.get('context'), 'context preserved');
50959
- equal(mainView._keywords.controller.value(), controller, 'controller keyword is setup');
50960
- equal(mainView._keywords.view.value(), mainView, 'view keyword is setup');
51264
+ equal(read(mainView._keywords.controller), controller, 'controller keyword is setup');
51265
+ equal(read(mainView._keywords.view), mainView, 'view keyword is setup');
50961
51266
 
50962
51267
  run(function() {
50963
51268
  set(container, 'currentView', null);
@@ -50993,8 +51298,8 @@ enifed("ember-views/tests/views/container_view_test",
50993
51298
  equal(container.objectAt(0), mainView, "should have the currentView as the only child view");
50994
51299
  equal(mainView.get('parentView'), container, "parentView is setup");
50995
51300
  equal(context, container.get('context'), 'context preserved');
50996
- equal(mainView._keywords.controller.value(), controller, 'controller keyword is setup');
50997
- equal(mainView._keywords.view.value(), mainView, 'view keyword is setup');
51301
+ equal(read(mainView._keywords.controller), controller, 'controller keyword is setup');
51302
+ equal(read(mainView._keywords.view), mainView, 'view keyword is setup');
50998
51303
 
50999
51304
  run(function() {
51000
51305
  set(container, 'currentView', null);
@@ -51732,23 +52037,26 @@ enifed("ember-views/tests/views/select_test",
51732
52037
  ok(select.$().is(":disabled"));
51733
52038
  });
51734
52039
 
51735
- test("should begin required if the required attribute is true", function() {
51736
- select.set('required', true);
51737
- append();
52040
+ // Browsers before IE10 do not support the required property.
52041
+ if (document && ('required' in document.createElement('input'))) {
52042
+ test("should begin required if the required attribute is true", function() {
52043
+ select.set('required', true);
52044
+ append();
51738
52045
 
51739
- ok(select.element.required, 'required property is truthy');
51740
- });
52046
+ ok(select.element.required, 'required property is truthy');
52047
+ });
51741
52048
 
51742
- test("should become required if the required attribute is changed", function() {
51743
- append();
51744
- ok(!select.element.required, 'required property is falsy');
52049
+ test("should become required if the required attribute is changed", function() {
52050
+ append();
52051
+ ok(!select.element.required, 'required property is falsy');
51745
52052
 
51746
- run(function() { select.set('required', true); });
51747
- ok(select.element.required, 'required property is truthy');
52053
+ run(function() { select.set('required', true); });
52054
+ ok(select.element.required, 'required property is truthy');
51748
52055
 
51749
- run(function() { select.set('required', false); });
51750
- ok(!select.element.required, 'required property is falsy');
51751
- });
52056
+ run(function() { select.set('required', false); });
52057
+ ok(!select.element.required, 'required property is falsy');
52058
+ });
52059
+ }
51752
52060
 
51753
52061
  test("should become disabled if the disabled attribute is changed", function() {
51754
52062
  append();
@@ -52789,7 +53097,7 @@ enifed("ember-views/tests/views/text_field_test",
52789
53097
  }
52790
53098
  });
52791
53099
 
52792
- test("should become disabled if the disabled attribute is true", function() {
53100
+ test("should become disabled if the disabled attribute is true before append", function() {
52793
53101
  textField.set('disabled', true);
52794
53102
  append();
52795
53103
 
@@ -53754,6 +54062,21 @@ enifed("ember-views/tests/views/view/attribute_bindings_test",
53754
54062
  ok(!view.$().attr('notNumber'), "removes notNumber attribute when NaN");
53755
54063
  });
53756
54064
 
54065
+ test("should normalize case for attribute bindings", function() {
54066
+ view = EmberView.create({
54067
+ tagName: 'input',
54068
+ attributeBindings: ['disAbled'],
54069
+
54070
+ disAbled: true
54071
+ });
54072
+
54073
+ run(function() {
54074
+ view.createElement();
54075
+ });
54076
+
54077
+ ok(view.$().prop('disabled'), "sets property with correct case");
54078
+ });
54079
+
53757
54080
  test("should update attribute bindings", function() {
53758
54081
  view = EmberView.create({
53759
54082
  classNameBindings: ['priority', 'isUrgent', 'isClassified:classified', 'canIgnore'],