From 2ca487e6433a4ec5a7754235b31e836cbf2d79d8 Mon Sep 17 00:00:00 2001 From: Robert Jackson Date: Sun, 21 Sep 2014 10:26:20 -0400 Subject: [PATCH 1/2] Ensure only failing deprecations are logged by test helpers. --- tests/qunit_configuration.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/qunit_configuration.js b/tests/qunit_configuration.js index da6a85375ce..c9956914be4 100644 --- a/tests/qunit_configuration.js +++ b/tests/qunit_configuration.js @@ -243,7 +243,9 @@ } Ember.deprecate = function(msg, test) { EmberDev.deprecations.actuals = EmberDev.deprecations.actuals || []; - EmberDev.deprecations.actuals.push([msg, test]); + if (!test) { + EmberDev.deprecations.actuals.push([msg, test]); + } }; }, restoreEmber: function(){ From 39bf8b23a8482eb9fffeda00d8beb914c3b8c444 Mon Sep 17 00:00:00 2001 From: Robert Jackson Date: Sun, 21 Sep 2014 10:26:10 -0400 Subject: [PATCH 2/2] Add deprecations for Map.prototype.remove and Map.prototype.length. --- packages/ember-metal/lib/binding.js | 2 +- packages/ember-metal/lib/map.js | 12 ++++ packages/ember-metal/tests/map_test.js | 80 +++++++++++++++++++++----- 3 files changed, 80 insertions(+), 14 deletions(-) diff --git a/packages/ember-metal/lib/binding.js b/packages/ember-metal/lib/binding.js index 13f79b174c0..466c97a46bf 100644 --- a/packages/ember-metal/lib/binding.js +++ b/packages/ember-metal/lib/binding.js @@ -244,7 +244,7 @@ Binding.prototype = { var fromPath = this._from; var toPath = this._to; - directionMap.remove(obj); + directionMap.delete(obj); // if we're synchronizing from the remote object... if (direction === 'fwd') { diff --git a/packages/ember-metal/lib/map.js b/packages/ember-metal/lib/map.js index 7668ab7aa24..69bd03bcbaa 100644 --- a/packages/ember-metal/lib/map.js +++ b/packages/ember-metal/lib/map.js @@ -25,6 +25,7 @@ import { guidFor } from "ember-metal/utils"; import { indexOf } from "ember-metal/array"; import { create } from "ember-metal/platform"; +import { deprecateProperty } from "ember-metal/deprecate_property"; function missingFunction(fn) { throw new TypeError('' + Object.prototype.toString.call(fn) + " is not a function"); @@ -70,6 +71,7 @@ function OrderedSet() { if (this instanceof OrderedSet) { this.clear(); + this._silenceRemoveDeprecation = false; } else { missingNew("OrderedSet"); } @@ -128,6 +130,8 @@ OrderedSet.prototype = { @return {Boolean} */ remove: function(obj, _guid) { + Ember.deprecate('Calling `OrderedSet.prototype.remove` has been deprecated, please use `OrderedSet.prototype.delete` instead.', this._silenceRemoveDeprecation); + return this['delete'](obj, _guid); }, @@ -212,6 +216,7 @@ OrderedSet.prototype = { var Constructor = this.constructor; var set = new Constructor(); + set._silenceRemoveDeprecation = this._silenceRemoveDeprecation; set.presenceSet = copyNull(this.presenceSet); set.list = this.toArray(); @@ -219,6 +224,8 @@ OrderedSet.prototype = { } }; +deprecateProperty(OrderedSet.prototype, 'length', 'size'); + /** A Map stores values indexed by keys. Unlike JavaScript's default Objects, the keys of a Map can be any JavaScript @@ -242,6 +249,7 @@ OrderedSet.prototype = { function Map() { if (this instanceof this.constructor) { this.keys = OrderedSet.create(); + this.keys._silenceRemoveDeprecation = true; this.values = Object.create(null); this.size = 0; } else { @@ -317,6 +325,8 @@ Map.prototype = { @return {Boolean} true if an item was removed, false otherwise */ remove: function(key) { + Ember.deprecate('Calling `Map.prototype.remove` has been deprecated, please use `Map.prototype.delete` instead.'); + return this['delete'](key); }, @@ -397,6 +407,8 @@ Map.prototype = { } }; +deprecateProperty(Map.prototype, 'length', 'size'); + /** @class MapWithDefault @namespace Ember diff --git a/packages/ember-metal/tests/map_test.js b/packages/ember-metal/tests/map_test.js index 99d801cf03b..c3ab911afb6 100644 --- a/packages/ember-metal/tests/map_test.js +++ b/packages/ember-metal/tests/map_test.js @@ -115,12 +115,31 @@ function testMap(nameAndFunc) { map.set(number, "winning"); map.set(string, "winning"); - map.remove(object); - map.remove(number); - map.remove(string); + expectDeprecation(function() { + map.remove(object); + map.remove(number); + map.remove(string); + + // doesn't explode + map.remove({}); + }, 'Calling `Map.prototype.remove` has been deprecated, please use `Map.prototype.delete` instead.'); + + mapHasEntries([]); + }); + + test("delete", function() { + expectNoDeprecation(); + + map.set(object, "winning"); + map.set(number, "winning"); + map.set(string, "winning"); + + map.delete(object); + map.delete(number); + map.delete(string); // doesn't explode - map.remove({}); + map.delete({}); mapHasEntries([]); }); @@ -149,16 +168,16 @@ function testMap(nameAndFunc) { ], map2); }); - test("copy and then remove", function() { + test("copy and then delete", function() { map.set(object, "winning"); map.set(number, "winning"); map.set(string, "winning"); var map2 = map.copy(); - map2.remove(object); - map2.remove(number); - map2.remove(string); + map2.delete(object); + map2.delete(number); + map2.delete(string); mapHasEntries([ [ object, "winning" ], @@ -169,6 +188,41 @@ function testMap(nameAndFunc) { mapHasEntries([ ], map2); }); + test("length", function() { + expectDeprecation('Usage of `length` is deprecated, use `size` instead.'); + + //Add a key twice + equal(map.length, 0); + map.set(string, "a string"); + equal(map.length, 1); + map.set(string, "the same string"); + equal(map.length, 1); + + //Add another + map.set(number, "a number"); + equal(map.length, 2); + + //Remove one that doesn't exist + map.delete('does not exist'); + equal(map.length, 2); + + //Check copy + var copy = map.copy(); + equal(copy.length, 2); + + //Remove a key twice + map.delete(number); + equal(map.length, 1); + map.delete(number); + equal(map.length, 1); + + //Remove the last key + map.delete(string); + equal(map.length, 0); + map.delete(string); + equal(map.length, 0); + }); + test("size", function() { //Add a key twice equal(map.size, 0); @@ -182,7 +236,7 @@ function testMap(nameAndFunc) { equal(map.size, 2); //Remove one that doesn't exist - map.remove('does not exist'); + map.delete('does not exist'); equal(map.size, 2); //Check copy @@ -190,15 +244,15 @@ function testMap(nameAndFunc) { equal(copy.size, 2); //Remove a key twice - map.remove(number); + map.delete(number); equal(map.size, 1); - map.remove(number); + map.delete(number); equal(map.size, 1); //Remove the last key - map.remove(string); + map.delete(string); equal(map.size, 0); - map.remove(string); + map.delete(string); equal(map.size, 0); });