ember-source 1.10.0.beta.1 → 1.10.0.beta.2

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.1
8
+ * @version 1.10.0-beta.2
9
9
  */
10
10
 
11
11
  (function() {
data/dist/ember-tests.js CHANGED
@@ -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.1
8
+ * @version 1.10.0-beta.2
9
9
  */
10
10
 
11
11
  (function() {
@@ -1065,7 +1065,7 @@ enifed("ember-application/system/resolver.jshint",
1065
1065
  });
1066
1066
  });
1067
1067
  enifed("ember-application/tests/system/application_test",
1068
- ["ember-metal/core","ember-metal/run_loop","ember-application/system/application","ember-application/system/resolver","ember-routing/system/router","ember-views/views/view","ember-runtime/controllers/controller","ember-routing/location/none_location","ember-runtime/system/object","ember-views/system/jquery","ember-htmlbars/system/compile"],
1068
+ ["ember-metal/core","ember-metal/run_loop","ember-application/system/application","ember-application/system/resolver","ember-routing/system/router","ember-views/views/view","ember-runtime/controllers/controller","ember-routing/location/none_location","ember-runtime/system/object","ember-views/system/jquery","ember-template-compiler/system/compile"],
1069
1069
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__) {
1070
1070
  "use strict";
1071
1071
  /*globals EmberDev */
@@ -3183,10 +3183,14 @@ enifed("ember-dev/test-helper/assertion",
3183
3183
  AssertExpectation.Error = function(){};
3184
3184
  AssertExpectation.prototype = o_create(MethodCallExpectation.prototype);
3185
3185
  AssertExpectation.prototype.handleCall = function(message, test){
3186
+ var noAssertion = typeof test === 'function' ? test() : test;
3187
+
3186
3188
  this.sawCall = true;
3187
- if (test) {
3188
- return; // Only get message for failures
3189
+
3190
+ if (noAssertion) {
3191
+ return;
3189
3192
  }
3193
+
3190
3194
  this.actualMessage = message;
3191
3195
  // Halt execution
3192
3196
  throw new AssertExpectation.Error();
@@ -3299,8 +3303,10 @@ enifed("ember-dev/test-helper/deprecation",
3299
3303
  }
3300
3304
  var assertion = this;
3301
3305
  this.env.Ember.deprecate = function(msg, test) {
3306
+ var pushDeprecation = typeof test === 'function' ? !test() : !test;
3307
+
3302
3308
  assertion.actuals = assertion.actuals || [];
3303
- if (!test) {
3309
+ if (pushDeprecation) {
3304
3310
  assertion.actuals.push([msg, test]);
3305
3311
  }
3306
3312
  };
@@ -4058,13 +4064,13 @@ enifed("ember-htmlbars/attr_nodes/quoted.jshint",
4058
4064
  ok(true, 'ember-htmlbars/attr_nodes/quoted.js should pass jshint.');
4059
4065
  });
4060
4066
  });
4061
- enifed("ember-htmlbars/attr_nodes/quoted_class.jshint",
4067
+ enifed("ember-htmlbars/attr_nodes/sanitized.jshint",
4062
4068
  [],
4063
4069
  function() {
4064
4070
  "use strict";
4065
4071
  module('JSHint - ember-htmlbars/attr_nodes');
4066
- test('ember-htmlbars/attr_nodes/quoted_class.js should pass jshint', function() {
4067
- ok(true, 'ember-htmlbars/attr_nodes/quoted_class.js should pass jshint.');
4072
+ test('ember-htmlbars/attr_nodes/sanitized.js should pass jshint', function() {
4073
+ ok(true, 'ember-htmlbars/attr_nodes/sanitized.js should pass jshint.');
4068
4074
  });
4069
4075
  });
4070
4076
  enifed("ember-htmlbars/attr_nodes/simple.jshint",
@@ -4382,24 +4388,6 @@ enifed("ember-htmlbars/hooks/subexpr.jshint",
4382
4388
  ok(true, 'ember-htmlbars/hooks/subexpr.js should pass jshint.');
4383
4389
  });
4384
4390
  });
4385
- enifed("ember-htmlbars/plugins/transform-each-in-to-hash.jshint",
4386
- [],
4387
- function() {
4388
- "use strict";
4389
- module('JSHint - ember-htmlbars/plugins');
4390
- test('ember-htmlbars/plugins/transform-each-in-to-hash.js should pass jshint', function() {
4391
- ok(true, 'ember-htmlbars/plugins/transform-each-in-to-hash.js should pass jshint.');
4392
- });
4393
- });
4394
- enifed("ember-htmlbars/plugins/transform-with-as-to-hash.jshint",
4395
- [],
4396
- function() {
4397
- "use strict";
4398
- module('JSHint - ember-htmlbars/plugins');
4399
- test('ember-htmlbars/plugins/transform-with-as-to-hash.js should pass jshint', function() {
4400
- ok(true, 'ember-htmlbars/plugins/transform-with-as-to-hash.js should pass jshint.');
4401
- });
4402
- });
4403
4391
  enifed("ember-htmlbars/system/bootstrap.jshint",
4404
4392
  [],
4405
4393
  function() {
@@ -4409,15 +4397,6 @@ enifed("ember-htmlbars/system/bootstrap.jshint",
4409
4397
  ok(true, 'ember-htmlbars/system/bootstrap.js should pass jshint.');
4410
4398
  });
4411
4399
  });
4412
- enifed("ember-htmlbars/system/compile.jshint",
4413
- [],
4414
- function() {
4415
- "use strict";
4416
- module('JSHint - ember-htmlbars/system');
4417
- test('ember-htmlbars/system/compile.js should pass jshint', function() {
4418
- ok(true, 'ember-htmlbars/system/compile.js should pass jshint.');
4419
- });
4420
- });
4421
4400
  enifed("ember-htmlbars/system/helper.jshint",
4422
4401
  [],
4423
4402
  function() {
@@ -4454,17 +4433,8 @@ enifed("ember-htmlbars/system/make_bound_helper.jshint",
4454
4433
  ok(true, 'ember-htmlbars/system/make_bound_helper.js should pass jshint.');
4455
4434
  });
4456
4435
  });
4457
- enifed("ember-htmlbars/system/template.jshint",
4458
- [],
4459
- function() {
4460
- "use strict";
4461
- module('JSHint - ember-htmlbars/system');
4462
- test('ember-htmlbars/system/template.js should pass jshint', function() {
4463
- ok(true, 'ember-htmlbars/system/template.js should pass jshint.');
4464
- });
4465
- });
4466
4436
  enifed("ember-htmlbars/tests/attr_nodes/boolean_test",
4467
- ["ember-views/views/view","ember-metal/run_loop","ember-htmlbars/system/compile","htmlbars-test-helpers"],
4437
+ ["ember-views/views/view","ember-metal/run_loop","ember-template-compiler/system/compile","htmlbars-test-helpers"],
4468
4438
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__) {
4469
4439
  "use strict";
4470
4440
  var EmberView = __dependency1__["default"];
@@ -4489,7 +4459,7 @@ enifed("ember-htmlbars/tests/attr_nodes/boolean_test.jshint",
4489
4459
  });
4490
4460
  });
4491
4461
  enifed("ember-htmlbars/tests/attr_nodes/class_test",
4492
- ["ember-views/views/view","ember-metal/run_loop","ember-htmlbars/system/compile","htmlbars-test-helpers"],
4462
+ ["ember-views/views/view","ember-metal/run_loop","ember-template-compiler/system/compile","htmlbars-test-helpers"],
4493
4463
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__) {
4494
4464
  "use strict";
4495
4465
  var EmberView = __dependency1__["default"];
@@ -4516,7 +4486,7 @@ enifed("ember-htmlbars/tests/attr_nodes/class_test.jshint",
4516
4486
  });
4517
4487
  });
4518
4488
  enifed("ember-htmlbars/tests/attr_nodes/data_test",
4519
- ["ember-views/views/view","ember-metal/run_loop","ember-runtime/system/object","ember-htmlbars/system/compile","htmlbars-test-helpers","ember-htmlbars","ember-runtime/tests/utils"],
4489
+ ["ember-views/views/view","ember-metal/run_loop","ember-runtime/system/object","ember-template-compiler/system/compile","htmlbars-test-helpers","ember-htmlbars","ember-runtime/tests/utils"],
4520
4490
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__) {
4521
4491
  "use strict";
4522
4492
  var EmberView = __dependency1__["default"];
@@ -4542,7 +4512,7 @@ enifed("ember-htmlbars/tests/attr_nodes/data_test.jshint",
4542
4512
  });
4543
4513
  });
4544
4514
  enifed("ember-htmlbars/tests/attr_nodes/href_test",
4545
- ["ember-views/views/view","ember-metal/run_loop","ember-htmlbars/system/compile","htmlbars-test-helpers"],
4515
+ ["ember-views/views/view","ember-metal/run_loop","ember-template-compiler/system/compile","htmlbars-test-helpers"],
4546
4516
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__) {
4547
4517
  "use strict";
4548
4518
  var EmberView = __dependency1__["default"];
@@ -4567,7 +4537,7 @@ enifed("ember-htmlbars/tests/attr_nodes/href_test.jshint",
4567
4537
  });
4568
4538
  });
4569
4539
  enifed("ember-htmlbars/tests/attr_nodes/nonmatching_reflection_test",
4570
- ["ember-views/views/view","ember-metal/run_loop","ember-htmlbars/system/compile","htmlbars-test-helpers"],
4540
+ ["ember-views/views/view","ember-metal/run_loop","ember-template-compiler/system/compile","htmlbars-test-helpers"],
4571
4541
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__) {
4572
4542
  "use strict";
4573
4543
  var EmberView = __dependency1__["default"];
@@ -4591,8 +4561,38 @@ enifed("ember-htmlbars/tests/attr_nodes/nonmatching_reflection_test.jshint",
4591
4561
  ok(true, 'ember-htmlbars/tests/attr_nodes/nonmatching_reflection_test.js should pass jshint.');
4592
4562
  });
4593
4563
  });
4564
+ enifed("ember-htmlbars/tests/attr_nodes/sanitized_test",
4565
+ ["ember-views/views/view","ember-template-compiler/system/compile","ember-htmlbars/utils/string","ember-runtime/tests/utils"],
4566
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__) {
4567
+ "use strict";
4568
+ /* jshint scripturl:true */
4569
+
4570
+ var EmberView = __dependency1__["default"];
4571
+ var compile = __dependency2__["default"];
4572
+ var SafeString = __dependency3__.SafeString;
4573
+ var runAppend = __dependency4__.runAppend;
4574
+ var runDestroy = __dependency4__.runDestroy;
4575
+
4576
+ var view;
4577
+
4578
+ QUnit.module("ember-htmlbars: sanitized attribute", {
4579
+ teardown: function(){
4580
+ runDestroy(view);
4581
+ }
4582
+ });
4583
+
4584
+ });
4585
+ enifed("ember-htmlbars/tests/attr_nodes/sanitized_test.jshint",
4586
+ [],
4587
+ function() {
4588
+ "use strict";
4589
+ module('JSHint - ember-htmlbars/tests/attr_nodes');
4590
+ test('ember-htmlbars/tests/attr_nodes/sanitized_test.js should pass jshint', function() {
4591
+ ok(true, 'ember-htmlbars/tests/attr_nodes/sanitized_test.js should pass jshint.');
4592
+ });
4593
+ });
4594
4594
  enifed("ember-htmlbars/tests/attr_nodes/svg_test",
4595
- ["ember-views/views/view","ember-metal/run_loop","ember-htmlbars/system/compile","htmlbars-test-helpers"],
4595
+ ["ember-views/views/view","ember-metal/run_loop","ember-template-compiler/system/compile","htmlbars-test-helpers"],
4596
4596
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__) {
4597
4597
  "use strict";
4598
4598
  var EmberView = __dependency1__["default"];
@@ -4617,7 +4617,7 @@ enifed("ember-htmlbars/tests/attr_nodes/svg_test.jshint",
4617
4617
  });
4618
4618
  });
4619
4619
  enifed("ember-htmlbars/tests/attr_nodes/value_test",
4620
- ["ember-views/views/view","ember-metal/run_loop","ember-htmlbars/system/compile","htmlbars-test-helpers"],
4620
+ ["ember-views/views/view","ember-metal/run_loop","ember-template-compiler/system/compile","htmlbars-test-helpers"],
4621
4621
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__) {
4622
4622
  "use strict";
4623
4623
  var EmberView = __dependency1__["default"];
@@ -4779,7 +4779,7 @@ enifed("ember-htmlbars/tests/compat/handlebars_get_test.jshint",
4779
4779
  });
4780
4780
  });
4781
4781
  enifed("ember-htmlbars/tests/compat/helper_test",
4782
- ["ember-htmlbars/compat/helper","ember-views/views/view","ember-htmlbars/helpers","ember-htmlbars/system/compile","ember-runtime/tests/utils"],
4782
+ ["ember-htmlbars/compat/helper","ember-views/views/view","ember-htmlbars/helpers","ember-template-compiler/system/compile","ember-runtime/tests/utils"],
4783
4783
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__) {
4784
4784
  "use strict";
4785
4785
  var registerHandlebarsCompatibleHelper = __dependency1__.registerHandlebarsCompatibleHelper;
@@ -4913,7 +4913,7 @@ enifed("ember-htmlbars/tests/compat/helper_test.jshint",
4913
4913
  });
4914
4914
  });
4915
4915
  enifed("ember-htmlbars/tests/compat/make-view-helper_test",
4916
- ["ember-views/views/view","container/container","ember-htmlbars/system/compile","ember-htmlbars/system/make-view-helper","ember-views/views/component","ember-runtime/tests/utils"],
4916
+ ["ember-views/views/view","container/container","ember-template-compiler/system/compile","ember-htmlbars/system/make-view-helper","ember-views/views/component","ember-runtime/tests/utils"],
4917
4917
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__) {
4918
4918
  "use strict";
4919
4919
  var EmberView = __dependency1__["default"];
@@ -4967,23 +4967,25 @@ enifed("ember-htmlbars/tests/compat/make-view-helper_test.jshint",
4967
4967
  });
4968
4968
  });
