You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
114 lines
2.5 KiB
114 lines
2.5 KiB
4 years ago
|
'use strict'
|
||
|
|
||
|
const test = require('tap').test
|
||
|
const boot = require('..')
|
||
|
|
||
|
test('reentrant', (t) => {
|
||
|
t.plan(7)
|
||
|
|
||
|
const app = boot()
|
||
|
let firstLoaded = false
|
||
|
let secondLoaded = false
|
||
|
|
||
|
app
|
||
|
.use(first)
|
||
|
.after(() => {
|
||
|
t.ok(firstLoaded, 'first is loaded')
|
||
|
t.ok(secondLoaded, 'second is loaded')
|
||
|
t.pass('booted')
|
||
|
})
|
||
|
|
||
|
function first (s, opts, done) {
|
||
|
t.notOk(firstLoaded, 'first is not loaded')
|
||
|
t.notOk(secondLoaded, 'second is not loaded')
|
||
|
firstLoaded = true
|
||
|
s.use(second)
|
||
|
done()
|
||
|
}
|
||
|
|
||
|
function second (s, opts, done) {
|
||
|
t.ok(firstLoaded, 'first is loaded')
|
||
|
t.notOk(secondLoaded, 'second is not loaded')
|
||
|
secondLoaded = true
|
||
|
done()
|
||
|
}
|
||
|
})
|
||
|
|
||
|
test('reentrant with callbacks deferred', (t) => {
|
||
|
t.plan(11)
|
||
|
|
||
|
const app = boot()
|
||
|
let firstLoaded = false
|
||
|
let secondLoaded = false
|
||
|
let thirdLoaded = false
|
||
|
|
||
|
app.use(first)
|
||
|
|
||
|
function first (s, opts, done) {
|
||
|
t.notOk(firstLoaded, 'first is not loaded')
|
||
|
t.notOk(secondLoaded, 'second is not loaded')
|
||
|
t.notOk(thirdLoaded, 'third is not loaded')
|
||
|
firstLoaded = true
|
||
|
s.use(second)
|
||
|
setTimeout(() => {
|
||
|
try {
|
||
|
s.use(third)
|
||
|
} catch (err) {
|
||
|
t.is(err.message, 'root plugin has already booted')
|
||
|
}
|
||
|
}, 500)
|
||
|
done()
|
||
|
}
|
||
|
|
||
|
function second (s, opts, done) {
|
||
|
t.ok(firstLoaded, 'first is loaded')
|
||
|
t.notOk(secondLoaded, 'second is not loaded')
|
||
|
t.notOk(thirdLoaded, 'third is not loaded')
|
||
|
secondLoaded = true
|
||
|
done()
|
||
|
}
|
||
|
|
||
|
function third (s, opts, done) {
|
||
|
thirdLoaded = true
|
||
|
done()
|
||
|
}
|
||
|
|
||
|
app.on('start', () => {
|
||
|
t.ok(firstLoaded, 'first is loaded')
|
||
|
t.ok(secondLoaded, 'second is loaded')
|
||
|
t.notOk(thirdLoaded, 'third is not loaded')
|
||
|
t.pass('booted')
|
||
|
})
|
||
|
})
|
||
|
|
||
|
test('multiple loading time', t => {
|
||
|
t.plan(1)
|
||
|
const app = boot()
|
||
|
|
||
|
function a (instance, opts, done) {
|
||
|
(opts.use || []).forEach(_ => { instance.use(_, { use: opts.subUse || [] }) })
|
||
|
setTimeout(done, 10)
|
||
|
}
|
||
|
const pointer = a
|
||
|
|
||
|
function b (instance, opts, done) {
|
||
|
(opts.use || []).forEach(_ => { instance.use(_, { use: opts.subUse || [] }) })
|
||
|
setTimeout(done, 20)
|
||
|
}
|
||
|
|
||
|
function c (instance, opts, done) {
|
||
|
(opts.use || []).forEach(_ => { instance.use(_, { use: opts.subUse || [] }) })
|
||
|
setTimeout(done, 30)
|
||
|
}
|
||
|
|
||
|
app
|
||
|
.use(function a (instance, opts, done) {
|
||
|
instance.use(pointer, { use: [b], subUse: [c] })
|
||
|
.use(b)
|
||
|
setTimeout(done, 0)
|
||
|
})
|
||
|
.after(() => {
|
||
|
t.pass('booted')
|
||
|
})
|
||
|
})
|