Skip to content

Commit

Permalink
[feature] support address and index selection
Browse files Browse the repository at this point in the history
  • Loading branch information
AndreasMadsen committed Jul 12, 2012
1 parent f653c3f commit e1dfa9c
Show file tree
Hide file tree
Showing 4 changed files with 68 additions and 42 deletions.
10 changes: 8 additions & 2 deletions bin/blow
Expand Up @@ -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);
Expand All @@ -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])) {
Expand Down
91 changes: 58 additions & 33 deletions blow.js
Expand Up @@ -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 <head> 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 <body> tag must exist');

// insert meta tag
var meta = head.find().only().elem('meta').attr('charset').toValue();
if (meta === false) {
head.insert('afterbegin', '<meta charset="utf8">');
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></title>');
title = head.find().only().elem('title').toValue();
}

// insert framework files
title.insert('afterend',
'<link rel="stylesheet" href="/file/mocha.css">' +
'<script src="/file/chai.js"></script>' +
'<script src="/file/mocha.js"></script>' +
'<script>mocha.setup("' + style + '")</script>' +
'<script>window.onload = function () { mocha.run() };</script>');

// insert framework container
var container = body.find().only().attr('id', 'mocha').toValue();
if (container === false) {
body.append('<div id="mocha"></div>');
}

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('<script>mocha.setup("' + style + '")</script>');
// set title
head.find()
.only().elem('title').toValue()
.setContent('Mocha Tests - all');

// bind testcases
Object.keys(files).forEach(function (relative) {
head.append('<script src="/test' + relative + '"></script>');
});

// bind mocha runner
head.append('<script> window.onload = function () { mocha.run() }; </script>');

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('<script>mocha.setup("' + style + '")</script>');
head.find()
.only().elem('title').toValue()
.setContent('Mocha Tests - ' + file);

// bind testcases
head.append('<script src="/test' + file + '"></script>');

// bind mocha runner
head.append('<script> window.onload = function () { mocha.run() }; </script>');

return document.content;
}
5 changes: 0 additions & 5 deletions index.html
Expand Up @@ -3,11 +3,6 @@
<head>
<meta charset="utf-8">
<title></title>

<link rel="stylesheet" href="/file/mocha.css" />
<script src="/file/chai.js"></script>
<script src="/file/mocha.js"></script>

</head>
<body>
<div id="mocha"></div>
Expand Down
4 changes: 2 additions & 2 deletions 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 <amwebdk@gmail.com>",
"bin": { "blow": "./bin/blow" },
"main": "./blow.js",
Expand All @@ -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",
Expand Down

0 comments on commit e1dfa9c

Please sign in to comment.