관리-도구
편집 파일: print-example.js
var chai = require('chai'); var expect = chai.expect; var colors = require('colors/safe'); var _ = require('lodash'); var fs = require('fs'); var git = require('git-rev'); function logExample(fn){ runPrintingExample(fn, function logName(name){ console.log(colors.gray('========= ') + name + colors.gray(' ================')); }, console.log, //logTable console.log, //logCode console.log, //logSeparator identity //screenShot ) } function mdExample(fn,file,cb){ git.long(function(commitHash){ var buffer = []; runPrintingExample(fn, function logName(name){ buffer.push('##### ' + name); }, function logTable(table){ //md files won't render color strings properly. table = stripColors(table); // indent table so is displayed preformatted text table = ' ' + (table.split('\n').join('\n ')); buffer.push(table); }, function logCode(code){ buffer.push('```javascript'); buffer.push(stripColors(code)); buffer.push('```'); }, function logSeparator(sep){ buffer.push(stripColors(sep)); }, function logScreenShot(image){ buffer.push('![table image](https://cdn.rawgit.com/jamestalmage/cli-table2/' + commitHash + '/examples/screenshots/' + image + '.png)'); } ); fs.writeFileSync(file,buffer.join('\n')); if(cb){cb();} }); } /** * Actually runs the tests and verifies the functions create the expected output. * @param name of the test suite, used in the mocha.describe call. * @param fn a function which creates the test suite. */ function runTest(name,fn){ function testExample(name,fn,expected){ it(name,function(){ expect(fn().toString()).to.equal(expected.join('\n')); }); } describe(name,function () { fn(testExample,identity); }); } /** * Common execution for runs that print output (either to console or to a Markdown file); * @param fn - a function containing the tests/demos. * @param logName - callback to print the name of this test to the console or file. * @param logTable - callback to print the output of the table to the console or file. * @param logCode - callback to print the output of the table to the console or file. * @param logSeparator - callback to print extra whitespace between demos. * @param logScreenShot - write out a link to the screenShot image. */ function runPrintingExample(fn,logName,logTable,logCode,logSeparator,logScreenShot){ /** * Called by every test/demo * @param name - the name of this test. * @param makeTable - a function which builds the table under test. Also, The contents of this function will be printed. * @param expected - The expected result. * @param screenshot - If present, there is an image containing a screenshot of the output */ function printExample(name,makeTable,expected,screenshot){ var code = makeTable.toString().split('\n').slice(1,-2).join('\n'); logName(name); if(screenshot && logScreenShot){ logScreenShot(screenshot); } else { logTable(makeTable().toString()); } logCode(code); logSeparator('\n'); } fn(printExample); } // removes all the color characters from a string function stripColors(str){ return str.split( /\u001b\[(?:\d*;){0,5}\d*m/g).join(''); } // returns the first arg - used as snapshot function function identity(str){ return str; } module.exports = { mdExample:mdExample, logExample:logExample, runTest:runTest };