2020-10-06 00:52:05 +03:00
|
|
|
#!/usr/bin/env node
|
|
|
|
|
/**********************************************************************
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
*
|
2020-10-06 01:32:33 +03:00
|
|
|
**********************************************/ /* c8 ignore next 2 */
|
2020-10-06 00:52:05 +03:00
|
|
|
((typeof define)[0]=='u'?function(f){module.exports=f(require)}:define)
|
|
|
|
|
(function(require){ var module={} // make module AMD/node compatible...
|
|
|
|
|
/*********************************************************************/
|
|
|
|
|
|
|
|
|
|
var colors = require('colors')
|
|
|
|
|
var test = require('ig-test')
|
2020-10-06 03:09:44 +03:00
|
|
|
var object = require('ig-object')
|
2020-10-06 00:52:05 +03:00
|
|
|
|
|
|
|
|
var types = require('./main')
|
2020-11-05 16:40:41 +03:00
|
|
|
var promise = require('./Promise')
|
2020-10-06 00:52:05 +03:00
|
|
|
|
2020-11-15 00:24:22 +03:00
|
|
|
var containers = require('./containers')
|
|
|
|
|
var generator = require('./generator')
|
|
|
|
|
var events = require('./event')
|
2020-11-15 03:14:28 +03:00
|
|
|
var runner = require('./runner')
|
2020-11-15 00:24:22 +03:00
|
|
|
|
2020-10-06 00:52:05 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
//---------------------------------------------------------------------
|
|
|
|
|
|
2020-10-07 03:03:41 +03:00
|
|
|
/*
|
2020-10-06 00:52:05 +03:00
|
|
|
var setups = test.Setups({
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
var modifiers = test.Modifiers({
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
var tests = test.Tests({
|
|
|
|
|
})
|
2020-10-07 03:03:41 +03:00
|
|
|
//*/
|
2020-10-06 00:52:05 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
var cases = test.Cases({
|
2020-10-06 03:09:44 +03:00
|
|
|
// Object.js
|
2020-10-08 15:09:21 +03:00
|
|
|
//
|
2020-10-06 03:09:44 +03:00
|
|
|
Object: function(assert){
|
|
|
|
|
var o = Object.assign(
|
|
|
|
|
Object.create({
|
|
|
|
|
x: 111,
|
|
|
|
|
y: 222,
|
|
|
|
|
}), {
|
|
|
|
|
y: 333,
|
|
|
|
|
z: 444,
|
|
|
|
|
})
|
2020-10-07 16:46:59 +03:00
|
|
|
var oo = assert(Object.flatCopy(o), 'Object.flatCopy(..)')
|
2020-10-06 03:09:44 +03:00
|
|
|
|
2020-10-07 16:46:59 +03:00
|
|
|
assert(Object.match(oo, {x: 111, y: 333, z: 444}), 'Object.match(..)')
|
2020-10-08 15:09:21 +03:00
|
|
|
|
|
|
|
|
var k = ['z', 'x', 'y']
|
|
|
|
|
assert(Object.keys(Object.sort(oo, k)).cmp(k), 'Object.sort(,,)')
|
|
|
|
|
|
|
|
|
|
assert(Object.keys(Object.sort(oo)).cmp(k.slice().sort()), 'Object.sort(,,)')
|
|
|
|
|
|
|
|
|
|
var cmp = function(a, b){
|
|
|
|
|
return a == 'y' ?
|
|
|
|
|
1
|
|
|
|
|
: a == 'z' ?
|
|
|
|
|
-1
|
|
|
|
|
: 0 }
|
|
|
|
|
assert(Object.keys(Object.sort(oo, cmp)).cmp(k.slice().sort(cmp)), 'Object.sort(,,)')
|
2020-10-06 03:09:44 +03:00
|
|
|
},
|
2020-10-06 03:36:40 +03:00
|
|
|
|
2020-10-06 02:43:16 +03:00
|
|
|
// Array.js
|
2020-10-09 05:55:53 +03:00
|
|
|
// - flat (???)
|
|
|
|
|
// - includes (???)
|
2020-10-06 02:43:16 +03:00
|
|
|
// - first
|
|
|
|
|
// - last
|
|
|
|
|
// - compact
|
|
|
|
|
// - len
|
|
|
|
|
// - unique
|
|
|
|
|
// - tailUnique
|
|
|
|
|
// - cmp
|
|
|
|
|
// - setCmp
|
|
|
|
|
// - sortAs
|
|
|
|
|
// - mapChunks
|
|
|
|
|
// - filterChunks
|
|
|
|
|
// - reduceChunks
|
2020-10-09 05:55:53 +03:00
|
|
|
// - toKeys
|
|
|
|
|
// - toMap
|
2020-10-06 02:43:16 +03:00
|
|
|
Array: function(assert){
|
|
|
|
|
},
|
2020-10-07 03:53:10 +03:00
|
|
|
|
|
|
|
|
// Set.js
|
|
|
|
|
// - unite
|
|
|
|
|
// - intersect
|
|
|
|
|
// - subtract
|
2020-10-08 15:09:21 +03:00
|
|
|
// - sort
|
|
|
|
|
Set: function(assert){
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// Map.js
|
|
|
|
|
// - sort
|
|
|
|
|
Map: function(assert){
|
2020-11-22 23:50:05 +03:00
|
|
|
},
|
|
|
|
|
|
|
|
|
|
Generator: function(assert){
|
2020-10-07 03:53:10 +03:00
|
|
|
},
|
2020-10-06 02:43:16 +03:00
|
|
|
|
2020-10-07 03:53:10 +03:00
|
|
|
String: function(assert){
|
|
|
|
|
assert(''.capitalize() == '')
|
|
|
|
|
assert('a'.capitalize() == 'A')
|
|
|
|
|
assert('abc'.capitalize() == 'Abc')
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
RegExp: function(assert){
|
|
|
|
|
},
|
|
|
|
|
|
2022-06-06 12:29:13 +03:00
|
|
|
IterablePromise: test.TestSet(function(){
|
2023-01-06 12:30:24 +03:00
|
|
|
var create = function(assert, value, expected){
|
2022-06-06 12:29:13 +03:00
|
|
|
return {
|
2023-01-06 12:30:24 +03:00
|
|
|
input: expected ?? value,
|
2022-06-06 12:29:13 +03:00
|
|
|
output: assert(Promise.iter(value), 'Promise.iter(', value, ')'),
|
|
|
|
|
} }
|
|
|
|
|
|
|
|
|
|
this.Setup({
|
|
|
|
|
empty: function(assert){
|
|
|
|
|
return create(assert, []) },
|
|
|
|
|
value: function(assert){
|
|
|
|
|
return create(assert, 123) },
|
|
|
|
|
array: function(assert){
|
|
|
|
|
return create(assert, [1, 2, 3]) },
|
|
|
|
|
nested_array: function(assert){
|
|
|
|
|
return create(assert, [1, 2, [3]]) },
|
|
|
|
|
promise_value: function(assert){
|
|
|
|
|
return create(assert, Promise.resolve(123)) },
|
|
|
|
|
promise_array: function(assert){
|
|
|
|
|
return create(assert, Promise.resolve([1, 2, 3])) },
|
|
|
|
|
promise_nested_array: function(assert){
|
|
|
|
|
return create(assert, Promise.resolve([1, 2, [3]])) },
|
|
|
|
|
array_mixed: function(assert){
|
|
|
|
|
return create(assert, [1, Promise.resolve(2), 3]) },
|
|
|
|
|
nested_array_mixed: function(assert){
|
2023-01-06 12:30:24 +03:00
|
|
|
return create(assert,
|
|
|
|
|
[1, Promise.resolve(2), [3], Promise.resolve([4])],
|
|
|
|
|
[1, 2, [3], [4]]) },
|
2022-06-06 12:29:13 +03:00
|
|
|
promise_array_mixed: function(assert){
|
2023-01-06 12:30:24 +03:00
|
|
|
return create(assert,
|
|
|
|
|
Promise.resolve([1, Promise.resolve(2), 3]),
|
|
|
|
|
[1, 2, 3]) },
|
2022-06-06 12:29:13 +03:00
|
|
|
promise_nested_array_mixed: function(assert){
|
2023-01-06 12:30:24 +03:00
|
|
|
return create(assert,
|
2023-01-13 19:31:10 +03:00
|
|
|
Promise.resolve([
|
|
|
|
|
1,
|
|
|
|
|
Promise.resolve(2),
|
|
|
|
|
[3],
|
|
|
|
|
Promise.resolve([4]),
|
|
|
|
|
]),
|
2023-01-06 12:30:24 +03:00
|
|
|
[1, 2, [3], [4]]) },
|
2022-06-06 12:29:13 +03:00
|
|
|
})
|
|
|
|
|
this.Modifier({
|
|
|
|
|
nest: function(assert, setup){
|
|
|
|
|
setup.output = Promise.iter(setup.output)
|
|
|
|
|
return setup },
|
2023-01-13 19:31:10 +03:00
|
|
|
iter_noargs: function(assert, setup){
|
2022-06-06 12:29:13 +03:00
|
|
|
setup.output = setup.output.iter()
|
|
|
|
|
return setup },
|
2023-01-13 19:31:10 +03:00
|
|
|
iter_asis: function(assert, setup){
|
|
|
|
|
setup.output = setup.output
|
|
|
|
|
.iter(function(e){
|
|
|
|
|
return [e] })
|
|
|
|
|
return setup },
|
|
|
|
|
iter_clear: function(assert, setup){
|
|
|
|
|
return {
|
|
|
|
|
input: [],
|
|
|
|
|
output: setup.output
|
|
|
|
|
.iter(function(e){
|
|
|
|
|
return [] }),
|
|
|
|
|
} },
|
2023-01-14 11:45:40 +03:00
|
|
|
/* XXX does not account for promises as input...
|
2023-01-14 03:32:30 +03:00
|
|
|
iter_flat: async function(assert, setup){
|
|
|
|
|
return {
|
|
|
|
|
input: setup.input instanceof Array ?
|
|
|
|
|
(await Promise.all(setup.input)).flat()
|
|
|
|
|
: [await setup.input],
|
|
|
|
|
output: setup.output
|
|
|
|
|
.iter(function(e){
|
|
|
|
|
return e }),
|
|
|
|
|
} },
|
|
|
|
|
//*/
|
2022-06-06 12:29:13 +03:00
|
|
|
|
|
|
|
|
map_asis: function(assert, setup){
|
|
|
|
|
setup.output = setup.output
|
|
|
|
|
.map(function(e){
|
|
|
|
|
return e })
|
|
|
|
|
return setup },
|
|
|
|
|
map_promise: function(assert, setup){
|
|
|
|
|
setup.output = setup.output
|
|
|
|
|
.map(function(e){
|
|
|
|
|
return Promise.resolve(e) })
|
|
|
|
|
return setup },
|
|
|
|
|
|
|
|
|
|
filter_all: function(assert, setup){
|
|
|
|
|
setup.output = setup.output
|
|
|
|
|
.filter(function(e){ return true })
|
|
|
|
|
return setup },
|
|
|
|
|
// XXX either the test is worng or something is broken...
|
|
|
|
|
filter_none: function(assert, setup){
|
|
|
|
|
return {
|
|
|
|
|
input: [],
|
|
|
|
|
output: setup.output
|
|
|
|
|
.filter(function(e){ return false }),
|
|
|
|
|
} },
|
2023-01-06 12:30:24 +03:00
|
|
|
filter_promise_all: function(assert, setup){
|
|
|
|
|
setup.output = setup.output
|
|
|
|
|
.filter(function(e){
|
|
|
|
|
return Promise.resolve(true) })
|
|
|
|
|
return setup },
|
|
|
|
|
filter_promise_none: function(assert, setup){
|
|
|
|
|
return {
|
|
|
|
|
input: [],
|
|
|
|
|
output: setup.output
|
|
|
|
|
.filter(function(e){
|
|
|
|
|
return Promise.resolve(false) }),
|
|
|
|
|
} },
|
|
|
|
|
//*/
|
2022-06-06 12:29:13 +03:00
|
|
|
|
2022-06-08 03:12:37 +03:00
|
|
|
/* XXX need tuning...
|
2022-06-08 03:10:36 +03:00
|
|
|
concat_basic: function(assert, {input, output}){
|
|
|
|
|
return {
|
|
|
|
|
input: [input].flat()
|
|
|
|
|
.concat(['a', 'b', 'c']),
|
|
|
|
|
output: output
|
|
|
|
|
.concat(['a', 'b', 'c']),
|
|
|
|
|
} },
|
|
|
|
|
concat_nested_array: function(assert, {input, output}){
|
|
|
|
|
return {
|
|
|
|
|
input: [input].flat()
|
|
|
|
|
.concat(['a', ['b'], 'c']),
|
|
|
|
|
output: output
|
|
|
|
|
.concat(['a', ['b'], 'c']),
|
|
|
|
|
} },
|
2022-06-08 03:12:37 +03:00
|
|
|
//*/
|
2022-06-08 03:10:36 +03:00
|
|
|
|
2022-06-06 12:29:13 +03:00
|
|
|
})
|
|
|
|
|
this.Test({
|
|
|
|
|
value: async function(assert, {input, output}){
|
|
|
|
|
|
|
|
|
|
var res = await output
|
|
|
|
|
|
|
|
|
|
assert(res instanceof Array, 'result is array')
|
|
|
|
|
|
|
|
|
|
input instanceof Array ?
|
2022-06-06 12:38:22 +03:00
|
|
|
// XXX this does not catch some errors -- map_promise specifically...
|
2022-06-06 12:29:13 +03:00
|
|
|
assert.array(res,
|
|
|
|
|
await Promise.all(input),
|
|
|
|
|
'array -> array')
|
|
|
|
|
: (input instanceof Promise && await input instanceof Array) ?
|
|
|
|
|
assert.array(res,
|
|
|
|
|
await input,
|
|
|
|
|
'promise array -> array')
|
|
|
|
|
: input instanceof Promise ?
|
|
|
|
|
assert.array(res,
|
|
|
|
|
[await input],
|
|
|
|
|
'promise value -> array')
|
|
|
|
|
: assert.array(res,
|
|
|
|
|
[input],
|
|
|
|
|
'value -> array') },
|
|
|
|
|
})
|
|
|
|
|
}),
|
|
|
|
|
Promise: async function(assert){
|
2020-11-05 16:40:41 +03:00
|
|
|
var p = assert(Promise.cooperative(), '.cooperative()')
|
2020-11-16 02:38:19 +03:00
|
|
|
|
2022-06-06 12:29:13 +03:00
|
|
|
assert(!p.isSet, 'promise unset')
|
|
|
|
|
|
2020-11-03 16:58:59 +03:00
|
|
|
var RESOLVE = 123
|
2022-06-06 12:29:13 +03:00
|
|
|
var then = false
|
|
|
|
|
var done = false
|
2020-11-03 16:58:59 +03:00
|
|
|
|
|
|
|
|
p.then(function(v){
|
2022-06-06 12:29:13 +03:00
|
|
|
then = assert(v == RESOLVE, '.then(..) handled') })
|
2020-11-03 16:58:59 +03:00
|
|
|
|
|
|
|
|
p.finally(function(){
|
2022-06-06 12:29:13 +03:00
|
|
|
done = assert(true, '.finally(..) handled') })
|
2020-11-03 16:58:59 +03:00
|
|
|
|
2022-06-06 12:29:13 +03:00
|
|
|
assert(!p.isSet, 'promise unset')
|
2020-11-03 17:04:30 +03:00
|
|
|
|
2020-11-05 16:40:41 +03:00
|
|
|
p.set(RESOLVE)
|
2020-11-03 16:58:59 +03:00
|
|
|
|
2022-06-06 12:29:13 +03:00
|
|
|
assert(p.isSet, 'promise set')
|
|
|
|
|
|
|
|
|
|
// allow the promise to finalize...
|
|
|
|
|
await p
|
|
|
|
|
|
|
|
|
|
assert(then, '.then(..): confirmed')
|
|
|
|
|
assert(done, '.done(..): confirmed')
|
|
|
|
|
|
|
|
|
|
// XXX
|
|
|
|
|
|
|
|
|
|
assert(await Promise.iter([1, Promise.resolve(2), [3]]), '.iter(..)')
|
|
|
|
|
|
|
|
|
|
assert.array(
|
|
|
|
|
await Promise.iter([1, 2, 3]),
|
|
|
|
|
[1, 2, 3],
|
|
|
|
|
'basic array')
|
|
|
|
|
assert.array(
|
|
|
|
|
await Promise.iter([1, Promise.resolve(2), 3]),
|
|
|
|
|
[1, 2, 3],
|
|
|
|
|
'promises as elements')
|
2022-12-29 15:53:16 +03:00
|
|
|
|
2023-01-04 06:39:55 +03:00
|
|
|
// XXX split this into separate cases...
|
2023-02-08 01:48:59 +03:00
|
|
|
for(var meth of ['iter', 'seqiter', 'seqstartiter']){
|
2023-01-04 06:39:55 +03:00
|
|
|
// XXX need a recursive assert...
|
|
|
|
|
var should_be = [ [1], [2], [3], [4], [5], [6] ]
|
|
|
|
|
var got = await Promise[meth]([
|
|
|
|
|
[1,1,1],
|
|
|
|
|
Promise.sync.resolve([2,2,2]),
|
|
|
|
|
Promise.resolve([3,3,3]),
|
|
|
|
|
Promise.iter([4,4,4]),
|
|
|
|
|
Promise.iter.resolve([5,5,5]),
|
|
|
|
|
Promise.all([6,6,6]),
|
|
|
|
|
],
|
|
|
|
|
function(e){
|
|
|
|
|
return e instanceof Array ?
|
|
|
|
|
[[ e[0] ]]
|
|
|
|
|
// XXX
|
|
|
|
|
: e })
|
|
|
|
|
assert(
|
|
|
|
|
should_be
|
|
|
|
|
.reduce(function(res, e, i){
|
|
|
|
|
//console.log('---', e, got[i])
|
|
|
|
|
if(res === false){
|
|
|
|
|
return false }
|
|
|
|
|
return e instanceof Array
|
|
|
|
|
&& got[i] instanceof Array
|
|
|
|
|
&& e.length == got[i].length
|
|
|
|
|
&& e[0] == got[i][0] }, true),
|
|
|
|
|
'pack/unpack', meth, got)
|
|
|
|
|
|
|
|
|
|
assert.array(
|
|
|
|
|
await Promise[meth]([1, Promise.resolve(2), Promise.resolve(3)]),
|
|
|
|
|
[1,2,3],
|
|
|
|
|
'flat unpack', meth)
|
2023-02-08 01:48:59 +03:00
|
|
|
|
|
|
|
|
assert.array(
|
|
|
|
|
await Promise[meth](
|
|
|
|
|
(function*(){ yield* [1, Promise.resolve(2), Promise.resolve(3)] })()),
|
|
|
|
|
[1,2,3],
|
|
|
|
|
'generator input', meth)
|
2023-01-04 06:39:55 +03:00
|
|
|
}
|
2023-01-06 12:30:24 +03:00
|
|
|
|
|
|
|
|
var order = []
|
|
|
|
|
await Promise.seqiter([
|
|
|
|
|
1,
|
|
|
|
|
Promise.resolve(2),
|
|
|
|
|
Promise.all([3,4]),
|
|
|
|
|
Promise.seqiter([5]),
|
|
|
|
|
6,
|
|
|
|
|
])
|
|
|
|
|
.flat()
|
|
|
|
|
.map(function(e){
|
|
|
|
|
order.push(e)
|
|
|
|
|
return e })
|
|
|
|
|
assert.array(
|
|
|
|
|
order,
|
|
|
|
|
[1,2,3,4,5,6],
|
|
|
|
|
'Promise.seqiter(..) handle order')
|
2023-01-07 13:07:43 +03:00
|
|
|
|
2023-01-08 22:45:20 +03:00
|
|
|
|
|
|
|
|
var test_async_handler = async function(input, output, handler, msg){
|
|
|
|
|
// sanity check...
|
2023-01-07 13:34:19 +03:00
|
|
|
assert.array(
|
|
|
|
|
await Promise.iter(input, handler),
|
|
|
|
|
output,
|
2023-01-11 15:44:56 +03:00
|
|
|
msg+' (sanity check -- fix first)')
|
2023-01-07 13:34:19 +03:00
|
|
|
assert.array(
|
|
|
|
|
await Promise.iter(input,
|
|
|
|
|
function(e){
|
2023-01-08 22:45:20 +03:00
|
|
|
return Promise.resolve(handler(e)) }),
|
2023-01-07 13:34:19 +03:00
|
|
|
await Promise.iter(input, handler),
|
2023-01-08 22:45:20 +03:00
|
|
|
msg) }
|
|
|
|
|
|
|
|
|
|
await test_async_handler(
|
2023-01-07 13:34:19 +03:00
|
|
|
[
|
|
|
|
|
1,
|
|
|
|
|
[2],
|
|
|
|
|
Promise.resolve(3),
|
|
|
|
|
Promise.resolve([4]),
|
|
|
|
|
],
|
|
|
|
|
[],
|
2023-01-08 22:45:20 +03:00
|
|
|
function(e){
|
|
|
|
|
return [] },
|
|
|
|
|
'handler returns promise (empty)')
|
|
|
|
|
await test_async_handler(
|
2023-01-07 13:34:19 +03:00
|
|
|
[
|
|
|
|
|
1,
|
|
|
|
|
[2],
|
|
|
|
|
Promise.resolve(3),
|
|
|
|
|
Promise.resolve([4]),
|
|
|
|
|
],
|
|
|
|
|
[ 'moo', 'moo', 'moo', 'moo' ],
|
2023-01-08 22:45:20 +03:00
|
|
|
function(e){
|
|
|
|
|
return ['moo'] },
|
|
|
|
|
'handler returns promise (array)')
|
2023-01-11 15:44:56 +03:00
|
|
|
await test_async_handler(
|
|
|
|
|
[
|
|
|
|
|
1,
|
|
|
|
|
[2],
|
|
|
|
|
Promise.resolve(3),
|
|
|
|
|
Promise.resolve([4]),
|
|
|
|
|
],
|
|
|
|
|
[ ['moo'], ['moo'], ['moo'], ['moo'] ],
|
|
|
|
|
function(e){
|
|
|
|
|
return [['moo']] },
|
|
|
|
|
'handler returns promise (array-array)')
|
2023-01-13 01:37:15 +03:00
|
|
|
|
|
|
|
|
// test STOP...
|
|
|
|
|
assert.array(
|
|
|
|
|
await Promise.iter([1,2,3,4], function(e){
|
|
|
|
|
if(e == 3){
|
|
|
|
|
throw Array.STOP }
|
|
|
|
|
return e }),
|
|
|
|
|
[1,2],
|
|
|
|
|
'.iter(..): STOP: basic')
|
|
|
|
|
assert.array(
|
|
|
|
|
await Promise.iter([1,2,Promise.resolve(3),4], function(e){
|
|
|
|
|
if(e == 3){
|
|
|
|
|
throw Array.STOP }
|
|
|
|
|
return e }),
|
|
|
|
|
// NOTE: 4 here is present as it was handled before the promise resolved...
|
|
|
|
|
[1,2,4],
|
|
|
|
|
'.iter(..): STOP: delayed')
|
|
|
|
|
assert.array(
|
|
|
|
|
await Promise.iter([1,2,Promise.resolve(3),4], function(e){
|
|
|
|
|
if(e == 3){
|
|
|
|
|
throw Array.STOP('stop') }
|
|
|
|
|
return e }),
|
|
|
|
|
// NOTE: 4 here is present as it was handled before the promise resolved...
|
|
|
|
|
[1,2,'stop',4],
|
|
|
|
|
'.iter(..): STOP(..): delayed')
|
|
|
|
|
assert.array(
|
|
|
|
|
await Promise.seqiter([1,2,3,4], function(e){
|
|
|
|
|
if(e == 3){
|
|
|
|
|
throw Array.STOP }
|
|
|
|
|
return e }),
|
|
|
|
|
[1,2],
|
|
|
|
|
'.seqiter(..): STOP: basic')
|
|
|
|
|
assert.array(
|
|
|
|
|
await Promise.seqiter([1,2,Promise.resolve(3),4], function(e){
|
|
|
|
|
if(e == 3){
|
|
|
|
|
throw Array.STOP }
|
|
|
|
|
return e }),
|
|
|
|
|
[1,2],
|
|
|
|
|
'.seqiter(..): STOP: delayed')
|
|
|
|
|
assert.array(
|
|
|
|
|
await Promise.seqiter([1,2,Promise.resolve(3),4], function(e){
|
|
|
|
|
if(e == 3){
|
|
|
|
|
throw Array.STOP('stop') }
|
|
|
|
|
return e }),
|
|
|
|
|
// NOTE: 4 here is present as it was handled before the promise resolved...
|
|
|
|
|
[1,2,'stop'],
|
|
|
|
|
'.seqiter(..): STOP(..): delayed')
|
2023-02-06 18:48:28 +03:00
|
|
|
|
|
|
|
|
// XXX test .seqstartiter(..)
|
2023-02-07 19:34:07 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// error...
|
|
|
|
|
for(var iter of ['iter', 'seqiter', 'seqstartiter']){
|
|
|
|
|
assert(
|
2023-02-08 01:48:59 +03:00
|
|
|
await Promise[iter](
|
|
|
|
|
[1,2,Promise.resolve(3),4,5],
|
2023-02-07 19:34:07 +03:00
|
|
|
function(e){
|
|
|
|
|
if(e == 2){
|
|
|
|
|
throw 'ERROR' }
|
|
|
|
|
return e })
|
|
|
|
|
.catch(function(err){
|
|
|
|
|
return 'done' })
|
|
|
|
|
== 'done',
|
|
|
|
|
`.${iter}(..): .catch(..)`)
|
|
|
|
|
assert(
|
2023-02-08 01:48:59 +03:00
|
|
|
await Promise[iter](
|
|
|
|
|
[1,2,Promise.resolve(3),4,5],
|
2023-02-07 19:34:07 +03:00
|
|
|
function(e){
|
|
|
|
|
if(e == 2){
|
|
|
|
|
throw 'ERROR' }
|
|
|
|
|
return e },
|
|
|
|
|
function(err){
|
|
|
|
|
return 'done' })
|
|
|
|
|
== 'done',
|
|
|
|
|
`.${iter}(..): onerror(..)`)
|
|
|
|
|
assert(
|
2023-02-08 01:48:59 +03:00
|
|
|
await Promise[iter](
|
|
|
|
|
[1,2,Promise.resolve(3),4,5],
|
2023-02-07 19:34:07 +03:00
|
|
|
function(e){
|
|
|
|
|
if(e == 3){
|
|
|
|
|
throw 'ERROR' }
|
|
|
|
|
return e },
|
|
|
|
|
function(err){
|
|
|
|
|
return 'done' })
|
|
|
|
|
== 'done',
|
|
|
|
|
`.${iter}(..): edge onerror(..)`)
|
|
|
|
|
assert(
|
2023-02-08 01:48:59 +03:00
|
|
|
await Promise[iter](
|
|
|
|
|
[1,2,Promise.resolve(3),4,5],
|
2023-02-07 19:34:07 +03:00
|
|
|
function(e){
|
|
|
|
|
if(e == 4){
|
|
|
|
|
throw 'ERROR' }
|
|
|
|
|
return e },
|
|
|
|
|
function(err){
|
|
|
|
|
return 'done' })
|
|
|
|
|
== 'done',
|
2023-02-07 21:40:36 +03:00
|
|
|
`.${iter}(..): late onerror(..)`)
|
|
|
|
|
assert(
|
|
|
|
|
await Promise[iter](
|
|
|
|
|
(function*(){
|
2023-02-08 01:48:59 +03:00
|
|
|
yield* [1,2,3] })(),
|
2023-02-07 21:40:36 +03:00
|
|
|
function(e){
|
2023-02-08 01:48:59 +03:00
|
|
|
if(e == 2){
|
2023-02-07 21:40:36 +03:00
|
|
|
throw 'ERROR' }
|
|
|
|
|
return e },
|
|
|
|
|
function(err){
|
|
|
|
|
return 'done' })
|
|
|
|
|
== 'done',
|
2023-02-08 01:48:59 +03:00
|
|
|
`.${iter}(..): input generator, onerror(..) in handler`)
|
|
|
|
|
assert(
|
|
|
|
|
(pr = await Promise[iter](
|
|
|
|
|
(function*(){
|
|
|
|
|
yield* [1,2,3]
|
|
|
|
|
throw 'ERROR' })(),
|
|
|
|
|
function(e){
|
|
|
|
|
return e },
|
|
|
|
|
function(err){
|
|
|
|
|
return 'done' }))
|
|
|
|
|
== 'done',
|
|
|
|
|
`.${iter}(..): onerror(..) in input generator`, pr)
|
|
|
|
|
assert(
|
|
|
|
|
await (pr = Promise[iter](
|
|
|
|
|
(function*(){
|
|
|
|
|
yield* [1,2,3]
|
|
|
|
|
throw 'ERROR' })(),
|
|
|
|
|
function(e){
|
|
|
|
|
if(e == 4){
|
|
|
|
|
throw 'ERROR' }
|
|
|
|
|
return e },
|
|
|
|
|
function(err){
|
|
|
|
|
return 'done' })
|
|
|
|
|
.sync())
|
|
|
|
|
=== 'done',
|
|
|
|
|
`.${iter}(..): onerror(..) on input generator + .sync()`, pr)
|
|
|
|
|
assert(
|
|
|
|
|
await Promise.iter(
|
|
|
|
|
(function*(){
|
|
|
|
|
yield* [1,2,3]
|
|
|
|
|
throw 'ERROR' })(),
|
|
|
|
|
function(e){
|
|
|
|
|
return new Promise(function(ok, err){
|
|
|
|
|
if(e == 2){
|
|
|
|
|
err('moo!') }
|
|
|
|
|
ok(e) })},
|
|
|
|
|
function(err){
|
|
|
|
|
return 333 })
|
|
|
|
|
== 333,
|
|
|
|
|
`.${iter}(..): onerror(..) with promise handler`)
|
2023-02-07 21:40:36 +03:00
|
|
|
}
|
2023-02-08 01:48:59 +03:00
|
|
|
|
2020-11-03 16:58:59 +03:00
|
|
|
},
|
|
|
|
|
|
2020-10-06 02:43:16 +03:00
|
|
|
// Date.js
|
2020-10-06 03:36:40 +03:00
|
|
|
Date: function(assert){
|
|
|
|
|
var d = new Date()
|
|
|
|
|
|
|
|
|
|
var ts = assert(d.getTimeStamp(), '.getTimeStamp()')
|
|
|
|
|
var tsm = assert(d.getTimeStamp(true), '.getTimeStamp(true)')
|
|
|
|
|
|
|
|
|
|
var dd = assert(Date.fromTimeStamp(tsm), '.fromTimeStamp(..)')
|
|
|
|
|
var dds = assert(Date.fromTimeStamp(ts), '.fromTimeStamp(..)')
|
|
|
|
|
|
|
|
|
|
assert(d.toString() == dd.toString(), 'timestamp reversable')
|
|
|
|
|
|
|
|
|
|
assert(d.toShortDate() == dd.toShortDate(), '.toShortDate()')
|
|
|
|
|
assert(d.toShortDate() == dds.toShortDate(), '.toShortDate()')
|
|
|
|
|
assert(d.toShortDate(true) == dd.toShortDate(true), '.toShortDate(true)')
|
|
|
|
|
|
|
|
|
|
var a = Date.timeStamp()
|
|
|
|
|
var b = Date.timeStamp(true)
|
|
|
|
|
|
|
|
|
|
assert(a == Date.fromTimeStamp(a).getTimeStamp())
|
|
|
|
|
assert(a + '000' == Date.fromTimeStamp(a).getTimeStamp(true))
|
|
|
|
|
assert(b == Date.fromTimeStamp(b).getTimeStamp(true))
|
|
|
|
|
|
2020-10-07 03:03:41 +03:00
|
|
|
assert(Date.str2ms('1') == 1, 'Date.str2ms("1")')
|
|
|
|
|
assert(Date.str2ms(1) == 1, 'Date.str2ms(1)')
|
|
|
|
|
assert(Date.str2ms('1ms') == 1, 'Date.str2ms("1ms")')
|
|
|
|
|
assert(Date.str2ms('1s') == 1000, 'Date.str2ms("1s")')
|
|
|
|
|
assert(Date.str2ms('1m') == 60*1000, 'Date.str2ms("1m")')
|
|
|
|
|
assert(Date.str2ms('1h') == 60*60*1000, 'Date.str2ms("1h")')
|
|
|
|
|
assert(Date.str2ms('1d') == 24*60*60*1000, 'Date.str2ms("1d")')
|
|
|
|
|
|
|
|
|
|
assert(Date.str2ms('5 sec') == 5000, 'Date.str2ms("1 sec")')
|
|
|
|
|
assert(Date.str2ms('5 second') == 5000, 'Date.str2ms("1 second")')
|
|
|
|
|
assert(Date.str2ms('5 seconds') == 5000, 'Date.str2ms("1 seconds")')
|
|
|
|
|
|
|
|
|
|
assert(Date.str2ms('2hour') == 2*60*60*1000, 'Date.str2ms("1hour")')
|
|
|
|
|
assert(Date.str2ms('2 Hour') == 2*60*60*1000, 'Date.str2ms("1 Hour")')
|
|
|
|
|
assert(Date.str2ms('2 hours') == 2*60*60*1000, 'Date.str2ms("1 hours")')
|
2020-10-07 03:53:10 +03:00
|
|
|
|
|
|
|
|
assert(Number.isNaN(Date.str2ms('moo')), 'Date.str2ms("moo")')
|
|
|
|
|
assert(Number.isNaN(Date.str2ms('123 moo')), 'Date.str2ms("moo")')
|
2020-10-06 03:36:40 +03:00
|
|
|
},
|
2020-10-06 02:43:16 +03:00
|
|
|
|
|
|
|
|
// containers.js
|
2020-10-17 02:25:17 +03:00
|
|
|
// XXX move this out to a separate test set...
|
2020-10-06 00:52:05 +03:00
|
|
|
UniqueKeyMap: function(assert){
|
|
|
|
|
var a = assert(containers.UniqueKeyMap(), '')
|
|
|
|
|
var b = assert(containers.UniqueKeyMap([]), '')
|
|
|
|
|
var c = assert(containers.UniqueKeyMap([
|
|
|
|
|
['a', 111],
|
|
|
|
|
['b', 222],
|
|
|
|
|
['a', 333],
|
|
|
|
|
]), '')
|
|
|
|
|
|
|
|
|
|
assert(a.size == 0)
|
|
|
|
|
assert(b.size == 0)
|
|
|
|
|
assert(c.size == 3)
|
|
|
|
|
|
|
|
|
|
assert(c.get('a') == 111)
|
|
|
|
|
|
|
|
|
|
assert(c.has('a (1)'))
|
|
|
|
|
assert(c.get('a (1)') == 333)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var n
|
|
|
|
|
|
|
|
|
|
assert((n = c.set('a', 444, true)) == 'a (2)')
|
|
|
|
|
assert(c.get(n) == 444)
|
|
|
|
|
|
|
|
|
|
assert(c.reset(n, 555))
|
|
|
|
|
assert(c.get(n) == 555)
|
|
|
|
|
|
|
|
|
|
assert(c.delete('a (1)'))
|
|
|
|
|
assert(!c.has('a (1)'))
|
|
|
|
|
|
|
|
|
|
assert((n = c.set('a', 222, true)) == 'a (1)')
|
|
|
|
|
|
|
|
|
|
assert(c.keysOf(222).sort().cmp(['b', 'a'].sort()))
|
|
|
|
|
|
2020-10-07 07:33:58 +03:00
|
|
|
var k = [...c.keys()]
|
2020-10-08 15:09:21 +03:00
|
|
|
k[k.indexOf('a')] = 'b (1)'
|
2020-10-07 07:33:58 +03:00
|
|
|
|
2020-10-06 00:52:05 +03:00
|
|
|
assert((n = c.rename('a', 'b', true)) == 'b (1)')
|
2020-10-07 07:33:58 +03:00
|
|
|
|
2020-10-08 15:09:21 +03:00
|
|
|
// check order...
|
|
|
|
|
// XXX since we are using Array's .cmp(..) would be nice to be
|
|
|
|
|
// able to fail this test if that fails to test correctly...
|
|
|
|
|
// ...not sure how to do this though...
|
|
|
|
|
assert(k.cmp([...c.keys()]), '.rename(..) order')
|
2020-10-06 00:52:05 +03:00
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
2020-10-17 02:25:17 +03:00
|
|
|
|
2020-11-05 16:40:41 +03:00
|
|
|
//---------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
var PromiseTests = test.TestSet()
|
|
|
|
|
test.Case('PromiseTests', PromiseTests)
|
|
|
|
|
|
|
|
|
|
PromiseTests.setups({
|
|
|
|
|
cooperative: function(assert){
|
|
|
|
|
return {
|
|
|
|
|
a: assert(Promise.cooperative(), '.cooperative()')
|
|
|
|
|
} },
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
PromiseTests.modifiers({
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
PromiseTests.tests({
|
|
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-10-17 02:25:17 +03:00
|
|
|
//---------------------------------------------------------------------
|
|
|
|
|
// UniqueKeyMap testing...
|
|
|
|
|
|
2020-10-17 03:11:59 +03:00
|
|
|
var UniqueKeyMap = test.TestSet()
|
|
|
|
|
test.Case('UniqueKeyMap-new', UniqueKeyMap)
|
2020-10-17 02:25:17 +03:00
|
|
|
|
|
|
|
|
// XXX
|
2020-10-17 03:11:59 +03:00
|
|
|
UniqueKeyMap.setups({
|
|
|
|
|
empty: function(assert){
|
|
|
|
|
return {
|
|
|
|
|
value: assert(containers.UniqueKeyMap()),
|
|
|
|
|
// metadata...
|
|
|
|
|
size: 0,
|
|
|
|
|
}},
|
|
|
|
|
'empty-input': function(assert){
|
|
|
|
|
return {
|
|
|
|
|
value: assert(containers.UniqueKeyMap([])),
|
|
|
|
|
// metadata...
|
|
|
|
|
size: 0,
|
|
|
|
|
}},
|
|
|
|
|
// XXX non-empty input...
|
|
|
|
|
// XXX intersecting unput...
|
2020-10-17 02:25:17 +03:00
|
|
|
})
|
|
|
|
|
|
|
|
|
|
// XXX
|
2020-10-17 03:11:59 +03:00
|
|
|
UniqueKeyMap.modifiers({
|
|
|
|
|
set: function(assert, e, k='a', o){
|
|
|
|
|
o = o || {}
|
|
|
|
|
var n
|
|
|
|
|
|
|
|
|
|
var exists = e.value.has(k)
|
|
|
|
|
var expected = e.value.uniqieKey(k)
|
|
|
|
|
|
|
|
|
|
assert(n = e.value.set(k, o, true), '.set(..)')
|
|
|
|
|
|
|
|
|
|
// key update...
|
|
|
|
|
assert(n.startsWith(k), 'key prefix')
|
|
|
|
|
assert(n == expected, 'unexpected key')
|
|
|
|
|
exists
|
|
|
|
|
|| assert(n == k, 'key unexpectedly changed')
|
|
|
|
|
|
|
|
|
|
// size...
|
|
|
|
|
e.size += 1
|
|
|
|
|
assert(e.value.size == e.size, 'inc size')
|
|
|
|
|
|
|
|
|
|
return e },
|
|
|
|
|
reset: function(assert, e, k='a', o){
|
|
|
|
|
o = o || {}
|
|
|
|
|
|
|
|
|
|
var exists = e.value.has(k)
|
|
|
|
|
|
|
|
|
|
assert(e.value.reset(k, o))
|
|
|
|
|
assert(e.value.get(k) === o)
|
|
|
|
|
|
|
|
|
|
// size...
|
|
|
|
|
exists
|
|
|
|
|
|| (e.size += 1)
|
|
|
|
|
assert(e.value.size == e.size)
|
|
|
|
|
|
|
|
|
|
return e },
|
|
|
|
|
delete: function(assert, e, k='a'){
|
|
|
|
|
|
|
|
|
|
var exists = e.value.has(k)
|
|
|
|
|
|
|
|
|
|
assert(e.value.delete(k) == exists, '.delete(..)')
|
|
|
|
|
assert(!e.value.has(k), 'delete successful')
|
|
|
|
|
|
|
|
|
|
// size...
|
|
|
|
|
exists
|
|
|
|
|
&& (e.size -= 1)
|
|
|
|
|
assert(e.value.size == e.size)
|
|
|
|
|
|
|
|
|
|
return e },
|
|
|
|
|
|
|
|
|
|
'set-set': function(assert, e){
|
|
|
|
|
this.set(assert, e, 'x')
|
|
|
|
|
this.set(assert, e, 'y')
|
|
|
|
|
this.set(assert, e, 'x')
|
|
|
|
|
return e },
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
// XXX
|
|
|
|
|
UniqueKeyMap.tests({
|
|
|
|
|
consistent: function(assert, e){
|
|
|
|
|
|
|
|
|
|
assert(e.value.size == e.size, '.size')
|
|
|
|
|
assert([...e.value.keys()].length == e.value.size, '.keys() same size as .size')
|
|
|
|
|
|
|
|
|
|
return e }
|
2020-10-17 02:25:17 +03:00
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-11-15 00:24:22 +03:00
|
|
|
//---------------------------------------------------------------------
|
|
|
|
|
// events...
|
|
|
|
|
|
|
|
|
|
var Events = test.TestSet()
|
|
|
|
|
test.Case('Events', Events)
|
|
|
|
|
|
2020-11-15 02:27:20 +03:00
|
|
|
// XXX test aborting handlers...
|
2020-11-15 00:24:22 +03:00
|
|
|
Events.cases({
|
|
|
|
|
base: function(assert){
|
|
|
|
|
var called = {}
|
|
|
|
|
|
|
|
|
|
// object with events...
|
|
|
|
|
var ObjWithEvents =
|
|
|
|
|
assert(
|
2020-11-19 02:24:09 +03:00
|
|
|
events.EventMixin('flat', {
|
2020-11-15 02:27:20 +03:00
|
|
|
// NOTE: we will also use virtual events later -- 'moo'
|
|
|
|
|
// and 'foo', these do not have to be defined to
|
|
|
|
|
// be usable...
|
|
|
|
|
|
|
|
|
|
// blank events...
|
2020-11-15 00:24:22 +03:00
|
|
|
bareEventBlank: assert(
|
2022-05-25 17:42:40 +03:00
|
|
|
events.Eventful('bareEventBlank'),
|
|
|
|
|
'.Eventful(..): blank'),
|
2020-11-15 00:24:22 +03:00
|
|
|
eventBlank: assert(
|
2020-11-15 03:12:33 +03:00
|
|
|
events.Event('eventBlank'),
|
|
|
|
|
'.Event(..): blank'),
|
2020-11-15 00:24:22 +03:00
|
|
|
|
2020-11-15 02:27:20 +03:00
|
|
|
// normal events...
|
2022-05-25 17:42:40 +03:00
|
|
|
bareEvent: assert(events.Eventful('bareEvent',
|
2020-11-15 00:24:22 +03:00
|
|
|
function(handle, ...args){
|
|
|
|
|
called['bareEvent-call'] = true
|
2022-05-25 17:42:40 +03:00
|
|
|
assert(handle(), '.Eventful(..) -> handle(..)')
|
2020-11-15 00:24:22 +03:00
|
|
|
return 'bareEvent'
|
2022-05-25 17:42:40 +03:00
|
|
|
}), '.Eventful(..)'),
|
2020-11-15 03:12:33 +03:00
|
|
|
event: assert(events.Event('event',
|
2020-11-15 00:24:22 +03:00
|
|
|
function(handle, ...args){
|
|
|
|
|
called['event-call'] = true
|
2020-11-15 03:12:33 +03:00
|
|
|
assert(handle(), '.Event(..) -> handle(..)')
|
|
|
|
|
}), '.Event(..)'),
|
2020-11-19 02:24:09 +03:00
|
|
|
}),
|
2020-11-15 00:24:22 +03:00
|
|
|
'object with event mixin created.')
|
2020-11-15 02:27:20 +03:00
|
|
|
|
|
|
|
|
// create an "instance"...
|
2020-11-15 00:24:22 +03:00
|
|
|
var obj = Object.create(ObjWithEvents)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// test event list...
|
2023-01-06 12:30:24 +03:00
|
|
|
assert.array(obj.events, ['eventBlank', 'event'], '.events')
|
|
|
|
|
assert.array(obj.eventful, ['bareEventBlank', 'bareEvent'], '.eventful')
|
2020-11-15 00:24:22 +03:00
|
|
|
|
|
|
|
|
// bind...
|
|
|
|
|
var bind = function(evt){
|
|
|
|
|
assert(obj.on(evt, function(evt, ...args){
|
|
|
|
|
called[evt +'-handle'] = true
|
|
|
|
|
}) === obj, 'bind: <obj-w-events>.on("'+ evt +'", ..)') }
|
|
|
|
|
|
|
|
|
|
;['moo',
|
|
|
|
|
...obj.events,
|
2022-05-25 17:42:40 +03:00
|
|
|
...obj.eventful]
|
2020-11-15 00:24:22 +03:00
|
|
|
.forEach(bind)
|
|
|
|
|
|
|
|
|
|
assert(obj.event(function(evt, ...args){
|
|
|
|
|
called['event-handle-2'] = true
|
|
|
|
|
}) === obj, 'bind: <obj-w-events>.event(<func>)')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// trigger
|
|
|
|
|
var trigger = function(evt, triggerd=true, handled=true){
|
|
|
|
|
var res = assert(obj.trigger(evt), 'trigger: <obj-w-events>.trigger("'+ evt +'")')
|
|
|
|
|
triggerd
|
|
|
|
|
&& !evt.endsWith('Blank')
|
|
|
|
|
&& assert(called[evt +'-call'], 'trigger: "'+ evt +'" event triggered')
|
|
|
|
|
handled
|
|
|
|
|
&& assert(called[evt +'-handle'], 'trigger: "'+ evt +'" event handled')
|
|
|
|
|
delete called[evt +'-call']
|
|
|
|
|
delete called[evt +'-handle']
|
|
|
|
|
return res }
|
|
|
|
|
var call = function(evt, triggered=true, handled=true){
|
|
|
|
|
var res = assert(obj[evt](), 'trigger: <obj-w-events>.'+ evt +'(..)')
|
|
|
|
|
triggered
|
|
|
|
|
&& !evt.endsWith('Blank')
|
|
|
|
|
&& assert(called[evt +'-call'], 'trigger: "'+ evt +'" event triggered')
|
|
|
|
|
handled
|
|
|
|
|
&& assert(called[evt +'-handle'], 'trigger: "'+ evt +'" event handled')
|
|
|
|
|
delete called[evt +'-call']
|
|
|
|
|
delete called[evt +'-handle']
|
|
|
|
|
return res }
|
|
|
|
|
|
|
|
|
|
trigger('foo', false, false)
|
|
|
|
|
trigger('moo', false)
|
2020-12-01 19:54:47 +03:00
|
|
|
|
2020-11-15 00:24:22 +03:00
|
|
|
obj.events
|
|
|
|
|
.forEach(function(e){
|
|
|
|
|
trigger(e)
|
|
|
|
|
call(e) })
|
|
|
|
|
|
|
|
|
|
assert(called['event-handle-2'], 'trigger: "event" event handled')
|
|
|
|
|
delete called['event-handle-2']
|
|
|
|
|
|
|
|
|
|
assert(call('event') === obj, '<obj-w-events>.event(..) return value.')
|
|
|
|
|
assert(call('bareEvent') == 'bareEvent', '<obj-w-events>.bareEvent(..) return value.')
|
|
|
|
|
|
2020-11-15 03:12:33 +03:00
|
|
|
|
2020-11-15 05:13:35 +03:00
|
|
|
// unbind: .one(..) / .off(..)
|
2020-12-01 19:54:47 +03:00
|
|
|
// XXX this is triggered twice for some reason...
|
2020-11-15 05:13:35 +03:00
|
|
|
obj.one('event', function(){
|
|
|
|
|
called['event-one-time-handler'] =
|
2020-12-01 20:37:08 +03:00
|
|
|
(called['event-one-time-handler'] || 0) + 1 })
|
2020-11-15 05:13:35 +03:00
|
|
|
obj
|
|
|
|
|
.event()
|
2020-12-01 19:54:47 +03:00
|
|
|
//.event()
|
|
|
|
|
//.event()
|
2020-11-15 05:13:35 +03:00
|
|
|
assert(called['event-one-time-handler'] == 1, '.one("event", ..) handler cleared.')
|
2020-11-15 05:59:19 +03:00
|
|
|
delete called['event-one-time-handler']
|
|
|
|
|
|
|
|
|
|
// special case...
|
|
|
|
|
obj.trigger('event', function(){ called['trigger-function-called'] = true })
|
|
|
|
|
assert(called['trigger-function-called'] === undefined, '.trigger(..) should not call it\'s args')
|
2020-11-15 05:13:35 +03:00
|
|
|
|
2020-11-15 03:12:33 +03:00
|
|
|
// XXX test passing args...
|
|
|
|
|
|
2020-11-15 05:13:35 +03:00
|
|
|
// XXX test different mode events...
|
2020-11-15 00:24:22 +03:00
|
|
|
|
|
|
|
|
// re-bind...
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
2020-11-15 05:59:19 +03:00
|
|
|
//---------------------------------------------------------------------
|
|
|
|
|
// events...
|
|
|
|
|
|
|
|
|
|
var Runner = test.TestSet()
|
|
|
|
|
test.Case('Runner', Runner)
|
|
|
|
|
|
|
|
|
|
// XXX test aborting handlers...
|
|
|
|
|
Runner.cases({
|
|
|
|
|
base: function(assert){
|
|
|
|
|
//var q = assert(runner.Queue({auto_stop: true}), 'Queue()')
|
|
|
|
|
var q = assert(runner.Queue(), 'Queue()')
|
|
|
|
|
|
|
|
|
|
// empty states...
|
|
|
|
|
assert(q.state == 'stopped', '.state: stopped')
|
|
|
|
|
|
|
|
|
|
q.start()
|
|
|
|
|
|
|
|
|
|
assert(q.state == 'running', '.state: running')
|
|
|
|
|
|
|
|
|
|
q.start()
|
|
|
|
|
|
|
|
|
|
assert(q.state == 'running', '.state: running')
|
|
|
|
|
|
|
|
|
|
q.stop()
|
|
|
|
|
|
|
|
|
|
assert(q.state == 'stopped', '.state: stopped')
|
|
|
|
|
|
|
|
|
|
var tasks_run = []
|
|
|
|
|
var a = function(){ tasks_run.push('a') }
|
|
|
|
|
var b = function(){ tasks_run.push('b') }
|
|
|
|
|
var c = function(){ tasks_run.push('c') }
|
|
|
|
|
|
|
|
|
|
q.push(a)
|
|
|
|
|
q.push(b)
|
|
|
|
|
q.push(c)
|
|
|
|
|
|
|
|
|
|
assert(q.length == 3, '.length is 3')
|
|
|
|
|
|
2020-11-24 06:00:51 +03:00
|
|
|
q.runTask()
|
|
|
|
|
q.runTask()
|
|
|
|
|
q.runTask()
|
2020-11-15 05:59:19 +03:00
|
|
|
|
|
|
|
|
assert.array(tasks_run, ['a', 'b', 'c'], 'all tasks run')
|
|
|
|
|
|
2020-11-24 06:00:51 +03:00
|
|
|
// XXX need to figure out how to test async...
|
|
|
|
|
|
|
|
|
|
tasks_run = []
|
|
|
|
|
|
|
|
|
|
var q = assert(runner.Queue({sync_start: true}), 'Queue({sync_start: true})')
|
|
|
|
|
|
|
|
|
|
q.push(a)
|
|
|
|
|
q.push(b)
|
|
|
|
|
q.push(c)
|
|
|
|
|
|
|
|
|
|
q.start()
|
2020-11-15 05:59:19 +03:00
|
|
|
|
2020-11-24 06:00:51 +03:00
|
|
|
assert.array(tasks_run, ['a', 'b', 'c'], 'all tasks run')
|
2020-11-15 05:59:19 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
//console.log('\n>>>', q.state)
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
2020-10-06 00:52:05 +03:00
|
|
|
//---------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
typeof(__filename) != 'undefined'
|
|
|
|
|
&& __filename == (require.main || {}).filename
|
|
|
|
|
&& test.run()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
|
* vim:set ts=4 sw=4 : */ return module })
|