Skip to content

Commit

Permalink
Cleaned up node CLI
Browse files Browse the repository at this point in the history
  • Loading branch information
nzakas committed Feb 12, 2011
1 parent 3af05b2 commit 8c7c459
Show file tree
Hide file tree
Showing 12 changed files with 821 additions and 197 deletions.
6 changes: 5 additions & 1 deletion javascript/build-node.properties
Expand Up @@ -31,7 +31,11 @@ component.jsfiles= core/YUITest.js, \
reporting/TestFormat.js, \
reporting/CoverageFormat.js, \
core/TestRunner.js, \
nodejs/Node.js, \
nodejs/CLI.Logger.js, \
nodejs/CLI.XUnit.js, \
commonjs/Exports.js

#Override
global.build.base = ${component.jsfiles.base}/../build
global.build.base = ${component.jsfiles.base}/../build
component.logger.regex=SHOULD_MATCH_NOTHING
120 changes: 25 additions & 95 deletions javascript/build/yuitest/npm/cli.js
Expand Up @@ -4,10 +4,11 @@

var fs = require("fs"),
path = require("path"),
//YUITest = require(path.join(process.cwd(), "lib/yuitest-node.js")).YUITest,
vm = require("vm"),
YUITest = require("./lib/yuitest-node.js").YUITest,
TestRunner = YUITest.TestRunner,
stdout = process.stdout;
stdout = process.stdout,
stderr = process.stderr;


//options collected from command line
Expand All @@ -16,90 +17,7 @@ var options = {
};

//-----------------------------------------------------------------------------
// Setup TestRunner
//-----------------------------------------------------------------------------

stdout.write("YUI Test for Node.js\n");

//handles test runner events
function handleEvent(event){
var message = "";
switch(event.type){
case TestRunner.BEGIN_EVENT:
message = "Testing began at " + (new Date()).toString() + ".";
messageType = "info";
break;

case TestRunner.COMPLETE_EVENT:
message = "Testing completed at " +
(new Date()).toString() + ".\n" +
"Passed:" + event.results.passed + " Failed:" + event.results.failed +
" Total:" + event.results.total + "(" + event.results.ignored + " ignored)";
messageType = "info";
break;

case TestRunner.TEST_FAIL_EVENT:
message = event.testName + ": failed.\n" + event.error.getMessage();
messageType = "fail";
break;

case TestRunner.TEST_IGNORE_EVENT:
message = event.testName + ": ignored.";
messageType = "ignore";
break;

case TestRunner.TEST_PASS_EVENT:
message = event.testName + ": passed.";
messageType = "pass";
break;

case TestRunner.TEST_SUITE_BEGIN_EVENT:
message = "Test suite \"" + event.testSuite.name + "\" started.";
messageType = "info";
break;

case TestRunner.TEST_SUITE_COMPLETE_EVENT:
message = "Testing completed at " +
(new Date()).toString() + ".\n" +
"Passed:" + event.results.passed + " Failed:" + event.results.failed +
" Total:" + event.results.total + "(" + event.results.ignored + " ignored)";
messageType = "info";
break;

case TestRunner.TEST_CASE_BEGIN_EVENT:
message = "Test case \"" + event.testCase.name + "\" started.";
messageType = "info";
break;

case TestRunner.TEST_CASE_COMPLETE_EVENT:
message = "Testing completed at " +
(new Date()).toString() + ".\n" +
"Passed:" + event.results.passed + " Failed:" + event.results.failed +
" Total:" + event.results.total + "(" + event.results.ignored + " ignored)";
messageType = "info";
break;
default:
message = "Unexpected event " + event.type;
messageType = "info";
}

stdout.write(message + "\n");
}


