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', ''); + title = head.find().only().elem('title').toValue(); + } + + // insert framework files + title.insert('afterend', + '' + + '' + + '' + + '' + + ''); + + // insert framework container + var container = body.find().only().attr('id', 'mocha').toValue(); + if (container === false) { + body.append('
'); + } + + return base.live(false); +} - // add testcases - var head = document.find().only().elem('head').toValue(); +// generate the master testsuite +function generateIndex(base, files) { + var head = base.copy().find().only().elem('head').toValue(); - // set mocha style - head.append(''); + // set title + head.find() + .only().elem('title').toValue() + .setContent('Mocha Tests - all'); // bind testcases Object.keys(files).forEach(function (relative) { head.append(''); }); - // bind mocha runner - head.append(''); - return document.content; } // generate individual testcases -function generateTest(file, style) { - var document = base.copy(); +function generateTest(base, file) { + var head = base.copy().find().only().elem('head').toValue(); // modify title - var title = document.find().only().elem('title').toValue(); - title.setContent('Mocha Tests - ' + file); - - // add testcases - var head = document.find().only().elem('head').toValue(); - - // set mocha style - head.append(''); + head.find() + .only().elem('title').toValue() + .setContent('Mocha Tests - ' + file); // bind testcases head.append(''); - // bind mocha runner - head.append(''); - return document.content; } diff --git a/index.html b/index.html index d55a063..2f113b7 100644 --- a/index.html +++ b/index.html @@ -3,11 +3,6 @@ - - - - -
diff --git a/package.json b/package.json index 9b17bde..11231bb 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "blow", "description": "Simple browser boilerplate for the test framework: mocha", - "version": "0.1.3", + "version": "0.1.4", "author": "Andreas Madsen ", "bin": { "blow": "./bin/blow" }, "main": "./blow.js", @@ -18,7 +18,7 @@ "dependencies": { "mocha" : "1.3.x", "chai": "1.1.x", - "domstream": "0.3.x", + "domstream": "0.4.x", "tako": "0.3.x" }, "license": "MIT",