monocle-decorators
Version:
125 lines (100 loc) • 1.89 kB
JavaScript
/* eslint-env jest */
const _o = require('../src')
class Crawlable {
crawl () {
const speed = 1
this.distanceFromOrigin += speed
return this
}
}
class Walkable {
walk () {
const speed = 5
this.distanceFromOrigin += speed
return this
}
}
class Runnable {
run () {
const speed = 10
this.distanceFromOrigin += speed
return this
}
}
it('works as decorator', () => {
.mixin([Crawlable, Walkable, Runnable])
class Thing {
constructor () {
this.distanceFromOrigin = 0
}
}
const thing = new Thing()
thing
.crawl()
.walk()
.run()
expect(thing.distanceFromOrigin).toBe(16)
})
it('works as function', () => {
class Thing {
constructor () {
this.distanceFromOrigin = 0
}
}
_o.mixin(Thing, [Crawlable, Walkable, Runnable])
const thing = new Thing()
thing
.crawl()
.walk()
.run()
expect(thing.distanceFromOrigin).toBe(16)
})
it('accepts objects', () => {
const crawlable = {
crawl () {
const speed = 1
this.distanceFromOrigin += speed
return this
}
}
const walkable = {
walk () {
const speed = 5
this.distanceFromOrigin += speed
return this
}
}
const runnable = {
run () {
const speed = 10
this.distanceFromOrigin += speed
return this
}
}
.mixin([crawlable, walkable, runnable])
class Thing {
constructor () {
this.distanceFromOrigin = 0
}
}
const thing = new Thing()
thing
.crawl()
.walk()
.run()
expect(thing.distanceFromOrigin).toBe(16)
})
it('accepts classes', () => {
.mixin([Crawlable, Walkable, Runnable])
class Thing {
constructor () {
this.distanceFromOrigin = 0
}
}
const thing = new Thing()
thing
.crawl()
.walk()
.run()
expect(thing.distanceFromOrigin).toBe(16)
})