4969
4969
  enifed("ember-htmlbars/tests/compat/make_bound_helper_test",
4970
- ["ember-views/views/view","ember-metal/run_loop","ember-runtime/system/object","ember-runtime/system/native_array","ember-metal/property_get","ember-metal/property_set","ember-runtime/tests/utils","ember-htmlbars/compat"],
4971
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__) {
4970
+ ["ember-views/views/view","ember-metal/run_loop","ember-runtime/system/object","ember-runtime/system/native_array","ember-views/views/simple_bound_view","ember-metal/property_get","ember-metal/property_set","ember-runtime/tests/utils","ember-runtime/system/string","ember-htmlbars/compat"],
4971
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__) {
4972
4972
  "use strict";
4973
4973
  /*jshint newcap:false*/
4974
4974
  var EmberView = __dependency1__["default"];
4975
4975
  var run = __dependency2__["default"];
4976
4976
  var EmberObject = __dependency3__["default"];
4977
4977
  var A = __dependency4__.A;
4978
+ var SimpleBoundView = __dependency5__["default"];
4978
4979
 
4979
4980
  // import {expectAssertion} from "ember-metal/tests/debug_helpers";
4980
4981
 
4981
- var get = __dependency5__.get;
4982
- var set = __dependency6__.set;
4983
- var runAppend = __dependency7__.runAppend;
4984
- var runDestroy = __dependency7__.runDestroy;
4982
+ var get = __dependency6__.get;
4983
+ var set = __dependency7__.set;
4984
+ var runAppend = __dependency8__.runAppend;
4985
+ var runDestroy = __dependency8__.runDestroy;
4986
+ var dasherize = __dependency9__.dasherize;
4985
4987
 
4986
- var EmberHandlebars = __dependency8__["default"];
4988
+ var EmberHandlebars = __dependency10__["default"];
4987
4989
 
4988
4990
  var compile, helpers, helper;
4989
4991
  compile = EmberHandlebars.compile;
@@ -4998,7 +5000,7 @@ enifed("ember-htmlbars/tests/compat/make_bound_helper_test",
4998
5000
  expectDeprecationInHTMLBars();
4999
5001
 
5000
5002
  helper('repeat', function(value, options) {
5001
- var count = options.hash.count;
5003
+ var count = options.hash.count || 1;
5002
5004
  var a = [];
5003
5005
  while(a.length < count) {
5004
5006
  a.push(value);
@@ -5053,12 +5055,33 @@ enifed("ember-htmlbars/tests/compat/make_bound_helper_test",
5053
5055
  equal(view.$().text(), 'BROGRAMMER', "helper output is correct");
5054
5056
 
5055
5057
  run(function() {
5056
- set(view.controller, 'name', 'wes');
5058
+ set(view, 'controller.name', 'wes');
5057
5059
  });
5058
5060
 
5059
5061
  equal(view.$().text(), 'WES', "helper output updated");
5060
5062
  });
5061
5063
 
5064
+ test("should update bound helpers in a subexpression when properties change", function() {
5065
+ expectDeprecationInHTMLBars();
5066
+
5067
+ helper('dasherize', function(value) {
5068
+ return dasherize(value);
5069
+ });
5070
+
5071
+ view = EmberView.create({
5072
+ controller: {prop: "isThing"},
5073
+ template: compile("<div {{bind-attr data-foo=(dasherize prop)}}>{{prop}}</div>")
5074
+ });
5075
+
5076
+ runAppend(view);
5077
+
5078
+ equal(view.$('div[data-foo="is-thing"]').text(), 'isThing', "helper output is correct");
5079
+
5080
+ run(view, 'set', 'controller.prop', 'notThing');
5081
+
5082
+ equal(view.$('div[data-foo="not-thing"]').text(), 'notThing', "helper output is correct");
5083
+ });
5084
+
5062
5085
  test("should allow for computed properties with dependencies", function() {
5063
5086
  expectDeprecationInHTMLBars();
5064
5087
 
@@ -5080,7 +5103,7 @@ enifed("ember-htmlbars/tests/compat/make_bound_helper_test",
5080
5103
  equal(view.$().text(), 'BROGRAMMER', "helper output is correct");
5081
5104
 
5082
5105
  run(function() {
5083
- set(view.controller.person, 'name', 'wes');
5106
+ set(view, 'controller.person.name', 'wes');
5084
5107
  });
5085
5108
 
5086
5109
  equal(view.$().text(), 'WES', "helper output updated");
@@ -5229,7 +5252,7 @@ enifed("ember-htmlbars/tests/compat/make_bound_helper_test",
5229
5252
  equal(view.$().text(), 'ZOIDNERD', "helper correctly re-rendered after second bound helper property changed");
5230
5253
 
5231
5254
  run(function() {
5232
- view.controller.setProperties({
5255
+ view.get('controller').setProperties({
5233
5256
  thing1: "WOOT",
5234
5257
  thing2: "YEAH"
5235
5258
  });
@@ -5353,7 +5376,7 @@ enifed("ember-htmlbars/tests/compat/make_bound_helper_test",
5353
5376
 
5354
5377
  equal(view.$().text(), '2 1 11', "helper output is correct");
5355
5378
 
5356
- run(view.controller, 'set', 'aNumber', 5);
5379
+ run(view, 'set', 'controller.aNumber', 5);
5357
5380
 
5358
5381
  equal(view.$().text(), '6 5 11', "helper still updates as expected");
5359
5382
  });
@@ -5376,10 +5399,10 @@ enifed("ember-htmlbars/tests/compat/make_bound_helper_test",
5376
5399
 
5377
5400
  equal(view.$().text(), 'jerkwaterloo jerkwater willdidi', "helper output is correct");
5378
5401
 
5379
- run(view.controller, 'set', 'word', 'bird');
5402
+ run(view, 'set', 'controller.word', 'bird');
5380
5403
  equal(view.$().text(), 'birdloo bird willdidi', "helper still updates as expected");
5381
5404
 
5382
- run(view.controller, 'set', 'loo', 'soup-de-doo');
5405
+ run(view, 'set', 'controller.loo', 'soup-de-doo');
5383
5406
  equal(view.$().text(), 'birdloo bird willdidi', "helper still updates as expected");
5384
5407
  equal(helperCount, 5, "changing controller property with same name as quoted string doesn't re-render helper");
5385
5408
  });
@@ -5405,8 +5428,8 @@ enifed("ember-htmlbars/tests/compat/make_bound_helper_test",
5405
5428
  equal(view.$().text(), '|NOPE 0|NOPE |NOPE false|NOPE OMG|GMO |NOPE 0|NOPE |NOPE false|NOPE OMG|GMO ', "helper output is correct");
5406
5429
 
5407
5430
  run(function() {
5408
- view.controller.things.pushObject('blorg');
5409
- view.controller.things.shiftObject();
5431
+ view.get('controller.things').pushObject('blorg');
5432
+ view.get('controller.things').shiftObject();
5410
5433
  });
5411
5434
 
5412
5435
  equal(view.$().text(), '0|NOPE |NOPE false|NOPE OMG|GMO blorg|grolb 0|NOPE |NOPE false|NOPE OMG|GMO blorg|grolb ', "helper output is still correct");
@@ -5432,7 +5455,7 @@ enifed("ember-htmlbars/tests/compat/make_bound_helper_test",
5432
5455
 
5433
5456
  equal(view.$().text(), '|NOPE 5|5 |NOPE 5|5 ', "helper output is correct");
5434
5457
 
5435
- run(view.controller.things, 'pushObject', { foo: 6 });
5458
+ run(view.get('controller.things'), 'pushObject', { foo: 6 });
5436
5459
 
5437
5460
  equal(view.$().text(), '|NOPE 5|5 6|6 |NOPE 5|5 6|6 ', "helper output is correct");
5438
5461
  });
@@ -5482,6 +5505,53 @@ enifed("ember-htmlbars/tests/compat/make_bound_helper_test",
5482
5505
 
5483
5506
  equal(view.$().text(), 'undefined, undefined, string, number, object', "helper output is correct");
5484
5507
  });
5508
+
5509
+ test("when no parameters are bound, no new views are created", function(){
5510
+ registerRepeatHelper();
5511
+ var originalRender = SimpleBoundView.prototype.render;
5512
+ var renderWasCalled = false;
5513
+ SimpleBoundView.prototype.render = function(){
5514
+ renderWasCalled = true;
5515
+ return originalRender.apply(this, arguments);
5516
+ };
5517
+
5518
+ try {
5519
+ view = EmberView.create({
5520
+ template: compile('{{repeat "a"}}'),
5521
+ controller: EmberObject.create()
5522
+ });
5523
+ runAppend(view);
5524
+ } finally {
5525
+ SimpleBoundView.prototype.render = originalRender;
5526
+ }
5527
+
5528
+ ok(!renderWasCalled, 'simple bound view should not have been created and rendered');
5529
+ equal(view.$().text(), 'a');
5530
+ });
5531
+
5532
+
5533
+ test('when no hash parameters are bound, no new views are created', function(){
5534
+ registerRepeatHelper();
5535
+ var originalRender = SimpleBoundView.prototype.render;
5536
+ var renderWasCalled = false;
5537
+ SimpleBoundView.prototype.render = function(){
5538
+ renderWasCalled = true;
5539
+ return originalRender.apply(this, arguments);
5540
+ };
5541
+
5542
+ try {
5543
+ view = EmberView.create({
5544
+ template: compile('{{repeat "a" count=3}}'),
5545
+ controller: EmberObject.create()
5546
+ });
5547
+ runAppend(view);
5548
+ } finally {
5549
+ SimpleBoundView.prototype.render = originalRender;
5550
+ }
5551
+
5552
+ ok(!renderWasCalled, 'simple bound view should not have been created and rendered');
5553
+ equal(view.$().text(), 'aaa');
5554
+ });
5485
5555
  });
5486
5556
  enifed("ember-htmlbars/tests/compat/make_bound_helper_test.jshint",
5487
5557
  [],
@@ -5540,7 +5610,7 @@ enifed("ember-htmlbars/tests/compat/precompile_test.jshint",
5540
5610
  });
5541
5611
  });
5542
5612
  enifed("ember-htmlbars/tests/helper_test",
5543
- ["ember-views/views/view","ember-metal/run_loop","ember-runtime/system/object","ember-metal/property_set","ember-runtime/tests/utils","ember-htmlbars/helpers","ember-htmlbars/system/compile"],
5613
+ ["ember-views/views/view","ember-metal/run_loop","ember-runtime/system/object","ember-metal/property_set","ember-runtime/tests/utils","ember-htmlbars/helpers","ember-template-compiler/system/compile"],
5544
5614
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__) {
5545
5615
  "use strict";
5546
5616
  var EmberView = __dependency1__["default"];
@@ -5650,8 +5720,8 @@ enifed("ember-htmlbars/tests/helper_test.jshint",
5650
5720
  });
5651
5721
  });
5652
5722
  enifed("ember-htmlbars/tests/helpers/bind_attr_test",
5653
- ["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-htmlbars/system/compile"],
5654
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__) {
5723
+ ["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"],
5724
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __dependency15__) {
5655
5725
  "use strict";
5656
5726
  /*jshint newcap:false*/
5657
5727
  var Ember = __dependency1__["default"];
@@ -5668,10 +5738,10 @@ enifed("ember-htmlbars/tests/helpers/bind_attr_test",
5668
5738
  var set = __dependency11__.set;
5669
5739
  var runAppend = __dependency12__.runAppend;
5670
5740
  var runDestroy = __dependency12__.runDestroy;
5741
+ var equalInnerHTML = __dependency13__.equalInnerHTML;
5671
5742
 
5672
- var helpers = __dependency13__["default"];
5673
- var compile = __dependency14__["default"];
5674
-
5743
+ var helpers = __dependency14__["default"];
5744
+ var compile = __dependency15__["default"];
5675
5745
  var view;
5676
5746
 
5677
5747
  var originalLookup = Ember.lookup;
@@ -5913,6 +5983,25 @@ enifed("ember-htmlbars/tests/helpers/bind_attr_test",
5913
5983
 
5914
5984
  runAppend(view);
5915
5985
 
5986
+ equalInnerHTML(view.element, '<img class="bar">', 'renders class');
5987
+
5988
+ run(function() {
5989
+ set(view, 'foo', 'baz');
5990
+ });
5991
+
5992
+ equalInnerHTML(view.element, '<img class="baz">', 'updates rendered class');
5993
+ });
5994
+
5995
+ test("should be able to bind unquoted class attribute with {{bind-attr}}", function() {
5996
+ var template = compile('<img {{bind-attr class=view.foo}}>');
5997
+
5998
+ view = EmberView.create({
5999
+ template: template,
6000
+ foo: 'bar'
6001
+ });
6002
+
6003
+ runAppend(view);
6004
+
5916
6005
  equal(view.$('img').attr('class'), 'bar', "renders class");
5917
6006
 
5918
6007
  run(function() {
@@ -5932,13 +6021,13 @@ enifed("ember-htmlbars/tests/helpers/bind_attr_test",
5932
6021
 
5933
6022
  runAppend(view);
5934
6023
 
5935
- equal(view.$('.is-truthy').length, 1, "sets class name");
6024
+ equalInnerHTML(view.element, '<img class="is-truthy">', 'renders class');
5936
6025
 
5937
6026
  run(function() {
5938
6027
  set(view, 'isNumber', 0);
5939
6028
  });
5940
6029
 
5941
- equal(view.$('.is-truthy').length, 0, "removes class name if bound property is set to something non-truthy");
6030
+ equalInnerHTML(view.element.firstChild.className, undefined, 'removes class');
5942
6031
  });
5943
6032
 
5944
6033
  test("should be able to bind class to view attribute with {{bind-attr}}", function() {
@@ -6120,6 +6209,16 @@ enifed("ember-htmlbars/tests/helpers/bind_attr_test",
6120
6209
  equal(observersFor(view, 'foo').length, 1);
6121
6210
  });
6122
6211
 
6212
+ test("should keep class in the order it appears in", function() {
6213
+ view = EmberView.create({
6214
+ template: compile('<span {{bind-attr class=":foo :baz"}}></span>'),
6215
+ });
6216
+
6217
+ runAppend(view);
6218
+
6219
+ equal(view.element.firstChild.className, 'foo baz', 'classes are in expected order');
6220
+ });
6221
+
6123
6222
  test('should allow either quoted or unquoted values', function() {
6124
6223
  view = EmberView.create({
6125
6224
  value: 'Test',
@@ -6140,6 +6239,19 @@ enifed("ember-htmlbars/tests/helpers/bind_attr_test",
6140
6239
  equal(view.$('img').attr('alt'), "Updated", "updates value");
6141
6240
  equal(view.$('img').attr('src'), "test2.jpg", "updates value");
6142
6241
  });
6242
+
6243
+ test("property before didInsertElement", function() {
6244
+ var matchingElement;
6245
+ view = EmberView.create({
6246
+ name: 'bob',
6247
+ template: compile('<div {{bind-attr alt=view.name}}></div>'),
6248
+ didInsertElement: function(){
6249
+ matchingElement = this.$('div[alt=bob]');
6250
+ }
6251
+ });
6252
+ runAppend(view);
6253
+ equal(matchingElement.length, 1, 'element is in the DOM when didInsertElement');
6254
+ });
6143
6255
  });
6144
6256
  enifed("ember-htmlbars/tests/helpers/bind_attr_test.jshint",
6145
6257
  [],
@@ -6151,7 +6263,7 @@ enifed("ember-htmlbars/tests/helpers/bind_attr_test.jshint",
6151
6263
  });
6152
6264
  });
6153
6265
  enifed("ember-htmlbars/tests/helpers/bind_test",
6154
- ["ember-views/views/view","ember-runtime/system/object","ember-metal/run_loop","ember-views/views/metamorph_view","ember-htmlbars/system/compile","ember-runtime/system/container","ember-runtime/controllers/object_controller","ember-metal/property_get","ember-metal/property_set","ember-runtime/tests/utils"],
6266
+ ["ember-views/views/view","ember-runtime/system/object","ember-metal/run_loop","ember-views/views/metamorph_view","ember-template-compiler/system/compile","ember-runtime/system/container","ember-runtime/controllers/object_controller","ember-metal/property_get","ember-metal/property_set","ember-runtime/tests/utils"],
6155
6267
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__) {
6156
6268
  "use strict";
6157
6269
  var EmberView = __dependency1__["default"];
@@ -6450,7 +6562,7 @@ enifed("ember-htmlbars/tests/helpers/bind_test.jshint",
6450
6562
  });
6451
6563
  });
6452
6564
  enifed("ember-htmlbars/tests/helpers/collection_test",
6453
- ["ember-views/views/collection_view","ember-runtime/system/object","ember-views/views/view","ember-runtime/system/array_proxy","ember-runtime/system/namespace","ember-runtime/system/container","ember-runtime/system/native_array","ember-metal/run_loop","ember-metal/property_get","ember-metal/property_set","ember-views/system/jquery","ember-metal/computed","ember-runtime/tests/utils","ember-htmlbars/system/compile"],
6565
+ ["ember-views/views/collection_view","ember-runtime/system/object","ember-views/views/view","ember-runtime/system/array_proxy","ember-runtime/system/namespace","ember-runtime/system/container","ember-runtime/system/native_array","ember-metal/run_loop","ember-metal/property_get","ember-metal/property_set","ember-views/system/jquery","ember-metal/computed","ember-runtime/tests/utils","ember-template-compiler/system/compile"],
6454
6566
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__) {
6455
6567
  "use strict";
6456
6568
  /*jshint newcap:false*/
@@ -7149,7 +7261,7 @@ enifed("ember-htmlbars/tests/helpers/collection_test.jshint",
7149
7261
  });
7150
7262
  });
7151
7263
  enifed("ember-htmlbars/tests/helpers/debug_test",
7152
- ["ember-metal/core","ember-metal/logger","ember-views/views/view","ember-htmlbars/system/compile","ember-runtime/tests/utils"],
7264
+ ["ember-metal/core","ember-metal/logger","ember-views/views/view","ember-template-compiler/system/compile","ember-runtime/tests/utils"],
7153
7265
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__) {
7154
7266
  "use strict";
7155
7267
  var Ember = __dependency1__["default"];
@@ -7233,7 +7345,7 @@ enifed("ember-htmlbars/tests/helpers/debug_test.jshint",
7233
7345
  });
7234
7346
  });
7235
7347
  enifed("ember-htmlbars/tests/helpers/each_test",
7236
- ["ember-metal/core","ember-runtime/system/object","ember-metal/run_loop","ember-views/views/view","ember-views/views/metamorph_view","ember-metal/computed","ember-runtime/controllers/array_controller","ember-runtime/system/native_array","ember-runtime/controllers/controller","ember-runtime/controllers/object_controller","ember-runtime/system/container","ember-metal/property_get","ember-metal/property_set","ember-runtime/tests/utils","ember-htmlbars/system/compile"],
7348
+ ["ember-metal/core","ember-runtime/system/object","ember-metal/run_loop","ember-views/views/view","ember-views/views/metamorph_view","ember-metal/computed","ember-runtime/controllers/array_controller","ember-runtime/system/native_array","ember-runtime/controllers/controller","ember-runtime/controllers/object_controller","ember-runtime/system/container","ember-metal/property_get","ember-metal/property_set","ember-runtime/tests/utils","ember-template-compiler/system/compile"],
7237
7349
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __dependency15__) {
7238
7350
  "use strict";
7239
7351
  /*jshint newcap:false*/
@@ -8173,7 +8285,7 @@ enifed("ember-htmlbars/tests/helpers/each_test.jshint",
8173
8285
  });
8174
8286
  });
