Upgrade Prettier to v2 GitOrigin-RevId: 85aa3fa1acb6332c4f58c46165a43d1a51471f33
124 lines
3.2 KiB
JavaScript
124 lines
3.2 KiB
JavaScript
const { expect } = require('chai')
|
|
const {
|
|
promisifyAll,
|
|
callbackifyMultiResult
|
|
} = require('../../../../app/src/util/promises')
|
|
|
|
describe('promisifyAll', function () {
|
|
describe('basic functionality', function () {
|
|
before(function () {
|
|
this.module = {
|
|
SOME_CONSTANT: 1,
|
|
asyncAdd(a, b, callback) {
|
|
callback(null, a + b)
|
|
},
|
|
asyncDouble(x, callback) {
|
|
this.asyncAdd(x, x, callback)
|
|
}
|
|
}
|
|
this.promisified = promisifyAll(this.module)
|
|
})
|
|
|
|
it('promisifies functions in the module', async function () {
|
|
const sum = await this.promisified.asyncAdd(29, 33)
|
|
expect(sum).to.equal(62)
|
|
})
|
|
|
|
it('binds this to the original module', async function () {
|
|
const sum = await this.promisified.asyncDouble(38)
|
|
expect(sum).to.equal(76)
|
|
})
|
|
|
|
it('does not copy over non-functions', async function () {
|
|
expect(this.promisified).not.to.have.property('SOME_CONSTANT')
|
|
})
|
|
|
|
it('does not modify the prototype of the module', async function () {
|
|
expect(this.promisified.toString()).to.equal('[object Object]')
|
|
})
|
|
})
|
|
|
|
describe('without option', function () {
|
|
before(function () {
|
|
this.module = {
|
|
asyncAdd(a, b, callback) {
|
|
callback(null, a + b)
|
|
},
|
|
syncAdd(a, b) {
|
|
return a + b
|
|
}
|
|
}
|
|
this.promisified = promisifyAll(this.module, { without: 'syncAdd' })
|
|
})
|
|
|
|
it('does not promisify excluded functions', function () {
|
|
expect(this.promisified.syncAdd).not.to.exist
|
|
})
|
|
|
|
it('promisifies other functions', async function () {
|
|
const sum = await this.promisified.asyncAdd(12, 89)
|
|
expect(sum).to.equal(101)
|
|
})
|
|
})
|
|
|
|
describe('multiResult option', function () {
|
|
before(function () {
|
|
this.module = {
|
|
asyncAdd(a, b, callback) {
|
|
callback(null, a + b)
|
|
},
|
|
asyncArithmetic(a, b, callback) {
|
|
callback(null, a + b, a * b)
|
|
}
|
|
}
|
|
this.promisified = promisifyAll(this.module, {
|
|
multiResult: { asyncArithmetic: ['sum', 'product'] }
|
|
})
|
|
})
|
|
|
|
it('promisifies multi-result functions', async function () {
|
|
const result = await this.promisified.asyncArithmetic(3, 6)
|
|
expect(result).to.deep.equal({ sum: 9, product: 18 })
|
|
})
|
|
|
|
it('promisifies other functions normally', async function () {
|
|
const sum = await this.promisified.asyncAdd(6, 1)
|
|
expect(sum).to.equal(7)
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('callbackifyMultiResult', function () {
|
|
it('callbackifies a multi-result function', function (done) {
|
|
async function asyncArithmetic(a, b) {
|
|
return { sum: a + b, product: a * b }
|
|
}
|
|
const callbackified = callbackifyMultiResult(asyncArithmetic, [
|
|
'sum',
|
|
'product'
|
|
])
|
|
callbackified(3, 11, (err, sum, product) => {
|
|
if (err != null) {
|
|
return done(err)
|
|
}
|
|
expect(sum).to.equal(14)
|
|
expect(product).to.equal(33)
|
|
done()
|
|
})
|
|
})
|
|
|
|
it('propagates errors', function (done) {
|
|
async function asyncBomb() {
|
|
throw new Error('BOOM!')
|
|
}
|
|
const callbackified = callbackifyMultiResult(asyncBomb, [
|
|
'explosives',
|
|
'dynamite'
|
|
])
|
|
callbackified(err => {
|
|
expect(err).to.exist
|
|
done()
|
|
})
|
|
})
|
|
})
|