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

Sign up to get free protection for your applications and to get access to all the features.
@@ -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.