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() {
@@ -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'],