diff --git a/bin/blow b/bin/blow index c4b3d51..b89cdea 100644 --- a/bin/blow +++ b/bin/blow @@ -20,11 +20,15 @@ argv.forEach(function (arg) { var match = /^-(-)?([a-z]+)=([a-z0-9]+)$/; var settings = { port: 0, - style: 'bdd' + address: '0.0.0.0', + style: 'bdd', + index: path.resolve(path.dirname(module.filename), '../index.html') }; var map = { 'p': 'port', - 's': 'style' + 'a': 'address', + 's': 'style', + 'i': 'index' }; args.forEach(function (string) { var result = string.match(match); @@ -35,6 +39,8 @@ args.forEach(function (string) { if (result[3] === 'port') { result[2] = parseInt(result[2], 10); + } else if (result[3] === 'index') { + result[2] = path.resolve(result[2]); } if (settings.hasOwnProperty(result[2])) { diff --git a/blow.js b/blow.js index 7ef6e09..256396b 100644 --- a/blow.js +++ b/blow.js @@ -43,68 +43,93 @@ module.exports = function(files, settings) { app.route('/test' + relative).file(map[relative]); }); - // - var indexFile = generateIndex(map, settings.style); + // Standart output + var base = preGenerate(settings.index, settings.style); + + //Generate pages + var indexFile = generateIndex(base, map); app.route('/').html(indexFile); // route all subtest pages Object.keys(map).forEach(function (relative) { - var content = generateTest(relative, settings.style); + var content = generateTest(base, relative); app.route(relative).html(content); }); - app.httpServer.listen(settings.port, function () { - console.log('blow server online at http://127.0.0.1:' + app.httpServer.address().port); + app.httpServer.listen(settings.port, settings.address, function () { + var addr = app.httpServer.address(); + console.log('blow server online at http://' + addr.address + ':' + addr.port); }); }; -// Standart output -var base = domstream( fs.readFileSync( path.resolve(path.dirname(module.filepath), 'index.html') ) ); +function preGenerate(file, style) { + var base = domstream(fs.readFileSync(file)).live(true); -// generate the master testsuite -function generateIndex(files, style) { - var document = base.copy(); + var head = base.find().only().elem('head').toValue(); + if (!head) throw new Error('a
tag must exist'); - // modify title - var title = document.find().only().elem('title').toValue(); - title.setContent('Mocha Tests - all'); + var body = base.find().only().elem('body').toValue(); + if (!body) throw new Error('a tag must exist'); + + // insert meta tag + var meta = head.find().only().elem('meta').attr('charset').toValue(); + if (meta === false) { + head.insert('afterbegin', ''); + meta = head.find().only().elem('meta').attr('charset').toValue(); + } + + // insert title tag + var title = head.find().only().elem('title').toValue(); + if (title === false) { + meta.insert('afterend', '