8175
8287
  enifed("ember-htmlbars/tests/helpers/if_unless_test",
8176
- ["ember-metal/run_loop","ember-runtime/system/namespace","ember-runtime/system/container","ember-views/views/view","ember-runtime/system/object_proxy","ember-runtime/system/object","ember-views/views/metamorph_view","ember-htmlbars/system/compile","ember-metal/property_set","ember-runtime/system/string","ember-metal/utils","ember-metal/enumerable_utils","ember-runtime/tests/utils"],
8288
+ ["ember-metal/run_loop","ember-runtime/system/namespace","ember-runtime/system/container","ember-views/views/view","ember-runtime/system/object_proxy","ember-runtime/system/object","ember-views/views/metamorph_view","ember-template-compiler/system/compile","ember-metal/property_set","ember-runtime/system/string","ember-metal/utils","ember-metal/enumerable_utils","ember-runtime/tests/utils"],
8177
8289
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__) {
8178
8290
  "use strict";
8179
8291
  var run = __dependency1__["default"];
@@ -8861,7 +8973,7 @@ enifed("ember-htmlbars/tests/helpers/if_unless_test.jshint",
8861
8973
  });
8862
8974
  });
8863
8975
  enifed("ember-htmlbars/tests/helpers/input_test",
8864
- ["ember-metal/run_loop","ember-metal/property_set","ember-views/views/view","ember-runtime/tests/utils","ember-htmlbars/system/compile"],
8976
+ ["ember-metal/run_loop","ember-metal/property_set","ember-views/views/view","ember-runtime/tests/utils","ember-template-compiler/system/compile"],
8865
8977
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__) {
8866
8978
  "use strict";
8867
8979
  var run = __dependency1__["default"];
@@ -9186,7 +9298,7 @@ enifed("ember-htmlbars/tests/helpers/input_test.jshint",
9186
9298
  });
9187
9299
  });
9188
9300
  enifed("ember-htmlbars/tests/helpers/loc_test",
9189
- ["ember-views/views/view","ember-htmlbars/system/compile","ember-runtime/tests/utils"],
9301
+ ["ember-views/views/view","ember-template-compiler/system/compile","ember-runtime/tests/utils"],
9190
9302
  function(__dependency1__, __dependency2__, __dependency3__) {
9191
9303
  "use strict";
9192
9304
  var EmberView = __dependency1__["default"];
@@ -9279,7 +9391,7 @@ enifed("ember-htmlbars/tests/helpers/loc_test.jshint",
9279
9391
  });
9280
9392
  });
9281
9393
  enifed("ember-htmlbars/tests/helpers/log_test",
9282
- ["ember-metal/core","ember-views/views/view","ember-htmlbars/system/compile","ember-runtime/tests/utils"],
9394
+ ["ember-metal/core","ember-views/views/view","ember-template-compiler/system/compile","ember-runtime/tests/utils"],
9283
9395
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__) {
9284
9396
  "use strict";
9285
9397
  var Ember = __dependency1__["default"];
@@ -9361,7 +9473,7 @@ enifed("ember-htmlbars/tests/helpers/log_test.jshint",
9361
9473
  });
9362
9474
  });
9363
9475
  enifed("ember-htmlbars/tests/helpers/partial_test",
9364
- ["ember-runtime/system/object","ember-metal/run_loop","ember-views/views/view","ember-views/system/jquery","ember-runtime/system/container","ember-htmlbars/system/compile","ember-runtime/tests/utils"],
9476
+ ["ember-runtime/system/object","ember-metal/run_loop","ember-views/views/view","ember-views/system/jquery","ember-runtime/system/container","ember-template-compiler/system/compile","ember-runtime/tests/utils"],
9365
9477
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__) {
9366
9478
  "use strict";
9367
9479
  var EmberObject = __dependency1__["default"];
@@ -9469,8 +9581,107 @@ enifed("ember-htmlbars/tests/helpers/partial_test.jshint",
9469
9581
  ok(true, 'ember-htmlbars/tests/helpers/partial_test.js should pass jshint.');
9470
9582
  });
9471
9583
  });
9584
+ enifed("ember-htmlbars/tests/helpers/sanitized_bind_attr_test",
9585
+ ["ember-views/views/view","ember-template-compiler/system/compile","ember-metal/run_loop","ember-htmlbars/utils/string","ember-runtime/tests/utils"],
9586
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__) {
9587
+ "use strict";
9588
+ /* jshint scripturl:true */
9589
+
9590
+ var EmberView = __dependency1__["default"];
9591
+ var compile = __dependency2__["default"];
9592
+ var run = __dependency3__["default"];
9593
+ var SafeString = __dependency4__.SafeString;
9594
+ var runAppend = __dependency5__.runAppend;
9595
+ var runDestroy = __dependency5__.runDestroy;
9596
+
9597
+ var view;
9598
+
9599
+ QUnit.module("ember-htmlbars: sanitized attribute", {
9600
+ teardown: function(){
9601
+ runDestroy(view);
9602
+ }
9603
+ });
9604
+
9605
+ var badTags = [
9606
+ { tag: 'a', attr: 'href',
9607
+ template: compile('<a {{bind-attr href=view.badValue}}></a>') },
9608
+ { tag: 'body', attr: 'background',
9609
+ template: compile('<body {{bind-attr background=view.badValue}}></body>') },
9610
+ { tag: 'link', attr: 'href',
9611
+ template: compile('<link {{bind-attr href=view.badValue}}>') },
9612
+ { tag: 'img', attr: 'src',
9613
+ template: compile('<img {{bind-attr src=view.badValue}}>') }
9614
+ ];
9615
+
9616
+ for (var i=0, l=badTags.length; i<l; i++) {
9617
+ (function(){
9618
+ var tagName = badTags[i].tag;
9619
+ var attr = badTags[i].attr;
9620
+ var template = badTags[i].template;
9621
+
9622
+ test("XSS - should not bind unsafe "+tagName+" "+attr+" values", function() {
9623
+ view = EmberView.create({
9624
+ template: template,
9625
+ badValue: "javascript:alert('XSS')"
9626
+ });
9627
+
9628
+ runAppend(view);
9629
+
9630
+ equal( view.element.firstChild.getAttribute(attr),
9631
+ "unsafe:javascript:alert('XSS')",
9632
+ "attribute is output" );
9633
+ });
9634
+
9635
+ test("XSS - should not bind unsafe "+tagName+" "+attr+" values on rerender", function() {
9636
+ view = EmberView.create({
9637
+ template: template,
9638
+ badValue: "/sunshine/and/rainbows"
9639
+ });
9640
+
9641
+ runAppend(view);
9642
+
9643
+ equal( view.element.firstChild.getAttribute(attr),
9644
+ "/sunshine/and/rainbows",
9645
+ "attribute is output" );
9646
+
9647
+ run(view, 'set', 'badValue', "javascript:alert('XSS')");
9648
+
9649
+ equal( view.element.firstChild.getAttribute(attr),
9650
+ "unsafe:javascript:alert('XSS')",
9651
+ "attribute is output" );
9652
+ });
9653
+
9654
+ test("should bind unsafe "+tagName+" "+attr+" values if they are SafeString", function() {
9655
+ view = EmberView.create({
9656
+ template: template,
9657
+ badValue: new SafeString("javascript:alert('XSS')")
9658
+ });
9659
+
9660
+ try {
9661
+ runAppend(view);
9662
+
9663
+ equal( view.element.firstChild.getAttribute(attr),
9664
+ "javascript:alert('XSS')",
9665
+ "attribute is output" );
9666
+ } catch(e) {
9667
+ // IE does not allow javascript: to be set on img src
9668
+ ok(true, 'caught exception '+e);
9669
+ }
9670
+ });
9671
+ })(); //jshint ignore:line
9672
+ }
9673
+ });
9674
+ enifed("ember-htmlbars/tests/helpers/sanitized_bind_attr_test.jshint",
9675
+ [],
9676
+ function() {
9677
+ "use strict";
9678
+ module('JSHint - ember-htmlbars/tests/helpers');
9679
+ test('ember-htmlbars/tests/helpers/sanitized_bind_attr_test.js should pass jshint', function() {
9680
+ ok(true, 'ember-htmlbars/tests/helpers/sanitized_bind_attr_test.js should pass jshint.');
9681
+ });
9682
+ });
9472
9683
  enifed("ember-htmlbars/tests/helpers/template_test",
9473
- ["ember-views/views/view","ember-runtime/system/object","ember-views/system/jquery","ember-runtime/system/container","ember-htmlbars/system/compile","ember-runtime/tests/utils"],
9684
+ ["ember-views/views/view","ember-runtime/system/object","ember-views/system/jquery","ember-runtime/system/container","ember-template-compiler/system/compile","ember-runtime/tests/utils"],
9474
9685
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__) {
9475
9686
  "use strict";
9476
9687
  var EmberView = __dependency1__["default"];
@@ -9543,7 +9754,7 @@ enifed("ember-htmlbars/tests/helpers/template_test.jshint",
9543
9754
  });
9544
9755
  });
9545
9756
  enifed("ember-htmlbars/tests/helpers/text_area_test",
9546
- ["ember-metal/run_loop","ember-views/views/view","ember-htmlbars/system/compile","ember-metal/property_set","ember-runtime/tests/utils"],
9757
+ ["ember-metal/run_loop","ember-views/views/view","ember-template-compiler/system/compile","ember-metal/property_set","ember-runtime/tests/utils"],
9547
9758
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__) {
9548
9759
  "use strict";
9549
9760
  var run = __dependency1__["default"];
@@ -9604,7 +9815,7 @@ enifed("ember-htmlbars/tests/helpers/text_area_test.jshint",
9604
9815
  });
9605
9816
  });
9606
9817
  enifed("ember-htmlbars/tests/helpers/unbound_test",
9607
- ["ember-views/views/view","ember-runtime/system/object","ember-runtime/system/native_array","ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/run_loop","ember-htmlbars/system/compile","ember-metal/error","ember-htmlbars/helpers","ember-htmlbars/compat/register-bound-helper","ember-htmlbars/compat/make-bound-helper","ember-runtime/system/container","ember-runtime/tests/utils"],
9818
+ ["ember-views/views/view","ember-runtime/system/object","ember-runtime/system/native_array","ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/run_loop","ember-template-compiler/system/compile","ember-metal/error","ember-htmlbars/helpers","ember-htmlbars/compat/register-bound-helper","ember-htmlbars/compat/make-bound-helper","ember-runtime/system/container","ember-runtime/tests/utils"],
9608
9819
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__) {
9609
9820
  "use strict";
9610
9821
  /*jshint newcap:false*/
@@ -9679,6 +9890,36 @@ enifed("ember-htmlbars/tests/helpers/unbound_test",
9679
9890
  }, EmberError);
9680
9891
  });
9681
9892
 
