" don't spam the user when Vim is started in Vi compatibility mode
let s:cpo_save = &cpo
set cpo&vim

func! Test_PromiseNew() abort
	let l:sut = go#promise#New(function('s:work', []), 100, -1)
	call assert_true(has_key(l:sut, 'wrapper'))
	call assert_true(has_key(l:sut, 'await'))
endfunc

func! Test_PromiseAwait() abort
	let l:expected = 1
	let l:default = -1
	let l:sut = go#promise#New(function('s:work', [l:expected]), 100, l:default)

	call timer_start(10, l:sut.wrapper)

	let l:actual = call(l:sut.await, [])
	call assert_equal(l:expected, l:actual)
endfunc

func! Test_PromiseAwait_Timeout() abort
	let l:desired = 1
	let l:expected = -1
	let l:sut = go#promise#New(function('s:work', [l:desired]), 10, l:expected)

	call timer_start(100, l:sut.wrapper)

	let l:actual = call(l:sut.await, [])
	call assert_equal(l:expected, l:actual)
endfunc

func! s:work(val, timer)
	return a:val
endfunc

" restore Vi compatibility settings
let &cpo = s:cpo_save
unlet s:cpo_save

" vim: sw=2 ts=2 et