// test simple event
opts = {a:0}
xrf.addEventListener('foo1', (opts) => opts.a = 1 )
xrf.emit('foo1',opts)
setTimeout( () => console.assert( opts.a, {opts, reason:"xrf.emit('foo1',...) should set a to 1"}), 100)

// test simple promise event
opts = {a:0}
xrf.addEventListener('foo2', (e) => {
  let p = e.promise()
  e.a = 1
  p.resolve(e)
})
xrf.emit('foo2',opts)
.then( (opts) => {
  console.assert( opts.a, {opts, reason:"xrf.emit('foo2',...) should set a to 1 via promise"})
})

// test multiple promise event 
opts = {a:""}
xrf.addEventListener('foo3', (e) => {
  let p = e.promise()
  setTimeout( () => {
    e.a += "1"
    p.resolve(e)
  }, 100 )
})
xrf.addEventListener('foo3', (e) => {
  let p = e.promise()
  e.a += "2"
  p.resolve(e)
})
xrf.emit('foo3',opts)
.then( (opts) => {
  opts.a += "3"
  console.assert( opts.a == "213", {opts, reason:"xrf.emit('foo3',...) should support multiple promise listeners"})
})