From 395ab581408a61592a319446af5c99ec01e3509a Mon Sep 17 00:00:00 2001 From: koresar Date: Sat, 15 Sep 2018 12:16:56 +1000 Subject: [PATCH] Add another non-spec metadata - "name" to change factory name --- src/stampit.js | 8 ++++---- test/index.js | 1 + test/name.js | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 test/name.js diff --git a/src/stampit.js b/src/stampit.js index 5c43e3a..106c4b3 100644 --- a/src/stampit.js +++ b/src/stampit.js @@ -157,7 +157,9 @@ var2 = descr[_deepStatics]; var4[_staticDeepProperties] = isObject(var1 || var2) ? merge({}, var2, var1) : _undefined; - var4[_staticPropertyDescriptors] = descr[_staticPropertyDescriptors]; + var1 = descr[_staticPropertyDescriptors]; + var2 = descr.name && {name: {value: descr.name}}; + var4[_staticPropertyDescriptors] = isObject(var2 || var1) ? assign({}, var1, var2) : _undefined; var1 = descr[_configuration]; var2 = descr.conf; @@ -165,9 +167,7 @@ var1 = descr[_deepConfiguration]; var2 = descr[_deepConf]; - var3 = isObject(var1 || var2) ? merge({}, var2, var1) : _undefined; - - var4[_deepConfiguration] = var3; + var4[_deepConfiguration] = isObject(var1 || var2) ? merge({}, var2, var1) : _undefined; return var4; } diff --git a/test/index.js b/test/index.js index d660c69..8110f6d 100644 --- a/test/index.js +++ b/test/index.js @@ -14,6 +14,7 @@ import './import'; import './index'; import './infected-statics'; import './init'; +import './name'; import './props'; import './stampit-api'; import './stampit-shortcuts'; diff --git a/test/name.js b/test/name.js new file mode 100644 index 0000000..a592405 --- /dev/null +++ b/test/name.js @@ -0,0 +1,52 @@ +import test from 'tape'; +import stampit from '../src/stampit'; + +try { + const f = Object.defineProperties( + () => {}, + { name: { value: 'test' } } + ); + + if (f.name === 'test') { + // Here we are sure that the environment supports function name change (ES6) + + test('name metadata can be set', (t) => { + const stamp = stampit({ + name: 'MyFactory' + }); + + t.equal(stamp.name, 'MyFactory', + 'Should produce stamp with non-default name'); + + t.end(); + }); + + test('name metadata is inherited', (t) => { + const stamp = stampit({ + name: 'MyFactory' + }); + const derived = stamp.compose({ staticPropertyDescriptors: { value: { x: 'whatever' } } }); + + t.equal(derived.name, 'MyFactory', + 'Should inherit name from previous stamp'); + t.equal(derived.compose.staticPropertyDescriptors.value.x, 'whatever', + 'Should not loose other data'); + + t.end(); + }); + + test('name metadata can be overwritten', (t) => { + const stamp = stampit({ + name: 'MyFactory' + }); + const derived = stamp.compose({ name: 'SecondOne' }); + + t.equal(derived.name, 'SecondOne', + 'Should overwrite previous stamp name'); + + t.end(); + }); + } +} catch(e) { + // skip these tests in this environment +}