#!/usr/bin/env node var path = require( 'path' ); var coffee = require( 'coffee-script/register' ); var program = require('commander'); var Script = require( '../lib/Script' ); var Runner = require( '../lib/Runner' ); var Reporter = require( '../lib/Reporter' ); var Documentor = require( '../lib/Documentor' ); var Request = require( '../lib/Request' ); var Settings = require( '../lib/Settings' ); var Suite = require( '../lib/Suite' ); var ScriptParser = require( '../lib/ScriptParser' ); var version = require('../package').version; program .version(version) .usage('[options] ') .option('-g, --gist [url]', 'load script from github gist') .option('-c, --conf [dir]', 'an additional config file to load after ciao.json') .option('-s, --silent', 'disable reporters') .option('-v, --verbose', 'report full requests and responses on error') .option('-d, --documentation [dir]', 'generate documentation in output dir') .parse(process.argv); basesettings = new Settings(); basesettings.loadFromFile( 'ciao.json', true ); if( program.conf ){ basesettings.loadFromFile( program.conf ); } // Set Reporter if( !program.silent ){ if( program.verbose ){ var reporter = new Reporter.reqRes(); } else { var reporter = new Reporter.suite(); } } var ciao = function( err, settings, parser, filename ) { if( err ) throw new Error( err ); if( parser.sections.request[0] ){ var runner = new Runner( parser.sections.assert ); reporter.watch( runner ); parser.sections.assert.map( function () { runner.emit('start'); } ); // HTTP Request var http = new Request(); http.on( 'complete', runner.complete ); // Documentation if( program.documentation ) { filename = path.resolve( filename ); var docTarget = filename.replace( process.cwd(), process.cwd() + '/' + program.documentation ); var docFile = docTarget.replace( '.coffee', '.md' ); var documentation = new Documentor( runner, parser.sections.request[0].title, docFile ); http.on( 'complete', documentation.documentTransaction ); } // Send the Request http.transfer( settings.defaults ); } }; // Run gist if( program.gist ){ program.gist = program.gist.replace( 'https://gist.github.com/', '' ); settings = new Settings(); http = new Request(); http.on( 'complete', function( e, req, res, data ){ parser = new ScriptParser( data, program.gist ); if( !parser.sections.request[0] ) { console.error( 'Gist does not contain any request blocks' ); return process.exit( 1 ); } Script.mergeSettings( program.gist, settings, parser, ciao ); }); http.transfer({ "protocol": "https:", "port": 443, "host": "gist.github.com", "path": "/" + program.gist + "/raw/" }); } // Run script(s) else if( program.args[0] ) { var suite = new Suite( function( filename, suite ) { settings = new Settings(); settings.merge( basesettings ); Script.load( filename, settings, ciao ); }); suite.walk( program.args[0] ); } else { program.help(); }