From 57c5a9b4f014029583409e8f4e783067a75c05ce Mon Sep 17 00:00:00 2001 From: Matthew Phillips Date: Mon, 1 May 2017 11:21:23 -0600 Subject: [PATCH 1/6] Defined properties should be configurable Closes #187 --- can-define.js | 6 ++++-- define-test.js | 25 +++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/can-define.js b/can-define.js index 9971fad..717a27d 100644 --- a/can-define.js +++ b/can-define.js @@ -147,7 +147,8 @@ define.property = function(objPrototype, prop, definition, dataInitializers, com Object.defineProperty(objPrototype, prop, { get: make.get.data(prop), set: make.set.events(prop, make.get.data(prop), make.set.data(prop), make.eventType.data(prop)), - enumerable: true + enumerable: true, + configurable: true }); return; } @@ -230,7 +231,8 @@ define.property = function(objPrototype, prop, definition, dataInitializers, com Object.defineProperty(objPrototype, prop, { get: getter, set: setter, - enumerable: "serialize" in definition ? !!definition.serialize : !definition.get + enumerable: "serialize" in definition ? !!definition.serialize : !definition.get, + configurable: true }); }; diff --git a/define-test.js b/define-test.js index 872ef37..aafb685 100644 --- a/define-test.js +++ b/define-test.js @@ -1504,3 +1504,28 @@ QUnit.test('setter with default value causes an infinite loop (#142)', function( var a = new A(); QUnit.equal(a.val, 'hello', 'creating an instance should not cause an inifinte loop'); }); + +QUnit.test('defined properties are configurable', function(){ + var A = define.Constructor({ + val: { + get: function(){ + return "foo"; + } + } + }); + + var dataInitializers = A.prototype._define.dataInitializers, + computedInitializers = A.prototype._define.computedInitializers; + + var newDefinition = { + get: function(){ + return "bar"; + } + }; + + define.property(A.prototype, "val", newDefinition, dataInitializers, + computedInitializers); + + var a = new A(); + QUnit.equal(a.val, "bar", "It was redefined"); +}); From e41f1983a8158532e315a5d9cce7ab4df267d6b6 Mon Sep 17 00:00:00 2001 From: Matthew Phillips Date: Mon, 1 May 2017 11:52:11 -0600 Subject: [PATCH 2/6] Update dist for release --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 81f9960..2a0443a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "can-define", - "version": "1.0.21", + "version": "1.0.22", "description": "Create observable objects with JS dot operator compatibility", "main": "can-define.js", "scripts": { From 1efb8262b2ffc9bf88c88a852559a7252077cb52 Mon Sep 17 00:00:00 2001 From: Kevin Phillips Date: Mon, 1 May 2017 17:49:10 -0600 Subject: [PATCH 3/6] Updating list-test.js to not use QUnit.throws that does not work consistently in every browser --- list/list-test.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/list/list-test.js b/list/list-test.js index 643db64..b5b5b04 100644 --- a/list/list-test.js +++ b/list/list-test.js @@ -371,12 +371,12 @@ test('list.map', function() { person.lastName = "Thompson"; return person; }); - QUnit.throws(function() { + + try { newExtendedList.testMe(); - }, { - name: 'TypeError', - message: 'newExtendedList.testMe is not a function' - }, 'Does not return the same type of list.'); + } catch(err) { + equal(err.message, 'newExtendedList.testMe is not a function'); + } }); From b0cccc1ceefeed71999cf9ef8c241bc8e653a210 Mon Sep 17 00:00:00 2001 From: Kevin Phillips Date: Mon, 1 May 2017 17:53:10 -0600 Subject: [PATCH 4/6] Update dist for release --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2a0443a..461e053 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "can-define", - "version": "1.0.22", + "version": "1.0.23", "description": "Create observable objects with JS dot operator compatibility", "main": "can-define.js", "scripts": { From 44d0842714c38a77135204324dbd02d81213c64a Mon Sep 17 00:00:00 2001 From: Kevin Phillips Date: Mon, 1 May 2017 18:20:29 -0600 Subject: [PATCH 5/6] making list-test less restrictive --- list/list-test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/list/list-test.js b/list/list-test.js index b5b5b04..5da2722 100644 --- a/list/list-test.js +++ b/list/list-test.js @@ -375,7 +375,7 @@ test('list.map', function() { try { newExtendedList.testMe(); } catch(err) { - equal(err.message, 'newExtendedList.testMe is not a function'); + QUnit.ok(err.message.match(/testMe/)); } }); From 6c70983561c563980399fb427ebbd4ed4cbe1d48 Mon Sep 17 00:00:00 2001 From: Kevin Phillips Date: Mon, 1 May 2017 18:25:43 -0600 Subject: [PATCH 6/6] Update dist for release --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 461e053..4fda1db 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "can-define", - "version": "1.0.23", + "version": "1.0.24", "description": "Create observable objects with JS dot operator compatibility", "main": "can-define.js", "scripts": {