more tests...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2020-05-30 00:20:07 +03:00
parent e2972a979d
commit a1ed6a5b84

62
test.js
View File

@ -45,9 +45,11 @@ var assert = function(pre, stats){
return e } } return e } }
//--------------------------------------------------------------------- //---------------------------------------------------------------------
var setups = { var setups = {
// basic constructor and inheritance...
basic: function(assert){ basic: function(assert){
var X, Y, A, B, C var X, Y, A, B, C
return { return {
@ -58,13 +60,18 @@ var setups = {
B: B = assert(object.C('B', A, { }), `inherit (gen2)`), B: B = assert(object.C('B', A, { }), `inherit (gen2)`),
C: C = assert(object.C('C', B, { }), `inherit (gen3)`), C: C = assert(object.C('C', B, { }), `inherit (gen3)`),
} }, } },
// initialization...
init: function(assert){ init: function(assert){
return { return {
} }, } },
// callable instances...
call: function(assert){ call: function(assert){
// constructors...
var A, B, C, D, F, G var A, B, C, D, F, G
return { var res = {
A: A = assert(object.C('A', A: A = assert(object.C('A',
function(){ function(){
return 'A' return 'A'
@ -93,32 +100,55 @@ var setups = {
return 'F' return 'F'
}, },
}), 'call parent\'s .__call__'), }), 'call parent\'s .__call__'),
}
// create instances...
var objs = tests.instance(assert, res)
// all instances must be callable...
// NOTE: not all instances are going to be instanceof Function...
Object.entries(objs)
.forEach(function([k, o]){
assert(typeof(o) == 'function', 'instance is callable', k) })
return Object.assign(res, objs) },
// XXX not sure about these... // inherit from native constructors...
a: A(),
b: B(),
c: C(),
d: D(),
e: E(),
f: F(),
} },
native: function(assert){ native: function(assert){
return { return [
Object,
Array,
Number,
Map,
Set,
].reduce(function(res, type){
var n = type.name
// direct inherit...
var O = res[n] =
assert(object.C(n, type, {}), 'inherit from '+n)
return res
}, {}) },
} }, // mixins...
mixin: function(assert){ mixin: function(assert){
return { return {
} }, } },
// placeholder -- this is written by tests.instance...
instances: null,
} }
var modifiers = { var modifiers = {
// default... // default...
'as-is': function(assert, setup){ 'as-is': function(assert, setup){
return setup } return setup },
// make gen2-3 constructors...
//
// NOTE: there is almost no need to test below gen3...
gen2: function(assert, setup, gen){
gen = gen || 2
return constructors(setup)
.reduce(function(res, [n, O]){
res[n+'g'+gen] = object.C(n+'g'+gen, O, {})
return res }, {}) },
gen3: function(assert, setup){
return this.gen2(assert, this.gen2(assert, setup), '3') }
// XXX // XXX
} }
@ -126,6 +156,7 @@ var modifiers = {
var tests = { var tests = {
// instance creation...
instance: function(assert, setup, mode){ instance: function(assert, setup, mode){
return constructors(setup) return constructors(setup)
.reduce(function(res, [k, O]){ .reduce(function(res, [k, O]){
@ -146,6 +177,7 @@ var tests = {
instance_raw: function(assert, setup){ instance_raw: function(assert, setup){
return this.instance(assert, setup, 'raw') }, return this.instance(assert, setup, 'raw') },
// XXX
attributes: function(assert, setup){ attributes: function(assert, setup){
return {} return {}
}, },