TestRunner.subscribe(TestRunner.BEGIN_EVENT, handleEvent)
TestRunner.subscribe(TestRunner.TEST_FAIL_EVENT, handleEvent);
TestRunner.subscribe(TestRunner.TEST_PASS_EVENT, handleEvent);
TestRunner.subscribe(TestRunner.TEST_IGNORE_EVENT, handleEvent);
TestRunner.subscribe(TestRunner.TEST_CASE_BEGIN_EVENT, handleEvent);
TestRunner.subscribe(TestRunner.TEST_CASE_COMPLETE_EVENT, handleEvent);
TestRunner.subscribe(TestRunner.TEST_SUITE_BEGIN_EVENT, handleEvent);
TestRunner.subscribe(TestRunner.TEST_SUITE_COMPLETE_EVENT, handleEvent);
TestRunner.subscribe(TestRunner.COMPLETE_EVENT, handleEvent);


//-----------------------------------------------------------------------------
// Function get all files in a directory
// Function to get all files in a directory
//-----------------------------------------------------------------------------

function getFiles(dir){
Expand Down Expand Up @@ -161,21 +79,33 @@ files = files.map(function(filename){
return path.join(process.cwd(), filename);
});

//-----------------------------------------------------------------------------
// Setup TestRunner
//-----------------------------------------------------------------------------

//TODO: Other types of output
YUITest.Node.CLI.XUnit();

//-----------------------------------------------------------------------------
// Include test files
//-----------------------------------------------------------------------------

var code = [];
var code = [], i, len;

files.forEach(function(filename){
if (files.length){
for (i=0, len=files.length; i < len; i++){

if (options.verbose){
stdout.write("Loading " + filename + "\n");
if (options.verbose){
stderr.write("Loading " + files[i] + "\n");
}

var output = fs.readFileSync(files[i]);
vm.runInThisContext("(function(YUITest){\n" + output + "\n})", files[i])(YUITest);
//code.push(output);
}

var output = fs.readFileSync(filename);
code.push(output);
});
} else {
process.stdout.write("No tests to run.\n");
}

eval(code.join("\n\n"));
//eval(code.join("\n\n"));
TestRunner.run();
191 changes: 191 additions & 0 deletions javascript/build/yuitest/npm/lib/yuitest-node.js
Expand Up @@ -3358,6 +3358,197 @@ YUITest.CoverageFormat = {

}();

//define namespace

YUITest.Node = {
CLI:{}
};



/**
* Console output that mimics logger output from YUI Test for YUI 2/3.
* @namespace YUITest.Node.CLI
* @class Logger
* @constructor
*/
YUITest.Node.CLI.Logger = function(){

var testRunner = YUITest.TestRunner;

//handles test runner events
function handleEvent(event){

var message = "";
switch(event.type){
case testRunner.BEGIN_EVENT:
message = "Testing began at " + (new Date()).toString() + ".";
messageType = "info";
break;

case testRunner.COMPLETE_EVENT:
message = "Testing completed at " +
(new Date()).toString() + ".\n" +
"Passed:" + event.results.passed + " Failed:" + event.results.failed +
" Total:" + event.results.total + "(" + event.results.ignored + " ignored)";
messageType = "info";
break;

case testRunner.TEST_FAIL_EVENT:
message = event.testName + ": failed.\n" + event.error.getMessage();
messageType = "fail";
break;

case testRunner.TEST_IGNORE_EVENT:
message = event.testName + ": ignored.";
messageType = "ignore";
break;

case testRunner.TEST_PASS_EVENT:
message = event.testName + ": passed.";
messageType = "pass";
break;

case testRunner.TEST_SUITE_BEGIN_EVENT:
message = "Test suite \"" + event.testSuite.name + "\" started.";
messageType = "info";
break;

case testRunner.TEST_SUITE_COMPLETE_EVENT:
message = "Testing completed at " +
(new Date()).toString() + ".\n" +
"Passed:" + event.results.passed + " Failed:" + event.results.failed +
" Total:" + event.results.total + "(" + event.results.ignored + " ignored)";
messageType = "info";
break;

case testRunner.TEST_CASE_BEGIN_EVENT:
message = "Test case \"" + event.testCase.name + "\" started.";
messageType = "info";
break;

case testRunner.TEST_CASE_COMPLETE_EVENT:
message = "Testing completed at " +
(new Date()).toString() + ".\n" +
"Passed:" + event.results.passed + " Failed:" + event.results.failed +
" Total:" + event.results.total + "(" + event.results.ignored + " ignored)";
messageType = "info";
break;
default:
message = "Unexpected event " + event.type;
messageType = "info";
}

process.stdout.write(message + "\n");
}

testRunner.subscribe(testRunner.BEGIN_EVENT, handleEvent)
testRunner.subscribe(testRunner.TEST_FAIL_EVENT, handleEvent);
testRunner.subscribe(testRunner.TEST_PASS_EVENT, handleEvent);
testRunner.subscribe(testRunner.TEST_IGNORE_EVENT, handleEvent);
testRunner.subscribe(testRunner.TEST_CASE_BEGIN_EVENT, handleEvent);
testRunner.subscribe(testRunner.TEST_CASE_COMPLETE_EVENT, handleEvent);
testRunner.subscribe(testRunner.TEST_SUITE_BEGIN_EVENT, handleEvent);
testRunner.subscribe(testRunner.TEST_SUITE_COMPLETE_EVENT, handleEvent);
testRunner.subscribe(testRunner.COMPLETE_EVENT, handleEvent);

};



/**
* Console output that mimics XUnit output.
* @namespace YUITest.Node.CLI
* @class XUnit
* @constructor
*/
YUITest.Node.CLI.XUnit = function(){

var testRunner = YUITest.TestRunner,
stdout = process.stdout,
failures = [],
stack = [];

//handles test runner events
function handleEvent(event){

var message = "",
results = event.results,
sys = require('sys'),
i, len;

switch(event.type){
case testRunner.BEGIN_EVENT:
message = "YUITest for Node.js\n";
break;

case testRunner.COMPLETE_EVENT:
message = "\nTotal tests: " + results.total + ", Failures: " +
results.failed + ", Skipped: " + results.ignored +
", Time: " + (results.duration/1000) + " seconds\n";

if (failures.length){
message += "\nTests failed:\n";

for (i=0,len=failures.length; i < len; i++){
message += "\n" + (i+1) + ") " + failures[i].name + " : " + failures[i].error.getMessage() + "\n";
//message += "Stack trace:\n" + failures[i].error.stack + "\n";
}

message += "\n";
}

message += "\n";
break;

case testRunner.TEST_FAIL_EVENT:
message = "F";
failures.push({
name: stack.concat([event.testName]).join(" > "),
error: event.error
});

break;

case testRunner.TEST_IGNORE_EVENT:
message = "S";
break;

case testRunner.TEST_PASS_EVENT:
message = ".";
break;

case testRunner.TEST_SUITE_BEGIN_EVENT:
stack.push(event.testSuite.name);
break;

case testRunner.TEST_CASE_COMPLETE_EVENT:
case testRunner.TEST_SUITE_COMPLETE_EVENT:
stack.pop();
break;

case testRunner.TEST_CASE_BEGIN_EVENT:
stack.push(event.testCase.name);
break;

//no default
}

sys.print(message);
}

testRunner.subscribe(testRunner.BEGIN_EVENT, handleEvent)
testRunner.subscribe(testRunner.TEST_FAIL_EVENT, handleEvent);
testRunner.subscribe(testRunner.TEST_PASS_EVENT, handleEvent);
testRunner.subscribe(testRunner.TEST_IGNORE_EVENT, handleEvent);
testRunner.subscribe(testRunner.TEST_CASE_BEGIN_EVENT, handleEvent);
testRunner.subscribe(testRunner.TEST_CASE_COMPLETE_EVENT, handleEvent);
testRunner.subscribe(testRunner.TEST_SUITE_BEGIN_EVENT, handleEvent);
testRunner.subscribe(testRunner.TEST_SUITE_COMPLETE_EVENT, handleEvent);
testRunner.subscribe(testRunner.COMPLETE_EVENT, handleEvent);

};

//export in CommonJS format
exports.YUITest = YUITest;

0 comments on commit 8c7c459

Please sign in to comment.