1.0.3 drop using Reflect, add event emitter to test suite

master
David Kebler 2020-02-20 22:40:56 -08:00
parent ae5b5032ba
commit cf3c23f9e2
4 changed files with 23 additions and 5 deletions

1
.gitignore vendored
View File

@ -1 +1,2 @@
node_modules
*.lock

View File

@ -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"

View File

@ -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))
})
}

View File

@ -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')
})
})