gulp-hint-web-reporter
Version:
Hint web reporter compatible with htmlhint, jshint, csslint and maybe others
165 lines (145 loc) • 5.07 kB
JavaScript
var readFilecontents, getExpected, getExpectedStdout, getOutput, hookStream, initCase, finishCase,
isWrittingTest = false,
del = require("del"),
assert = require("assert"),
gulp = require('gulp'),
fs = require('fs'),
htmlhint = require('gulp-htmlhint'),
jshint = require('gulp-jshint'),
csslint = require('gulp-csslint'),
plumber = require('gulp-plumber'),
reporter = require('../'),
fileWritter = require('../lib/file-writter'),
casesStdout = {};
readFilecontents = function(filename) {
var fcontents;
try {
fcontents = fs.readFileSync(filename).toString('utf8');
} catch (e) { }
return fcontents;
};
getExpected = function(caseName) {
return readFilecontents('./test/cases/' + caseName + '/expected.log');
};
getExpectedStdout = function(caseName) {
return readFilecontents('./test/cases/' + caseName + '/expected.stdout.log');
};
getOutput = function(caseName) {
return readFilecontents('./test/logs/' + caseName + ".html");
};
hookStream = function(hookedStream, fn) {
var originalWrite = hookedStream.write;
hookedStream.write = fn;
return {
unhook: function() {
hookedStream.write = originalWrite;
},
originalWrite: originalWrite
};
};
initCase = function(caseNbr) {
var hookedStream;
casesStdout[caseNbr] = "";
hookedStream = hookStream(process.stdout, function() {
var i;
for (i in arguments) {
casesStdout[caseNbr] += arguments[i];
}
//hookedStream.originalWrite.apply(this, arguments);
});
return hookedStream;
}
finishCase = function(caseNbr, hookedStream, done) {
var expectedOutput, expectedStdout,
caseOutput = getOutput(caseNbr).replace(new RegExp(__dirname, "g"), ""),
caseStdout = casesStdout[caseNbr].replace(new RegExp(__dirname, "g"), "");
hookedStream.unhook();
if (isWrittingTest) {
fs.writeFileSync('./test/cases/' + caseNbr + '/expected.log', caseOutput);
fs.writeFileSync('./test/cases/' + caseNbr + '/expected.stdout.log', caseStdout);
}
expectedOutput = getExpected(caseNbr);
expectedStdout = getExpectedStdout(caseNbr)
fs.writeFileSync('./test/logs/' + caseNbr + ".stdout.log", caseStdout);
setTimeout(function() {
assert.equal(caseOutput, expectedOutput);
assert.equal(caseStdout, expectedStdout);
done && done();
}, 1);
};
describe('gulp-hint-web-reporter', function() {
before(function(done) {
del.sync('./test/logs');
done();
});
it('should fail hint', function(done) {
var caseNbr = 'case1',
hookedStream = initCase(caseNbr),
isErrorHandlerCalled = false;
gulp.src('./test/cases/' + caseNbr + '/*.html')
.pipe(plumber(function errorHandler(e) {
isErrorHandlerCalled = true;
finishCase(caseNbr, hookedStream, done);
}))
.pipe(htmlhint())
.pipe(reporter({
logsPath: "test/logs",
filenames: {
htmlhint: caseNbr + ".html"
},
fail: true
}))
.on('end', function() {
hookedStream.unhook();
assert(isErrorHandlerCalled, "Plugin should have failed");
!isErrorHandlerCalled && done();
})
.pipe(plumber.stop());
});
it('should create log report for html file', function(done) {
var caseNbr = 'case2',
hookedStream = initCase(caseNbr);
gulp.src('./test/cases/' + caseNbr + '/*.html')
.pipe(htmlhint())
.pipe(reporter({
logsPath: "test/logs",
filenames: {
htmlhint: caseNbr + ".html"
}
}))
.on('finish', function() {
finishCase(caseNbr, hookedStream, done);
});
});
it('should create log report for js file', function(done) {
var caseNbr = 'case3',
hookedStream = initCase(caseNbr);
gulp.src('./test/cases/' + caseNbr + '/*.js')
.pipe(jshint())
.pipe(reporter({
logsPath: "test/logs",
filenames: {
jshint: caseNbr + ".html"
}
}))
.on('finish', function() {
finishCase(caseNbr, hookedStream, done);
});
});
it('should create log report for css file', function(done) {
var caseNbr = 'case4',
hookedStream = initCase(caseNbr);
gulp.src('./test/cases/' + caseNbr + '/*.css')
.pipe(csslint())
.pipe(reporter({
logsPath: "test/logs",
filenames: {
csslint: caseNbr + ".html"
}
}))
.on('finish', function() {
finishCase(caseNbr, hookedStream, done);
});
});
});
;