Skip to content

Commit

Permalink
chore: add standalone function deprecation helper (#16782)
Browse files Browse the repository at this point in the history
  • Loading branch information
codebytere committed Feb 8, 2019
1 parent c8282ef commit e790dbd
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 3 deletions.
8 changes: 8 additions & 0 deletions lib/common/api/deprecate.js
Expand Up @@ -35,6 +35,14 @@ const deprecate = {
}
},

function: (fn, newName) => {
const warn = warnOnce(fn.name, newName)
return function () {
warn()
fn.apply(this, arguments)
}
},

event: (emitter, oldName, newName) => {
const warn = newName.startsWith('-') /* internal event */
? warnOnce(`${oldName} event`)
Expand Down
32 changes: 29 additions & 3 deletions spec/api-deprecations-spec.js
Expand Up @@ -82,9 +82,35 @@ describe('deprecations', () => {
expect(msg).to.include(prop)
})

it('warns exactly once when a function is deprecated with no replacement', () => {
let msg
deprecations.setHandler(m => { msg = m })

function oldFn () { return 'hello' }
const deprecatedFn = deprecate.function(oldFn)
deprecatedFn()

expect(msg).to.be.a('string')
expect(msg).to.include('oldFn')
})

it('warns exactly once when a function is deprecated with a replacement', () => {
let msg
deprecations.setHandler(m => { msg = m })

function oldFn () { return 'hello' }
function newFn () { return 'goodbye' }
const deprecatedFn = deprecate.function(oldFn, newFn)
deprecatedFn()

expect(msg).to.be.a('string')
expect(msg).to.include('oldFn')
expect(msg).to.include('newFn')
})

it('warns only once per item', () => {
const messages = []
deprecations.setHandler(message => { messages.push(message) })
deprecations.setHandler(message => messages.push(message))

const key = 'foo'
const val = 'bar'
Expand Down Expand Up @@ -125,15 +151,15 @@ describe('deprecations', () => {

const enableCallbackWarnings = () => {
warnings = []
deprecations.setHandler(warning => { warnings.push(warning) })
deprecations.setHandler(warning => warnings.push(warning))
process.enablePromiseAPIs = true
}

beforeEach(() => {
deprecations.setHandler(null)
process.throwDeprecation = true

promiseFunc = param => new Promise((resolve, reject) => { resolve(param) })
promiseFunc = param => new Promise((resolve, reject) => resolve(param))
})

it('acts as a pass-through for promise-based invocations', async () => {
Expand Down

0 comments on commit e790dbd

Please sign in to comment.