UNPKG

mappersmith

Version:

It is a lightweight rest client for node.js and the browser

98 lines (88 loc) 3.12 kB
import { clone } from './clone' describe('utils', () => { describe('#clone', () => { describe('for number', () => { it('returns the original entry', () => { const original = 1 let copy = clone(original) expect(copy).toEqual(1) copy = 2 expect(original).toEqual(1) }) }) describe('for string', () => { it('returns the original entry', () => { const original = 'value' let copy = clone(original) expect(copy).toEqual('value') copy = 'newValue' expect(original).toEqual('value') }) }) describe('for undefined', () => { it('returns undefined', () => { expect(clone(undefined)).toEqual(undefined) }) }) describe('for null', () => { it('returns null', () => { expect(clone(null)).toEqual(null) }) }) describe('for plain object', () => { it('returns a clone of the original entry', () => { const original = { a: 1, b: { c: 1, d: { e: 1 } }, f: undefined, g: null } const copy = clone(original) copy.a = 2 copy.b.c = 3 copy.b.d.e = 4 expect(original).toEqual({ a: 1, b: { c: 1, d: { e: 1 } }, f: undefined, g: null }) expect(copy).toEqual({ a: 2, b: { c: 3, d: { e: 4 } }, f: undefined, g: null }) }) }) describe('for plain object with mixed entries', () => { it('returns a clone of the original entry', () => { const original = { a: 1, b: [{ c: 1 }, { c: 2 }, { c: 3 }] } const copy = clone(original) copy.a = 2 copy.b[0] = { c: 10 } copy.b = [copy.b[0]] expect(original).toEqual({ a: 1, b: [{ c: 1 }, { c: 2 }, { c: 3 }] }) expect(copy).toEqual({ a: 2, b: [{ c: 10 }] }) }) }) describe('for class instance object', () => { it('does not return a clone of the original entry', () => { class Character { public name: string constructor({ name }: { name: string }) { this.name = name } } const original = new Character({ name: 'Piglet' }) const copy = clone(original) copy.name = 'Tiggr' expect(original).toEqual(new Character({ name: 'Tiggr' })) }) }) describe('for Buffer instance object (and similar)', () => { it('does not return a clone of the original entry', () => { const original = Buffer.from('piglet') const copy = clone(original) copy.fill('x') expect(original).toEqual(Buffer.from('xxxxxx')) }) }) describe('for array with mixed entries', () => { it('returns a clone of the original entry', () => { const original = [{ a: 1, b: [{ c: 1 }, { c: 2 }, { c: 3 }], c: { d: 1 } }] const copy = clone(original) copy[0].a = 2 copy[0].b[0].c = 20 copy[0].c.d = 200 expect(original).toEqual([{ a: 1, b: [{ c: 1 }, { c: 2 }, { c: 3 }], c: { d: 1 } }]) expect(copy).toEqual([{ a: 2, b: [{ c: 20 }, { c: 2 }, { c: 3 }], c: { d: 200 } }]) }) }) }) })