refactored tests for better future expansion...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2025-12-31 01:04:40 +03:00
parent e853b17cae
commit 9fa5fcbc9f

96
test.js
View File

@ -14,7 +14,14 @@ var eJSON = require('./serialize2')
//--------------------------------------------------------------------- //---------------------------------------------------------------------
// XXX split into pure and extended JSON... // Test data format:
// [
// <data>,
// // tags (optionsal)
// json, - if the data is JSON-compatible, value true|false (default: undefined)
// ...
// ]
//
var json = true var json = true
var ejson = false var ejson = false
@ -22,15 +29,15 @@ var ejson = false
// XXX test whitespace handling... // XXX test whitespace handling...
var setups = test.Setups({ var setups = test.Setups({
number: function(assert){ number: function(assert){
return [json, '123'] }, return ['123', json] },
'number-neg': function(assert){ 'number-neg': function(assert){
return [json, '-123'] }, return ['-123', json] },
'number-zero': function(assert){ 'number-zero': function(assert){
return [json, '0'] }, return ['0', json] },
'float-a': function(assert){ 'float-a': function(assert){
return [json, '0.123'] }, return ['0.123', json] },
'float-b': function(assert){ 'float-b': function(assert){
return [json, '1.23'] }, return ['1.23', json] },
// XXX need a way to test this... // XXX need a way to test this...
//'float-a': function(assert){ //'float-a': function(assert){
// return '.123' }, // return '.123' },
@ -39,45 +46,45 @@ var setups = test.Setups({
// XXX also test: // XXX also test:
// hex/bin/orc/... // hex/bin/orc/...
Infinity: function(assert){ Infinity: function(assert){
return [ejson, 'Infinity'] }, return ['Infinity'] },
nInfinity: function(assert){ nInfinity: function(assert){
return [ejson, '-Infinity'] }, return ['-Infinity'] },
// XXX also test diffrerent quotations... // XXX also test diffrerent quotations...
string: function(assert){ string: function(assert){
return [json, '"string"'] }, return ['"string"', json] },
'true': function(assert){ 'true': function(assert){
return [json, 'true'] }, return ['true', json] },
'false': function(assert){ 'false': function(assert){
return [json, 'false'] }, return ['false', json] },
'null': function(assert){ 'null': function(assert){
return [json, 'null'] }, return ['null', json] },
'undefined': function(assert){ 'undefined': function(assert){
return [ejson, 'undefined'] }, return ['undefined'] },
'NaN': function(assert){ 'NaN': function(assert){
return [ejson, 'NaN'] }, return ['NaN'] },
'array-empty': function(assert){ 'array-empty': function(assert){
return [json, '[]'] }, return ['[]', json] },
'array-sparse-a': function(assert){ 'array-sparse-a': function(assert){
return [ejson, '[<empty>]'] }, return ['[<empty>]'] },
'array-sparse-b': function(assert){ 'array-sparse-b': function(assert){
return [ejson, '["a",<empty>]'] }, return ['["a",<empty>]'] },
'array-sparse-c': function(assert){ 'array-sparse-c': function(assert){
return [ejson, '[<empty>,"a"]'] }, return ['[<empty>,"a"]'] },
'array-sparse-d': function(assert){ 'array-sparse-d': function(assert){
return [ejson, '[<empty>,1,<empty>,<empty>,2,<empty>]'] }, return ['[<empty>,1,<empty>,<empty>,2,<empty>]'] },
'array-recursive': function(assert){ 'array-recursive': function(assert){
return [ejson, '[<RECURSIVE[]>]'] }, return ['[<RECURSIVE[]>]'] },
'object-empty': function(assert){ 'object-empty': function(assert){
return [json, '{}'] }, return ['{}', json] },
'set-empty': function(assert){ 'set-empty': function(assert){
return [ejson, 'Set([])'] }, return ['Set([])'] },
'map-empty': function(assert){ 'map-empty': function(assert){
return [ejson, 'Map([])'] }, return ['Map([])'] },
// XXX // XXX
}) })
@ -85,52 +92,53 @@ var setups = test.Setups({
test.Modifiers({ test.Modifiers({
// NOTE: we are not simply editing strings as we'll need to also // NOTE: we are not simply editing strings as we'll need to also
// update all the recursion paths which is not trivial... // update all the recursion paths which is not trivial...
'array-stuffed': function(assert, [json, setup]){ 'array-stuffed': function(assert, [setup, json]){
return [ return [
json,
eJSON.serialize( eJSON.serialize(
[ eJSON.deserialize(setup) ] ), [ eJSON.deserialize(setup) ] ),
] },
'object-stuffed': function(assert, [json, setup]){
return [
json, json,
eJSON.serialize(
{ key: eJSON.deserialize(setup) } )
] }, ] },
'set-stuffed': function(assert, [json, setup]){ 'object-stuffed': function(assert, [setup, json]){
return [ return [
ejson,
eJSON.serialize( eJSON.serialize(
new Set([ eJSON.deserialize(setup) ]) ) { key: eJSON.deserialize(setup) } ),
json,
] }, ] },
'map-key-stuffed': function(assert, [json, setup]){ // NOTE: these explicitly remove JSON compatibility regardless of input...
'set-stuffed': function(assert, [setup]){
return [ return [
ejson,
eJSON.serialize( eJSON.serialize(
new Map([[eJSON.deserialize(setup), "value"]]) ) new Set([ eJSON.deserialize(setup) ]) ),
ejson,
] }, ] },
'map-value-stuffed': function(assert, [json, setup]){ 'map-key-stuffed': function(assert, [setup]){
return [ return [
ejson,
eJSON.serialize( eJSON.serialize(
new Map([["key", eJSON.deserialize(setup)]]) ) new Map([[eJSON.deserialize(setup), "value"]]) ),
ejson,
] },
'map-value-stuffed': function(assert, [setup]){
return [
eJSON.serialize(
new Map([["key", eJSON.deserialize(setup)]]) ),
ejson,
] }, ] },
}) })
test.Tests({ test.Tests({
'self-apply': function(assert, [json, setup]){ 'self-apply': function(assert, [setup]){
var res var res
assert( assert(
setup == (res = eJSON.serialize( eJSON.deserialize(setup) ) ), setup == (res = eJSON.serialize( eJSON.deserialize(setup) ) ),
'serialize(deserialize( setup )) == setup: expected:', setup, 'got:', res) }, 'serialize(deserialize( setup )) == setup: expected:', setup, 'got:', res) },
'json-caopatiility': function(assert, [json, setup]){ 'json-caopatiility': function(assert, [setup, json], skipTest){
if(!json){ if(!json){
skipTest()
return } return }
var obj = eJSON.deserialize(setup) var obj = eJSON.deserialize(setup)
var json, ejson assert(
assert((json = JSON.stringify(obj)) == (ejson = eJSON.serialize(obj)) ) JSON.stringify(obj) == eJSON.serialize(obj) ) },
},
}) })