102 lines
3.5 KiB
JavaScript
102 lines
3.5 KiB
JavaScript
/*
|
|
This is the tdd script that creates & updates your TDD environment .
|
|
Run using `npm run tdd`.
|
|
*/
|
|
|
|
// Load modules
|
|
const fs = require('fs-extra'),
|
|
path = require('path');
|
|
const childProcess = require('child_process');
|
|
const chalk = require('chalk');
|
|
const util = require('./util');
|
|
if (
|
|
util.isTravisCI() &&
|
|
process.env['TRAVIS_EVENT_TYPE'] !== 'cron' &&
|
|
process.env['TRAVIS_EVENT_TYPE'] !== 'api'
|
|
) {
|
|
console.log(`${chalk.green('NOBUILD')} Testing terminated, not a cron job or a custom build!`);
|
|
process.exit(0);
|
|
}
|
|
// Declare paths
|
|
const SNIPPETS_ACTIVE = './snippets';
|
|
const SNIPPETS_ARCHIVE = './snippets_archive';
|
|
const TEST_PATH = './test';
|
|
|
|
// Array of snippet names
|
|
const snippetFiles = [];
|
|
|
|
const snippetFilesActive = fs
|
|
.readdirSync(SNIPPETS_ACTIVE, 'utf8')
|
|
.map(fileName => fileName.slice(0, -3));
|
|
const snippetFilesArchive = fs
|
|
.readdirSync(SNIPPETS_ARCHIVE, 'utf8')
|
|
.filter(fileName => !fileName.includes('README')) // -> Filters out main README.md file in Archieve which isn't a snippet
|
|
.map(fileName => fileName.slice(0, -3));
|
|
|
|
snippetFiles.push(...snippetFilesActive);
|
|
snippetFiles.push(...snippetFilesArchive);
|
|
|
|
console.time('Tester');
|
|
snippetFiles
|
|
.map(fileName => {
|
|
// Check if fileName for snippet exist in test/ dir, if doesnt create
|
|
fs.ensureDirSync(path.join(TEST_PATH, fileName));
|
|
|
|
// return fileName for later use
|
|
return fileName;
|
|
})
|
|
.map(fileName => {
|
|
const activeOrArchive = snippetFilesActive.includes(fileName)
|
|
? SNIPPETS_ACTIVE
|
|
: SNIPPETS_ARCHIVE;
|
|
// Grab snippetData
|
|
const fileData = fs.readFileSync(path.join(activeOrArchive, `${fileName}.md`), 'utf8');
|
|
// Grab snippet Code blocks
|
|
const fileCode = fileData.slice(fileData.search(/```\s*js/i), fileData.lastIndexOf('```') + 3);
|
|
// Split code based on code markers
|
|
const blockMarkers = fileCode
|
|
.split('\n')
|
|
.map((line, lineIndex) => (line.slice(0, 3) === '```' ? lineIndex : '//CLEAR//'))
|
|
.filter(x => !(x === '//CLEAR//'));
|
|
// Grab snippet function based on code markers
|
|
const fileFunction = fileCode
|
|
.split('\n')
|
|
.map(line => line)
|
|
.filter((_, i) => blockMarkers[0] < i && i < blockMarkers[1]);
|
|
// Grab snippet example based on code markers
|
|
const fileExample = fileCode
|
|
.split('\n')
|
|
.map(line => line)
|
|
.filter((_, i) => blockMarkers[2] < i && i < blockMarkers[3]);
|
|
|
|
// Export template for snippetName.js
|
|
const exportFile = `${fileFunction.join('\n')}\nmodule.exports = ${fileName};\n`;
|
|
|
|
// Export template for snippetName.test.js which generates a example test & other information
|
|
const exportTest = [
|
|
`const expect = require('expect');`,
|
|
`const ${fileName} = require('./${fileName}.js');`,
|
|
`\ntest('${fileName} is a Function', () => {`,
|
|
` expect(${fileName}).toBeInstanceOf(Function);`,
|
|
`});\n`
|
|
].join('\n');
|
|
|
|
// Write/Update exportFile which is snippetName.js in respective dir
|
|
fs.writeFileSync(path.join(TEST_PATH, fileName, `${fileName}.js`), exportFile);
|
|
|
|
if (!fs.existsSync(path.join(TEST_PATH, fileName, `${fileName}.test.js`))) {
|
|
// if snippetName.test.js doesn't exist inrespective dir exportTest
|
|
fs.writeFileSync(`${TEST_PATH}/${fileName}/${fileName}.test.js`, exportTest);
|
|
}
|
|
|
|
// return fileName for later use
|
|
return fileName;
|
|
});
|
|
try {
|
|
fs.writeFileSync(path.join(TEST_PATH, 'testlog'), `Test log for: ${new Date().toString()}\n`);
|
|
childProcess.execSync(`npm test`);
|
|
} catch (e) {
|
|
fs.appendFileSync(path.join(TEST_PATH, 'testlog'));
|
|
}
|
|
console.timeEnd('Tester');
|