jasmine-dom 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. #!/usr/bin/env node
  2. function getArguments(args){
  3. var unprocessed = args,
  4. processed = {},
  5. key = "",
  6. value = "";
  7. for(var i = 0; i < unprocessed.length; i++){
  8. var arg = unprocessed[i];
  9. if(arg.substr(0,2) == "--"){
  10. if(key){
  11. processed[key] = value;
  12. key = "";
  13. value = "";
  14. }
  15. key = arg.substr(2);
  16. } else {
  17. if(key) value += (value?" ":"") + arg;
  18. }
  19. };
  20. if(key){
  21. processed[key] = value;
  22. key = "";
  23. value = "";
  24. };
  25. return processed;
  26. };
  27. var arguments = getArguments(process.argv);
  28. var options = {
  29. format: arguments.format || "default",
  30. output: arguments.output || null,
  31. debug: "debug" in arguments,
  32. runner: arguments.runner,
  33. server: "server" in arguments,
  34. port: arguments.server,
  35. help: "help" in arguments,
  36. refreshInterval: arguments.refresh,
  37. config: arguments.config
  38. };
  39. function _getAbsolutePath(file, base){
  40. var path;
  41. var base = base || process.cwd();
  42. if (file.substring(0,1) == "/"){
  43. path = file;
  44. } else {
  45. path = base + '/' + file;
  46. }
  47. return require('path').normalize(path);
  48. };
  49. function _getUsage(){
  50. return "Usage: node run.js --runner <path> | --config <path> [--format simple|nice|json|html|junit] [--output <path>] [--server [port] [--refresh <ms interval>]] [--help]\n\n" +
  51. "For more information, visit https://github.com/andrewpmckenzie/node-jasmine-dom";
  52. };
  53. function _formatNice(obj){
  54. if(obj.failed == 0){
  55. return "Passed";
  56. } else {
  57. var message = "Failed: \n";
  58. for( var k in obj.failureDetails ){
  59. var details = obj.failureDetails[k];
  60. message += " - In " + details.group + " >> " + details.suite + " >> " + details.spec + " :: " + details.message + "\n";
  61. }
  62. return message;
  63. }
  64. };
  65. function _format(report){
  66. var result = '';
  67. switch(options.format){
  68. case 'simple':
  69. case 'default':
  70. result = report.simple.status;
  71. break;
  72. case 'json':
  73. result = JSON.stringify(report.simple);
  74. break;
  75. case 'nice':
  76. result = _formatNice(report.simple);
  77. break;
  78. case 'html':
  79. result = report.html;
  80. break;
  81. case 'junit':
  82. result = report.junit;
  83. break;
  84. default:
  85. console.error("Unknown format:" + options.format);
  86. process.exit(0);
  87. break;
  88. };
  89. return result;
  90. };
  91. function _output(text){
  92. if(options.output){
  93. var file = _getAbsolutePath(options.output);
  94. require('fs').writeFile(file,text,function(err){
  95. if(err) console.log("Something went wrong writing the report to disk: ",err);
  96. });
  97. } else if(options.server) {
  98. return;
  99. } else {
  100. console.log(text);
  101. }
  102. };
  103. function _processReport(report){
  104. var text = _format(report);
  105. _output(text);
  106. };
  107. function _parseConfig(config){
  108. var fs = require('fs'),
  109. path = require('path');
  110. var configPath = _getAbsolutePath(config);
  111. var configBase = path.normalize(path.dirname(configPath));
  112. var file = fs.readFileSync(config,'utf8');
  113. var runnerConfig = [];
  114. try {
  115. var yaml = require('yaml').eval(file);
  116. for(var k in yaml){
  117. var runner = yaml[k];
  118. if("runner" in runner){
  119. runnerConfig.push({
  120. name: runner.name,
  121. runner: _getAbsolutePath(runner.runner, configBase)
  122. });
  123. }
  124. };
  125. if(runnerConfig.length == 0) throw "No runners specified in config. See examples/config.yaml for format.";
  126. } catch (e) {
  127. console.log("Invalid config file.\n\n");
  128. console.error(e);
  129. process.exit(1);
  130. }
  131. return runnerConfig;
  132. };
  133. function validate(options){
  134. if (options.help){
  135. console.log(_getUsage());
  136. process.exit(0);
  137. }
  138. if (! options.runner && ! options.config) {
  139. console.error("You need to specify a html --runner file.\n");
  140. console.log(_getUsage());
  141. process.exit(0);
  142. }
  143. };
  144. function getRunners(runner, config){
  145. if(config){
  146. return _parseConfig(config);
  147. } else {
  148. return [ _getAbsolutePath(runner) ];
  149. }
  150. };
  151. validate(options);
  152. require('../lib/jasmine-dom').run({
  153. runners: getRunners(options.runner, options.config),
  154. serve: options.server,
  155. port: options.port,
  156. refreshInterval: options.refreshInterval,
  157. debug: options.debug,
  158. onDone: function(report){
  159. _processReport(report);
  160. }
  161. });