9893
+ test('should property escape unsafe hrefs', function() {
9894
+ /* jshint scripturl:true */
9895
+
9896
+ expect(3);
9897
+
9898
+ runDestroy(view);
9899
+
9900
+ view = EmberView.create({
9901
+ template: compile('<ul>{{#each person in view.people}}<a href="{{unbound person.url}}">{{person.name}}</a>{{/each}}</ul>'),
9902
+ people: A([{
9903
+ name: 'Bob',
9904
+ url: 'javascript:bob-is-cool'
9905
+ }, {
9906
+ name: 'James',
9907
+ url: 'vbscript:james-is-cool'
9908
+ }, {
9909
+ name: 'Richard',
9910
+ url: 'javascript:richard-is-cool'
9911
+ }])
9912
+ });
9913
+
9914
+ runAppend(view);
9915
+
9916
+ var links = view.$('a');
9917
+ for (var i = 0, l = links.length; i < l; i++) {
9918
+ var link = links[i];
9919
+ equal(link.protocol, 'unsafe:', 'properly escaped');
9920
+ }
9921
+ });
9922
+
9682
9923
  QUnit.module("ember-htmlbars: {{#unbound boundHelper arg1 arg2... argN}} form: render unbound helper invocations", {
9683
9924
  setup: function() {
9684
9925
  Ember.lookup = lookup = { Ember: Ember };
@@ -9864,6 +10105,34 @@ enifed("ember-htmlbars/tests/helpers/unbound_test",
9864
10105
  }
9865
10106
  });
9866
10107
 
10108
+ test("should be able to render bound form of a helper inside unbound form of same helper", function() {
10109
+ view = EmberView.create({
10110
+ template: compile(
10111
+ ["{{#unbound if foo}}",
10112
+ "{{#if bar}}true{{/if}}",
10113
+ "{{#unless bar}}false{{/unless}}",
10114
+ "{{/unbound}}",
10115
+ "{{#unbound unless notfoo}}",
10116
+ "{{#if bar}}true{{/if}}",
10117
+ "{{#unless bar}}false{{/unless}}",
10118
+ "{{/unbound}}"].join("")),
10119
+ context: EmberObject.create({
10120
+ foo: true,
10121
+ notfoo: false,
10122
+ bar: true
10123
+ })
10124
+ });
10125
+ runAppend(view);
10126
+
10127
+ equal(view.$().text(), "truetrue", "first render is correct");
10128
+
10129
+ run(function() {
10130
+ set(view, 'context.bar', false);
10131
+ });
10132
+
10133
+ equal(view.$().text(), "falsefalse", "bound if and unless inside unbound if/unless are updated");
10134
+ });
10135
+
9867
10136
  QUnit.module("ember-htmlbars: {{#unbound}} helper -- Container Lookup", {
9868
10137
  setup: function() {
9869
10138
  Ember.lookup = lookup = { Ember: Ember };
@@ -9984,7 +10253,7 @@ enifed("ember-htmlbars/tests/helpers/unbound_test.jshint",
9984
10253
  });
9985
10254
  });
9986
10255
  enifed("ember-htmlbars/tests/helpers/view_test",
9987
- ["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-htmlbars/system/compile","ember-htmlbars/system/template","ember-metal/observer","ember-runtime/controllers/object_controller","ember-runtime/tests/utils","ember-metal/property_get","ember-metal/computed"],
10256
+ ["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"],
9988
10257
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __dependency15__, __dependency16__, __dependency17__, __dependency18__, __dependency19__) {
9989
10258
  "use strict";
9990
10259
  /*globals EmberDev */
@@ -11198,6 +11467,92 @@ enifed("ember-htmlbars/tests/helpers/view_test",
11198
11467
 
11199
11468
  ok(view.$().text() === 'foobarProperty', 'Property was bound to correctly');
11200
11469
  });
11470
+
11471
+ test('{{view}} should be able to point to a local instance of view', function() {
11472
+ view = EmberView.create({
11473
+ template: compile("{{view view.common}}"),
11474
+
11475
+ common: EmberView.create({
11476
+ template: compile("common")
11477
+ })
11478
+ });
11479
+
11480
+ runAppend(view);
11481
+ equal(view.$().text(), "common", "tries to look up view name locally");
11482
+ });
11483
+
11484
+ test("{{view}} should be able to point to a local instance of subclass of view", function() {
11485
+ var MyView = EmberView.extend();
11486
+ view = EmberView.create({
11487
+ template: compile("{{view view.subclassed}}"),
11488
+ subclassed: MyView.create({
11489
+ template: compile("subclassed")
11490
+ })
11491
+ });
11492
+
11493
+ runAppend(view);
11494
+ equal(view.$().text(), "subclassed", "tries to look up view name locally");
11495
+ });
11496
+
11497
+ test("{{view}} asserts that a view class is present", function() {
11498
+ var MyView = EmberObject.extend();
11499
+ view = EmberView.create({
11500
+ template: compile("{{view view.notView}}"),
11501
+ notView: MyView.extend({
11502
+ template: compile("notView")
11503
+ })
11504
+ });
11505
+
11506
+ expectAssertion(function(){
11507
+ runAppend(view);
11508
+ }, /must be a subclass or an instance of Ember.View/);
11509
+ });
11510
+
11511
+ test("{{view}} asserts that a view class is present off controller", function() {
11512
+ var MyView = EmberObject.extend();
11513
+ view = EmberView.create({
11514
+ template: compile("{{view notView}}"),
11515
+ controller: EmberObject.create({
11516
+ notView: MyView.extend({
11517
+ template: compile("notView")
11518
+ })
11519
+ })
11520
+ });
11521
+
11522
+ expectAssertion(function(){
11523
+ runAppend(view);
11524
+ }, /must be a subclass or an instance of Ember.View/);
11525
+ });
11526
+
11527
+ test("{{view}} asserts that a view instance is present", function() {
11528
+ var MyView = EmberObject.extend();
11529
+ view = EmberView.create({
11530
+ template: compile("{{view view.notView}}"),
11531
+ notView: MyView.create({
11532
+ template: compile("notView")
11533
+ })
11534
+ });
11535
+
11536
+ expectAssertion(function(){
11537
+ runAppend(view);
11538
+ }, /must be a subclass or an instance of Ember.View/);
11539
+ });
11540
+
11541
+ test("{{view}} asserts that a view subclass instance is present off controller", function() {
11542
+ var MyView = EmberObject.extend();
11543
+ view = EmberView.create({
11544
+ template: compile("{{view notView}}"),
11545
+ controller: EmberObject.create({
11546
+ notView: MyView.create({
11547
+ template: compile("notView")
11548
+ })
11549
+ })
11550
+ });
11551
+
11552
+ expectAssertion(function(){
11553
+ runAppend(view);
11554
+ }, /must be a subclass or an instance of Ember.View/);
11555
+ });
11201
11556
  });
11202
11557
  enifed("ember-htmlbars/tests/helpers/view_test.jshint",
11203
11558
  [],
@@ -11209,7 +11564,7 @@ enifed("ember-htmlbars/tests/helpers/view_test.jshint",
11209
11564
  });
11210
11565
  });
11211
11566
  enifed("ember-htmlbars/tests/helpers/with_test",
11212
- ["ember-views/views/view","ember-metal/run_loop","ember-runtime/system/object","ember-metal/computed","ember-metal/property_set","ember-metal/property_get","ember-runtime/controllers/object_controller","ember-runtime/system/container","ember-htmlbars/system/compile","ember-runtime/tests/utils"],
11567
+ ["ember-views/views/view","ember-metal/run_loop","ember-runtime/system/object","ember-metal/computed","ember-metal/property_set","ember-metal/property_get","ember-runtime/controllers/object_controller","ember-runtime/system/container","ember-template-compiler/system/compile","ember-runtime/tests/utils"],
11213
11568
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__) {
11214
11569
  "use strict";
11215
11570
  /*jshint newcap:false*/
@@ -11724,7 +12079,7 @@ enifed("ember-htmlbars/tests/helpers/with_test.jshint",
11724
12079
  });
11725
12080
  });
11726
12081
  enifed("ember-htmlbars/tests/helpers/yield_test",
11727
- ["ember-metal/run_loop","ember-views/views/view","ember-metal/computed","ember-runtime/system/container","ember-metal/property_get","ember-metal/property_set","ember-runtime/system/native_array","ember-views/views/component","ember-metal/error","ember-htmlbars/helpers","ember-htmlbars/system/compile","ember-runtime/tests/utils"],
12082
+ ["ember-metal/run_loop","ember-views/views/view","ember-metal/computed","ember-runtime/system/container","ember-metal/property_get","ember-metal/property_set","ember-runtime/system/native_array","ember-views/views/component","ember-metal/error","ember-htmlbars/helpers","ember-template-compiler/system/compile","ember-runtime/tests/utils"],
11728
12083
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__) {
11729
12084
  "use strict";
11730
12085
  /*jshint newcap:false*/
@@ -12112,7 +12467,7 @@ enifed("ember-htmlbars/tests/helpers/yield_test.jshint",
12112
12467
  });
12113
12468
  });
12114
12469
  enifed("ember-htmlbars/tests/hooks/component_test",
12115
- ["ember-views/component_lookup","container","ember-views/views/view","ember-htmlbars/system/compile","ember-runtime/tests/utils"],
12470
+ ["ember-views/component_lookup","container","ember-views/views/view","ember-template-compiler/system/compile","ember-runtime/tests/utils"],
12116
12471
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__) {
12117
12472
  "use strict";
12118
12473
  var ComponentLookup = __dependency1__["default"];
@@ -12185,7 +12540,7 @@ enifed("ember-htmlbars/tests/hooks/component_test.jshint",
12185
12540
  });
12186
12541
  });
12187
12542
  enifed("ember-htmlbars/tests/hooks/text_node_test",
12188
- ["ember-views/views/view","ember-metal/run_loop","ember-runtime/system/object","ember-htmlbars/system/compile","htmlbars-test-helpers","ember-runtime/tests/utils"],
12543
+ ["ember-views/views/view","ember-metal/run_loop","ember-runtime/system/object","ember-template-compiler/system/compile","htmlbars-test-helpers","ember-runtime/tests/utils"],
12189
12544
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__) {
12190
12545
  "use strict";
12191
12546
  var EmberView = __dependency1__["default"];
@@ -12199,7 +12554,7 @@ enifed("ember-htmlbars/tests/hooks/text_node_test",
12199
12554
  var view;
12200
12555
 
12201
12556
 
12202
- QUnit.module("ember-htmlbars: basic/text_node_test", {
12557
+ QUnit.module("ember-htmlbars: hooks/text_node_test", {
12203
12558
  teardown: function(){
12204
12559
  runDestroy(view);
12205
12560
  }
@@ -12251,7 +12606,7 @@ enifed("ember-htmlbars/tests/hooks/text_node_test.jshint",
12251
12606
  });
12252
12607
  });
12253
12608
  enifed("ember-htmlbars/tests/htmlbars_test",
12254
- ["ember-htmlbars/system/compile","ember-htmlbars","htmlbars-test-helpers"],
12609
+ ["ember-template-compiler/system/compile","ember-htmlbars","htmlbars-test-helpers"],
12255
12610
  function(__dependency1__, __dependency2__, __dependency3__) {
12256
12611
  "use strict";
12257
12612
  var compile = __dependency1__["default"];
@@ -12279,7 +12634,7 @@ enifed("ember-htmlbars/tests/htmlbars_test.jshint",
12279
12634
  });
12280
12635
  });
12281
12636
  enifed("ember-htmlbars/tests/integration/binding_integration_test",
12282
- ["ember-metal/run_loop","ember-views/system/jquery","ember-views/views/view","ember-metal/binding","ember-runtime/system/object","ember-metal/computed","ember-views/views/container_view","ember-htmlbars/system/compile","ember-htmlbars/helpers/view","ember-runtime/tests/utils","ember-htmlbars/helpers","ember-metal/property_set"],
12637
+ ["ember-metal/run_loop","ember-views/system/jquery","ember-views/views/view","ember-metal/binding","ember-runtime/system/object","ember-metal/computed","ember-views/views/container_view","ember-template-compiler/system/compile","ember-htmlbars/helpers/view","ember-runtime/tests/utils","ember-htmlbars/helpers","ember-metal/property_set"],
12283
12638
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__) {
12284
12639
  "use strict";
12285
12640
  var run = __dependency1__["default"];
@@ -12476,7 +12831,7 @@ enifed("ember-htmlbars/tests/integration/binding_integration_test.jshint",
12476
12831
  });
12477
12832
  });
12478
12833
  enifed("ember-htmlbars/tests/integration/block_params_test",
12479
- ["container/container","ember-metal/run_loop","ember-views/component_lookup","ember-views/views/view","ember-htmlbars/system/compile","ember-htmlbars/helpers","ember-runtime/tests/utils"],
12834
+ ["container/container","ember-metal/run_loop","ember-views/component_lookup","ember-views/views/view","ember-template-compiler/system/compile","ember-htmlbars/helpers","ember-runtime/tests/utils"],
12480
12835
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__) {
12481
12836
  "use strict";
12482
12837
  var Container = __dependency1__["default"];
@@ -12615,7 +12970,7 @@ enifed("ember-htmlbars/tests/integration/block_params_test.jshint",
12615
12970
  });
12616
12971
  });
12617
12972
  enifed("ember-htmlbars/tests/integration/component_invocation_test",
12618
- ["ember-views/views/view","container/container","ember-views/system/jquery","ember-htmlbars/system/compile","ember-views/component_lookup","ember-runtime/tests/utils"],
12973
+ ["ember-views/views/view","container/container","ember-views/system/jquery","ember-template-compiler/system/compile","ember-views/component_lookup","ember-runtime/tests/utils"],
12619
12974
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__) {
12620
12975
  "use strict";
12621
12976
  var EmberView = __dependency1__["default"];
@@ -12714,7 +13069,7 @@ enifed("ember-htmlbars/tests/integration/component_invocation_test.jshint",
12714
13069
  });
12715
13070
  });
12716
13071
  enifed("ember-htmlbars/tests/integration/escape_integration_test",
12717
- ["ember-metal/run_loop","ember-views/views/view","ember-htmlbars/system/compile","ember-metal/property_set","ember-metal/platform","ember-runtime/tests/utils"],
13072
+ ["ember-metal/run_loop","ember-views/views/view","ember-template-compiler/system/compile","ember-metal/property_set","ember-metal/platform","ember-runtime/tests/utils"],
12718
13073
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__) {
12719
13074
  "use strict";
12720
13075
  var run = __dependency1__["default"];
@@ -12847,7 +13202,7 @@ enifed("ember-htmlbars/tests/integration/escape_integration_test.jshint",
12847
13202
  });
12848
13203
  });
12849
13204
  enifed("ember-htmlbars/tests/integration/globals_integration_test",
12850
- ["ember-metal/core","ember-views/views/view","ember-htmlbars/system/compile","ember-runtime/tests/utils"],
13205
+ ["ember-metal/core","ember-views/views/view","ember-template-compiler/system/compile","ember-runtime/tests/utils"],
12851
13206
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__) {
12852
13207
  "use strict";
12853
13208
  var Ember = __dependency1__["default"];
@@ -12934,7 +13289,7 @@ enifed("ember-htmlbars/tests/integration/globals_integration_test.jshint",
12934
13289
  });
12935
13290
  });
12936
13291
  enifed("ember-htmlbars/tests/integration/select_in_template_test",
12937
- ["ember-runtime/system/object","ember-metal/run_loop","ember-views/views/view","ember-views/system/event_dispatcher","ember-metal/computed","ember-runtime/system/namespace","ember-runtime/controllers/array_controller","ember-runtime/system/array_proxy","ember-views/views/select","ember-htmlbars/system/compile","ember-runtime/tests/utils"],
13292
+ ["ember-runtime/system/object","ember-metal/run_loop","ember-views/views/view","ember-views/system/event_dispatcher","ember-metal/computed","ember-runtime/system/namespace","ember-runtime/controllers/array_controller","ember-runtime/system/array_proxy","ember-views/views/select","ember-template-compiler/system/compile","ember-runtime/tests/utils"],
12938
13293
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__) {
12939
13294
  "use strict";
12940
13295
  var EmberObject = __dependency1__["default"];
@@ -13229,7 +13584,7 @@ enifed("ember-htmlbars/tests/integration/tagless_views_rerender_test.jshint",
13229
13584
  });
13230
13585
  });
13231
13586
  enifed("ember-htmlbars/tests/integration/with_view_test",
13232
- ["ember-metal/run_loop","ember-views/system/jquery","ember-views/views/view","ember-runtime/system/container","ember-runtime/system/object","ember-views/views/metamorph_view","ember-htmlbars/system/compile","ember-runtime/tests/utils","ember-metal/property_set"],
13587
+ ["ember-metal/run_loop","ember-views/system/jquery","ember-views/views/view","ember-runtime/system/container","ember-runtime/system/object","ember-views/views/metamorph_view","ember-template-compiler/system/compile","ember-runtime/tests/utils","ember-metal/property_set"],
13233
13588
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__) {
13234
13589
  "use strict";
13235
13590
  var run = __dependency1__["default"];
@@ -13603,46 +13958,6 @@ enifed("ember-htmlbars/tests/system/bootstrap_test.jshint",
13603
13958
  ok(true, 'ember-htmlbars/tests/system/bootstrap_test.js should pass jshint.');
13604
13959
  });
13605
13960
  });
