Files
2025-11-20 15:27:34 -06:00

291 lines
6.9 KiB
JavaScript

'use strict';
const assert = require('assert');
const { inspectParameters, getParametersNames } = require('../');
const { testsParametersNames, testsInspectParameters } = getTestData();
describe('getParametersNames', function() {
const tests = testsParametersNames;
Object.keys(tests).forEach(key => {
describe(`${key}`, function() {
it(`Must match the expected parameters name`, function() {
const allParametersNames = getParametersNames(tests[key].input);
assert.deepEqual(allParametersNames, tests[key].expectedResult);
});
});
});
});
describe('inspectParameters', function() {
const tests = testsInspectParameters;
Object.keys(tests).forEach(key => {
describe(`${key}`, function() {
it(`Must match the expected result`, function() {
const allParametersNames = inspectParameters(tests[key].input);
assert.deepEqual(allParametersNames, tests[key].expectedResult);
});
});
});
});
function getTestData() {
const testsParametersNames = {
arrowWithoutParenthesis: {
input: param => console.log(param),
expectedResult: ['param']
},
arrowWithParenthesis: {
input: (param) => console.log(param),
expectedResult: ['param']
},
arrowWithParenthesisWithoutParameters: {
input: () => {},
expectedResult: []
},
arrowWithParenthesisAndDefaultValues: {
input: (param = 'defaultParam', param2 = 'defaultParam') => console.log(param),
expectedResult: ['param', 'param2']
},
simpleFunction: {
input: function fn(z, k) {},
expectedResult: ['z', 'k']
},
simpleFunctionWithoutParameters: {
input: function fn() {},
expectedResult: []
},
functionExpectingDestructuring: {
input: function fn({ a } = {}, b, [d, e, z = "ZZ"] = [1, 2]) {},
expectedResult: ['a', 'b', 'd', 'e', 'z']
},
staticMethodFromClass: {
input: (() => {
class fn {
static staticMethod(b, l, a = 'A') {
console.log(`bla bla`);
}
}
return fn.staticMethod;
})(),
expectedResult: ['b', 'l', 'a']
},
complexNonSenseFunction: {
input: (option, a = 2,
b = { c: 1 }, arr = ([]), arr2 = [1, 2, 3], e = {
a: {
b: 3,
d: ([{}])
}
}, z) => (a = 2, b = { c: 1 }, arr = [], d = function(z) {}, e = {
a: {
b: 3,
d: x => x
}
}, fn = d => s, fn2 = d => {
return s
}),
expectedResult: ['option', 'a', 'b', 'arr', 'arr2', 'e', 'z']
}
};
const testsInspectParameters = {
stringMultipleParametersDeclaration: {
input: `[p1 = 1,[p2 = 'P2DEF',[p3]]]=[], [a,b], { z, k, zk: {zz} }={}, zkzkz = 111, [zk,zzk,zzzk],iowu`,
expectedResult: [{
"parameter": "[p1 = 1,[p2 = 'P2DEF',[p3]]]",
"defaultValue": "[]",
"expectsDestructuring": true,
"declaration": "[p1 = 1,[p2 = 'P2DEF',[p3]]]=[]",
"destructuredParameters": [{
"parameter": "p1",
"defaultValue": "1",
"declaration": "p1 = 1"
}, {
"parameter": "p2",
"defaultValue": "P2DEF",
"declaration": "p2 = 'P2DEF'"
}, {
"parameter": "p3",
"declaration": "p3"
}]
}, {
"parameter": "[a,b]",
"expectsDestructuring": true,
"declaration": "[a,b]",
"destructuredParameters": [{
"parameter": "a",
"declaration": "a"
}, {
"parameter": "b",
"declaration": "b"
}]
}, {
"parameter": "{ z, k, zk: {zz} }",
"defaultValue": "{}",
"expectsDestructuring": true,
"declaration": "{ z, k, zk: {zz} }={}",
"destructuredParameters": [{
"parameter": "z",
"declaration": "z"
}, {
"parameter": "k",
"declaration": "k"
}, {
"parameter": "zz",
"declaration": "zz"
}]
}, {
"parameter": "zkzkz",
"defaultValue": "111",
"declaration": "zkzkz = 111"
}, {
"parameter": "[zk,zzk,zzzk]",
"expectsDestructuring": true,
"declaration": "[zk,zzk,zzzk]",
"destructuredParameters": [{
"parameter": "zk",
"declaration": "zk"
}, {
"parameter": "zzk",
"declaration": "zzk"
}, {
"parameter": "zzzk",
"declaration": "zzzk"
}]
}, {
"parameter": "iowu",
"declaration": "iowu"
}]
},
functionMultipleParametersDeclaration: {
input: ([p1 = 1,[p2 = 'P2DEF',[p3]]]=[], [a,b], { z, k, zk: {zz} }={}, zkzkz = 111, [zk,zzk,zzzk],iowu) => {},
expectedResult: [{
"parameter": "[p1 = 1,[p2 = 'P2DEF',[p3]]]",
"defaultValue": "[]",
"expectsDestructuring": true,
"declaration": "[p1 = 1,[p2 = 'P2DEF',[p3]]]=[]",
"destructuredParameters": [{
"parameter": "p1",
"defaultValue": "1",
"declaration": "p1 = 1"
}, {
"parameter": "p2",
"defaultValue": "P2DEF",
"declaration": "p2 = 'P2DEF'"
}, {
"parameter": "p3",
"declaration": "p3"
}]
}, {
"parameter": "[a,b]",
"expectsDestructuring": true,
"declaration": "[a,b]",
"destructuredParameters": [{
"parameter": "a",
"declaration": "a"
}, {
"parameter": "b",
"declaration": "b"
}]
}, {
"parameter": "{ z, k, zk: {zz} }",
"defaultValue": "{}",
"expectsDestructuring": true,
"declaration": "{ z, k, zk: {zz} }={}",
"destructuredParameters": [{
"parameter": "z",
"declaration": "z"
}, {
"parameter": "k",
"declaration": "k"
}, {
"parameter": "zz",
"declaration": "zz"
}]
}, {
"parameter": "zkzkz",
"defaultValue": "111",
"declaration": "zkzkz = 111"
}, {
"parameter": "[zk,zzk,zzzk]",
"expectsDestructuring": true,
"declaration": "[zk,zzk,zzzk]",
"destructuredParameters": [{
"parameter": "zk",
"declaration": "zk"
}, {
"parameter": "zzk",
"declaration": "zzk"
}, {
"parameter": "zzzk",
"declaration": "zzzk"
}]
}, {
"parameter": "iowu",
"declaration": "iowu"
}]
},
stringParameterDeclaration: {
input: `[p1,[p2 = '',[p3]]]=[]`,
expectedResult: [{
"parameter": "[p1,[p2 = '',[p3]]]",
"defaultValue": "[]",
"expectsDestructuring": true,
"declaration": "[p1,[p2 = '',[p3]]]=[]",
"destructuredParameters": [
{
"parameter": "p1",
"declaration": "p1"
},
{
"parameter": "p2",
"declaration": "p2 = ''"
},
{
"parameter": "p3",
"declaration": "p3"
}
]
}]
},
functionParameterDeclaration: {
input: function ([p1,[p2 = '',[p3]]]=[]) { return; },
expectedResult: [{
"parameter": "[p1,[p2 = '',[p3]]]",
"defaultValue": "[]",
"expectsDestructuring": true,
"declaration": "[p1,[p2 = '',[p3]]]=[]",
"destructuredParameters": [
{
"parameter": "p1",
"declaration": "p1"
},
{
"parameter": "p2",
"declaration": "p2 = ''"
},
{
"parameter": "p3",
"declaration": "p3"
}
]
}]
}
};
return { testsParametersNames, testsInspectParameters };
}