2016-01-30 08:50:46 -08:00
|
|
|
// Licensed to the Software Freedom Conservancy (SFC) under one
|
|
|
|
|
// or more contributor license agreements. See the NOTICE file
|
|
|
|
|
// distributed with this work for additional information
|
|
|
|
|
// regarding copyright ownership. The SFC licenses this file
|
|
|
|
|
// to you under the Apache License, Version 2.0 (the
|
|
|
|
|
// "License"); you may not use this file except in compliance
|
|
|
|
|
// with the License. You may obtain a copy of the License at
|
|
|
|
|
//
|
|
|
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
|
//
|
|
|
|
|
// Unless required by applicable law or agreed to in writing,
|
|
|
|
|
// software distributed under the License is distributed on an
|
|
|
|
|
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
|
|
|
// KIND, either express or implied. See the License for the
|
|
|
|
|
// specific language governing permissions and limitations
|
|
|
|
|
// under the License.
|
|
|
|
|
|
2020-08-03 17:56:31 +03:00
|
|
|
'use strict'
|
2016-01-30 08:50:46 -08:00
|
|
|
|
2024-04-16 01:50:58 +05:30
|
|
|
const assert = require('node:assert')
|
2020-08-03 17:56:31 +03:00
|
|
|
const sinon = require('sinon')
|
2016-01-30 08:50:46 -08:00
|
|
|
|
|
|
|
|
class StubError extends Error {
|
|
|
|
|
constructor(opt_msg) {
|
2020-08-03 17:56:31 +03:00
|
|
|
super(opt_msg)
|
|
|
|
|
this.name = this.constructor.name
|
2016-01-30 08:50:46 -08:00
|
|
|
}
|
|
|
|
|
}
|
2024-03-08 12:13:00 +00:00
|
|
|
|
2020-08-03 17:56:31 +03:00
|
|
|
exports.StubError = StubError
|
2016-01-30 08:50:46 -08:00
|
|
|
|
2020-08-03 17:56:31 +03:00
|
|
|
exports.throwStubError = function () {
|
|
|
|
|
throw new StubError()
|
|
|
|
|
}
|
2016-01-30 08:50:46 -08:00
|
|
|
|
2020-08-03 17:56:31 +03:00
|
|
|
exports.assertIsStubError = function (value) {
|
|
|
|
|
assert.ok(value instanceof StubError, value + ' is not a ' + StubError.name)
|
|
|
|
|
}
|
2016-01-30 08:50:46 -08:00
|
|
|
|
2020-08-03 17:56:31 +03:00
|
|
|
exports.assertIsInstance = function (ctor, value) {
|
|
|
|
|
assert.ok(value instanceof ctor, 'Not a ' + ctor.name + ': ' + value)
|
|
|
|
|
}
|
2016-01-30 08:50:46 -08:00
|
|
|
|
|
|
|
|
function callbackPair(cb, eb) {
|
|
|
|
|
if (cb && eb) {
|
2020-08-03 17:56:31 +03:00
|
|
|
throw new TypeError('can only specify one of callback or errback')
|
2016-01-30 08:50:46 -08:00
|
|
|
}
|
|
|
|
|
|
2020-08-03 17:56:31 +03:00
|
|
|
let callback = cb ? sinon.spy(cb) : sinon.spy()
|
|
|
|
|
let errback = eb ? sinon.spy(eb) : sinon.spy()
|
2016-01-30 08:50:46 -08:00
|
|
|
|
|
|
|
|
function assertCallback() {
|
2020-08-03 17:56:31 +03:00
|
|
|
assert.ok(callback.called, 'callback not called')
|
|
|
|
|
assert.ok(!errback.called, 'errback called')
|
2016-01-30 08:50:46 -08:00
|
|
|
if (callback.threw()) {
|
2020-08-03 17:56:31 +03:00
|
|
|
throw callback.exceptions[0]
|
2016-01-30 08:50:46 -08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function assertErrback() {
|
2020-08-03 17:56:31 +03:00
|
|
|
assert.ok(!callback.called, 'callback called')
|
|
|
|
|
assert.ok(errback.called, 'errback not called')
|
2016-01-30 08:50:46 -08:00
|
|
|
if (errback.threw()) {
|
2020-08-03 17:56:31 +03:00
|
|
|
throw errback.exceptions[0]
|
2016-01-30 08:50:46 -08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function assertNeither() {
|
2020-08-03 17:56:31 +03:00
|
|
|
assert.ok(!callback.called, 'callback called')
|
|
|
|
|
assert.ok(!errback.called, 'errback called')
|
2016-01-30 08:50:46 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
callback,
|
|
|
|
|
errback,
|
|
|
|
|
assertCallback,
|
|
|
|
|
assertErrback,
|
2020-08-03 17:56:31 +03:00
|
|
|
assertNeither,
|
|
|
|
|
}
|
2016-01-30 08:50:46 -08:00
|
|
|
}
|
2024-03-08 12:13:00 +00:00
|
|
|
|
2020-08-03 17:56:31 +03:00
|
|
|
exports.callbackPair = callbackPair
|
2016-01-30 08:50:46 -08:00
|
|
|
|
2020-08-03 17:56:31 +03:00
|
|
|
exports.callbackHelper = function (cb) {
|
|
|
|
|
let pair = callbackPair(cb)
|
|
|
|
|
let wrapped = pair.callback.bind(null)
|
|
|
|
|
wrapped.assertCalled = () => pair.assertCallback()
|
|
|
|
|
wrapped.assertNotCalled = () => pair.assertNeither()
|
|
|
|
|
return wrapped
|
|
|
|
|
}
|