13606
- enifed("ember-htmlbars/tests/system/compile_test",
13607
- ["ember-htmlbars/system/compile","htmlbars-compiler/compiler"],
13608
- function(__dependency1__, __dependency2__) {
13609
- "use strict";
13610
- var compile = __dependency1__["default"];
13611
- var htmlbarsCompile = __dependency2__.compile;
13612
-
13613
-
13614
-
13615
- QUnit.module('ember-htmlbars: compile');
13616
-
13617
- test('compiles the provided template with htmlbars', function() {
13618
- var templateString = "{{foo}} -- {{some-bar blah='foo'}}";
13619
-
13620
- var actual = compile(templateString);
13621
- var expected = htmlbarsCompile(templateString);
13622
-
13623
- equal(actual.toString(), expected.toString(), 'compile function matches content with htmlbars compile');
13624
- });
13625
-
13626
- test('calls template on the compiled function', function() {
13627
- var templateString = "{{foo}} -- {{some-bar blah='foo'}}";
13628
-
13629
- var actual = compile(templateString);
13630
-
13631
- ok(actual.isTop, 'sets isTop via template function');
13632
- ok(actual.isMethod === false, 'sets isMethod via template function');
13633
- });
13634
-
13635
-
13636
- });
13637
- enifed("ember-htmlbars/tests/system/compile_test.jshint",
13638
- [],
13639
- function() {
13640
- "use strict";
13641
- module('JSHint - ember-htmlbars/tests/system');
13642
- test('ember-htmlbars/tests/system/compile_test.js should pass jshint', function() {
13643
- ok(true, 'ember-htmlbars/tests/system/compile_test.js should pass jshint.');
13644
- });
13645
- });
13646
13961
  enifed("ember-htmlbars/tests/system/lookup-helper_test",
13647
13962
  ["ember-htmlbars/system/lookup-helper","ember-views/component_lookup","container","ember-views/views/component"],
13648
13963
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__) {
@@ -13782,8 +14097,8 @@ enifed("ember-htmlbars/tests/system/lookup-helper_test.jshint",
13782
14097
  });
13783
14098
  });
13784
14099
  enifed("ember-htmlbars/tests/system/make_bound_helper_test",
13785
- ["ember-views/views/view","ember-metal/run_loop","container","ember-htmlbars/system/make_bound_helper","ember-htmlbars/system/compile","ember-runtime/tests/utils"],
13786
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__) {
14100
+ ["ember-views/views/view","ember-metal/run_loop","container","ember-htmlbars/system/make_bound_helper","ember-template-compiler/system/compile","ember-runtime/tests/utils","ember-runtime/system/string","ember-views/views/simple_bound_view","ember-runtime/system/object"],
14101
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__) {
13787
14102
  "use strict";
13788
14103
  var EmberView = __dependency1__["default"];
13789
14104
  var run = __dependency2__["default"];
@@ -13792,12 +14107,16 @@ enifed("ember-htmlbars/tests/system/make_bound_helper_test",
13792
14107
  var compile = __dependency5__["default"];
13793
14108
  var runAppend = __dependency6__.runAppend;
13794
14109
  var runDestroy = __dependency6__.runDestroy;
14110
+ var dasherize = __dependency7__.dasherize;
14111
+ var SimpleBoundView = __dependency8__["default"];
14112
+ var EmberObject = __dependency9__["default"];
13795
14113
 
13796
14114
  var view, container;
13797
14115
 
13798
14116
  function registerRepeatHelper() {
13799
14117
  container.register('helper:x-repeat', makeBoundHelper(function(params, hash, options, env) {
13800
- return new Array(hash.times + 1).join( params[0] );
14118
+ var times = hash.times || 1;
14119
+ return new Array(times + 1).join( params[0] );
13801
14120
  }));
13802
14121
  }
13803
14122
 
@@ -13815,6 +14134,26 @@ enifed("ember-htmlbars/tests/system/make_bound_helper_test",
13815
14134
  }
13816
14135
  });
13817
14136
 
14137
+ test("should update bound helpers in a subexpression when properties change", function() {
14138
+ container.register('helper:x-dasherize', makeBoundHelper(function(params, hash, options, env) {
14139
+ return dasherize(params[0]);
14140
+ }));
14141
+
14142
+ view = EmberView.create({
14143
+ container: container,
14144
+ controller: {prop: "isThing"},
14145
+ template: compile("<div {{bind-attr data-foo=(x-dasherize prop)}}>{{prop}}</div>")
14146
+ });
14147
+
14148
+ runAppend(view);
14149
+
14150
+ equal(view.$('div[data-foo="is-thing"]').text(), 'isThing', "helper output is correct");
14151
+
14152
+ run(view, 'set', 'controller.prop', 'notThing');
14153
+
14154
+ equal(view.$('div[data-foo="not-thing"]').text(), 'notThing', "helper output is correct");
14155
+ });
14156
+
13818
14157
  test("should update bound helpers when properties change", function() {
13819
14158
  container.register('helper:x-capitalize', makeBoundHelper(function(params, hash, options, env) {
13820
14159
  return params[0].toUpperCase();
@@ -13872,8 +14211,10 @@ enifed("ember-htmlbars/tests/system/make_bound_helper_test",
13872
14211
  equal(view.$().text(), 'AB', "helper output is correct");
13873
14212
  });
13874
14213
 
13875
- test("bound helpers should support bound options", function() {
13876
- registerRepeatHelper();
14214
+ test("bound helpers should not process `fooBinding` style hash properties", function() {
14215
+ container.register('helper:x-repeat', makeBoundHelper(function(params, hash, options, env) {
14216
+ equal(hash.timesBinding, "numRepeats");
14217
+ }));
13877
14218
 
13878
14219
  view = EmberView.create({
13879
14220
  container: container,
@@ -13885,19 +14226,6 @@ enifed("ember-htmlbars/tests/system/make_bound_helper_test",
13885
14226
  });
13886
14227
 
13887
14228
  runAppend(view);
13888
-
13889
- equal(view.$().text(), 'ababab', "helper output is correct");
13890
-
13891
- run(view, 'set', 'controller.numRepeats', 4);
13892
-
13893
- equal(view.$().text(), 'abababab', "helper correctly re-rendered after bound option was changed");
13894
-
13895
- run(function() {
13896
- view.set('controller.numRepeats', 2);
13897
- view.set('controller.text', "YES");
13898
- });
13899
-
13900
- equal(view.$().text(), 'YESYES', "helper correctly re-rendered after both bound option and property changed");
13901
14229
  });
13902
14230
 
13903
14231
  test("bound helpers should support multiple bound properties", function() {
@@ -13998,6 +14326,55 @@ enifed("ember-htmlbars/tests/system/make_bound_helper_test",
13998
14326
  equal(view.$().text(), 'undefined, undefined, string, number, object', "helper output is correct");
13999
14327
  });
14000
14328
 
14329
+ test("when no parameters are bound, no new views are created", function(){
14330
+ registerRepeatHelper();
14331
+ var originalRender = SimpleBoundView.prototype.render;
14332
+ var renderWasCalled = false;
14333
+ SimpleBoundView.prototype.render = function(){
14334
+ renderWasCalled = true;
14335
+ return originalRender.apply(this, arguments);
14336
+ };
14337
+
14338
+ try {
14339
+ view = EmberView.create({
14340
+ template: compile('{{x-repeat "a"}}'),
14341
+ controller: EmberObject.create(),
14342
+ container: container
14343
+ });
14344
+ runAppend(view);
14345
+ } finally {
14346
+ SimpleBoundView.prototype.render = originalRender;
14347
+ }
14348
+
14349
+ ok(!renderWasCalled, 'simple bound view should not have been created and rendered');
14350
+ equal(view.$().text(), 'a');
14351
+ });
14352
+
14353
+
14354
+ test('when no hash parameters are bound, no new views are created', function(){
14355
+ registerRepeatHelper();
14356
+ var originalRender = SimpleBoundView.prototype.render;
14357
+ var renderWasCalled = false;
14358
+ SimpleBoundView.prototype.render = function(){
14359
+ renderWasCalled = true;
14360
+ return originalRender.apply(this, arguments);
14361
+ };
14362
+
14363
+ try {
14364
+ view = EmberView.create({
14365
+ template: compile('{{x-repeat "a" times=3}}'),
14366
+ controller: EmberObject.create(),
14367
+ container: container
14368
+ });
14369
+ runAppend(view);
14370
+ } finally {
14371
+ SimpleBoundView.prototype.render = originalRender;
14372
+ }
14373
+
14374
+ ok(!renderWasCalled, 'simple bound view should not have been created and rendered');
14375
+ equal(view.$().text(), 'aaa');
14376
+ });
14377
+
14001
14378
 
14002
14379
  });
14003
14380
  enifed("ember-htmlbars/tests/system/make_bound_helper_test.jshint",
@@ -14036,43 +14413,6 @@ enifed("ember-htmlbars/tests/system/make_view_helper_test.jshint",
14036
14413
  ok(true, 'ember-htmlbars/tests/system/make_view_helper_test.js should pass jshint.');
14037
14414
  });
14038
14415
  });
14039
- enifed("ember-htmlbars/tests/system/template_test",
14040
- ["ember-htmlbars/system/template"],
14041
- function(__dependency1__) {
14042
- "use strict";
14043
- var template = __dependency1__["default"];
14044
-
14045
-
14046
-
14047
- QUnit.module('ember-htmlbars: template');
14048
-
14049
- test('sets `isTop` on the provided function', function() {
14050
- function test() { }
14051
-
14052
- template(test);
14053
-
14054
- equal(test.isTop, true, 'sets isTop on the provided function');
14055
- });
14056
-
14057
- test('sets `isMethod` on the provided function', function() {
14058
- function test() { }
14059
-
14060
- template(test);
14061
-
14062
- equal(test.isMethod, false, 'sets isMethod on the provided function');
14063
- });
14064
-
14065
-
14066
- });
14067
- enifed("ember-htmlbars/tests/system/template_test.jshint",
14068
- [],
14069
- function() {
14070
- "use strict";
14071
- module('JSHint - ember-htmlbars/tests/system');
14072
- test('ember-htmlbars/tests/system/template_test.js should pass jshint', function() {
14073
- ok(true, 'ember-htmlbars/tests/system/template_test.js should pass jshint.');
14074
- });
14075
- });
14076
14416
  enifed("ember-htmlbars/tests/utils/string_test",
14077
14417
  ["htmlbars-util/safe-string","ember-htmlbars/utils/string"],
14078
14418
  function(__dependency1__, __dependency2__) {
@@ -14957,6 +15297,11 @@ enifed("ember-metal/tests/accessors/getPath_test",
14957
15297
  baz: { biff: 'BIFF' }
14958
15298
  }
14959
15299
  },
15300
+ foothis: {
15301
+ bar: {
15302
+ baz: { biff: 'BIFF' }
15303
+ }
15304
+ },
14960
15305
  falseValue: false
14961
15306
  };
14962
15307
 
@@ -14997,6 +15342,10 @@ enifed("ember-metal/tests/accessors/getPath_test",
14997
15342
  deepEqual(get(obj, 'foo.bar'), obj.foo.bar);
14998
15343
  });
14999
15344
 
15345
+ test('[obj, foothis.bar] -> obj.foothis.bar', function() {
15346
+ deepEqual(get(obj, 'foothis.bar'), obj.foothis.bar);
15347
+ });
15348
+
15000
15349
  test('[obj, this.foo] -> obj.foo', function() {
15001
15350
  deepEqual(get(obj, 'this.foo'), obj.foo);
15002
15351
  });
@@ -18021,13 +18370,13 @@ enifed("ember-metal/tests/injected_property_test",
18021
18370
  ok(new InjectedProperty() instanceof Descriptor);
18022
18371
  });
18023
18372
 
18024
- test('setting the injected property should error', function() {
18373
+ test('injected properties should be overridable', function() {
18025
18374
  var obj = {};
18026
18375
  defineProperty(obj, 'foo', new InjectedProperty());
18027
18376
 
18028
- throws(function() {
18029
- set(obj, 'foo', 'bar');
18030
- }, /Cannot set injected property 'foo' on object/);
18377
+ set(obj, 'foo', 'bar');
18378
+
18379
+ equal(get(obj, 'foo'), 'bar', 'should return the overriden value');
18031
18380
  });
18032
18381
 
18033
18382
  test("getting on an object without a container should fail assertion", function() {
@@ -18171,6 +18520,68 @@ enifed("ember-metal/tests/instrumentation_test",
18171
18520
  instrument("render", null, function() {});
18172
18521
  });
18173
18522
 
18523
+ test("instrument with 2 args (name, callback) no payload", function() {
18524
+ expect(1);
18525
+
18526
+ subscribe("render", {
18527
+ before: function(name, timestamp, payload) {
18528
+ deepEqual(payload, {});
18529
+ },
18530
+ after: function() {}
18531
+ });
18532
+
18533
+ instrument("render", function() {});
18534
+ });
18535
+
18536
+ test("instrument with 3 args (name, callback, binding) no payload", function() {
18537
+ expect(2);
18538
+
18539
+ var binding = {};
18540
+ subscribe("render", {
18541
+ before: function(name, timestamp, payload) {
18542
+ deepEqual(payload, {});
18543
+ },
18544
+ after: function() {}
18545
+ });
18546
+
18547
+ instrument("render", function() {
18548
+ deepEqual(this, binding);
18549
+ }, binding);
18550
+ });
18551
+
18552
+
18553
+ test("instrument with 3 args (name, payload, callback) with payload", function() {
18554
+ expect(1);
18555
+
18556
+ var expectedPayload = { hi: 1};
18557
+ subscribe("render", {
18558
+ before: function(name, timestamp, payload) {
18559
+ deepEqual(payload, expectedPayload);
18560
+ },
18561
+ after: function() {}
18562
+ });
18563
+
18564
+ instrument("render", expectedPayload, function() {});
18565
+ });
18566
+
18567
+ test("instrument with 4 args (name, payload, callback, binding) with payload", function() {
18568
+ expect(2);
18569
+
18570
+ var expectedPayload = { hi: 1 };
18571
+ var binding = {};
18572
+ subscribe("render", {
18573
+ before: function(name, timestamp, payload) {
18574
+ deepEqual(payload, expectedPayload);
18575
+ },
18576
+ after: function() {}
18577
+ });
18578
+
18579
+ instrument("render", expectedPayload, function() {
18580
+ deepEqual(this, binding);
18581
+ }, binding);
18582
+ });
18583
+
18584
+
18174
18585
  test("raising an exception in the instrumentation attaches it to the payload", function() {
18175
18586
  expect(2);
18176
18587
 
@@ -24458,7 +24869,7 @@ enifed("ember-routing-htmlbars/helpers/render.jshint",
24458
24869
  });
24459
24870
  });
24460
24871
  enifed("ember-routing-htmlbars/tests/helpers/action_test",
24461
- ["ember-metal/core","ember-metal/property_set","ember-metal/run_loop","ember-views/system/event_dispatcher","ember-views/system/action_manager","ember-runtime/system/container","ember-runtime/system/object","ember-runtime/controllers/controller","ember-runtime/controllers/object_controller","ember-runtime/controllers/array_controller","ember-htmlbars/system/compile","ember-views/views/view","ember-views/views/component","ember-views/system/jquery","ember-htmlbars/helpers","ember-routing-htmlbars/helpers/action","ember-runtime/tests/utils"],
24872
+ ["ember-metal/core","ember-metal/property_set","ember-metal/run_loop","ember-views/system/event_dispatcher","ember-views/system/action_manager","ember-runtime/system/container","ember-runtime/system/object","ember-runtime/controllers/controller","ember-runtime/controllers/object_controller","ember-runtime/controllers/array_controller","ember-template-compiler/system/compile","ember-views/views/view","ember-views/views/component","ember-views/system/jquery","ember-htmlbars/helpers","ember-routing-htmlbars/helpers/action","ember-runtime/tests/utils"],
24462
24873
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __dependency15__, __dependency16__, __dependency17__) {
24463
24874
  "use strict";
24464
24875
  var Ember = __dependency1__["default"];
@@ -25543,7 +25954,7 @@ enifed("ember-routing-htmlbars/tests/helpers/action_test.jshint",
25543
25954
  });
25544
25955
  });
25545
25956
  enifed("ember-routing-htmlbars/tests/helpers/link-to_test",
25546
- ["ember-routing-htmlbars","ember-metal/run_loop","ember-views/views/view","ember-htmlbars/system/compile","ember-metal/property_set","ember-runtime/controllers/controller","ember-runtime/tests/utils"],
25957
+ ["ember-routing-htmlbars","ember-metal/run_loop","ember-views/views/view","ember-template-compiler/system/compile","ember-metal/property_set","ember-runtime/controllers/controller","ember-runtime/tests/utils"],
25547
25958
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__) {
25548
25959
  "use strict";
25549
25960
  var run = __dependency2__["default"];
@@ -25660,7 +26071,7 @@ enifed("ember-routing-htmlbars/tests/helpers/link-to_test.jshint",
25660
26071
  });
25661
26072
  });
