|
|
|
@ -1,6 +1,5 @@ |
|
|
|
|
const fs = require('fs') |
|
|
|
|
const async = require('async') |
|
|
|
|
const path = require('path') |
|
|
|
|
const promisify = require('pify') |
|
|
|
|
|
|
|
|
|
// start(/\.selectors.js/, generateSelectorTest).catch(console.error)
|
|
|
|
@ -8,7 +7,6 @@ const promisify = require('pify') |
|
|
|
|
startContainer(/\.container.js/, generateContainerTest).catch(console.error) |
|
|
|
|
|
|
|
|
|
async function getAllFileNames (dirName) { |
|
|
|
|
const rootPath = path.join(__dirname, dirName) |
|
|
|
|
const allNames = (await promisify(fs.readdir)(dirName)) |
|
|
|
|
const fileNames = allNames.filter(name => name.match(/^.+\./)) |
|
|
|
|
const dirNames = allNames.filter(name => name.match(/^[^.]+$/)) |
|
|
|
@ -16,7 +14,7 @@ async function getAllFileNames (dirName) { |
|
|
|
|
const fullPathDirNames = dirNames.map(d => `${dirName}/${d}`) |
|
|
|
|
const subNameArrays = await promisify(async.map)(fullPathDirNames, getAllFileNames) |
|
|
|
|
let subNames = [] |
|
|
|
|
subNameArrays.forEach(subNameArray => subNames = [...subNames, ...subNameArray]) |
|
|
|
|
subNameArrays.forEach(subNameArray => { subNames = [...subNames, ...subNameArray] }) |
|
|
|
|
|
|
|
|
|
return [ |
|
|
|
|
...fileNames.map(name => dirName + '/' + name), |
|
|
|
@ -24,6 +22,7 @@ async function getAllFileNames (dirName) { |
|
|
|
|
] |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* |
|
|
|
|
async function start (fileRegEx, testGenerator) { |
|
|
|
|
const fileNames = await getAllFileNames('./ui/app') |
|
|
|
|
const sFiles = fileNames.filter(name => name.match(fileRegEx)) |
|
|
|
@ -46,12 +45,12 @@ async function start (fileRegEx, testGenerator) { |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
async function startContainer (fileRegEx, testGenerator) { |
|
|
|
|
const fileNames = await getAllFileNames('./ui/app') |
|
|
|
|
const sFiles = fileNames.filter(name => name.match(fileRegEx)) |
|
|
|
|
|
|
|
|
|
let sFileMethodNames |
|
|
|
|
async.each(sFiles, async (sFile, cb) => { |
|
|
|
|
console.log(`sFile`, sFile) |
|
|
|
|
const [, sRootPath, sPath] = sFile.match(/^(.+\/)([^/]+)$/) |
|
|
|
@ -62,64 +61,68 @@ async function startContainer (fileRegEx, testGenerator) { |
|
|
|
|
__dirname + '/' + sFile, |
|
|
|
|
'utf8', |
|
|
|
|
async (err, result) => { |
|
|
|
|
console.log(`result`, result.length) |
|
|
|
|
const returnObjectStrings = result |
|
|
|
|
.match(/return\s(\{[\s\S]+?})\n}/g) |
|
|
|
|
.map(str => { |
|
|
|
|
return str |
|
|
|
|
.slice(0, str.length - 1) |
|
|
|
|
.slice(7) |
|
|
|
|
.replace(/\n/g, '') |
|
|
|
|
.replace(/\s\s+/g, ' ') |
|
|
|
|
|
|
|
|
|
if (err) { |
|
|
|
|
console.log('Error: ', err) |
|
|
|
|
} else {
|
|
|
|
|
console.log(`result`, result.length) |
|
|
|
|
const returnObjectStrings = result |
|
|
|
|
.match(/return\s(\{[\s\S]+?})\n}/g) |
|
|
|
|
.map(str => { |
|
|
|
|
return str |
|
|
|
|
.slice(0, str.length - 1) |
|
|
|
|
.slice(7) |
|
|
|
|
.replace(/\n/g, '') |
|
|
|
|
.replace(/\s\s+/g, ' ') |
|
|
|
|
|
|
|
|
|
}) |
|
|
|
|
const mapStateToPropsAssertionObject = returnObjectStrings[0] |
|
|
|
|
.replace(/\w+:\s\w+\([\w,\s]+\),/g, str => { |
|
|
|
|
const strKey = str.match(/^\w+/)[0] |
|
|
|
|
return strKey + ': \'mock' + str.match(/^\w+/)[0].replace(/^./, c => c.toUpperCase()) + ':mockState\',\n' |
|
|
|
|
}) |
|
|
|
|
.replace(/{\s\w.+/, firstLinePair => `{\n ${firstLinePair.slice(2)}`) |
|
|
|
|
.replace(/\w+:.+,/g, s => ` ${s}`) |
|
|
|
|
.replace(/}/g, s => ` ${s}`) |
|
|
|
|
let mapDispatchToPropsMethodNames |
|
|
|
|
if (returnObjectStrings[1]) { |
|
|
|
|
mapDispatchToPropsMethodNames = returnObjectStrings[1].match(/\s\w+:\s/g).map(str => str.match(/\w+/)[0]) |
|
|
|
|
} |
|
|
|
|
const proxyquireObject = ('{\n ' + result |
|
|
|
|
.match(/import\s{[\s\S]+?}\sfrom\s.+/g) |
|
|
|
|
.map(s => s.replace(/\n/g, '')) |
|
|
|
|
.map((s, i) => { |
|
|
|
|
const proxyKeys = s.match(/{.+}/)[0].match(/\w+/g) |
|
|
|
|
return '\'' + s.match(/'(.+)'/)[1] + '\': { ' + (proxyKeys.length > 1 |
|
|
|
|
? '\n ' + proxyKeys.join(': () => {},\n ') + ': () => {},\n ' |
|
|
|
|
: proxyKeys[0] + ': () => {},') + ' }' |
|
|
|
|
}) |
|
|
|
|
.join(',\n ') + '\n}') |
|
|
|
|
.replace('{ connect: () => {}, },', `{
|
|
|
|
|
connect: (ms, md) => { |
|
|
|
|
mapStateToProps = ms |
|
|
|
|
mapDispatchToProps = md |
|
|
|
|
return () => ({}) |
|
|
|
|
}, |
|
|
|
|
},`)
|
|
|
|
|
// console.log(`proxyquireObject`, proxyquireObject);
|
|
|
|
|
// console.log(`mapStateToPropsAssertionObject`, mapStateToPropsAssertionObject);
|
|
|
|
|
// console.log(`mapDispatchToPropsMethodNames`, mapDispatchToPropsMethodNames);
|
|
|
|
|
|
|
|
|
|
const containerTest = generateContainerTest(sPath, { |
|
|
|
|
mapStateToPropsAssertionObject, |
|
|
|
|
mapDispatchToPropsMethodNames, |
|
|
|
|
proxyquireObject, |
|
|
|
|
}) |
|
|
|
|
const mapStateToPropsAssertionObject = returnObjectStrings[0] |
|
|
|
|
.replace(/\w+:\s\w+\([\w,\s]+\),/g, str => { |
|
|
|
|
const strKey = str.match(/^\w+/)[0] |
|
|
|
|
return strKey + ': \'mock' + str.match(/^\w+/)[0].replace(/^./, c => c.toUpperCase()) + ':mockState\',\n' |
|
|
|
|
}) |
|
|
|
|
.replace(/{\s\w.+/, firstLinePair => `{\n ${firstLinePair.slice(2)}`) |
|
|
|
|
.replace(/\w+:.+,/g, s => ` ${s}`) |
|
|
|
|
.replace(/}/g, s => ` ${s}`) |
|
|
|
|
let mapDispatchToPropsMethodNames |
|
|
|
|
if (returnObjectStrings[1]) { |
|
|
|
|
mapDispatchToPropsMethodNames = returnObjectStrings[1].match(/\s\w+:\s/g).map(str => str.match(/\w+/)[0]) |
|
|
|
|
// console.log(`containerTest`, `${__dirname}/${sRootPath}tests/${testFilePath}`, containerTest);
|
|
|
|
|
console.log('----') |
|
|
|
|
console.log(`sRootPath`, sRootPath) |
|
|
|
|
console.log(`testFilePath`, testFilePath) |
|
|
|
|
await promisify(fs.writeFile)( |
|
|
|
|
`${__dirname}/${sRootPath}tests/${testFilePath}`, |
|
|
|
|
containerTest, |
|
|
|
|
'utf8' |
|
|
|
|
) |
|
|
|
|
} |
|
|
|
|
const proxyquireObject = ('{\n ' + result |
|
|
|
|
.match(/import\s{[\s\S]+?}\sfrom\s.+/g) |
|
|
|
|
.map(s => s.replace(/\n/g, '')) |
|
|
|
|
.map((s, i) => { |
|
|
|
|
const proxyKeys = s.match(/{.+}/)[0].match(/\w+/g) |
|
|
|
|
return '\'' + s.match(/'(.+)'/)[1] + '\': { ' + (proxyKeys.length > 1 |
|
|
|
|
? '\n ' + proxyKeys.join(': () => {},\n ') + ': () => {},\n ' |
|
|
|
|
: proxyKeys[0] + ': () => {},') + ' }' |
|
|
|
|
}) |
|
|
|
|
.join(',\n ') + '\n}') |
|
|
|
|
.replace('{ connect: () => {}, },', `{
|
|
|
|
|
connect: (ms, md) => { |
|
|
|
|
mapStateToProps = ms |
|
|
|
|
mapDispatchToProps = md |
|
|
|
|
return () => ({}) |
|
|
|
|
}, |
|
|
|
|
},`)
|
|
|
|
|
// console.log(`proxyquireObject`, proxyquireObject);
|
|
|
|
|
// console.log(`mapStateToPropsAssertionObject`, mapStateToPropsAssertionObject);
|
|
|
|
|
// console.log(`mapDispatchToPropsMethodNames`, mapDispatchToPropsMethodNames);
|
|
|
|
|
|
|
|
|
|
const containerTest = generateContainerTest(sPath, { |
|
|
|
|
mapStateToPropsAssertionObject, |
|
|
|
|
mapDispatchToPropsMethodNames, |
|
|
|
|
proxyquireObject, |
|
|
|
|
}) |
|
|
|
|
// console.log(`containerTest`, `${__dirname}/${sRootPath}tests/${testFilePath}`, containerTest);
|
|
|
|
|
console.log('----') |
|
|
|
|
console.log(`sRootPath`, sRootPath) |
|
|
|
|
console.log(`testFilePath`, testFilePath) |
|
|
|
|
await promisify(fs.writeFile)( |
|
|
|
|
`${__dirname}/${sRootPath}tests/${testFilePath}`, |
|
|
|
|
containerTest, |
|
|
|
|
'utf8' |
|
|
|
|
) |
|
|
|
|
} |
|
|
|
|
) |
|
|
|
|
}, (err) => { |
|
|
|
@ -127,7 +130,7 @@ async function startContainer (fileRegEx, testGenerator) { |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* |
|
|
|
|
function generateMethodList (methodArray) { |
|
|
|
|
return methodArray.map(n => ' ' + n).join(',\n') + ',' |
|
|
|
|
} |
|
|
|
@ -143,7 +146,7 @@ function generateMethodDescribeBlock (methodName, index) { |
|
|
|
|
})` |
|
|
|
|
return describeBlock |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
*/ |
|
|
|
|
function generateDispatchMethodDescribeBlock (methodName, index) { |
|
|
|
|
const describeBlock = |
|
|
|
|
`${index ? ' ' : ''}describe('${methodName}()', () => {
|
|
|
|
@ -154,12 +157,13 @@ function generateDispatchMethodDescribeBlock (methodName, index) { |
|
|
|
|
})` |
|
|
|
|
return describeBlock |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* |
|
|
|
|
function generateMethodDescribeBlocks (methodArray) { |
|
|
|
|
return methodArray |
|
|
|
|
.map((methodName, index) => generateMethodDescribeBlock(methodName, index)) |
|
|
|
|
.join('\n\n') |
|
|
|
|
} |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
function generateDispatchMethodDescribeBlocks (methodArray) { |
|
|
|
|
return methodArray |
|
|
|
@ -167,6 +171,7 @@ function generateDispatchMethodDescribeBlocks (methodArray) { |
|
|
|
|
.join('\n\n') |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* |
|
|
|
|
function generateSelectorTest (name, methodArray) { |
|
|
|
|
return `import assert from 'assert'
|
|
|
|
|
import { |
|
|
|
@ -192,6 +197,7 @@ describe('${name.match(/^[^.]+/)} utils', () => { |
|
|
|
|
|
|
|
|
|
})` |
|
|
|
|
} |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
function generateContainerTest (sPath, { |
|
|
|
|
mapStateToPropsAssertionObject, |
|
|
|
|