2017-02-18 20:21:34 +01:00
|
|
|
/*
|
|
|
|
*
|
|
|
|
*
|
|
|
|
*
|
|
|
|
*
|
|
|
|
*
|
|
|
|
*
|
|
|
|
*
|
|
|
|
*
|
|
|
|
*
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* DO NOT EDIT THIS FILE
|
|
|
|
* For FCC testing purposes!
|
|
|
|
*
|
|
|
|
*
|
|
|
|
*
|
|
|
|
*
|
|
|
|
*
|
|
|
|
*
|
|
|
|
*
|
|
|
|
*
|
|
|
|
*
|
|
|
|
*
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
2020-11-18 23:10:43 +01:00
|
|
|
const analyser = require('./assertion-analyser');
|
|
|
|
const EventEmitter = require('events').EventEmitter;
|
2017-02-18 20:21:34 +01:00
|
|
|
|
2020-11-18 23:10:43 +01:00
|
|
|
const Mocha = require('mocha'),
|
2017-02-18 20:21:34 +01:00
|
|
|
fs = require('fs'),
|
|
|
|
path = require('path');
|
|
|
|
|
2020-11-18 23:10:43 +01:00
|
|
|
const mocha = new Mocha();
|
|
|
|
let testDir = './tests'
|
2017-02-18 20:21:34 +01:00
|
|
|
|
|
|
|
|
|
|
|
// Add each .js file to the mocha instance
|
|
|
|
fs.readdirSync(testDir).filter(function(file){
|
|
|
|
// Only keep the .js files
|
|
|
|
return file.substr(-3) === '.js';
|
|
|
|
|
|
|
|
}).forEach(function(file){
|
|
|
|
mocha.addFile(
|
|
|
|
path.join(testDir, file)
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
2020-11-18 23:10:43 +01:00
|
|
|
let emitter = new EventEmitter();
|
2017-02-18 20:21:34 +01:00
|
|
|
emitter.run = function() {
|
|
|
|
|
2020-11-18 23:10:43 +01:00
|
|
|
let tests = [];
|
|
|
|
let context = "";
|
|
|
|
let separator = ' -> ';
|
2017-02-18 20:21:34 +01:00
|
|
|
// Run the tests.
|
|
|
|
try {
|
2020-11-18 23:10:43 +01:00
|
|
|
let runner = mocha.ui('tdd').run()
|
2017-02-18 20:21:34 +01:00
|
|
|
.on('test end', function(test) {
|
|
|
|
// remove comments
|
2020-11-18 23:10:43 +01:00
|
|
|
let body = test.body.replace(/\/\/.*\n|\/\*.*\*\//g, '');
|
2017-02-18 20:21:34 +01:00
|
|
|
// collapse spaces
|
|
|
|
body = body.replace(/\s+/g,' ');
|
2020-11-18 23:10:43 +01:00
|
|
|
let obj = {
|
2017-02-18 20:21:34 +01:00
|
|
|
title: test.title,
|
|
|
|
context: context.slice(0, -separator.length),
|
|
|
|
state: test.state,
|
|
|
|
// body: body,
|
|
|
|
assertions: analyser(body)
|
|
|
|
};
|
|
|
|
tests.push(obj);
|
|
|
|
})
|
|
|
|
.on('end', function() {
|
|
|
|
emitter.report = tests;
|
|
|
|
emitter.emit('done', tests)
|
|
|
|
})
|
|
|
|
.on('suite', function(s) {
|
|
|
|
context += (s.title + separator);
|
|
|
|
|
|
|
|
})
|
|
|
|
.on('suite end', function(s) {
|
|
|
|
context = context.slice(0, -(s.title.length + separator.length))
|
|
|
|
})
|
|
|
|
} catch(e) {
|
|
|
|
throw(e);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
module.exports = emitter;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Mocha.runner Events:
|
|
|
|
* can be used to build a better custom report
|
|
|
|
*
|
|
|
|
* - `start` execution started
|
|
|
|
* - `end` execution complete
|
|
|
|
* - `suite` (suite) test suite execution started
|
|
|
|
* - `suite end` (suite) all tests (and sub-suites) have finished
|
|
|
|
* - `test` (test) test execution started
|
|
|
|
* - `test end` (test) test completed
|
|
|
|
* - `hook` (hook) hook execution started
|
|
|
|
* - `hook end` (hook) hook complete
|
|
|
|
* - `pass` (test) test passed
|
|
|
|
* - `fail` (test, err) test failed
|
|
|
|
* - `pending` (test) test pending
|
|
|
|
*/
|