25662
26073
  enifed("ember-routing-htmlbars/tests/helpers/outlet_test",
25663
- ["ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/run_loop","container/container","ember-runtime/system/namespace","ember-runtime/system/string","ember-runtime/controllers/controller","ember-runtime/controllers/object_controller","ember-runtime/controllers/array_controller","ember-routing/system/router","ember-routing/location/hash_location","ember-views/views/metamorph_view","ember-routing/ext/view","ember-views/views/container_view","ember-views/system/jquery","ember-routing-htmlbars/helpers/outlet","ember-htmlbars/system/compile","ember-htmlbars/helpers","ember-runtime/tests/utils"],
26074
+ ["ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/run_loop","container/container","ember-runtime/system/namespace","ember-runtime/system/string","ember-runtime/controllers/controller","ember-runtime/controllers/object_controller","ember-runtime/controllers/array_controller","ember-routing/system/router","ember-routing/location/hash_location","ember-views/views/metamorph_view","ember-routing/ext/view","ember-views/views/container_view","ember-views/system/jquery","ember-routing-htmlbars/helpers/outlet","ember-template-compiler/system/compile","ember-htmlbars/helpers","ember-runtime/tests/utils"],
25664
26075
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __dependency15__, __dependency16__, __dependency17__, __dependency18__, __dependency19__, __dependency20__) {
25665
26076
  "use strict";
25666
26077
  var Ember = __dependency1__["default"];
@@ -26056,7 +26467,7 @@ enifed("ember-routing-htmlbars/tests/helpers/outlet_test.jshint",
26056
26467
  });
26057
26468
  });
26058
26469
  enifed("ember-routing-htmlbars/tests/helpers/render_test",
26059
- ["ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/run_loop","ember-metal/platform","ember-metal/mixin","container/container","ember-runtime/system/namespace","ember-runtime/system/string","ember-runtime/controllers/controller","ember-runtime/controllers/object_controller","ember-runtime/controllers/array_controller","ember-routing/system/router","ember-routing/location/hash_location","ember-htmlbars/helpers","ember-htmlbars/system/compile","ember-routing/ext/view","ember-views/views/metamorph_view","ember-views/system/jquery","ember-views/system/action_manager","ember-routing-htmlbars/helpers/render","ember-routing-htmlbars/helpers/action","ember-routing-htmlbars/helpers/outlet"],
26470
+ ["ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/run_loop","ember-metal/platform","ember-metal/mixin","container/container","ember-runtime/system/namespace","ember-runtime/system/string","ember-runtime/controllers/controller","ember-runtime/controllers/object_controller","ember-runtime/controllers/array_controller","ember-routing/system/router","ember-routing/location/hash_location","ember-htmlbars/helpers","ember-template-compiler/system/compile","ember-routing/ext/view","ember-views/views/metamorph_view","ember-views/system/jquery","ember-views/system/action_manager","ember-routing-htmlbars/helpers/render","ember-routing-htmlbars/helpers/action","ember-routing-htmlbars/helpers/outlet"],
26060
26471
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __dependency15__, __dependency16__, __dependency17__, __dependency18__, __dependency19__, __dependency20__, __dependency21__, __dependency22__, __dependency23__) {
26061
26472
  "use strict";
26062
26473
  var Ember = __dependency1__["default"];
@@ -45722,6 +46133,223 @@ enifed("ember-runtime/tests/utils.jshint",
45722
46133
  ok(true, 'ember-runtime/tests/utils.js should pass jshint.');
45723
46134
  });
45724
46135
  });
46136
+ enifed("ember-template-compiler.jshint",
46137
+ [],
46138
+ function() {
46139
+ "use strict";
46140
+ module('JSHint - .');
46141
+ test('ember-template-compiler.js should pass jshint', function() {
46142
+ ok(true, 'ember-template-compiler.js should pass jshint.');
46143
+ });
46144
+ });
46145
+ enifed("ember-template-compiler/plugins.jshint",
46146
+ [],
46147
+ function() {
46148
+ "use strict";
46149
+ module('JSHint - ember-template-compiler');
46150
+ test('ember-template-compiler/plugins.js should pass jshint', function() {
46151
+ ok(true, 'ember-template-compiler/plugins.js should pass jshint.');
46152
+ });
46153
+ });
46154
+ enifed("ember-template-compiler/plugins/transform-each-in-to-hash.jshint",
46155
+ [],
46156
+ function() {
46157
+ "use strict";
46158
+ module('JSHint - ember-template-compiler/plugins');
46159
+ test('ember-template-compiler/plugins/transform-each-in-to-hash.js should pass jshint', function() {
46160
+ ok(true, 'ember-template-compiler/plugins/transform-each-in-to-hash.js should pass jshint.');
46161
+ });
46162
+ });
46163
+ enifed("ember-template-compiler/plugins/transform-with-as-to-hash.jshint",
46164
+ [],
46165
+ function() {
46166
+ "use strict";
46167
+ module('JSHint - ember-template-compiler/plugins');
46168
+ test('ember-template-compiler/plugins/transform-with-as-to-hash.js should pass jshint', function() {
46169
+ ok(true, 'ember-template-compiler/plugins/transform-with-as-to-hash.js should pass jshint.');
46170
+ });
46171
+ });
46172
+ enifed("ember-template-compiler/system/compile.jshint",
46173
+ [],
46174
+ function() {
46175
+ "use strict";
46176
+ module('JSHint - ember-template-compiler/system');
46177
+ test('ember-template-compiler/system/compile.js should pass jshint', function() {
46178
+ ok(true, 'ember-template-compiler/system/compile.js should pass jshint.');
46179
+ });
46180
+ });
46181
+ enifed("ember-template-compiler/system/compile_options.jshint",
46182
+ [],
46183
+ function() {
46184
+ "use strict";
46185
+ module('JSHint - ember-template-compiler/system');
46186
+ test('ember-template-compiler/system/compile_options.js should pass jshint', function() {
46187
+ ok(true, 'ember-template-compiler/system/compile_options.js should pass jshint.');
46188
+ });
46189
+ });
46190
+ enifed("ember-template-compiler/system/precompile.jshint",
46191
+ [],
46192
+ function() {
46193
+ "use strict";
46194
+ module('JSHint - ember-template-compiler/system');
46195
+ test('ember-template-compiler/system/precompile.js should pass jshint', function() {
46196
+ ok(true, 'ember-template-compiler/system/precompile.js should pass jshint.');
46197
+ });
46198
+ });
46199
+ enifed("ember-template-compiler/system/template.jshint",
46200
+ [],
46201
+ function() {
46202
+ "use strict";
46203
+ module('JSHint - ember-template-compiler/system');
46204
+ test('ember-template-compiler/system/template.js should pass jshint', function() {
46205
+ ok(true, 'ember-template-compiler/system/template.js should pass jshint.');
46206
+ });
46207
+ });
46208
+ enifed("ember-template-compiler/tests/main_test",
46209
+ [],
46210
+ function() {
46211
+ "use strict";
46212
+
46213
+ });
46214
+ enifed("ember-template-compiler/tests/main_test.jshint",
46215
+ [],
46216
+ function() {
46217
+ "use strict";
46218
+ module('JSHint - ember-template-compiler/tests');
46219
+ test('ember-template-compiler/tests/main_test.js should pass jshint', function() {
46220
+ ok(true, 'ember-template-compiler/tests/main_test.js should pass jshint.');
46221
+ });
46222
+ });
46223
+ enifed("ember-template-compiler/tests/plugins_test",
46224
+ ["ember-template-compiler/plugins","ember-template-compiler/system/compile"],
46225
+ function(__dependency1__, __dependency2__) {
46226
+ "use strict";
46227
+ var plugins = __dependency1__["default"];
46228
+ var registerPlugin = __dependency1__.registerPlugin;
46229
+ var compile = __dependency2__["default"];
46230
+
46231
+ var originalASTPlugins;
46232
+
46233
+ QUnit.module("ember-htmlbars: Ember.HTMLBars.registerASTPlugin", {
46234
+ setup: function() {
46235
+ originalASTPlugins = plugins.ast.slice();
46236
+ },
46237
+
46238
+ teardown: function() {
46239
+ plugins.ast = originalASTPlugins;
46240
+ }
46241
+ });
46242
+
46243
+ test("registering a plugin adds it to htmlbars-compiler options", function() {
46244
+ expect(2);
46245
+
46246
+ function TestPlugin() {
46247
+ ok(true, 'TestPlugin instantiated');
46248
+ }
46249
+
46250
+ TestPlugin.prototype.transform = function(ast) {
46251
+ ok(true, 'transform was called');
46252
+
46253
+ return ast;
46254
+ };
46255
+
46256
+ registerPlugin('ast', TestPlugin);
46257
+
46258
+ compile('some random template');
46259
+ });
46260
+
46261
+ test('registering an unknown type throws an error', function() {
46262
+ throws(function() {
46263
+ registerPlugin('asdf', "whatever");
46264
+ }, /Attempting to register "whatever" as "asdf" which is not a valid HTMLBars plugin type./);
46265
+ });
46266
+ });
46267
+ enifed("ember-template-compiler/tests/plugins_test.jshint",
46268
+ [],
46269
+ function() {
46270
+ "use strict";
46271
+ module('JSHint - ember-template-compiler/tests');
46272
+ test('ember-template-compiler/tests/plugins_test.js should pass jshint', function() {
46273
+ ok(true, 'ember-template-compiler/tests/plugins_test.js should pass jshint.');
46274
+ });
46275
+ });
46276
+ enifed("ember-template-compiler/tests/system/compile_test",
46277
+ ["ember-template-compiler/system/compile","htmlbars-compiler/compiler"],
46278
+ function(__dependency1__, __dependency2__) {
46279
+ "use strict";
46280
+ var compile = __dependency1__["default"];
46281
+ var htmlbarsCompile = __dependency2__.compile;
46282
+
46283
+
46284
+
46285
+ QUnit.module('ember-htmlbars: compile');
46286
+
46287
+ test('compiles the provided template with htmlbars', function() {
46288
+ var templateString = "{{foo}} -- {{some-bar blah='foo'}}";
46289
+
46290
+ var actual = compile(templateString);
46291
+ var expected = htmlbarsCompile(templateString);
46292
+
46293
+ equal(actual.toString(), expected.toString(), 'compile function matches content with htmlbars compile');
46294
+ });
46295
+
46296
+ test('calls template on the compiled function', function() {
46297
+ var templateString = "{{foo}} -- {{some-bar blah='foo'}}";
46298
+
46299
+ var actual = compile(templateString);
46300
+
46301
+ ok(actual.isTop, 'sets isTop via template function');
46302
+ ok(actual.isMethod === false, 'sets isMethod via template function');
46303
+ });
46304
+
46305
+
46306
+ });
46307
+ enifed("ember-template-compiler/tests/system/compile_test.jshint",
46308
+ [],
46309
+ function() {
46310
+ "use strict";
46311
+ module('JSHint - ember-template-compiler/tests/system');
46312
+ test('ember-template-compiler/tests/system/compile_test.js should pass jshint', function() {
46313
+ ok(true, 'ember-template-compiler/tests/system/compile_test.js should pass jshint.');
46314
+ });
46315
+ });
46316
+ enifed("ember-template-compiler/tests/system/template_test",
46317
+ ["ember-template-compiler/system/template"],
46318
+ function(__dependency1__) {
46319
+ "use strict";
46320
+ var template = __dependency1__["default"];
46321
+
46322
+
46323
+
46324
+ QUnit.module('ember-htmlbars: template');
46325
+
46326
+ test('sets `isTop` on the provided function', function() {
46327
+ function test() { }
46328
+
46329
+ template(test);
46330
+
46331
+ equal(test.isTop, true, 'sets isTop on the provided function');
46332
+ });
46333
+
46334
+ test('sets `isMethod` on the provided function', function() {
46335
+ function test() { }
46336
+
46337
+ template(test);
46338
+
46339
+ equal(test.isMethod, false, 'sets isMethod on the provided function');
46340
+ });
46341
+
46342
+
46343
+ });
46344
+ enifed("ember-template-compiler/tests/system/template_test.jshint",
46345
+ [],
46346
+ function() {
46347
+ "use strict";
46348
+ module('JSHint - ember-template-compiler/tests/system');
46349
+ test('ember-template-compiler/tests/system/template_test.js should pass jshint', function() {
46350
+ ok(true, 'ember-template-compiler/tests/system/template_test.js should pass jshint.');
46351
+ });
46352
+ });
45725
46353
  enifed("ember-testing.jshint",
45726
46354
  [],
45727
46355
  function() {
@@ -45795,7 +46423,7 @@ enifed("ember-testing/test.jshint",
45795
46423
  });
45796
46424
  });
45797
46425
  enifed("ember-testing/tests/acceptance_test",
45798
- ["ember-metal/run_loop","ember-views/system/jquery","ember-testing/test","ember-testing/adapters/qunit","ember-views/views/view","ember-testing/initializers","ember-application/system/application","ember-routing/system/route","ember-htmlbars/system/compile","ember-routing"],
46426
+ ["ember-metal/run_loop","ember-views/system/jquery","ember-testing/test","ember-testing/adapters/qunit","ember-views/views/view","ember-testing/initializers","ember-application/system/application","ember-routing/system/route","ember-template-compiler/system/compile","ember-routing"],
45799
46427
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__) {
45800
46428
  "use strict";
45801
46429
  var run = __dependency1__["default"];
@@ -46378,7 +47006,7 @@ enifed("ember-testing/tests/helper_registration_test.jshint",
46378
47006
  });
46379
47007
  });
46380
47008
  enifed("ember-testing/tests/helpers_test",
46381
- ["ember-metal/core","ember-metal/run_loop","ember-runtime/system/object","ember-runtime/ext/rsvp","ember-views/views/view","ember-views/system/jquery","ember-testing/test","ember-testing/helpers","ember-testing/initializers","ember-testing/setup_for_testing","ember-routing/system/router","ember-routing/system/route","ember-application/system/application","ember-htmlbars/system/compile"],
47009
+ ["ember-metal/core","ember-metal/run_loop","ember-runtime/system/object","ember-runtime/ext/rsvp","ember-views/views/view","ember-views/system/jquery","ember-testing/test","ember-testing/helpers","ember-testing/initializers","ember-testing/setup_for_testing","ember-routing/system/router","ember-routing/system/route","ember-application/system/application","ember-template-compiler/system/compile"],
46382
47010
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__) {
46383
47011
  "use strict";
46384
47012
  var Ember = __dependency1__["default"];
@@ -47209,7 +47837,7 @@ enifed("ember-testing/tests/helpers_test.jshint",
47209
47837
  });
47210
47838
  });
