mirror of
https://github.com/pulsar-edit/pulsar.git
synced 2024-09-20 07:28:08 +03:00
110 lines
2.3 KiB
JavaScript
110 lines
2.3 KiB
JavaScript
function beforeEach (fn) {
|
|
global.beforeEach(() => {
|
|
const result = fn()
|
|
if (result instanceof Promise) {
|
|
waitsForPromise(() => result)
|
|
}
|
|
})
|
|
}
|
|
|
|
function afterEach (fn) {
|
|
global.afterEach(() => {
|
|
const result = fn()
|
|
if (result instanceof Promise) {
|
|
waitsForPromise(() => result)
|
|
}
|
|
})
|
|
}
|
|
|
|
;['it', 'fit', 'ffit', 'fffit'].forEach(name => {
|
|
exports[name] = (description, fn) => {
|
|
if (fn === undefined) {
|
|
global[name](description)
|
|
return
|
|
}
|
|
|
|
global[name](description, () => {
|
|
const result = fn()
|
|
if (result instanceof Promise) {
|
|
waitsForPromise(() => result)
|
|
}
|
|
})
|
|
}
|
|
})
|
|
|
|
async function conditionPromise (condition, description = 'anonymous condition') {
|
|
const startTime = Date.now()
|
|
|
|
while (true) {
|
|
await timeoutPromise(100)
|
|
|
|
if (await condition()) {
|
|
return
|
|
}
|
|
|
|
if (Date.now() - startTime > 5000) {
|
|
throw new Error('Timed out waiting on ' + description)
|
|
}
|
|
}
|
|
}
|
|
|
|
function timeoutPromise (timeout) {
|
|
return new Promise(resolve => {
|
|
global.setTimeout(resolve, timeout)
|
|
})
|
|
}
|
|
|
|
function waitsForPromise (fn) {
|
|
const promise = fn()
|
|
global.waitsFor('spec promise to resolve', done => {
|
|
promise.then(done, error => {
|
|
jasmine.getEnv().currentSpec.fail(error)
|
|
done()
|
|
})
|
|
})
|
|
}
|
|
|
|
function emitterEventPromise (emitter, event, timeout = 15000) {
|
|
return new Promise((resolve, reject) => {
|
|
const timeoutHandle = setTimeout(() => {
|
|
reject(new Error(`Timed out waiting for '${event}' event`))
|
|
}, timeout)
|
|
emitter.once(event, () => {
|
|
clearTimeout(timeoutHandle)
|
|
resolve()
|
|
})
|
|
})
|
|
}
|
|
|
|
function promisify (original) {
|
|
return function (...args) {
|
|
return new Promise((resolve, reject) => {
|
|
args.push((err, ...results) => {
|
|
if (err) {
|
|
reject(err)
|
|
} else {
|
|
resolve(...results)
|
|
}
|
|
})
|
|
|
|
return original(...args)
|
|
})
|
|
}
|
|
}
|
|
|
|
function promisifySome (obj, fnNames) {
|
|
const result = {}
|
|
for (const fnName of fnNames) {
|
|
result[fnName] = promisify(obj[fnName])
|
|
}
|
|
return result
|
|
}
|
|
|
|
exports.afterEach = afterEach
|
|
exports.beforeEach = beforeEach
|
|
exports.conditionPromise = conditionPromise
|
|
exports.emitterEventPromise = emitterEventPromise
|
|
exports.promisify = promisify
|
|
exports.promisifySome = promisifySome
|
|
exports.timeoutPromise = timeoutPromise
|