HEX
Server: nginx/1.24.0
System: Linux nowruzgan 6.8.0-57-generic #59-Ubuntu SMP PREEMPT_DYNAMIC Sat Mar 15 17:40:59 UTC 2025 x86_64
User: babak (1000)
PHP: 8.3.6
Disabled: NONE
Upload Files
File: //usr/share/opensearch-dashboards/node_modules/async-value-promise/test.js
'use strict'

var tap = require('tap')
var AsyncValuePromise = require('./')

tap.test('resolve', t => {
  var promise = new AsyncValuePromise()

  promise.then(value => {
    t.equal(value, 'hello')
    t.end()
  })

  setImmediate(() => {
    promise.resolve('hello')
  })
})

tap.test('reject', t => {
  var promise = new AsyncValuePromise()

  promise.then(null, error => {
    t.equal(error, 'hello')
    t.end()
  })

  setImmediate(() => {
    promise.reject('hello')
  })
})

tap.test('throw on reject after resolve', t => {
  var promise = new AsyncValuePromise()
  promise.resolve('pass')
  t.throws(() => promise.reject('fail'))
  t.end()
})

tap.test('throw on resolve after reject', t => {
  var promise = new AsyncValuePromise()
  promise.reject('fail')
  t.throws(() => promise.resolve('pass'))
  t.end()
})

tap.test('catch', t => {
  var promise = new AsyncValuePromise()

  promise.catch(error => {
    t.equal(error, 'hello')
    t.end()
  })

  setImmediate(() => {
    promise.reject('hello')
  })
})

tap.test('all success', t => {
  var promiseA = new AsyncValuePromise()
  var promiseB = new AsyncValuePromise()
  var promise = AsyncValuePromise.all([
    promiseA,
    promiseB
  ])

  promise
    .then((values) => {
      t.equal(values[0], 'first')
      t.equal(values[1], 'second')
      t.end()
    })
    .catch(() => {
      t.fail('should not reject')
    })

  setImmediate(() => {
    promiseB.resolve('second')
    setImmediate(() => {
      promiseA.resolve('first')
    })
  })
})

tap.test('all failure', t => {
  var promiseA = new AsyncValuePromise()
  var promiseB = new AsyncValuePromise()
  var promise = AsyncValuePromise.all([ promiseA, promiseB ])

  promise
    .then(() => t.fail('should not resolve'))
    .catch(error => {
      t.equal(error, 'error')
      t.end()
    })

  setImmediate(() => {
    promiseA.resolve('success')
    promiseB.reject('error')
  })
})

tap.test('all empty', t => {
  var promise = AsyncValuePromise.all([])

  promise
    .then((values) => {
      t.equal(values.length, 0)
      t.end()
    })
    .catch(() => {
      t.fail('should not reject')
    })
})

tap.test('static resolve', t => {
  var promise = AsyncValuePromise.resolve('hello')

  promise
    .then(value => {
      t.equal(value, 'hello')
      t.end()
    })
    .catch(() => t.fail('should not reject'))
})

tap.test('static reject', t => {
  var promise = AsyncValuePromise.reject('hello')

  promise
    .then(() => t.fail('should not resolve'))
    .catch(error => {
      t.equal(error, 'hello')
      t.end()
    })
})

tap.test('catch', t => {
  var promise = AsyncValuePromise.reject('world')

  promise
    .catch(name => 'hello ' + name)
    .then(value => {
      t.equal(value, 'hello world')
      t.end()
    })
    .catch(() => t.fail('should not reject'))
})