47211
47839
  enifed("ember-testing/tests/integration_test",
47212
- ["ember-metal/core","ember-metal/run_loop","ember-runtime/system/object","ember-runtime/controllers/array_controller","ember-views/system/jquery","ember-views/views/view","ember-testing/test","ember-routing/system/route","ember-application/system/application","ember-htmlbars/system/compile","ember-application"],
47840
+ ["ember-metal/core","ember-metal/run_loop","ember-runtime/system/object","ember-runtime/controllers/array_controller","ember-views/system/jquery","ember-views/views/view","ember-testing/test","ember-routing/system/route","ember-application/system/application","ember-template-compiler/system/compile","ember-application"],
47213
47841
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__) {
47214
47842
  "use strict";
47215
47843
  var Ember = __dependency1__["default"];
@@ -47418,6 +48046,15 @@ enifed("ember-views/mixins/view_target_action_support.jshint",
47418
48046
  ok(true, 'ember-views/mixins/view_target_action_support.js should pass jshint.');
47419
48047
  });
47420
48048
  });
48049
+ enifed("ember-views/streams/class_name_binding.jshint",
48050
+ [],
48051
+ function() {
48052
+ "use strict";
48053
+ module('JSHint - ember-views/streams');
48054
+ test('ember-views/streams/class_name_binding.js should pass jshint', function() {
48055
+ ok(true, 'ember-views/streams/class_name_binding.js should pass jshint.');
48056
+ });
48057
+ });
47421
48058
  enifed("ember-views/streams/conditional_stream.jshint",
47422
48059
  [],
47423
48060
  function() {
@@ -47508,6 +48145,15 @@ enifed("ember-views/system/renderer.jshint",
47508
48145
  ok(true, 'ember-views/system/renderer.js should pass jshint.');
47509
48146
  });
47510
48147
  });
48148
+ enifed("ember-views/system/sanitize_attribute_value.jshint",
48149
+ [],
48150
+ function() {
48151
+ "use strict";
48152
+ module('JSHint - ember-views/system');
48153
+ test('ember-views/system/sanitize_attribute_value.js should pass jshint', function() {
48154
+ ok(true, 'ember-views/system/sanitize_attribute_value.js should pass jshint.');
48155
+ });
48156
+ });
47511
48157
  enifed("ember-views/system/utils.jshint",
47512
48158
  [],
47513
48159
  function() {
@@ -47578,6 +48224,133 @@ enifed("ember-views/tests/mixins/view_target_action_support_test.jshint",
47578
48224
  ok(true, 'ember-views/tests/mixins/view_target_action_support_test.js should pass jshint.');
47579
48225
  });
47580
48226
  });
48227
+ enifed("ember-views/tests/streams/class_string_for_value_test",
48228
+ ["ember-views/streams/class_name_binding"],
48229
+ function(__dependency1__) {
48230
+ "use strict";
48231
+ var classStringForValue = __dependency1__.classStringForValue;
48232
+
48233
+ QUnit.module("EmberView - classStringForValue");
48234
+
48235
+ test("returns dasherized version of last path part if value is true", function() {
48236
+ equal(classStringForValue("propertyName", true), "property-name", "class is dasherized");
48237
+ equal(classStringForValue("content.propertyName", true), "property-name", "class is dasherized");
48238
+ });
48239
+
48240
+ test("returns className if value is true and className is specified", function() {
48241
+ equal(classStringForValue("propertyName", true, "truthyClass"), "truthyClass", "returns className if given");
48242
+ equal(classStringForValue("content.propertyName", true, "truthyClass"), "truthyClass", "returns className if given");
48243
+ });
48244
+
48245
+ test("returns falsyClassName if value is false and falsyClassName is specified", function() {
48246
+ equal(classStringForValue("propertyName", false, "truthyClass", "falsyClass"), "falsyClass", "returns falsyClassName if given");
48247
+ equal(classStringForValue("content.propertyName", false, "truthyClass", "falsyClass"), "falsyClass", "returns falsyClassName if given");
48248
+ });
48249
+
48250
+ test("returns null if value is false and falsyClassName is not specified", function() {
48251
+ equal(classStringForValue("propertyName", false, "truthyClass"), null, "returns null if falsyClassName is not specified");
48252
+ equal(classStringForValue("content.propertyName", false, "truthyClass"), null, "returns null if falsyClassName is not specified");
48253
+ });
48254
+
48255
+ test("returns null if value is false", function() {
48256
+ equal(classStringForValue("propertyName", false), null, "returns null if value is false");
48257
+ equal(classStringForValue("content.propertyName", false), null, "returns null if value is false");
48258
+ });
48259
+
48260
+ test("returns null if value is true and className is not specified and falsyClassName is specified", function() {
48261
+ equal(classStringForValue("propertyName", true, undefined, "falsyClassName"), null, "returns null if value is true");
48262
+ equal(classStringForValue("content.propertyName", true, undefined, "falsyClassName"), null, "returns null if value is true");
48263
+ });
48264
+
48265
+ test("returns the value if the value is truthy", function() {
48266
+ equal(classStringForValue("propertyName", "myString"), "myString", "returns value if the value is truthy");
48267
+ equal(classStringForValue("content.propertyName", "myString"), "myString", "returns value if the value is truthy");
48268
+
48269
+ equal(classStringForValue("propertyName", "123"), 123, "returns value if the value is truthy");
48270
+ equal(classStringForValue("content.propertyName", 123), 123, "returns value if the value is truthy");
48271
+ });
48272
+
48273
+ test("treat empty array as falsy value and return null", function() {
48274
+ equal(classStringForValue("propertyName", [], "truthyClass"), null, "returns null if value is false");
48275
+ equal(classStringForValue("content.propertyName", [], "truthyClass"), null, "returns null if value is false");
48276
+ });
48277
+
48278
+ test("treat non-empty array as truthy value and return the className if specified", function() {
48279
+ equal(classStringForValue("propertyName", ['emberjs'], "truthyClass"), "truthyClass", "returns className if given");
48280
+ equal(classStringForValue("content.propertyName", ['emberjs'], "truthyClass"), "truthyClass", "returns className if given");
48281
+ });
48282
+ });
48283
+ enifed("ember-views/tests/streams/class_string_for_value_test.jshint",
48284
+ [],
48285
+ function() {
48286
+ "use strict";
48287
+ module('JSHint - ember-views/tests/streams');
48288
+ test('ember-views/tests/streams/class_string_for_value_test.js should pass jshint', function() {
48289
+ ok(true, 'ember-views/tests/streams/class_string_for_value_test.js should pass jshint.');
48290
+ });
48291
+ });
48292
+ enifed("ember-views/tests/streams/parse_property_path_test",
48293
+ ["ember-views/streams/class_name_binding"],
48294
+ function(__dependency1__) {
48295
+ "use strict";
48296
+ var parsePropertyPath = __dependency1__.parsePropertyPath;
48297
+
48298
+ QUnit.module("EmberView - parsePropertyPath");
48299
+
48300
+ test("it works with a simple property path", function() {
48301
+ var parsed = parsePropertyPath("simpleProperty");
48302
+
48303
+ equal(parsed.path, "simpleProperty", "path is parsed correctly");
48304
+ equal(parsed.className, undefined, "there is no className");
48305
+ equal(parsed.falsyClassName, undefined, "there is no falsyClassName");
48306
+ equal(parsed.classNames, "", "there is no classNames");
48307
+ });
48308
+
48309
+ test("it works with a more complex property path", function() {
48310
+ var parsed = parsePropertyPath("content.simpleProperty");
48311
+
48312
+ equal(parsed.path, "content.simpleProperty", "path is parsed correctly");
48313
+ equal(parsed.className, undefined, "there is no className");
48314
+ equal(parsed.falsyClassName, undefined, "there is no falsyClassName");
48315
+ equal(parsed.classNames, "", "there is no classNames");
48316
+ });
48317
+
48318
+ test("className is extracted", function() {
48319
+ var parsed = parsePropertyPath("content.simpleProperty:class");
48320
+
48321
+ equal(parsed.path, "content.simpleProperty", "path is parsed correctly");
48322
+ equal(parsed.className, "class", "className is extracted");
48323
+ equal(parsed.falsyClassName, undefined, "there is no falsyClassName");
48324
+ equal(parsed.classNames, ":class", "there is a classNames");
48325
+ });
48326
+
48327
+ test("falsyClassName is extracted", function() {
48328
+ var parsed = parsePropertyPath("content.simpleProperty:class:falsyClass");
48329
+
48330
+ equal(parsed.path, "content.simpleProperty", "path is parsed correctly");
48331
+ equal(parsed.className, "class", "className is extracted");
48332
+ equal(parsed.falsyClassName, "falsyClass", "falsyClassName is extracted");
48333
+ equal(parsed.classNames, ":class:falsyClass", "there is a classNames");
48334
+ });
48335
+
48336
+ test("it works with an empty true class", function() {
48337
+ var parsed = parsePropertyPath("content.simpleProperty::falsyClass");
48338
+
48339
+ equal(parsed.path, "content.simpleProperty", "path is parsed correctly");
48340
+ equal(parsed.className, undefined, "className is undefined");
48341
+ equal(parsed.falsyClassName, "falsyClass", "falsyClassName is extracted");
48342
+ equal(parsed.classNames, "::falsyClass", "there is a classNames");
48343
+ });
48344
+ });
48345
+ enifed("ember-views/tests/streams/parse_property_path_test.jshint",
48346
+ [],
48347
+ function() {
48348
+ "use strict";
48349
+ module('JSHint - ember-views/tests/streams');
48350
+ test('ember-views/tests/streams/parse_property_path_test.js should pass jshint', function() {
48351
+ ok(true, 'ember-views/tests/streams/parse_property_path_test.js should pass jshint.');
48352
+ });
48353
+ });
47581
48354
  enifed("ember-views/tests/system/event_dispatcher_test",
47582
48355
  ["ember-metal/core","ember-metal/property_get","ember-metal/run_loop","ember-runtime/system/object","ember-views/system/jquery","ember-views/views/view","ember-views/system/event_dispatcher","ember-views/views/container_view"],
47583
48356
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__) {
@@ -48142,7 +48915,6 @@ enifed("ember-views/tests/system/render_buffer_test",
48142
48915
 
48143
48916
  var el = buffer.element();
48144
48917
  equal(el.tagName.toLowerCase(), 'div');
48145
- console.log('el.', el.childNodes);
48146
48918
  equal(el.childNodes[0].tagName, 'SPAN', "Fragment is pushed into the buffer");
48147
48919
  });
48148
48920
 
@@ -48440,6 +49212,74 @@ enifed("ember-views/tests/system/render_buffer_test.jshint",
48440
49212
  ok(true, 'ember-views/tests/system/render_buffer_test.js should pass jshint.');
48441
49213
  });
48442
49214
  });
49215
+ enifed("ember-views/tests/system/sanitize_attribute_value_test",
49216
+ ["ember-views/system/sanitize_attribute_value","ember-htmlbars/utils/string"],
49217
+ function(__dependency1__, __dependency2__) {
49218
+ "use strict";
49219
+ var sanitizeAttributeValue = __dependency1__["default"];
49220
+ var SafeString = __dependency2__.SafeString;
49221
+
49222
+ QUnit.module('ember-views: sanitizeAttributeValue(null, "href")');
49223
+
49224
+ var goodProtocols = [ 'https', 'http', 'ftp', 'tel', 'file'];
49225
+
49226
+ for (var i = 0, l = goodProtocols.length; i < l; i++) {
49227
+ buildProtocolTest(goodProtocols[i]);
49228
+ }
49229
+
49230
+ function buildProtocolTest(protocol) {
49231
+ test('allows ' + protocol + ' protocol when element is not provided', function() {
49232
+ expect(1);
49233
+
49234
+ var expected = protocol + '://foo.com';
49235
+ var actual = sanitizeAttributeValue(null, 'href', expected);
49236
+
49237
+ equal(actual, expected, 'protocol not escaped');
49238
+ });
49239
+ }
49240
+
49241
+ test('blocks javascript: protocol', function() {
49242
+ /* jshint scripturl:true */
49243
+
49244
+ expect(1);
49245
+
49246
+ var expected = 'javascript:alert("foo")';
49247
+ var actual = sanitizeAttributeValue(null, 'href', expected);
49248
+
49249
+ equal(actual, 'unsafe:' + expected, 'protocol escaped');
49250
+ });
49251
+
49252
+ test('blocks blacklisted protocols', function() {
49253
+ /* jshint scripturl:true */
49254
+
49255
+ expect(1);
49256
+
49257
+ var expected = 'javascript:alert("foo")';
49258
+ var actual = sanitizeAttributeValue(null, 'href', expected);
49259
+
49260
+ equal(actual, 'unsafe:' + expected, 'protocol escaped');
49261
+ });
49262
+
49263
+ test('does not block SafeStrings', function() {
49264
+ /* jshint scripturl:true */
49265
+
49266
+ expect(1);
49267
+
49268
+ var expected = 'javascript:alert("foo")';
49269
+ var actual = sanitizeAttributeValue(null, 'href', new SafeString(expected));
49270
+
49271
+ equal(actual, expected, 'protocol unescaped');
49272
+ });
49273
+ });
49274
+ enifed("ember-views/tests/system/sanitize_attribute_value_test.jshint",
49275
+ [],
49276
+ function() {
49277
+ "use strict";
49278
+ module('JSHint - ember-views/tests/system');
49279
+ test('ember-views/tests/system/sanitize_attribute_value_test.js should pass jshint', function() {
49280
+ ok(true, 'ember-views/tests/system/sanitize_attribute_value_test.js should pass jshint.');
49281
+ });
49282
+ });
48443
49283
  enifed("ember-views/tests/system/view_utils_test",
48444
49284
  ["ember-metal/run_loop","ember-views/views/view"],
48445
49285
  function(__dependency1__, __dependency2__) {
@@ -50573,17 +51413,16 @@ enifed("ember-views/tests/views/instrumentation_test.jshint",
50573
51413
  });
50574
51414
  });
50575
51415
  enifed("ember-views/tests/views/metamorph_view_test",
50576
- ["ember-views/system/jquery","ember-metal/run_loop","ember-views/views/view","ember-metal/property_get","ember-metal/property_set","ember-metal/mixin","ember-htmlbars/system/compile","ember-views/views/metamorph_view"],
50577
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__) {
51416
+ ["ember-views/system/jquery","ember-metal/run_loop","ember-views/views/view","ember-metal/property_get","ember-metal/property_set","ember-template-compiler/system/compile","ember-views/views/metamorph_view"],
51417
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__) {
50578
51418
  "use strict";
50579
51419
  var jQuery = __dependency1__["default"];
50580
51420
  var run = __dependency2__["default"];
50581
51421
  var EmberView = __dependency3__["default"];
50582
51422
  var get = __dependency4__.get;
50583
51423
  var set = __dependency5__.set;
50584
- var observer = __dependency6__.observer;
50585
- var compile = __dependency7__["default"];
50586
- var _MetamorphView = __dependency8__["default"];
51424
+ var compile = __dependency6__["default"];
51425
+ var _MetamorphView = __dependency7__["default"];
50587
51426
 
50588
51427
  var view, childView, metamorphView;
50589
51428
 
@@ -50740,7 +51579,7 @@ enifed("ember-views/tests/views/metamorph_view_test",
50740
51579
  });
50741
51580
 
