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

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.3
8
+ * @version 1.8.0-beta.4
9
9
  */
10
10
 
11
11
  (function() {
@@ -5843,6 +5843,32 @@ define("ember-handlebars/tests/handlebars_test",
5843
5843
  ok(view.$('#twas-called').length, "the named template was called");
5844
5844
  });
5845
5845
 
5846
+ test("{{view}} should not override class bindings defined on a child view", function() {
5847
+ var LabelView = EmberView.extend({
5848
+ container: container,
5849
+ templateName: 'nested',
5850
+ classNameBindings: ['something'],
5851
+ something: 'visible'
5852
+ });
5853
+
5854
+ container.register('controller:label', ObjectController, { instantiate: true });
5855
+ container.register('view:label', LabelView);
5856
+ container.register('template:label', EmberHandlebars.compile('<div id="child-view"></div>'));
5857
+ container.register('template:nester', EmberHandlebars.compile('{{render "label"}}'));
5858
+
5859
+ view = EmberView.create({
5860
+ container: container,
5861
+ templateName: 'nester',
5862
+ controller: ObjectController.create({
5863
+ container: container
5864
+ })
5865
+ });
5866
+
5867
+ appendView();
5868
+
5869
+ ok(view.$('.visible').length > 0, 'class bindings are not overriden');
5870
+ });
5871
+
5846
5872
  test("template view should call the function of the associated template with itself as the context", function() {
5847
5873
  container.register('template:testTemplate', EmberHandlebars.compile("<h1 id='twas-called'>template was called for {{view.personName}}. Yea {{view.personName}}</h1>"));
5848
5874
 
@@ -13540,7 +13566,7 @@ define("ember-metal-views/tests/test_helpers",
13540
13566
  if (view.element) {
13541
13567
  el = view.element;
13542
13568
  } else {
13543
- el = view.element = this._dom.createElement(view.tagName || 'div');
13569
+ el = view.element = this._dom.createElement(view.tagName || 'div', contextualElement);
13544
13570
  }
13545
13571
  var classNames = view.classNames;
13546
13572
  if (typeof classNames === 'string') {
@@ -13565,6 +13591,7 @@ define("ember-metal-views/tests/test_helpers",
13565
13591
  } else if (view.textContent) {
13566
13592
  setElementText(el, view.textContent);
13567
13593
  } else if (view.innerHTML) {
13594
+ this._dom.detectNamespace(el);
13568
13595
  var nodes = this._dom.parseHTML(view.innerHTML, el);
13569
13596
  while (nodes[0]) {
13570
13597
  el.appendChild(nodes[0]);
@@ -15162,6 +15189,72 @@ define("ember-metal/tests/binding/sync_test.jshint",
15162
15189
  ok(true, 'ember-metal/tests/binding/sync_test.js should pass jshint.');
15163
15190
  });
15164
15191
  });
15192
+ define("ember-metal/tests/cache_test",
15193
+ ["ember-metal/cache"],
15194
+ function(__dependency1__) {
15195
+ "use strict";
15196
+ var Cache = __dependency1__["default"];
15197
+
15198
+ QUnit.module("Cache");
15199
+
15200
+ test("basic", function() {
15201
+ var cache = new Cache(100, function(key) {
15202
+ return key.toUpperCase();
15203
+ });
15204
+
15205
+ equal(cache.get("foo"), "FOO");
15206
+ equal(cache.get("bar"), "BAR");
15207
+ equal(cache.get("foo"), "FOO");
15208
+ });
15209
+
15210
+ test("caches computation correctly", function() {
15211
+ var count = 0;
15212
+ var cache = new Cache(100, function(key) {
15213
+ count++;
15214
+ return key.toUpperCase();
15215
+ });
15216
+
15217
+ equal(count, 0);
15218
+ cache.get("foo");
15219
+ equal(count, 1);
15220
+ cache.get("bar");
15221
+ equal(count, 2);
15222
+ cache.get("bar");
15223
+ equal(count, 2);
15224
+ cache.get("foo");
15225
+ equal(count, 2);
15226
+ });
15227
+
15228
+ test("handles undefined value correctly", function() {
15229
+ var cache = new Cache(100, function(key) {});
15230
+
15231
+ equal(cache.get("foo"), undefined);
15232
+ });
15233
+
15234
+ test("continues working after reaching cache limit", function() {
15235
+ var cache = new Cache(3, function(key) {
15236
+ return key.toUpperCase();
15237
+ });
15238
+
15239
+ cache.get("a");
15240
+ cache.get("b");
15241
+ cache.get("c");
15242
+
15243
+ equal(cache.get("d"), "D");
15244
+ equal(cache.get("a"), "A");
15245
+ equal(cache.get("b"), "B");
15246
+ equal(cache.get("c"), "C");
15247
+ });
15248
+ });
15249
+ define("ember-metal/tests/cache_test.jshint",
15250
+ [],
15251
+ function() {
15252
+ "use strict";
15253
+ module('JSHint - ember-metal/tests');
15254
+ test('ember-metal/tests/cache_test.js should pass jshint', function() {
15255
+ ok(true, 'ember-metal/tests/cache_test.js should pass jshint.');
15256
+ });
15257
+ });
15165
15258
  define("ember-metal/tests/chains_test",
15166
15259
  ["ember-metal/observer","ember-metal/chains","ember-metal/platform"],
15167
15260
  function(__dependency1__, __dependency2__, __dependency3__) {
@@ -17571,17 +17664,50 @@ define("ember-metal/tests/map_test",
17571
17664
  equal(map.size, 1);
17572
17665
  });
17573
17666
 
17667
+ test("arity of forEach is 1 – es6 23.1.3.5", function() {
17668
+ equal(map.forEach.length, 1, 'expected arity for map.forEach is 1');
17669
+ });
17670
+
17671
+ test("forEach throws without a callback as the first argument", function() {
17672
+
17673
+ equal(map.forEach.length, 1, 'expected arity for map.forEach is 1');
17674
+ });
17675
+
17574
17676
  test("remove", function() {
17575
17677
  map.set(object, "winning");
17576
17678
  map.set(number, "winning");
17577
17679
  map.set(string, "winning");
17578
17680
 
17579
- map.remove(object);
17580
- map.remove(number);
17581
- map.remove(string);
17681
+ expectDeprecation(function() {
17682
+ map.remove(object);
17683
+ map.remove(number);
17684
+ map.remove(string);
17685
+
17686
+ // doesn't explode
17687
+ map.remove({});
17688
+ }, 'Calling `Map.prototype.remove` has been deprecated, please use `Map.prototype.delete` instead.');
17689
+
17690
+ mapHasEntries([]);
17691
+ });
17692
+
17693
+ test("has empty collection", function() {
17694
+ equal(map.has('foo'), false);
17695
+ equal(map.has(), false);
17696
+ });
17697
+
17698
+ test("delete", function() {
17699
+ expectNoDeprecation();
17700
+
17701
+ map.set(object, "winning");
17702
+ map.set(number, "winning");
17703
+ map.set(string, "winning");
17704
+
17705
+ map["delete"](object);
17706
+ map["delete"](number);
17707
+ map["delete"](string);
17582
17708
 
17583
17709
  // doesn't explode
17584
- map.remove({});
17710
+ map["delete"]({});
17585
17711
 
17586
17712
  mapHasEntries([]);
17587
17713
  });
@@ -17610,16 +17736,16 @@ define("ember-metal/tests/map_test",
17610
17736
  ], map2);
17611
17737
  });
17612
17738
 
17613
- test("copy and then remove", function() {
17739
+ test("copy and then delete", function() {
17614
17740
  map.set(object, "winning");
17615
17741
  map.set(number, "winning");
17616
17742
  map.set(string, "winning");
17617
17743
 
17618
17744
  var map2 = map.copy();
17619
17745
 
17620
- map2.remove(object);
17621
- map2.remove(number);
17622
- map2.remove(string);
17746
+ map2["delete"](object);
17747
+ map2["delete"](number);
17748
+ map2["delete"](string);
17623
17749
 
17624
17750
  mapHasEntries([
17625
17751
  [ object, "winning" ],
@@ -17630,6 +17756,41 @@ define("ember-metal/tests/map_test",
17630
17756
  mapHasEntries([ ], map2);
17631
17757
  });
17632
17758
 
17759
+ test("length", function() {
17760
+ expectDeprecation('Usage of `length` is deprecated, use `size` instead.');
17761
+
17762
+ //Add a key twice
17763
+ equal(map.length, 0);
17764
+ map.set(string, "a string");
17765
+ equal(map.length, 1);
17766
+ map.set(string, "the same string");
17767
+ equal(map.length, 1);
17768
+
17769
+ //Add another
17770
+ map.set(number, "a number");
17771
+ equal(map.length, 2);
17772
+
17773
+ //Remove one that doesn't exist
17774
+ map["delete"]('does not exist');
17775
+ equal(map.length, 2);
17776
+
17777
+ //Check copy
17778
+ var copy = map.copy();
17779
+ equal(copy.length, 2);
17780
+
17781
+ //Remove a key twice
17782
+ map["delete"](number);
17783
+ equal(map.length, 1);
17784
+ map["delete"](number);
17785
+ equal(map.length, 1);
17786
+
17787
+ //Remove the last key
17788
+ map["delete"](string);
17789
+ equal(map.length, 0);
17790
+ map["delete"](string);
17791
+ equal(map.length, 0);
17792
+ });
17793
+
17633
17794
  test("size", function() {
17634
17795
  //Add a key twice
17635
17796
  equal(map.size, 0);
@@ -17643,7 +17804,7 @@ define("ember-metal/tests/map_test",
17643
17804
  equal(map.size, 2);
17644
17805
 
17645
17806
  //Remove one that doesn't exist
17646
- map.remove('does not exist');
17807
+ map["delete"]('does not exist');
17647
17808
  equal(map.size, 2);
17648
17809
 
17649
17810
  //Check copy
@@ -17651,15 +17812,15 @@ define("ember-metal/tests/map_test",
17651
17812
  equal(copy.size, 2);
17652
17813
 
17653
17814
  //Remove a key twice
17654
- map.remove(number);
17815
+ map["delete"](number);
17655
17816
  equal(map.size, 1);
17656
- map.remove(number);
17817
+ map["delete"](number);
17657
17818
  equal(map.size, 1);
17658
17819
 
17659
17820
  //Remove the last key
17660
- map.remove(string);
17821
+ map["delete"](string);
17661
17822
  equal(map.size, 0);
17662
- map.remove(string);
17823
+ map["delete"](string);
17663
17824
  equal(map.size, 0);
17664
17825
  });
17665
17826
 
@@ -17679,6 +17840,15 @@ define("ember-metal/tests/map_test",
17679
17840
  QUnit["throws"](function() {
17680
17841
  map.forEach({});
17681
17842
  }, '[object Object] is not a function');
17843
+
17844
+ map.forEach(function(value, key) {
17845
+ map["delete"](key);
17846
+ });
17847
+ // ensure the error happens even if no data is present
17848
+ equal(map.size, 0);
17849
+ QUnit["throws"](function() {
17850
+ map.forEach({});
17851
+ }, '[object Object] is not a function');
17682
17852
  });
17683
17853
 
17684
17854
  test("forEach basic", function() {
@@ -17794,6 +17964,73 @@ define("ember-metal/tests/map_test",
17794
17964
 
17795
17965
  equal(iteration, 4, 'expected 3 iterations');
17796
17966
  });
17967
+
17968
+ test("clear", function() {
17969
+ var iterations = 0;
17970
+
17971
+ map.set("a", 1);
17972
+ map.set("b", 2);
17973
+ map.set("c", 3);
17974
+ map.set("d", 4);
17975
+
17976
+ equal(map.size, 4);
17977
+
17978
+ map.forEach(function() {
17979
+ iterations++;
17980
+ });
17981
+ equal(iterations, 4);
17982
+
17983
+ map.clear();
17984
+ equal(map.size, 0);
17985
+ iterations = 0;
17986
+ map.forEach(function() {
17987
+ iterations++;
17988
+ });
17989
+ equal(iterations, 0);
17990
+ });
17991
+
17992
+ test("-0", function() {
17993
+ equal(map.has(-0), false);
17994
+ equal(map.has(0), false);
17995
+
17996
+ map.set(-0, 'zero');
17997
+
17998
+ equal(map.has(-0), true);
17999
+ equal(map.has(0), true);
18000
+
18001
+ equal(map.get(0), 'zero');
18002
+ equal(map.get(-0), 'zero');
18003
+
18004
+ map.forEach(function(value, key) {
18005
+ equal(1/key, Infinity, 'spec says key should be positive zero');
18006
+ });
18007
+ });
18008
+
18009
+ test("NaN", function() {
18010
+ equal(map.has(NaN), false);
18011
+
18012
+ map.set(NaN, 'not-a-number');
18013
+
18014
+ equal(map.has(NaN), true);
18015
+
18016
+ equal(map.get(NaN), 'not-a-number');
18017
+
18018
+ });
18019
+
18020
+ test("NaN Boxed", function() {
18021
+ //jshint -W053
18022
+ var boxed = new Number(NaN);
18023
+ equal(map.has(boxed), false);
18024
+
18025
+ map.set(boxed, 'not-a-number');
18026
+
18027
+ equal(map.has(boxed), true);
18028
+ equal(map.has(NaN), false);
18029
+
18030
+ equal(map.get(NaN), undefined);
18031
+ equal(map.get(boxed), 'not-a-number');
18032
+ });
18033
+
17797
18034
  }
17798
18035
 
17799
18036
  for (var i = 0; i < varieties.length; i++) {
@@ -17815,6 +18052,18 @@ define("ember-metal/tests/map_test",
17815
18052
  strictEqual(value, map.get('ohai'));
17816
18053
  });
17817
18054
 
18055
+ test("Map.prototype.constructor", function() {
18056
+ var map = new Map();
18057
+ equal(map.constructor, Map);
18058
+ });
18059
+
18060
+ test("MapWithDefault.prototype.constructor", function() {
18061
+ var map = new MapWithDefault({
18062
+ defaultValue: function(key) { return key; }
18063
+ });
18064
+ equal(map.constructor, MapWithDefault);
18065
+ });
18066
+
17818
18067
  test("Copying a MapWithDefault copies the default value", function() {
17819
18068
  var map = MapWithDefault.create({
17820
18069
  defaultValue: function(key) {
@@ -45701,6 +45950,8 @@ define("ember-views/tests/system/render_buffer_test",
45701
45950
  var jQuery = __dependency3__["default"];
45702
45951
  var RenderBuffer = __dependency4__["default"];
45703
45952
 
45953
+ var svgNamespace = "http://www.w3.org/2000/svg";
45954
+ var xhtmlNamespace = "http://www.w3.org/1999/xhtml";
45704
45955
  var trim = jQuery.trim;
45705
45956
 
45706
45957
  // .......................................................
@@ -45748,6 +45999,16 @@ define("ember-views/tests/system/render_buffer_test",
45748
45999
  strictEqual(el.value, '0', "generated element has value of '0'");
45749
46000
  });
45750
46001
 
46002
+ test("sets attributes with camelCase", function() {
46003
+ var buffer = new RenderBuffer('div', document.body);
46004
+ var content = "javascript:someCode()"; //jshint ignore:line
46005
+
46006
+ buffer.attr('onClick', content);
46007
+ buffer.generateElement();
46008
+ var el = buffer.element();
46009
+ strictEqual(el.getAttribute('onClick'), content, "attribute with camelCase was set");
46010
+ });
46011
+
45751
46012
  test("prevents XSS injection via `id`", function() {
45752
46013
  var buffer = new RenderBuffer('div', document.body);
45753
46014
 
@@ -45924,6 +46185,64 @@ define("ember-views/tests/system/render_buffer_test",
45924
46185
  ok(jQuery(element).html().match(/script/i), "should have script tag");
45925
46186
  ok(!jQuery(element).html().match(/&shy;/), "should not have &shy;");
45926
46187
  });
46188
+
46189
+ if ('namespaceURI' in document.createElement('div')) {
46190
+
46191
+ QUnit.module("RenderBuffer namespaces");
46192
+
46193
+ test("properly makes a content string SVG namespace inside an SVG tag", function() {
46194
+ var buffer = new RenderBuffer('svg', document.body);
46195
+ buffer.generateElement();
46196
+ buffer.push('<path></path>foo');
46197
+
46198
+ var element = buffer.element();
46199
+ ok(element.tagName, 'SVG', 'element is svg');
46200
+ equal(element.namespaceURI, svgNamespace, 'element is svg namespace');
46201
+
46202
+ ok(element.childNodes[0].tagName, 'PATH', 'element is path');
46203
+ equal(element.childNodes[0].namespaceURI, svgNamespace, 'element is svg namespace');
46204
+ });
46205
+
46206
+ test("properly makes a path element svg namespace inside SVG context", function() {
46207
+ var buffer = new RenderBuffer('path', document.createElementNS(svgNamespace, 'svg'));
46208
+ buffer.generateElement();
46209
+ buffer.push('<g></g>');
46210
+
46211
+ var element = buffer.element();
46212
+ ok(element.tagName, 'PATH', 'element is PATH');
46213
+ equal(element.namespaceURI, svgNamespace, 'element is svg namespace');
46214
+
46215
+ ok(element.childNodes[0].tagName, 'G', 'element is g');
46216
+ equal(element.childNodes[0].namespaceURI, svgNamespace, 'element is svg namespace');
46217
+ });
46218
+
46219
+ test("properly makes a foreignObject svg namespace inside SVG context", function() {
46220
+ var buffer = new RenderBuffer('foreignObject', document.createElementNS(svgNamespace, 'svg'));
46221
+ buffer.generateElement();
46222
+ buffer.push('<div></div>');
46223
+
46224
+ var element = buffer.element();
46225
+ ok(element.tagName, 'FOREIGNOBJECT', 'element is foreignObject');
46226
+ equal(element.namespaceURI, svgNamespace, 'element is svg namespace');
46227
+
46228
+ ok(element.childNodes[0].tagName, 'DIV', 'element is div');
46229
+ equal(element.childNodes[0].namespaceURI, xhtmlNamespace, 'element is xhtml namespace');
46230
+ });
46231
+
46232
+ test("properly makes a div xhtml namespace inside foreignObject context", function() {
46233
+ var buffer = new RenderBuffer('div', document.createElementNS(svgNamespace, 'foreignObject'));
46234
+ buffer.generateElement();
46235
+ buffer.push('<div></div>');
46236
+
46237
+ var element = buffer.element();
46238
+ ok(element.tagName, 'DIV', 'element is div');
46239
+ equal(element.namespaceURI, xhtmlNamespace, 'element is xhtml namespace');
46240
+
46241
+ ok(element.childNodes[0].tagName, 'DIV', 'element is div');
46242
+ equal(element.childNodes[0].namespaceURI, xhtmlNamespace, 'element is xhtml namespace');
46243
+ });
46244
+
46245
+ }
45927
46246
  });
45928
46247
  define("ember-views/tests/system/render_buffer_test.jshint",
45929
46248
  [],
@@ -48292,6 +48611,25 @@ define("ember-views/tests/views/view/attribute_bindings_test",
48292
48611
  ok(!view.$().attr('notNumber'), "removes notNumber attribute when NaN");
48293
48612
  });
48294
48613
 
48614
+ test("should update attribute bindings on svg", function() {
48615
+ view = EmberView.create({
48616
+ attributeBindings: ['viewBox'],
48617
+ viewBox: null
48618
+ });
48619
+
48620
+ run(function() {
48621
+ view.createElement();
48622
+ });
48623
+
48624
+ equal(view.$().attr('viewBox'), null, "viewBox can be null");
48625
+
48626
+ run(function() {
48627
+ view.set('viewBox', '0 0 100 100');
48628
+ });
48629
+
48630
+ equal(view.$().attr('viewBox'), '0 0 100 100', "viewBox can be updated");
48631
+ });
48632
+
48295
48633
  // This comes into play when using the {{#each}} helper. If the
48296
48634
  // passed array item is a String, it will be converted into a
48297
48635
  // String object instead of a normal string.