From 5b9e213aff19678b377130ca828bfb2cf05608bd Mon Sep 17 00:00:00 2001 From: Rob Halff Date: Fri, 8 Dec 2017 16:17:46 +0000 Subject: [PATCH] rename/move class to objectType --- addons/actions/src/lib/__mocks__/example.js | 4 +-- addons/actions/src/lib/decycle.js | 4 +-- .../__tests__/createFakeConstructor.test.js | 14 ---------- .../class/__tests__/getClassName.test.js | 26 ------------------- .../src/lib/types/class/__tests__/index.js | 19 -------------- addons/actions/src/lib/types/class/index.js | 13 ---------- addons/actions/src/lib/types/index.js | 4 +-- .../__tests__/createNamedObject.test.js | 14 ++++++++++ .../object/__tests__/getObjectName.test.js | 20 ++++++++++++++ .../src/lib/types/object/__tests__/index.js | 19 ++++++++++++++ .../createNamedObject.js} | 8 +++--- .../getObjectName.js} | 2 +- addons/actions/src/lib/types/object/index.js | 13 ++++++++++ .../lib/util/__tests__/typeReviver.test.js | 6 ++--- addons/actions/src/lib/util/typeReviver.js | 4 +-- addons/actions/src/preview.test.js | 4 +-- 16 files changed, 84 insertions(+), 90 deletions(-) delete mode 100644 addons/actions/src/lib/types/class/__tests__/createFakeConstructor.test.js delete mode 100644 addons/actions/src/lib/types/class/__tests__/getClassName.test.js delete mode 100644 addons/actions/src/lib/types/class/__tests__/index.js delete mode 100644 addons/actions/src/lib/types/class/index.js create mode 100644 addons/actions/src/lib/types/object/__tests__/createNamedObject.test.js create mode 100644 addons/actions/src/lib/types/object/__tests__/getObjectName.test.js create mode 100644 addons/actions/src/lib/types/object/__tests__/index.js rename addons/actions/src/lib/types/{class/createFakeConstructor.js => object/createNamedObject.js} (54%) rename addons/actions/src/lib/types/{class/getClassName.js => object/getObjectName.js} (91%) create mode 100644 addons/actions/src/lib/types/object/index.js diff --git a/addons/actions/src/lib/__mocks__/example.js b/addons/actions/src/lib/__mocks__/example.js index 1dcd386214b..5e7cfcbb791 100644 --- a/addons/actions/src/lib/__mocks__/example.js +++ b/addons/actions/src/lib/__mocks__/example.js @@ -17,7 +17,7 @@ const input = { input.circular = input; const output = { - '$___storybook.className': 'Object', + '$___storybook.objectName': 'Object', '$___storybook.isCyclic': true, a: 'A', b: 1, @@ -30,7 +30,7 @@ const output = { }, e: '2017-12-02T11:13:22.492Z', f: { - '$___storybook.className': 'File', + '$___storybook.objectName': 'File', isClosed: false, lastModified: 1512213202492, name: 'filename.txt', diff --git a/addons/actions/src/lib/decycle.js b/addons/actions/src/lib/decycle.js index 481a43c6a22..80a67f1f090 100644 --- a/addons/actions/src/lib/decycle.js +++ b/addons/actions/src/lib/decycle.js @@ -2,7 +2,7 @@ import { getPropertiesList, typeReplacer } from './util'; import { CYCLIC_KEY } from './'; -import { classType } from './types'; +import { objectType } from './types'; export default function decycle(object, depth = 10) { const objects = new WeakMap(); @@ -46,7 +46,7 @@ export default function decycle(object, depth = 10) { obj[i] = derez(value[i], `${path}[${i}]`, _depth + 1); } } else { - obj = classType.serialize(value); + obj = objectType.serialize(value); getPropertiesList(value).forEach(name => { obj[name] = derez(value[name], `${path}[${JSON.stringify(name)}]`, _depth + 1); diff --git a/addons/actions/src/lib/types/class/__tests__/createFakeConstructor.test.js b/addons/actions/src/lib/types/class/__tests__/createFakeConstructor.test.js deleted file mode 100644 index f5725f5587d..00000000000 --- a/addons/actions/src/lib/types/class/__tests__/createFakeConstructor.test.js +++ /dev/null @@ -1,14 +0,0 @@ -import createFakeConstructor from '../createFakeConstructor'; - -describe('createFakeConstructor', () => { - it('creates fake constructor', () => { - expect( - createFakeConstructor( - { - name_key: 'A', - }, - 'name_key' - ).constructor.name - ).toEqual('A'); - }); -}); diff --git a/addons/actions/src/lib/types/class/__tests__/getClassName.test.js b/addons/actions/src/lib/types/class/__tests__/getClassName.test.js deleted file mode 100644 index eb5ebae7dad..00000000000 --- a/addons/actions/src/lib/types/class/__tests__/getClassName.test.js +++ /dev/null @@ -1,26 +0,0 @@ -import getClassName from '../getClassName'; - -class A {} -const a = new A(); -function B() {} -const b = new B(); - -describe('getClassName', () => { - /* Transpiled cannot be tested. - it('get name of class',() => { - expect(getClassName(A)).toBe('A') - }); - */ - - it('get name of class instance', () => { - expect(getClassName(a)).toBe('A'); - }); - - it('get name of function', () => { - expect(getClassName(B)).toBe('B'); - }); - - it('get constructor name', () => { - expect(getClassName(b)).toBe('B'); - }); -}); diff --git a/addons/actions/src/lib/types/class/__tests__/index.js b/addons/actions/src/lib/types/class/__tests__/index.js deleted file mode 100644 index 134fcaeb420..00000000000 --- a/addons/actions/src/lib/types/class/__tests__/index.js +++ /dev/null @@ -1,19 +0,0 @@ -import classType from '../'; - -describe('Class', () => { - it('Serializes Class', () => { - class C {} - const c = new C(); - - expect(classType.serialize(c)).toEqual({ [classType.KEY]: 'C' }); - }); - - it('Deserializes Class', () => { - const value = { [classType.KEY]: 'C' }; - const c = classType.deserialize(value); - - expect(c.constructor.name).toEqual('C'); - - expect(value).toEqual({}); - }); -}); diff --git a/addons/actions/src/lib/types/class/index.js b/addons/actions/src/lib/types/class/index.js deleted file mode 100644 index bf6b94efa72..00000000000 --- a/addons/actions/src/lib/types/class/index.js +++ /dev/null @@ -1,13 +0,0 @@ -import createFakeConstructor from './createFakeConstructor'; -import getClassName from './getClassName'; - -const KEY = '$___storybook.className'; - -const classType = { - KEY, - // is: (value) => , // not used - serialize: value => ({ [KEY]: getClassName(value) }), - deserialize: value => createFakeConstructor(value, KEY), -}; - -export default classType; diff --git a/addons/actions/src/lib/types/index.js b/addons/actions/src/lib/types/index.js index 88dbd567708..c2f6e6c1f65 100644 --- a/addons/actions/src/lib/types/index.js +++ b/addons/actions/src/lib/types/index.js @@ -1,4 +1,4 @@ -import classType from './class'; +import objectType from './object'; import dateType from './date'; import functionType from './function'; import infinityType from './infinity'; @@ -7,7 +7,7 @@ import regexpType from './regexp'; import symbolType from './symbol'; import undefinedType from './undefined'; -export { classType }; +export { objectType }; export { dateType }; export { functionType }; export { infinityType }; diff --git a/addons/actions/src/lib/types/object/__tests__/createNamedObject.test.js b/addons/actions/src/lib/types/object/__tests__/createNamedObject.test.js new file mode 100644 index 00000000000..1533e58bb93 --- /dev/null +++ b/addons/actions/src/lib/types/object/__tests__/createNamedObject.test.js @@ -0,0 +1,14 @@ +import createNamedObject from '../createNamedObject'; + +describe('createNamedObject', () => { + it('creates named object', () => { + expect( + createNamedObject( + { + name_key: 'A', + }, + 'name_key' + ).constructor.name + ).toEqual('A'); + }); +}); diff --git a/addons/actions/src/lib/types/object/__tests__/getObjectName.test.js b/addons/actions/src/lib/types/object/__tests__/getObjectName.test.js new file mode 100644 index 00000000000..aaa0710cda6 --- /dev/null +++ b/addons/actions/src/lib/types/object/__tests__/getObjectName.test.js @@ -0,0 +1,20 @@ +import getObjectName from '../getObjectName'; + +class A {} +const a = new A(); +function B() {} +const b = new B(); + +describe('getObjectName', () => { + it('get name of instance', () => { + expect(getObjectName(a)).toBe('A'); + }); + + it('get name of function', () => { + expect(getObjectName(B)).toBe('B'); + }); + + it('get constructor name', () => { + expect(getObjectName(b)).toBe('B'); + }); +}); diff --git a/addons/actions/src/lib/types/object/__tests__/index.js b/addons/actions/src/lib/types/object/__tests__/index.js new file mode 100644 index 00000000000..56341c9d11b --- /dev/null +++ b/addons/actions/src/lib/types/object/__tests__/index.js @@ -0,0 +1,19 @@ +import objectType from '../'; + +describe('Object', () => { + it('Serializes Object', () => { + function C() {} + const c = new C(); + + expect(objectType.serialize(c)).toEqual({ [objectType.KEY]: 'C' }); + }); + + it('Deserializes Object', () => { + const value = { [objectType.KEY]: 'C' }; + const c = objectType.deserialize(value); + + expect(c.constructor.name).toEqual('C'); + + expect(value).toEqual({}); + }); +}); diff --git a/addons/actions/src/lib/types/class/createFakeConstructor.js b/addons/actions/src/lib/types/object/createNamedObject.js similarity index 54% rename from addons/actions/src/lib/types/class/createFakeConstructor.js rename to addons/actions/src/lib/types/object/createNamedObject.js index 0d09ab5cd9b..dd471db46e0 100644 --- a/addons/actions/src/lib/types/class/createFakeConstructor.js +++ b/addons/actions/src/lib/types/object/createNamedObject.js @@ -1,12 +1,12 @@ import createFunction from '../function/createFunction'; -export default function createFakeConstructor(obj, key) { +export default function createNamedObject(obj, key) { const Func = createFunction(obj[key]); - const func = new Func(); + const namedObj = new Func(); delete obj[key]; // eslint-disable-line no-param-reassign - Object.assign(func, obj); + Object.assign(namedObj, obj); - return func; + return namedObj; } diff --git a/addons/actions/src/lib/types/class/getClassName.js b/addons/actions/src/lib/types/object/getObjectName.js similarity index 91% rename from addons/actions/src/lib/types/class/getClassName.js rename to addons/actions/src/lib/types/object/getObjectName.js index 6ca575fb4d6..331e6cc7f11 100644 --- a/addons/actions/src/lib/types/class/getClassName.js +++ b/addons/actions/src/lib/types/object/getObjectName.js @@ -1,4 +1,4 @@ -export default function getClassName(value) { +export default function getObjectName(value) { if (value.toString) { const stringValue = value.toString(); diff --git a/addons/actions/src/lib/types/object/index.js b/addons/actions/src/lib/types/object/index.js new file mode 100644 index 00000000000..fdaee125c7b --- /dev/null +++ b/addons/actions/src/lib/types/object/index.js @@ -0,0 +1,13 @@ +import createNamedObject from './createNamedObject'; +import getObjectName from './getObjectName'; + +const KEY = '$___storybook.objectName'; + +const objectType = { + KEY, + // is: (value) => , // not used + serialize: value => ({ [KEY]: getObjectName(value) }), + deserialize: value => createNamedObject(value, KEY), +}; + +export default objectType; diff --git a/addons/actions/src/lib/util/__tests__/typeReviver.test.js b/addons/actions/src/lib/util/__tests__/typeReviver.test.js index 02f2a3dcd25..b016b015034 100644 --- a/addons/actions/src/lib/util/__tests__/typeReviver.test.js +++ b/addons/actions/src/lib/util/__tests__/typeReviver.test.js @@ -1,6 +1,6 @@ import typeReviver from '../typeReviver'; import { - classType, + objectType, dateType, functionType, infinityType, @@ -13,8 +13,8 @@ import { const date = '2017-12-02T11:13:22.492Z'; describe('typeReviver', () => { - it('Revives className', () => { - expect(typeReviver({ [classType.KEY]: 'C' }).value.constructor.name).toEqual('C'); + it('Revives object name', () => { + expect(typeReviver({ [objectType.KEY]: 'C' }).value.constructor.name).toEqual('C'); }); it('Revives Date', () => { expect(typeReviver({ [dateType.KEY]: date })).toEqual({ diff --git a/addons/actions/src/lib/util/typeReviver.js b/addons/actions/src/lib/util/typeReviver.js index 4f67c683cb1..42921761dbb 100644 --- a/addons/actions/src/lib/util/typeReviver.js +++ b/addons/actions/src/lib/util/typeReviver.js @@ -1,8 +1,8 @@ -import { types, classType } from '../types'; +import { types, objectType } from '../types'; const { hasOwnProperty } = Object.prototype; -const allTypes = types.concat(classType); +const allTypes = types.concat(objectType); function typeFilter(value) { const found = allTypes.find(type => hasOwnProperty.call(value, type.KEY)); diff --git a/addons/actions/src/preview.test.js b/addons/actions/src/preview.test.js index 1b49a697e80..d96cef9576e 100644 --- a/addons/actions/src/preview.test.js +++ b/addons/actions/src/preview.test.js @@ -50,7 +50,7 @@ describe('preview', () => { action('foo')(a); expect(JSON.parse(channel.emit.mock.calls[0][1].data.args[0])).toEqual({ - '$___storybook.className': 'A', + '$___storybook.objectName': 'A', a: 'b', }); }); @@ -66,7 +66,7 @@ describe('preview', () => { action('foo')(a); expect(JSON.parse(channel.emit.mock.calls[0][1].data.args[0])).toEqual({ - '$___storybook.className': 'A', + '$___storybook.objectName': 'A', '$___storybook.isCyclic': true, a: { $ref: '$',