50742
51581
  test("replacing a Metamorph should invalidate childView elements", function() {
50743
- var elementOnDidChange, elementOnDidInsert;
51582
+ var elementOnDidInsert;
50744
51583
 
50745
51584
  view = EmberView.create({
50746
51585
  show: false,
@@ -50754,10 +51593,6 @@ enifed("ember-views/tests/views/metamorph_view_test",
50754
51593
  this.get('element');
50755
51594
  },
50756
51595
 
50757
- elementDidChange: observer('element', function() {
50758
- elementOnDidChange = this.get('element');
50759
- }),
50760
-
50761
51596
  didInsertElement: function() {
50762
51597
  elementOnDidInsert = this.get('element');
50763
51598
  }
@@ -50770,7 +51605,6 @@ enifed("ember-views/tests/views/metamorph_view_test",
50770
51605
 
50771
51606
  run(function() { view.set('show', true); });
50772
51607
 
50773
- ok(elementOnDidChange, "should have an element on change");
50774
51608
  ok(elementOnDidInsert, "should have an element on insert");
50775
51609
 
50776
51610
  run(function() { view.destroy(); });
@@ -52849,15 +53683,16 @@ enifed("ember-views/tests/views/view/append_to_test.jshint",
52849
53683
  });
52850
53684
  });
52851
53685
  enifed("ember-views/tests/views/view/attribute_bindings_test",
52852
- ["ember-metal/core","ember-metal/run_loop","ember-metal/observer","ember-metal/property_events","ember-views/views/view"],
52853
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__) {
53686
+ ["ember-metal/core","ember-metal/run_loop","ember-metal/observer","ember-metal/property_events","ember-htmlbars/utils/string","ember-views/views/view"],
53687
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__) {
52854
53688
  "use strict";
52855
53689
  var Ember = __dependency1__["default"];
52856
53690
  var run = __dependency2__["default"];
52857
53691
  var observersFor = __dependency3__.observersFor;
52858
53692
  var changeProperties = __dependency4__.changeProperties;
53693
+ var SafeString = __dependency5__.SafeString;
52859
53694
 
52860
- var EmberView = __dependency5__["default"];
53695
+ var EmberView = __dependency6__["default"];
52861
53696
 
52862
53697
  var originalLookup = Ember.lookup;
52863
53698
  var lookup, view;
@@ -53155,6 +53990,25 @@ enifed("ember-views/tests/views/view/attribute_bindings_test",
53155
53990
  appendView();
53156
53991
  }, 'You cannot use class as an attributeBinding, use classNameBindings instead.');
53157
53992
  });
53993
+
53994
+ test("blacklists href bindings based on protocol", function() {
53995
+ /* jshint scripturl:true */
53996
+
53997
+ view = EmberView.create({
53998
+ attributeBindings: ['href'],
53999
+ href: "javascript:alert('foo')"
54000
+ });
54001
+
54002
+ appendView();
54003
+
54004
+ equal(view.$().attr('href'), "unsafe:javascript:alert('foo')", "value property sanitized");
54005
+
54006
+ run(function() {
54007
+ view.set('href', new SafeString(view.get('href')));
54008
+ });
54009
+
54010
+ equal(view.$().attr('href'), "javascript:alert('foo')", "value is not defined");
54011
+ });
53158
54012
  });
53159
54013
  enifed("ember-views/tests/views/view/attribute_bindings_test.jshint",
53160
54014
  [],
@@ -53545,73 +54399,6 @@ enifed("ember-views/tests/views/view/class_name_bindings_test.jshint",
53545
54399
  ok(true, 'ember-views/tests/views/view/class_name_bindings_test.js should pass jshint.');
53546
54400
  });
53547
54401
  });
53548
- enifed("ember-views/tests/views/view/class_string_for_value_test",
53549
- ["ember-views/views/view"],
53550
- function(__dependency1__) {
53551
- "use strict";
53552
- var View = __dependency1__["default"];
53553
-
53554
- QUnit.module("View - _classStringForValue");
53555
-
53556
- var cSFV = View._classStringForValue;
53557
-
53558
- test("returns dasherized version of last path part if value is true", function() {
53559
- equal(cSFV("propertyName", true), "property-name", "class is dasherized");
53560
- equal(cSFV("content.propertyName", true), "property-name", "class is dasherized");
53561
- });
53562
-
53563
- test("returns className if value is true and className is specified", function() {
53564
- equal(cSFV("propertyName", true, "truthyClass"), "truthyClass", "returns className if given");
53565
- equal(cSFV("content.propertyName", true, "truthyClass"), "truthyClass", "returns className if given");
53566
- });
53567
-
53568
- test("returns falsyClassName if value is false and falsyClassName is specified", function() {
53569
- equal(cSFV("propertyName", false, "truthyClass", "falsyClass"), "falsyClass", "returns falsyClassName if given");
53570
- equal(cSFV("content.propertyName", false, "truthyClass", "falsyClass"), "falsyClass", "returns falsyClassName if given");
53571
- });
53572
-
53573
- test("returns null if value is false and falsyClassName is not specified", function() {
53574
- equal(cSFV("propertyName", false, "truthyClass"), null, "returns null if falsyClassName is not specified");
53575
- equal(cSFV("content.propertyName", false, "truthyClass"), null, "returns null if falsyClassName is not specified");
53576
- });
53577
-
53578
- test("returns null if value is false", function() {
53579
- equal(cSFV("propertyName", false), null, "returns null if value is false");
53580
- equal(cSFV("content.propertyName", false), null, "returns null if value is false");
53581
- });
53582
-
53583
- test("returns null if value is true and className is not specified and falsyClassName is specified", function() {
53584
- equal(cSFV("propertyName", true, undefined, "falsyClassName"), null, "returns null if value is true");
53585
- equal(cSFV("content.propertyName", true, undefined, "falsyClassName"), null, "returns null if value is true");
53586
- });
53587
-
53588
- test("returns the value if the value is truthy", function() {
53589
- equal(cSFV("propertyName", "myString"), "myString", "returns value if the value is truthy");
53590
- equal(cSFV("content.propertyName", "myString"), "myString", "returns value if the value is truthy");
53591
-
53592
- equal(cSFV("propertyName", "123"), 123, "returns value if the value is truthy");
53593
- equal(cSFV("content.propertyName", 123), 123, "returns value if the value is truthy");
53594
- });
53595
-
53596
- test("treat empty array as falsy value and return null", function() {
53597
- equal(cSFV("propertyName", [], "truthyClass"), null, "returns null if value is false");
53598
- equal(cSFV("content.propertyName", [], "truthyClass"), null, "returns null if value is false");
53599
- });
53600
-
53601
- test("treat non-empty array as truthy value and return the className if specified", function() {
53602
- equal(cSFV("propertyName", ['emberjs'], "truthyClass"), "truthyClass", "returns className if given");
53603
- equal(cSFV("content.propertyName", ['emberjs'], "truthyClass"), "truthyClass", "returns className if given");
53604
- });
53605
- });
53606
- enifed("ember-views/tests/views/view/class_string_for_value_test.jshint",
53607
- [],
53608
- function() {
53609
- "use strict";
53610
- module('JSHint - ember-views/tests/views/view');
53611
- test('ember-views/tests/views/view/class_string_for_value_test.js should pass jshint', function() {
53612
- ok(true, 'ember-views/tests/views/view/class_string_for_value_test.js should pass jshint.');
53613
- });
53614
- });
53615
54402
  enifed("ember-views/tests/views/view/context_test",
53616
54403
  ["ember-metal/run_loop","ember-views/views/view","ember-views/views/container_view"],
53617
54404
  function(__dependency1__, __dependency2__, __dependency3__) {
@@ -54189,20 +54976,22 @@ enifed("ember-views/tests/views/view/element_test",
54189
54976
  equal(get(view, 'element'), dom, 'now has set element');
54190
54977
  });
54191
54978
 
54192
- test("should not allow the elementId to be changed after inserted", function() {
54193
- view = EmberView.create({
54194
- elementId: 'one'
54195
- });
54979
+ Ember.runInDebug(function() {
54980
+ test("should not allow the elementId to be changed after inserted", function() {
54981
+ view = EmberView.create({
54982
+ elementId: 'one'
54983
+ });
54196
54984
 
54197
- run(function() {
54198
- view.appendTo('#qunit-fixture');
54199
- });
54985
+ run(function() {
54986
+ view.appendTo('#qunit-fixture');
54987
+ });
54200
54988
 
54201
- raises(function() {
54202
- view.set('elementId', 'two');
54203
- }, "raises elementId changed exception");
54989
+ raises(function() {
54990
+ view.set('elementId', 'two');
54991
+ }, "raises elementId changed exception");
54204
54992
 
54205
- equal(view.get('elementId'), 'one', 'elementId is still "one"');
54993
+ equal(view.get('elementId'), 'one', 'elementId is still "one"');
54994
+ });
54206
54995
  });
54207
54996
  });
54208
54997
  enifed("ember-views/tests/views/view/element_test.jshint",
@@ -54924,7 +55713,7 @@ enifed("ember-views/tests/views/view/nearest_of_type_test.jshint",
54924
55713
  });
54925
55714
  });
54926
55715
  enifed("ember-views/tests/views/view/nested_view_ordering_test",
54927
- ["container","ember-metal/run_loop","ember-views/views/view","ember-htmlbars/system/compile"],
55716
+ ["container","ember-metal/run_loop","ember-views/views/view","ember-template-compiler/system/compile"],
54928
55717
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__) {
54929
55718
  "use strict";
54930
55719
  var Container = __dependency1__["default"];
@@ -54979,68 +55768,6 @@ enifed("ember-views/tests/views/view/nested_view_ordering_test.jshint",
54979
55768
  ok(true, 'ember-views/tests/views/view/nested_view_ordering_test.js should pass jshint.');
54980
55769
  });
54981
55770
  });
54982
- enifed("ember-views/tests/views/view/parse_property_path_test",
54983
- ["ember-views/views/view"],
54984
- function(__dependency1__) {
54985
- "use strict";
54986
- var EmberView = __dependency1__["default"];
54987
-
54988
- QUnit.module("EmberView - _parsePropertyPath");
54989
-
54990
- test("it works with a simple property path", function() {
54991
- var parsed = EmberView._parsePropertyPath("simpleProperty");
54992
-
54993
- equal(parsed.path, "simpleProperty", "path is parsed correctly");
54994
- equal(parsed.className, undefined, "there is no className");
54995
- equal(parsed.falsyClassName, undefined, "there is no falsyClassName");
54996
- equal(parsed.classNames, "", "there is no classNames");
54997
- });
54998
-
54999
- test("it works with a more complex property path", function() {
55000
- var parsed = EmberView._parsePropertyPath("content.simpleProperty");
55001
-
55002
- equal(parsed.path, "content.simpleProperty", "path is parsed correctly");
55003
- equal(parsed.className, undefined, "there is no className");
55004
- equal(parsed.falsyClassName, undefined, "there is no falsyClassName");
55005
- equal(parsed.classNames, "", "there is no classNames");
55006
- });
55007
-
55008
- test("className is extracted", function() {
55009
- var parsed = EmberView._parsePropertyPath("content.simpleProperty:class");
55010
-
55011
- equal(parsed.path, "content.simpleProperty", "path is parsed correctly");
55012
- equal(parsed.className, "class", "className is extracted");
55013
- equal(parsed.falsyClassName, undefined, "there is no falsyClassName");
55014
- equal(parsed.classNames, ":class", "there is a classNames");
55015
- });
55016
-
55017
- test("falsyClassName is extracted", function() {
55018
- var parsed = EmberView._parsePropertyPath("content.simpleProperty:class:falsyClass");
55019
-
55020
- equal(parsed.path, "content.simpleProperty", "path is parsed correctly");
55021
- equal(parsed.className, "class", "className is extracted");
55022
- equal(parsed.falsyClassName, "falsyClass", "falsyClassName is extracted");
55023
- equal(parsed.classNames, ":class:falsyClass", "there is a classNames");
55024
- });
55025
-
55026
- test("it works with an empty true class", function() {
55027
- var parsed = EmberView._parsePropertyPath("content.simpleProperty::falsyClass");
55028
-
55029
- equal(parsed.path, "content.simpleProperty", "path is parsed correctly");
55030
- equal(parsed.className, undefined, "className is undefined");
55031
- equal(parsed.falsyClassName, "falsyClass", "falsyClassName is extracted");
55032
- equal(parsed.classNames, "::falsyClass", "there is a classNames");
55033
- });
55034
- });
55035
- enifed("ember-views/tests/views/view/parse_property_path_test.jshint",
55036
- [],
55037
- function() {
55038
- "use strict";
55039
- module('JSHint - ember-views/tests/views/view');
55040
- test('ember-views/tests/views/view/parse_property_path_test.js should pass jshint', function() {
55041
- ok(true, 'ember-views/tests/views/view/parse_property_path_test.js should pass jshint.');
55042
- });
55043
- });
55044
55771
  enifed("ember-views/tests/views/view/remove_test",
55045
55772
  ["ember-metal/property_get","ember-metal/run_loop","ember-metal/enumerable_utils","ember-views/system/jquery","ember-views/views/view","ember-views/views/container_view"],
55046
55773
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__) {
@@ -55215,16 +55942,17 @@ enifed("ember-views/tests/views/view/remove_test.jshint",
55215
55942
  });
55216
55943
  });
55217
55944
  enifed("ember-views/tests/views/view/render_test",
55218
- ["ember-metal/property_get","ember-metal/run_loop","ember-views/system/jquery","ember-views/views/view","ember-views/views/container_view","ember-htmlbars/system/compile"],
55219
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__) {
55945
+ ["ember-metal/property_get","ember-metal/run_loop","ember-views/system/jquery","ember-views/views/view","ember-views/views/container_view","ember-metal/computed","ember-template-compiler/system/compile"],
55946
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__) {
55220
55947
  "use strict";
55221
55948
  var get = __dependency1__.get;
55222
55949
  var run = __dependency2__["default"];
55223
55950
  var jQuery = __dependency3__["default"];
55224
55951
  var EmberView = __dependency4__["default"];
55225
55952
  var ContainerView = __dependency5__["default"];
55953
+ var computed = __dependency6__.computed;
55226
55954
 
55227
- var compile = __dependency6__["default"];
55955
+ var compile = __dependency7__["default"];
55228
55956
 
55229
55957
  var view;
55230
55958
 
@@ -55341,6 +56069,28 @@ enifed("ember-views/tests/views/view/render_test",
55341
56069
  ok(view.$().hasClass('ember-view'), "the view has ember-view");
55342
56070
  });
55343
56071
 
56072
+ test("should allow tagName to be a computed property [DEPRECATED]", function() {
56073
+ view = EmberView.extend({
56074
+ tagName: computed(function() {
56075
+ return 'span';
56076
+ })
56077
+ }).create();
56078
+
56079
+ expectDeprecation(function(){
56080
+ run(function() {
56081
+ view.createElement();
56082
+ });
56083
+ }, /using a computed property to define tagName will not be permitted/);
56084
+
56085
+ equal(view.element.tagName, 'SPAN', "the view has was created with the correct element");
56086
+
56087
+ run(function() {
56088
+ view.set('tagName', 'div');
56089
+ });
56090
+
56091
+ equal(view.element.tagName, 'SPAN', "the tagName cannot be changed after initial render");
56092
+ });
56093
+
55344
56094
  test("should allow hX tags as tagName", function() {
55345
56095
  expectDeprecation("Setting `childViews` on a Container is deprecated.");
55346
56096
 
@@ -56857,7 +57607,7 @@ enifed("ember/tests/application_lifecycle.jshint",
56857
57607
  });
56858
57608
  });
56859
57609
  enifed("ember/tests/component_registration_test",
56860
- ["ember","ember-htmlbars/system/compile","ember-htmlbars/helpers"],
57610
+ ["ember","ember-template-compiler/system/compile","ember-htmlbars/helpers"],
56861
57611
  function(__dependency1__, __dependency2__, __dependency3__) {
56862
57612
  "use strict";
56863
57613