ember-source 1.8.0.beta.2 → 1.8.0.beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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.8.0-beta.2
8
+ * @version 1.8.0-beta.3
9
9
  */
10
10
 
11
11
  (function() {
@@ -13358,9 +13358,8 @@ define("ember-metal-views/tests/main_test",
13358
13358
  ["ember-metal-views/tests/test_helpers"],
13359
13359
  function(__dependency1__) {
13360
13360
  "use strict";
13361
- /*globals HTMLElement */
13362
-
13363
13361
  var testsFor = __dependency1__.testsFor;
13362
+ var setElementText = __dependency1__.setElementText;
13364
13363
  var equalHTML = __dependency1__.equalHTML;
13365
13364
  var appendTo = __dependency1__.appendTo;
13366
13365
 
@@ -13373,6 +13372,7 @@ define("ember-metal-views/tests/main_test",
13373
13372
  }
13374
13373
  });
13375
13374
 
13375
+ // Test the behavior of the helper createElement stub
13376
13376
  test("by default, view renders as a div", function() {
13377
13377
  view = {isView: true};
13378
13378
 
@@ -13380,6 +13380,7 @@ define("ember-metal-views/tests/main_test",
13380
13380
  equalHTML('qunit-fixture', "<div></div>");
13381
13381
  });
13382
13382
 
13383
+ // Test the behavior of the helper createElement stub
13383
13384
  test("tagName can be specified", function() {
13384
13385
  view = {
13385
13386
  isView: true,
@@ -13391,6 +13392,7 @@ define("ember-metal-views/tests/main_test",
13391
13392
  equalHTML('qunit-fixture', "<span></span>");
13392
13393
  });
13393
13394
 
13395
+ // Test the behavior of the helper createElement stub
13394
13396
  test("textContent can be specified", function() {
13395
13397
  view = {
13396
13398
  isView: true,
@@ -13402,6 +13404,7 @@ define("ember-metal-views/tests/main_test",
13402
13404
  equalHTML('qunit-fixture', "<div>ohai &lt;a&gt;derp&lt;/a&gt;</div>");
13403
13405
  });
13404
13406
 
13407
+ // Test the behavior of the helper createElement stub
13405
13408
  test("innerHTML can be specified", function() {
13406
13409
  view = {
13407
13410
  isView: true,
@@ -13413,6 +13416,20 @@ define("ember-metal-views/tests/main_test",
13413
13416
  equalHTML('qunit-fixture', "<div>ohai <a>derp</a></div>");
13414
13417
  });
13415
13418
 
13419
+ // Test the behavior of the helper createElement stub
13420
+ test("innerHTML tr can be specified", function() {
13421
+ view = {
13422
+ isView: true,
13423
+ tagName: 'table',
13424
+ innerHTML: '<tr><td>ohai</td></tr>'
13425
+ };
13426
+
13427
+ appendTo(view);
13428
+
13429
+ equalHTML('qunit-fixture', "<table><tr><td>ohai</td></tr></table>");
13430
+ });
13431
+
13432
+ // Test the behavior of the helper createElement stub
13416
13433
  test("element can be specified", function() {
13417
13434
  view = {
13418
13435
  isView: true,
@@ -13431,9 +13448,9 @@ define("ember-metal-views/tests/main_test",
13431
13448
  isView: true,
13432
13449
 
13433
13450
  willInsertElement: function(el) {
13434
- ok(this.element instanceof HTMLElement, "We have an element");
13451
+ ok(this.element && this.element.nodeType === 1, "We have an element");
13435
13452
  equal(this.element.parentElement, null, "The element is parentless");
13436
- this.element.textContent = 'you gone and done inserted that element';
13453
+ setElementText(this.element, 'you gone and done inserted that element');
13437
13454
  }
13438
13455
  };
13439
13456
 
@@ -13449,9 +13466,9 @@ define("ember-metal-views/tests/main_test",
13449
13466
  isView: true,
13450
13467
 
13451
13468
  didInsertElement: function() {
13452
- ok(this.element instanceof HTMLElement, "We have an element");
13469
+ ok(this.element && this.element.nodeType === 1, "We have an element");
13453
13470
  equal(this.element.parentElement, document.getElementById('qunit-fixture'), "The element's parent is correct");
13454
- this.element.textContent = 'you gone and done inserted that element';
13471
+ setElementText(this.element, 'you gone and done inserted that element');
13455
13472
  }
13456
13473
  };
13457
13474
 
@@ -13501,9 +13518,9 @@ define("ember-metal-views/tests/test_helpers",
13501
13518
  var renderer;
13502
13519
 
13503
13520
  function MetalRenderer () {
13504
- MetalRenderer["super"].call(this);
13521
+ MetalRenderer._super.call(this);
13505
13522
  }
13506
- MetalRenderer["super"] = Renderer;
13523
+ MetalRenderer._super = Renderer;
13507
13524
  MetalRenderer.prototype = Object.create(Renderer.prototype, {
13508
13525
  constructor: {
13509
13526
  value: MetalRenderer,
@@ -13518,12 +13535,12 @@ define("ember-metal-views/tests/test_helpers",
13518
13535
  };
13519
13536
  MetalRenderer.prototype.willCreateElement = function(view) {
13520
13537
  };
13521
- MetalRenderer.prototype.createElement = function (view) {
13538
+ MetalRenderer.prototype.createElement = function (view, contextualElement) {
13522
13539
  var el;
13523
13540
  if (view.element) {
13524
13541
  el = view.element;
13525
13542
  } else {
13526
- el = view.element = document.createElement(view.tagName || 'div');
13543
+ el = view.element = this._dom.createElement(view.tagName || 'div');
13527
13544
  }
13528
13545
  var classNames = view.classNames;
13529
13546
  if (typeof classNames === 'string') {
@@ -13546,9 +13563,12 @@ define("ember-metal-views/tests/test_helpers",
13546
13563
  if (view.childViews) {
13547
13564
  view._childViewsMorph = this._dom.createMorph(el, null, null);
13548
13565
  } else if (view.textContent) {
13549
- el.textContent = view.textContent;
13566
+ setElementText(el, view.textContent);
13550
13567
  } else if (view.innerHTML) {
13551
- el.innerHTML = view.innerHTML;
13568
+ var nodes = this._dom.parseHTML(view.innerHTML, el);
13569
+ while (nodes[0]) {
13570
+ el.appendChild(nodes[0]);
13571
+ }
13552
13572
  }
13553
13573
  return el;
13554
13574
  };
@@ -13586,15 +13606,41 @@ define("ember-metal-views/tests/test_helpers",
13586
13606
  return renderer;
13587
13607
  }
13588
13608
 
13589
- __exports__.subject = subject;function equalHTML(element, expectedHTML, message) {
13609
+ __exports__.subject = subject;var supportsTextContent = ('textContent' in document.createElement('div'));
13610
+ var setElementText;
13611
+ if (supportsTextContent) {
13612
+ setElementText = function setElementText(element, text) {
13613
+ element.textContent = text;
13614
+ };
13615
+ } else {
13616
+ setElementText = function setElementText(element, text) {
13617
+ element.innerText = text;
13618
+ };
13619
+ }
13620
+ __exports__.setElementText = setElementText;
13621
+
13622
+ function equalHTML(element, expectedHTML, message) {
13590
13623
  var html;
13591
13624
  if (typeof element === 'string') {
13592
13625
  html = document.getElementById(element).innerHTML;
13593
13626
  } else {
13594
- html = element.outerHTML;
13627
+ if (element instanceof window.NodeList) {
13628
+ var fragment = document.createElement('div');
13629
+ while (element[0]) {
13630
+ fragment.appendChild(element[0]);
13631
+ }
13632
+ html = fragment.innerHTML;
13633
+ } else {
13634
+ html = element.outerHTML;
13635
+ }
13595
13636
  }
13596
13637
 
13597
13638
  var actualHTML = html.replace(/ id="[^"]+"/gmi, '');
13639
+ actualHTML = actualHTML.replace(/<\/?([A-Z]+)/gi, function(tag){
13640
+ return tag.toLowerCase();
13641
+ });
13642
+ actualHTML = actualHTML.replace(/\r\n/gm, '');
13643
+ actualHTML = actualHTML.replace(/ $/, '');
13598
13644
  equal(actualHTML, expectedHTML, message || "HTML matches");
13599
13645
  }
13600
13646
 
@@ -17456,7 +17502,13 @@ define("ember-metal/tests/map_test",
17456
17502
  mapHasLength(entries.length, theMap);
17457
17503
  };
17458
17504
 
17459
- test("add", function() {
17505
+ var unboundThis;
17506
+
17507
+ (function() {
17508
+ unboundThis = this;
17509
+ }());
17510
+
17511
+ test("set", function() {
17460
17512
  map.set(object, "winning");
17461
17513
  map.set(number, "winning");
17462
17514
  map.set(string, "winning");
@@ -17477,8 +17529,46 @@ define("ember-metal/tests/map_test",
17477
17529
  [ string, "losing" ]
17478
17530
  ]);
17479
17531
 
17480
- equal(map.has("nope"), false);
17481
- equal(map.has({}), false);
17532
+ equal(map.has("nope"), false, "expected the key `nope` to not be present");
17533
+ equal(map.has({}), false, "expected they key `{}` to not be present");
17534
+ });
17535
+
17536
+ test("set chaining", function() {
17537
+ map.set(object, "winning").
17538
+ set(number, "winning").
17539
+ set(string, "winning");
17540
+
17541
+ mapHasEntries([
17542
+ [ object, "winning" ],
17543
+ [ number, "winning" ],
17544
+ [ string, "winning" ]
17545
+ ]);
17546
+
17547
+ map.set(object, "losing").
17548
+ set(number, "losing").
17549
+ set(string, "losing");
17550
+
17551
+ mapHasEntries([
17552
+ [ object, "losing" ],
17553
+ [ number, "losing" ],
17554
+ [ string, "losing" ]
17555
+ ]);
17556
+
17557
+ equal(map.has("nope"), false, "expected the key `nope` to not be present");
17558
+ equal(map.has({}), false, "expected they key `{}` to not be present");
17559
+ });
17560
+
17561
+ test("with key with undefined value", function() {
17562
+ map.set("foo", undefined);
17563
+
17564
+ map.forEach(function(value, key) {
17565
+ equal(value, undefined);
17566
+ equal(key, 'foo');
17567
+ });
17568
+
17569
+ ok(map.has("foo"), "has key foo, even with undefined value");
17570
+
17571
+ equal(map.size, 1);
17482
17572
  });
17483
17573
 
17484
17574
  test("remove", function() {
@@ -17540,37 +17630,169 @@ define("ember-metal/tests/map_test",
17540
17630
  mapHasEntries([ ], map2);
17541
17631
  });
17542
17632
 
17543
- test("length", function() {
17633
+ test("size", function() {
17544
17634
  //Add a key twice
17545
- equal(map.length, 0);
17635
+ equal(map.size, 0);
17546
17636
  map.set(string, "a string");
17547
- equal(map.length, 1);
17637
+ equal(map.size, 1);
17548
17638
  map.set(string, "the same string");
17549
- equal(map.length, 1);
17639
+ equal(map.size, 1);
17550
17640
 
17551
17641
  //Add another
17552
17642
  map.set(number, "a number");
17553
- equal(map.length, 2);
17643
+ equal(map.size, 2);
17554
17644
 
17555
17645
  //Remove one that doesn't exist
17556
17646
  map.remove('does not exist');
17557
- equal(map.length, 2);
17647
+ equal(map.size, 2);
17558
17648
 
17559
17649
  //Check copy
17560
17650
  var copy = map.copy();
17561
- equal(copy.length, 2);
17651
+ equal(copy.size, 2);
17562
17652
 
17563
17653
  //Remove a key twice
17564
17654
  map.remove(number);
17565
- equal(map.length, 1);
17655
+ equal(map.size, 1);
17566
17656
  map.remove(number);
17567
- equal(map.length, 1);
17657
+ equal(map.size, 1);
17568
17658
 
17569
17659
  //Remove the last key
17570
17660
  map.remove(string);
17571
- equal(map.length, 0);
17661
+ equal(map.size, 0);
17572
17662
  map.remove(string);
17573
- equal(map.length, 0);
17663
+ equal(map.size, 0);
17664
+ });
17665
+
17666
+ test("forEach without proper callback", function() {
17667
+ QUnit["throws"](function() {
17668
+ map.forEach();
17669
+ }, '[object Undefined] is not a function');
17670
+
17671
+ QUnit["throws"](function() {
17672
+ map.forEach(undefined);
17673
+ }, '[object Undefined] is not a function');
17674
+
17675
+ QUnit["throws"](function() {
17676
+ map.forEach(1);
17677
+ }, '[object Number] is not a function');
17678
+
17679
+ QUnit["throws"](function() {
17680
+ map.forEach({});
17681
+ }, '[object Object] is not a function');
17682
+ });
17683
+
17684
+ test("forEach basic", function() {
17685
+ map.set("a", 1);
17686
+ map.set("b", 2);
17687
+ map.set("c", 3);
17688
+
17689
+ var iteration = 0;
17690
+
17691
+ var expectations = [
17692
+ { value: 1, key: "a", context: unboundThis },
17693
+ { value: 2, key: "b", context: unboundThis },
17694
+ { value: 3, key: "c", context: unboundThis },
17695
+ ];
17696
+
17697
+ map.forEach(function(value, key) {
17698
+ var expectation = expectations[iteration];
17699
+
17700
+ equal(value, expectation.value, 'value should be correct');
17701
+ equal(key, expectation.key, 'key should be correct');
17702
+ equal(this, expectation.context, 'context should be as if it was unbound');
17703
+
17704
+ iteration++;
17705
+ });
17706
+
17707
+ equal(iteration, 3, 'expected 3 iterations');
17708
+
17709
+ });
17710
+
17711
+ test("forEach basic /w context", function() {
17712
+ map.set("a", 1);
17713
+ map.set("b", 2);
17714
+ map.set("c", 3);
17715
+
17716
+ var iteration = 0;
17717
+ var context = {};
17718
+ var expectations = [
17719
+ { value: 1, key: "a", context: context },
17720
+ { value: 2, key: "b", context: context },
17721
+ { value: 3, key: "c", context: context },
17722
+ ];
17723
+
17724
+ map.forEach(function(value, key) {
17725
+ var expectation = expectations[iteration];
17726
+
17727
+ equal(value, expectation.value, 'value should be correct');
17728
+ equal(key, expectation.key, 'key should be correct');
17729
+ equal(this, expectation.context, 'context should be as if it was unbound');
17730
+
17731
+ iteration++;
17732
+
17733
+ }, context);
17734
+
17735
+ equal(iteration, 3, 'expected 3 iterations');
17736
+ });
17737
+
17738
+ test("forEach basic /w deletion while enumerating", function() {
17739
+ map.set("a", 1);
17740
+ map.set("b", 2);
17741
+ map.set("c", 3);
17742
+
17743
+ var iteration = 0;
17744
+
17745
+ var expectations = [
17746
+ { value: 1, key: "a", context: unboundThis },
17747
+ { value: 2, key: "b", context: unboundThis }
17748
+ ];
17749
+
17750
+ map.forEach(function(value, key) {
17751
+ if (iteration === 0) {
17752
+ map["delete"]("c");
17753
+ }
17754
+
17755
+ var expectation = expectations[iteration];
17756
+
17757
+ equal(value, expectation.value, 'value should be correct');
17758
+ equal(key, expectation.key, 'key should be correct');
17759
+ equal(this, expectation.context, 'context should be as if it was unbound');
17760
+
17761
+ iteration++;
17762
+ });
17763
+
17764
+ equal(iteration, 2, 'expected 3 iterations');
17765
+ });
17766
+
17767
+ test("forEach basic /w addition while enumerating", function() {
17768
+ map.set("a", 1);
17769
+ map.set("b", 2);
17770
+ map.set("c", 3);
17771
+
17772
+ var iteration = 0;
17773
+
17774
+ var expectations = [
17775
+ { value: 1, key: "a", context: unboundThis },
17776
+ { value: 2, key: "b", context: unboundThis },
17777
+ { value: 3, key: "c", context: unboundThis },
17778
+ { value: 4, key: "d", context: unboundThis },
17779
+ ];
17780
+
17781
+ map.forEach(function(value, key) {
17782
+ if (iteration === 0) {
17783
+ map.set('d', 4);
17784
+ }
17785
+
17786
+ var expectation = expectations[iteration];
17787
+
17788
+ equal(value, expectation.value, 'value should be correct');
17789
+ equal(key, expectation.key, 'key should be correct');
17790
+ equal(this, expectation.context, 'context should be as if it was unbound');
17791
+
17792
+ iteration++;
17793
+ });
17794
+
17795
+ equal(iteration, 4, 'expected 3 iterations');
17574
17796
  });
17575
17797
  }
17576
17798
 
@@ -21631,19 +21853,8 @@ define("ember-metal/tests/utils/meta_test",
21631
21853
  });
21632
21854
 
21633
21855
  QUnit.module("Ember.meta enumerable");
21634
- // Tests fix for https://github.com/emberjs/ember.js/issues/344
21635
- // This is primarily for older browsers such as IE8
21856
+
21636
21857
  if (canDefineNonEnumerableProperties) {
21637
- if (Ember.imports.jQuery) {
21638
- test("meta is not jQuery.isPlainObject", function () {
21639
- var proto, obj;
21640
- proto = {foo: 'bar'};
21641
- equal(jQuery.isPlainObject(meta(proto)), false, 'meta should not be isPlainObject when meta property cannot be marked as enumerable: false');
21642
- obj = create(proto);
21643
- equal(jQuery.isPlainObject(meta(obj)), false, 'meta should not be isPlainObject when meta property cannot be marked as enumerable: false');
21644
- });
21645
- }
21646
- } else {
21647
21858
  test("meta is not enumerable", function () {
21648
21859
  var proto, obj, props, prop;
21649
21860
  proto = {foo: 'bar'};
@@ -21664,6 +21875,18 @@ define("ember-metal/tests/utils/meta_test",
21664
21875
  }
21665
21876
  }
21666
21877
  });
21878
+ } else {
21879
+ // Tests fix for https://github.com/emberjs/ember.js/issues/344
21880
+ // This is primarily for older browsers such as IE8
21881
+ if (Ember.imports.jQuery) {
21882
+ test("meta is not jQuery.isPlainObject", function () {
21883
+ var proto, obj;
21884
+ proto = {foo: 'bar'};
21885
+ equal(jQuery.isPlainObject(meta(proto)), false, 'meta should not be isPlainObject when meta property cannot be marked as enumerable: false');
21886
+ obj = create(proto);
21887
+ equal(jQuery.isPlainObject(meta(obj)), false, 'meta should not be isPlainObject when meta property cannot be marked as enumerable: false');
21888
+ });
21889
+ }
21667
21890
  }
21668
21891
  });
21669
21892
  define("ember-metal/tests/utils/meta_test.jshint",
@@ -22713,7 +22936,7 @@ define("ember-routing-handlebars/tests/helpers/action_test",
22713
22936
  boundText: "inner",
22714
22937
  truthy: true,
22715
22938
  obj: {},
22716
- layout: EmberHandlebars.compile("<p>{{boundText}}</p><p>{{#if truthy}}{{#with obj}}{{yield}}{{/with}}{{/if}}</p>")
22939
+ layout: EmberHandlebars.compile("<div>{{boundText}}</div><div>{{#if truthy}}{{#with obj}}{{yield}}{{/with}}{{/if}}</div>")
22717
22940
  });
22718
22941
 
22719
22942
  view = EmberView.create({
@@ -22729,7 +22952,7 @@ define("ember-routing-handlebars/tests/helpers/action_test",
22729
22952
  boundText: 'insideWith'
22730
22953
  }
22731
22954
  },
22732
- template: EmberHandlebars.compile('{{#with obj}}{{#if truthy}}{{#view component}}{{#if truthy}}<p {{action "wat"}} class="wat">{{boundText}}</p>{{/if}}{{/view}}{{/if}}{{/with}}')
22955
+ template: EmberHandlebars.compile('{{#with obj}}{{#if truthy}}{{#view component}}{{#if truthy}}<div {{action "wat"}} class="wat">{{boundText}}</div>{{/if}}{{/view}}{{/if}}{{/with}}')
22733
22956
  });
22734
22957
 
22735
22958
  appendView();
@@ -24602,7 +24825,7 @@ define("ember-routing-handlebars/tests/helpers/render_test",
24602
24825
  run(function() {
24603
24826
  view.connectOutlet('main', EmberView.create({
24604
24827
  controller: controller.create(),
24605
- template: compile("<p>1{{render 'home'}}</p>")
24828
+ template: compile("<div>1{{render 'home'}}</div>")
24606
24829
  }));
24607
24830
  });
24608
24831
 
@@ -24611,7 +24834,7 @@ define("ember-routing-handlebars/tests/helpers/render_test",
24611
24834
  run(function() {
24612
24835
  view.connectOutlet('main', EmberView.create({
24613
24836
  controller: controller.create(),
24614
- template: compile("<p>2{{render 'home'}}</p>")
24837
+ template: compile("<div>2{{render 'home'}}</div>")
24615
24838
  }));
24616
24839
  });
24617
24840
 
@@ -40318,8 +40541,8 @@ define("ember-runtime/tests/system/object/computed_test.jshint",
40318
40541
  });
40319
40542
  });
40320
40543
  define("ember-runtime/tests/system/object/create_test",
40321
- ["ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/utils","ember-metal/computed","ember-metal/mixin","ember-metal/run_loop","ember-metal/events","ember-runtime/system/object"],
40322
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__) {
40544
+ ["ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/utils","ember-metal/computed","ember-metal/mixin","ember-metal/run_loop","ember-metal/events","ember-runtime/system/object","ember-metal/keys"],
40545
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__) {
40323
40546
  "use strict";
40324
40547
  var Ember = __dependency1__["default"];
40325
40548
  var get = __dependency2__.get;
@@ -40332,6 +40555,7 @@ define("ember-runtime/tests/system/object/create_test",
40332
40555
  var run = __dependency7__["default"];
40333
40556
  var on = __dependency8__.on;
40334
40557
  var EmberObject = __dependency9__["default"];
40558
+ var keys = __dependency10__["default"];
40335
40559
 
40336
40560
  var moduleOptions, originalLookup;
40337
40561
 
@@ -41414,6 +41638,36 @@ define("ember-runtime/tests/system/object/observer_test",
41414
41638
  equal(get(obj1, 'count'), 1, 'should not invoke again');
41415
41639
  equal(get(obj2, 'count'), 1, 'should invoke observer on obj2');
41416
41640
  });
41641
+
41642
+ testBoth('chain observer on class that has a reference to an uninitialized object will finish chains that reference it', function(get, set) {
41643
+ var changed = false;
41644
+
41645
+ var ChildClass = EmberObject.extend({
41646
+ parent: null,
41647
+ parentOneTwoDidChange: observer('parent.one.two', function() {
41648
+ changed = true;
41649
+ })
41650
+ });
41651
+
41652
+ var ParentClass = EmberObject.extend({
41653
+ one: {
41654
+ two: "old"
41655
+ },
41656
+ init: function () {
41657
+ this.child = ChildClass.create({
41658
+ parent: this
41659
+ });
41660
+ }
41661
+ });
41662
+
41663
+ var parent = new ParentClass();
41664
+
41665
+ equal(changed, false, 'precond');
41666
+
41667
+ parent.set('one.two', 'new');
41668
+
41669
+ equal(changed, true, 'child should have been notified of change to path');
41670
+ });
41417
41671
  });
41418
41672
  define("ember-runtime/tests/system/object/observer_test.jshint",
41419
41673
  [],
@@ -45454,9 +45708,28 @@ define("ember-views/tests/system/render_buffer_test",
45454
45708
  //
45455
45709
  QUnit.module("RenderBuffer");
45456
45710
 
45457
- test("RenderBuffers combine strings", function() {
45711
+ test("RenderBuffers raise a deprecation warning without a contextualElement", function() {
45458
45712
  var buffer = new RenderBuffer('div');
45459
45713
  buffer.generateElement();
45714
+ expectDeprecation(function(){
45715
+ var el = buffer.element();
45716
+ equal(el.tagName.toLowerCase(), 'div');
45717
+ }, /buffer.element expects a contextualElement to exist/);
45718
+ });
45719
+
45720
+ test("reset RenderBuffers raise a deprecation warning without a contextualElement", function() {
45721
+ var buffer = new RenderBuffer('div', document.body);
45722
+ buffer.reset('span');
45723
+ buffer.generateElement();
45724
+ expectDeprecation(function(){
45725
+ var el = buffer.element();
45726
+ equal(el.tagName.toLowerCase(), 'span');
45727
+ }, /buffer.element expects a contextualElement to exist/);
45728
+ });
45729
+
45730
+ test("RenderBuffers combine strings", function() {
45731
+ var buffer = new RenderBuffer('div', document.body);
45732
+ buffer.generateElement();
45460
45733
 
45461
45734
  buffer.push('a');
45462
45735
  buffer.push('b');
@@ -45468,7 +45741,7 @@ define("ember-views/tests/system/render_buffer_test",
45468
45741
 
45469
45742
  test("value of 0 is included in output", function() {
45470
45743
  var buffer, el;
45471
- buffer = new RenderBuffer('input');
45744
+ buffer = new RenderBuffer('input', document.body);
45472
45745
  buffer.prop('value', 0);
45473
45746
  buffer.generateElement();
45474
45747
  el = buffer.element();
@@ -45476,7 +45749,7 @@ define("ember-views/tests/system/render_buffer_test",
45476
45749
  });
45477
45750
 
45478
45751
  test("prevents XSS injection via `id`", function() {
45479
- var buffer = new RenderBuffer('div');
45752
+ var buffer = new RenderBuffer('div', document.body);
45480
45753
 
45481
45754
  buffer.id('hacked" megahax="yes');
45482
45755
  buffer.generateElement();
@@ -45486,7 +45759,7 @@ define("ember-views/tests/system/render_buffer_test",
45486
45759
  });
45487
45760
 
45488
45761
  test("prevents XSS injection via `attr`", function() {
45489
- var buffer = new RenderBuffer('div');
45762
+ var buffer = new RenderBuffer('div', document.body);
45490
45763
 
45491
45764
  buffer.attr('id', 'trololol" onmouseover="pwn()');
45492
45765
  buffer.attr('class', "hax><img src=\"trollface.png\"");
@@ -45500,7 +45773,7 @@ define("ember-views/tests/system/render_buffer_test",
45500
45773
  });
45501
45774
 
45502
45775
  test("prevents XSS injection via `addClass`", function() {
45503
- var buffer = new RenderBuffer('div');
45776
+ var buffer = new RenderBuffer('div', document.body);
45504
45777
 
45505
45778
  buffer.addClass('megahax" xss="true');
45506
45779
  buffer.generateElement();
@@ -45510,7 +45783,7 @@ define("ember-views/tests/system/render_buffer_test",
45510
45783
  });
45511
45784
 
45512
45785
  test("prevents XSS injection via `style`", function() {
45513
- var buffer = new RenderBuffer('div');
45786
+ var buffer = new RenderBuffer('div', document.body);
45514
45787
 
45515
45788
  buffer.style('color', 'blue;" xss="true" style="color:red');
45516
45789
  buffer.generateElement();
@@ -45529,25 +45802,25 @@ define("ember-views/tests/system/render_buffer_test",
45529
45802
  });
45530
45803
 
45531
45804
  test("prevents XSS injection via `tagName`", function() {
45532
- var buffer = new RenderBuffer('cool-div><div xss="true"');
45805
+ var buffer = new RenderBuffer('cool-div><div xss="true"', document.body);
45533
45806
  try {
45534
45807
  buffer.generateElement();
45535
- equal(buffer.string(), '<cool-divdivxsstrue></cool-divdivxsstrue>');
45808
+ equal(buffer.element().childNodes.length, 0, 'no extra nodes created');
45536
45809
  } catch (e) {
45537
45810
  ok(true, 'dom exception');
45538
45811
  }
45539
45812
  });
45540
45813
 
45541
45814
  test("handles null props - Issue #2019", function() {
45542
- var buffer = new RenderBuffer('div');
45815
+ var buffer = new RenderBuffer('div', document.body);
45543
45816
 
45544
45817
  buffer.prop('value', null);
45545
45818
  buffer.generateElement();
45546
- equal(buffer.string(), '<div></div>');
45819
+ equal(buffer.element().tagName, 'DIV', 'div exists');
45547
45820
  });
45548
45821
 
45549
45822
  test("handles browsers like Firefox < 11 that don't support outerHTML Issue #1952", function() {
45550
- var buffer = new RenderBuffer('div');
45823
+ var buffer = new RenderBuffer('div', document.body);
45551
45824
  buffer.generateElement();
45552
45825
  // Make sure element.outerHTML is falsy to trigger the fallback.
45553
45826
  var elementStub = '<div></div>';
@@ -45557,20 +45830,78 @@ define("ember-views/tests/system/render_buffer_test",
45557
45830
  });
45558
45831
 
45559
45832
  test("lets `setClasses` and `addClass` work together", function() {
45560
- var buffer = new RenderBuffer('div');
45833
+ var buffer = new RenderBuffer('div', document.body);
45561
45834
  buffer.setClasses(['foo', 'bar']);
45562
45835
  buffer.addClass('baz');
45563
45836
  buffer.generateElement();
45564
45837
 
45565
45838
  var el = buffer.element();
45566
- equal(el.tagName.toLowerCase(), 'div');
45839
+ equal(el.tagName, 'DIV');
45567
45840
  equal(el.getAttribute('class'), 'foo bar baz');
45568
45841
  });
45569
45842
 
45843
+ test("generates text and a div and text", function() {
45844
+ var div = document.createElement('div');
45845
+ var buffer = new RenderBuffer(undefined, div);
45846
+ buffer.buffer = 'Howdy<div>Nick</div>Cage';
45847
+
45848
+ var el = buffer.element();
45849
+ equal(el.childNodes[0].data, 'Howdy');
45850
+ equal(el.childNodes[1].tagName, 'DIV');
45851
+ equal(el.childNodes[1].childNodes[0].data, 'Nick');
45852
+ equal(el.childNodes[2].data, 'Cage');
45853
+ });
45854
+
45855
+
45856
+ test("generates a tr from a tr innerString", function() {
45857
+ var table = document.createElement('table');
45858
+ var buffer = new RenderBuffer(undefined, table);
45859
+ buffer.buffer = '<tr></tr>';
45860
+
45861
+ var el = buffer.element();
45862
+ equal(el.childNodes[0].tagName.toLowerCase(), 'tr');
45863
+ });
45864
+
45865
+ test("generates a tr from a tr innerString with leading <script", function() {
45866
+ var table = document.createElement('table');
45867
+ var buffer = new RenderBuffer(undefined, table);
45868
+ buffer.buffer = '<script></script><tr></tr>';
45869
+
45870
+ var el = buffer.element();
45871
+ equal(el.childNodes[1].tagName.toLowerCase(), 'tr');
45872
+ });
45873
+
45874
+ test("generates a tr from a tr innerString with leading comment", function() {
45875
+ var table = document.createElement('table');
45876
+ var buffer = new RenderBuffer(undefined, table);
45877
+ buffer.buffer = '<!-- blargh! --><tr></tr>';
45878
+
45879
+ var el = buffer.element();
45880
+ equal(el.childNodes[1].tagName, 'TR');
45881
+ });
45882
+
45883
+ test("generates a tbody from a tbody innerString", function() {
45884
+ var table = document.createElement('table');
45885
+ var buffer = new RenderBuffer(undefined, table);
45886
+ buffer.buffer = '<tbody><tr></tr></tbody>';
45887
+
45888
+ var el = buffer.element();
45889
+ equal(el.childNodes[0].tagName, 'TBODY');
45890
+ });
45891
+
45892
+ test("generates a col from a col innerString", function() {
45893
+ var table = document.createElement('table');
45894
+ var buffer = new RenderBuffer(undefined, table);
45895
+ buffer.buffer = '<col></col>';
45896
+
45897
+ var el = buffer.element();
45898
+ equal(el.childNodes[0].tagName, 'COL');
45899
+ });
45900
+
45570
45901
  QUnit.module("RenderBuffer - without tagName");
45571
45902
 
45572
45903
  test("It is possible to create a RenderBuffer without a tagName", function() {
45573
- var buffer = new RenderBuffer();
45904
+ var buffer = new RenderBuffer(undefined, document.body);
45574
45905
  buffer.push('a');
45575
45906
  buffer.push('b');
45576
45907
  buffer.push('c');
@@ -45585,7 +45916,7 @@ define("ember-views/tests/system/render_buffer_test",
45585
45916
  QUnit.module("RenderBuffer#element");
45586
45917
 
45587
45918
  test("properly handles old IE's zero-scope bug", function() {
45588
- var buffer = new RenderBuffer('div');
45919
+ var buffer = new RenderBuffer('div', document.body);
45589
45920
  buffer.generateElement();
45590
45921
  buffer.push('<script></script>foo');
45591
45922
 
@@ -48820,13 +49151,14 @@ define("ember-views/tests/views/view/create_child_view_test.jshint",
48820
49151
  });
48821
49152
  });
48822
49153
  define("ember-views/tests/views/view/create_element_test",
48823
- ["ember-metal/property_get","ember-metal/run_loop","ember-views/views/view","ember-views/views/container_view"],
48824
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__) {
49154
+ ["ember-metal/property_get","ember-metal/run_loop","ember-views/views/view","ember-views/views/container_view","ember-metal-views/tests/test_helpers"],
49155
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__) {
48825
49156
  "use strict";
48826
49157
  var get = __dependency1__.get;
48827
49158
  var run = __dependency2__["default"];
48828
49159
  var EmberView = __dependency3__["default"];
48829
49160
  var ContainerView = __dependency4__["default"];
49161
+ var equalHTML = __dependency5__.equalHTML;
48830
49162
 
48831
49163
  var view;
48832
49164
 
@@ -48871,6 +49203,61 @@ define("ember-views/tests/views/view/create_element_test",
48871
49203
  equal(elem.tagName.toString().toLowerCase(), 'span', 'has tagName from view');
48872
49204
  });
48873
49205
 
49206
+ test("calls render and parses the buffer string in the right context", function() {
49207
+ view = ContainerView.create({
49208
+ tagName: 'table',
49209
+ childViews: [ EmberView.create({
49210
+ tagName: '',
49211
+ render: function(buffer) {
49212
+ // Emulate a metamorph
49213
+ buffer.push("<script></script><tr><td>snorfblax</td></tr>");
49214
+ }
49215
+ })]
49216
+ });
49217
+
49218
+ equal(get(view, 'element'), null, 'precondition - has no element');
49219
+ run(function() {
49220
+ view.createElement();
49221
+ });
49222
+
49223
+
49224
+ var elem = get(view, 'element');
49225
+ ok(elem, 'has element now');
49226
+ equalHTML(elem.childNodes, '<script></script><tr><td>snorfblax</td></tr>', 'has innerHTML from context');
49227
+ equal(elem.tagName.toString().toLowerCase(), 'table', 'has tagName from view');
49228
+ });
49229
+
49230
+ test("does not wrap many tr children in tbody elements", function() {
49231
+ view = ContainerView.create({
49232
+ tagName: 'table',
49233
+ childViews: [
49234
+ EmberView.create({
49235
+ tagName: '',
49236
+ render: function(buffer) {
49237
+ // Emulate a metamorph
49238
+ buffer.push("<script></script><tr><td>snorfblax</td></tr>");
49239
+ } }),
49240
+ EmberView.create({
49241
+ tagName: '',
49242
+ render: function(buffer) {
49243
+ // Emulate a metamorph
49244
+ buffer.push("<script></script><tr><td>snorfblax</td></tr>");
49245
+ } })
49246
+ ]
49247
+ });
49248
+
49249
+ equal(get(view, 'element'), null, 'precondition - has no element');
49250
+ run(function() {
49251
+ view.createElement();
49252
+ });
49253
+
49254
+
49255
+ var elem = get(view, 'element');
49256
+ ok(elem, 'has element now');
49257
+ equalHTML(elem.childNodes, '<script></script><tr><td>snorfblax</td></tr><script></script><tr><td>snorfblax</td></tr>', 'has innerHTML from context');
49258
+ equal(elem.tagName.toString().toLowerCase(), 'table', 'has tagName from view');
49259
+ });
49260
+
48874
49261
  test("generated element include HTML from child views as well", function() {
48875
49262
  view = ContainerView.create({
48876
49263
  childViews: [ EmberView.create({ elementId: "foo" })]
@@ -49770,6 +50157,62 @@ define("ember-views/tests/views/view/nearest_of_type_test.jshint",
49770
50157
  ok(true, 'ember-views/tests/views/view/nearest_of_type_test.js should pass jshint.');
49771
50158
  });
49772
50159
  });
50160
+ define("ember-views/tests/views/view/nested_view_ordering_test",
50161
+ ["container","ember-metal/run_loop","ember-views/views/view","ember-handlebars-compiler"],
50162
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__) {
50163
+ "use strict";
50164
+ var Container = __dependency1__["default"];
50165
+ var run = __dependency2__["default"];
50166
+
50167
+ var EmberView = __dependency3__["default"];
50168
+ var EmberHandlebars = __dependency4__["default"];
50169
+
50170
+ var container, view;
50171
+
50172
+ QUnit.module("EmberView - Nested View Ordering", {
50173
+ setup: function() {
50174
+ container = new Container();
50175
+ },
50176
+ teardown: function() {
50177
+ run(function() {
50178
+ if (view) { view.destroy(); }
50179
+ });
50180
+ }
50181
+ });
50182
+
50183
+ test("should call didInsertElement on child views before parent", function() {
50184
+ var insertedLast;
50185
+
50186
+ view = EmberView.create({
50187
+ didInsertElement: function(){
50188
+ insertedLast = "outer";
50189
+ },
50190
+ container: container,
50191
+ template: EmberHandlebars.compile("{{view \"inner\"}}")
50192
+ });
50193
+
50194
+ container.register("view:inner", EmberView.extend({
50195
+ didInsertElement: function(){
50196
+ insertedLast = "inner";
50197
+ }
50198
+ }));
50199
+
50200
+ run(function() {
50201
+ view.append();
50202
+ });
50203
+
50204
+ equal(insertedLast, "outer", "didInsertElement called on outer view after inner view");
50205
+ });
50206
+ });
50207
+ define("ember-views/tests/views/view/nested_view_ordering_test.jshint",
50208
+ [],
50209
+ function() {
50210
+ "use strict";
50211
+ module('JSHint - ember-views/tests/views/view');
50212
+ test('ember-views/tests/views/view/nested_view_ordering_test.js should pass jshint', function() {
50213
+ ok(true, 'ember-views/tests/views/view/nested_view_ordering_test.js should pass jshint.');
50214
+ });
50215
+ });
49773
50216
  define("ember-views/tests/views/view/parse_property_path_test",
49774
50217
  ["ember-views/views/view"],
49775
50218
  function(__dependency1__) {