tame/progtest/src/TestCase.js

110 lines
2.5 KiB
JavaScript

/**
* Test case
*
* Copyright (C) 2014-2021 Ryan Specialty Group, LLC.
*
* This file is part of TAME.
*
* TAME is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
"use strict";
const { Class } = require( 'easejs' );
module.exports = Class( 'TestCase',
{
/**
* Test case data
*
* @type {Object} test case data
*/
'private _caseData': {},
get description()
{
return this._caseData.description || "";
},
get allow_failures()
{
return this._caseData.allow_failures || false;
},
get data()
{
return this._caseData.data || {};
},
get expect()
{
return this._caseData.expect || {};
},
constructor( case_data )
{
this._caseData = case_data;
},
'public mapEachValue'( callback )
{
const [ new_data, new_expect ] = [ this.data, this.expect ].map( src =>
{
const new_src = {};
Object.keys( src ).forEach(
key => new_src[ key ] = this._visitDeep(
src[ key ],
callback
)
);
return new_src;
} );
return module.exports( {
description: this.description,
allow_failures: this.allow_failures,
data: new_data,
expect: new_expect,
} );
},
/**
* Recursively resolve constants
*
* Only scalars and arrays are supported
*
* @param {number|Array} input scalar or array of inputs
* @param {Object} consts constant mapping
*
* @return {number|Array} resolved value(s)
*/
'private _visitDeep'( val, callback )
{
if ( Array.isArray( val ) )
{
return val.map(
x => this._visitDeep( x, callback )
);
}
return callback( val );
}
} );