From f58cfb989f00ec880d4b4acad0f52bc5bf7aba0b Mon Sep 17 00:00:00 2001 From: Zhiyuan Wang Date: Wed, 28 Oct 2015 15:20:34 +0800 Subject: [PATCH] add definition and test for merge-descriptor --- merge-descriptors/merge-descriptors-tests.ts | 35 +++++++++++++++++++ .../merge-descriptors-tests.ts.tscparams | 1 + merge-descriptors/merge-descriptors.d.ts | 13 +++++++ 3 files changed, 49 insertions(+) create mode 100644 merge-descriptors/merge-descriptors-tests.ts create mode 100644 merge-descriptors/merge-descriptors-tests.ts.tscparams create mode 100644 merge-descriptors/merge-descriptors.d.ts diff --git a/merge-descriptors/merge-descriptors-tests.ts b/merge-descriptors/merge-descriptors-tests.ts new file mode 100644 index 0000000000..81376320ff --- /dev/null +++ b/merge-descriptors/merge-descriptors-tests.ts @@ -0,0 +1,35 @@ +/// +import mixin = require('merge-descriptors'); + +function testAssertion(condition: boolean, errorMessage: string) { + if (!condition) { + throw new Error(errorMessage); + } +} + +interface IMergedObject { + InSrc?: string; + name: string; + InTarget: string; +} + +var src = { + InSrc: 'src', + get name(): string { + return 'from src name'; + } +} + +var target: IMergedObject = { name: 'my target name', InTarget: 'target' }; + +var target2 = mixin(target, src, true); + +console.log(JSON.stringify(target)); + +testAssertion(target2 === target, "Returned object should refer to input [destination] object"); +testAssertion(target.name === 'from src name', "[redfine]=true, source member will overwrite destination member"); +testAssertion(target.InTarget === 'target', "overwrite do not affect members only in [destination]"); +testAssertion(target['InSrc'] === 'src', "members from [source] must be copied to [destination]"); + +var nameProperty:PropertyDescriptor = Object.getOwnPropertyDescriptor(target, "name"); +testAssertion(nameProperty.set === undefined, "member descriptor must be overwritten"); \ No newline at end of file diff --git a/merge-descriptors/merge-descriptors-tests.ts.tscparams b/merge-descriptors/merge-descriptors-tests.ts.tscparams new file mode 100644 index 0000000000..4169d3605f --- /dev/null +++ b/merge-descriptors/merge-descriptors-tests.ts.tscparams @@ -0,0 +1 @@ +--noImplicitAny --module commonjs --target es5 \ No newline at end of file diff --git a/merge-descriptors/merge-descriptors.d.ts b/merge-descriptors/merge-descriptors.d.ts new file mode 100644 index 0000000000..8e3212edda --- /dev/null +++ b/merge-descriptors/merge-descriptors.d.ts @@ -0,0 +1,13 @@ +// Type definitions for merge-descriptors +// Project: https://github.com/component/merge-descriptors +// Definitions by: Zhiyuan Wang +// Definitions: https://github.com/borisyankov/DefinitelyTyped + +declare module 'merge-descriptors' { + + function merge(destination: Object, source: Object): Object; + + function merge(destination: Object, source: Object, redefine: boolean): Object; + + export = merge; +} \ No newline at end of file