33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass/**
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * An object object containing test result formatting methods.
5aab19b8b78189ce79cf89283f2d505566d4e6a8Dav Glass * @namespace Test
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @class TestFormat
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @static
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass */
d0199bcbfc68b65683c19c4e3e0c38e238142e7eDav GlassYUITest.TestFormat = function(){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass /* (intentionally not documented)
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * Basic XML escaping method. Replaces quotes, less-than, greater-than,
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * apostrophe, and ampersand characters with their corresponding entities.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @param {String} text The text to encode.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @return {String} The XML-escaped text.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass */
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass function xmlEscape(text){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass return text.replace(/[<>"'&]/g, function(value){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass switch(value){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass case "<": return "&lt;";
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass case ">": return "&gt;";
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass case "\"": return "&quot;";
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass case "'": return "&apos;";
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass case "&": return "&amp;";
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass });
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass return {
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass /**
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * Returns test results formatted as a JSON string. Requires JSON utility.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @param {Object} result The results object created by TestRunner.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @return {String} A JSON-formatted string of results.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @method JSON
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @static
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass */
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass JSON: function(results) {
d0199bcbfc68b65683c19c4e3e0c38e238142e7eDav Glass return YUITest.Util.JSON.stringify(results);
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass },
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass /**
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * Returns test results formatted as an XML string.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @param {Object} result The results object created by TestRunner.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @return {String} An XML-formatted string of results.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @method XML
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @static
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass */
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass XML: function(results) {
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass function serializeToXML(results){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass var xml = "<" + results.type + " name=\"" + xmlEscape(results.name) + "\"";
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (typeof(results.duration)=="number"){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass xml += " duration=\"" + results.duration + "\"";
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (results.type == "test"){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass xml += " result=\"" + results.result + "\" message=\"" + xmlEscape(results.message) + "\">";
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass } else {
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass xml += " passed=\"" + results.passed + "\" failed=\"" + results.failed + "\" ignored=\"" + results.ignored + "\" total=\"" + results.total + "\">";
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass for (var prop in results){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (results.hasOwnProperty(prop)){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (results[prop] && typeof results[prop] == "object" && !(results[prop] instanceof Array)){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass xml += serializeToXML(results[prop]);
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass xml += "</" + results.type + ">";
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass return xml;
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + serializeToXML(results);
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass },
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass /**
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * Returns test results formatted in JUnit XML format.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @param {Object} result The results object created by TestRunner.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @return {String} An XML-formatted string of results.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @method JUnitXML
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @static
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass */
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass JUnitXML: function(results) {
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass function serializeToJUnitXML(results){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass var xml = "";
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass switch (results.type){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass //equivalent to testcase in JUnit
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass case "test":
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (results.result != "ignore"){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass xml = "<testcase name=\"" + xmlEscape(results.name) + "\" time=\"" + (results.duration/1000) + "\">";
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (results.result == "fail"){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass xml += "<failure message=\"" + xmlEscape(results.message) + "\"><![CDATA[" + results.message + "]]></failure>";
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass xml+= "</testcase>";
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass break;
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass //equivalent to testsuite in JUnit
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass case "testcase":
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass xml = "<testsuite name=\"" + xmlEscape(results.name) + "\" tests=\"" + results.total + "\" failures=\"" + results.failed + "\" time=\"" + (results.duration/1000) + "\">";
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass for (var prop in results){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (results.hasOwnProperty(prop)){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (results[prop] && typeof results[prop] == "object" && !(results[prop] instanceof Array)){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass xml += serializeToJUnitXML(results[prop]);
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass xml += "</testsuite>";
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass break;
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass //no JUnit equivalent, don't output anything
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass case "testsuite":
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass for (var prop in results){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (results.hasOwnProperty(prop)){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (results[prop] && typeof results[prop] == "object" && !(results[prop] instanceof Array)){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass xml += serializeToJUnitXML(results[prop]);
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass break;
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass //top-level, equivalent to testsuites in JUnit
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass case "report":
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass xml = "<testsuites>";
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass for (var prop in results){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (results.hasOwnProperty(prop)){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (results[prop] && typeof results[prop] == "object" && !(results[prop] instanceof Array)){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass xml += serializeToJUnitXML(results[prop]);
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass xml += "</testsuites>";
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass //no default
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass return xml;
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + serializeToJUnitXML(results);
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass },
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass /**
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * Returns test results formatted in TAP format.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * For more information, see <a href="http://testanything.org/">Test Anything Protocol</a>.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @param {Object} result The results object created by TestRunner.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @return {String} A TAP-formatted string of results.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @method TAP
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @static
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass */
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass TAP: function(results) {
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass var currentTestNum = 1;
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass function serializeToTAP(results){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass var text = "";
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass switch (results.type){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass case "test":
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (results.result != "ignore"){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass text = "ok " + (currentTestNum++) + " - " + results.name;
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (results.result == "fail"){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass text = "not " + text + " - " + results.message;
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass text += "\n";
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass } else {
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass text = "#Ignored test " + results.name + "\n";
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass break;
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass case "testcase":
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass text = "#Begin testcase " + results.name + "(" + results.failed + " failed of " + results.total + ")\n";
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass for (var prop in results){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (results.hasOwnProperty(prop)){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (results[prop] && typeof results[prop] == "object" && !(results[prop] instanceof Array)){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass text += serializeToTAP(results[prop]);
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass text += "#End testcase " + results.name + "\n";
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass break;
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass case "testsuite":
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass text = "#Begin testsuite " + results.name + "(" + results.failed + " failed of " + results.total + ")\n";
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass for (var prop in results){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (results.hasOwnProperty(prop)){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (results[prop] && typeof results[prop] == "object" && !(results[prop] instanceof Array)){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass text += serializeToTAP(results[prop]);
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass text += "#End testsuite " + results.name + "\n";
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass break;
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass case "report":
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass for (var prop in results){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (results.hasOwnProperty(prop)){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (results[prop] && typeof results[prop] == "object" && !(results[prop] instanceof Array)){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass text += serializeToTAP(results[prop]);
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass //no default
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass return text;
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass return "1.." + results.total + "\n" + serializeToTAP(results);
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass };
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass}();