diff --git a/.gitignore b/.gitignore index 3c3629e..29d86be 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ node_modules +*.lock diff --git a/package.json b/package.json index df74282..a7799aa 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@uci-utils/class-merge", - "version": "1.0.1", + "version": "1.0.3", "description": "Function to merge classes when making an extended class", "main": "src/merge.js", "scripts": { @@ -26,6 +26,7 @@ "homepage": "https://github.com/uCOMmandIt/uci-utils/class-merge#readme", "devDependencies": { "chai": "^4.2.0", + "chai-eventemitter": "^1.1.1", "esm": "^3.2.25", "mocha": "^7.0.1", "nodemon": "^2.0.2" diff --git a/src/merge.js b/src/merge.js index 3aa25ce..288c8fd 100644 --- a/src/merge.js +++ b/src/merge.js @@ -19,13 +19,14 @@ export default (base, ...mixins) => { /* copy properties */ let copyProps = (target, source) => { - Reflect.ownKeys(source) + Object.getOwnPropertyNames(source) + .concat(Object.getOwnPropertySymbols(source)) .forEach((prop) => { if (typeof prop.match ==='function') { if (prop.match(/^(?:initializer|constructor|prototype|arguments|caller|name|bind|call|apply|toString|length)$/)) return } - Reflect.set(target,prop,Reflect.getOwnPropertyDescriptor(source, prop)) + Object.defineProperty(target, prop, Object.getOwnPropertyDescriptor(source, prop)) }) } diff --git a/test/merge.js b/test/merge.js index fa79611..40ad26c 100644 --- a/test/merge.js +++ b/test/merge.js @@ -1,5 +1,9 @@ import merge from '../src/merge.js' -import { expect } from 'chai' +import chai, { expect } from 'chai' +import eventemitter from 'chai-eventemitter' +import { EventEmitter as Emitter } from 'events' + +chai.use(eventemitter) describe('Class Merge', function () { @@ -24,7 +28,7 @@ describe('Class Merge', function () { set y (v) { this._y = v } } - var Rectangle = class Rectangle extends merge(Shape, Colored, ZCoord) {} + var Rectangle = class Rectangle extends merge(Shape, Colored, ZCoord, Emitter) {} var rect = new Rectangle(7, 42) rect.z = 1000 @@ -36,6 +40,17 @@ describe('Class Merge', function () { expect(rect.y).to.be.equal(42) expect(rect.z).to.be.equal(1000) expect(rect.color).to.be.equal('red') + }) + it('Should handle more complex mixin', function () { + // rect.on('test',(data)=>expect(data).to.be.equal('some data')) + // rect.emit('test','some data') + expect(function(){ rect.emit('test', 'some data') }).to.emitFrom(rect, 'test', 'some data') + }) + + + + + })