mirror of
				https://github.com/ether/etherpad-lite.git
				synced 2025-11-04 10:11:33 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			192 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			192 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
$(function(){
 | 
						|
  function Base(runner) {
 | 
						|
    var self = this
 | 
						|
      , stats = this.stats = { suites: 0, tests: 0, passes: 0, pending: 0, failures: 0 }
 | 
						|
      , failures = this.failures = [];
 | 
						|
 | 
						|
    if (!runner) return;
 | 
						|
    this.runner = runner;
 | 
						|
 | 
						|
    runner.on('start', function(){
 | 
						|
      stats.start = new Date;
 | 
						|
    });
 | 
						|
 | 
						|
    runner.on('suite', function(suite){
 | 
						|
      stats.suites = stats.suites || 0;
 | 
						|
      suite.root || stats.suites++;
 | 
						|
    });
 | 
						|
 | 
						|
    runner.on('test end', function(test){
 | 
						|
      stats.tests = stats.tests || 0;
 | 
						|
      stats.tests++;
 | 
						|
    });
 | 
						|
 | 
						|
    runner.on('pass', function(test){
 | 
						|
      stats.passes = stats.passes || 0;
 | 
						|
 | 
						|
      var medium = test.slow() / 2;
 | 
						|
      test.speed = test.duration > test.slow()
 | 
						|
        ? 'slow'
 | 
						|
        : test.duration > medium
 | 
						|
          ? 'medium'
 | 
						|
          : 'fast';
 | 
						|
 | 
						|
      stats.passes++;
 | 
						|
    });
 | 
						|
 | 
						|
    runner.on('fail', function(test, err){
 | 
						|
      stats.failures = stats.failures || 0;
 | 
						|
      stats.failures++;
 | 
						|
      test.err = err;
 | 
						|
      failures.push(test);
 | 
						|
    });
 | 
						|
 | 
						|
    runner.on('end', function(){
 | 
						|
      stats.end = new Date;
 | 
						|
      stats.duration = new Date - stats.start;
 | 
						|
    });
 | 
						|
 | 
						|
    runner.on('pending', function(){
 | 
						|
      stats.pending++;
 | 
						|
    });
 | 
						|
  }
 | 
						|
 | 
						|
  /*
 | 
						|
    This reporter wraps the original html reporter plus reports plain text into a hidden div. 
 | 
						|
    This allows the webdriver client to pick up the test results
 | 
						|
  */
 | 
						|
  var WebdriverAndHtmlReporter = function(html_reporter){
 | 
						|
    return function(runner){
 | 
						|
      Base.call(this, runner);
 | 
						|
      //initalize the html reporter first
 | 
						|
      html_reporter(runner);
 | 
						|
 | 
						|
      var $console = $("#console");
 | 
						|
      var level = 0;
 | 
						|
      var append = function(){
 | 
						|
        var text = Array.prototype.join.apply(arguments, [" "]);
 | 
						|
        var oldText = $console.text();
 | 
						|
 | 
						|
        var space = "";
 | 
						|
        for(var i=0;i<level*2;i++){
 | 
						|
          space+=" ";
 | 
						|
        }
 | 
						|
 | 
						|
        var splitedText = "";
 | 
						|
        _(text.split("\n")).each(function(line){
 | 
						|
          while(line.length > 0){
 | 
						|
            var split = line.substr(0,100);
 | 
						|
            line = line.substr(100);
 | 
						|
            if(splitedText.length > 0) splitedText+="\n";
 | 
						|
            splitedText += split;
 | 
						|
          }
 | 
						|
        });
 | 
						|
 | 
						|
        //indent all lines with the given amount of space
 | 
						|
        var newText = _(splitedText.split("\n")).map(function(line){
 | 
						|
          return space + line;
 | 
						|
        }).join("\\n");
 | 
						|
 | 
						|
        $console.text(oldText + newText + "\\n");
 | 
						|
      }
 | 
						|
 | 
						|
      runner.on('suite', function(suite){
 | 
						|
        if (suite.root) return;
 | 
						|
 | 
						|
        append(suite.title);
 | 
						|
        level++;
 | 
						|
      });
 | 
						|
 | 
						|
      runner.on('suite end', function(suite){
 | 
						|
        if (suite.root) return;
 | 
						|
        level--;
 | 
						|
 | 
						|
        if(level == 0) {
 | 
						|
          append("");
 | 
						|
        }
 | 
						|
      });
 | 
						|
 | 
						|
      var stringifyException = function(exception){
 | 
						|
        var err = exception.stack || exception.toString();
 | 
						|
 | 
						|
        // FF / Opera do not add the message
 | 
						|
        if (!~err.indexOf(exception.message)) {
 | 
						|
          err = exception.message + '\n' + err;
 | 
						|
        }
 | 
						|
 | 
						|
        // <=IE7 stringifies to [Object Error]. Since it can be overloaded, we
 | 
						|
        // check for the result of the stringifying.
 | 
						|
        if ('[object Error]' == err) err = exception.message;
 | 
						|
 | 
						|
        // Safari doesn't give you a stack. Let's at least provide a source line.
 | 
						|
        if (!exception.stack && exception.sourceURL && exception.line !== undefined) {
 | 
						|
          err += "\n(" + exception.sourceURL + ":" + exception.line + ")";
 | 
						|
        }
 | 
						|
 | 
						|
        return err;
 | 
						|
      }
 | 
						|
 | 
						|
      var killTimeout;
 | 
						|
      runner.on('test end', function(test){
 | 
						|
        if ('passed' == test.state) {
 | 
						|
          append("->","[green]PASSED[clear] :", test.title);
 | 
						|
        } else if (test.pending) {
 | 
						|
          append("->","[yellow]PENDING[clear]:", test.title);
 | 
						|
        } else {
 | 
						|
          append("->","[red]FAILED[clear] :", test.title, stringifyException(test.err));
 | 
						|
        }
 | 
						|
 | 
						|
        if(killTimeout) clearTimeout(killTimeout);
 | 
						|
        killTimeout = setTimeout(function(){
 | 
						|
          append("FINISHED - [red]no test started since 3 minutes, tests stopped[clear]");
 | 
						|
        }, 60000 * 3);
 | 
						|
      });
 | 
						|
 | 
						|
      var total = runner.total;
 | 
						|
      runner.on('end', function(){
 | 
						|
        if(stats.tests >= total){
 | 
						|
          var minutes = Math.floor(stats.duration / 1000 / 60);
 | 
						|
          var seconds = Math.round((stats.duration / 1000) % 60);
 | 
						|
 | 
						|
          append("FINISHED -", stats.passes, "tests passed,", stats.failures, "tests failed, duration: " + minutes + ":" + seconds);
 | 
						|
        }
 | 
						|
      });
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  //allow cross iframe access
 | 
						|
  if ((!$.browser.msie) && (!($.browser.mozilla && $.browser.version.indexOf("1.8.") == 0))) {
 | 
						|
    document.domain = document.domain; // for comet
 | 
						|
  }
 | 
						|
 | 
						|
  //http://stackoverflow.com/questions/1403888/get-url-parameter-with-jquery
 | 
						|
  var getURLParameter = function (name) {
 | 
						|
    return decodeURI(
 | 
						|
        (RegExp(name + '=' + '(.+?)(&|$)').exec(location.search)||[,null])[1]
 | 
						|
    );
 | 
						|
  }
 | 
						|
 | 
						|
  //get the list of specs and filter it if requested
 | 
						|
  var specs = specs_list.slice();
 | 
						|
  
 | 
						|
  //inject spec scripts into the dom
 | 
						|
  var $body = $('body');
 | 
						|
  $.each(specs, function(i, spec){
 | 
						|
    $body.append('<script src="specs/' + spec + '"></script>')
 | 
						|
  });
 | 
						|
 | 
						|
  //initalize the test helper
 | 
						|
  helper.init(function(){
 | 
						|
	  //configure and start the test framework
 | 
						|
    var grep = getURLParameter("grep");
 | 
						|
    if(grep != "null"){
 | 
						|
      mocha.grep(grep);
 | 
						|
    }
 | 
						|
 | 
						|
	  mocha.ignoreLeaks();
 | 
						|
		
 | 
						|
    mocha.reporter(WebdriverAndHtmlReporter(mocha._reporter));
 | 
						|
 | 
						|
    mocha.run();
 | 
						|
  });
 | 
						|
});       
 |