notes/node_modules/doiuse/test/cli.js

93 lines
3.2 KiB
JavaScript

var cpExec = require('child_process').exec
var path = require('path')
var test = require('tape')
var cssFile = path.join(__dirname, '/cases/gradient.css')
var pathToCli = ' node ' + path.join(__dirname, '../cli.js')
var catCss = ' cat ' + cssFile + ' | tee /dev/tty '
var expectedCssGradients = '<streaming css input>:8:1: CSS Gradients not supported by: IE (8,9) (css-gradients)\n' +
'<streaming css input>:12:1: CSS Gradients not supported by: IE (8,9) (css-gradients)\n'
var expectedCssRepeatingGradients = '<streaming css input>:16:1: CSS Repeating Gradients not supported by: IE (8,9) (css-repeating-gradients)\n' +
'<streaming css input>:20:1: CSS Repeating Gradients not supported by: IE (8,9) (css-repeating-gradients)\n'
var expected = expectedCssGradients + expectedCssRepeatingGradients
var commands = {
cat: catCss,
doiuse: pathToCli + ' --browsers="IE >= 8" '
}
var expectedWithIgnore = expectedCssRepeatingGradients
var commandsWithIgnore = {
cat: catCss,
doiuse: pathToCli + ' --browsers="IE >= 8" --ignore="css-gradients" '
}
var exec = function (cmd, cb) {
console.log(cmd)
cpExec(cmd, cb)
}
test('cli command: piped input', function (t) {
exec(commands.cat + ' | ' + commands.doiuse, function (error, stdout, stderr) {
t.equal(stdout, expected)
t.end(error)
})
})
test('should take filename as input', function (t) {
exec(commands.doiuse + cssFile, function (error, stdout, stderr) {
t.equal(stdout, expected.replace(/<streaming css input>/g, cssFile))
t.end(error)
})
})
test('cli command with ignore: piped input', function (t) {
exec(commandsWithIgnore.cat + ' | ' + commandsWithIgnore.doiuse, function (error, stdout, stderr) {
t.equal(stdout, expectedWithIgnore)
t.end(error)
})
})
test('should take filename as input with ignore', function (t) {
exec(commandsWithIgnore.doiuse + cssFile, function (error, stdout, stderr) {
t.equal(stdout, expectedWithIgnore.replace(/<streaming css input>/g, cssFile))
t.end(error)
})
})
test('--json option should work', function (t) {
exec(commands.doiuse + '--json ' + cssFile, function (error, stdout, stderr) {
var result = stdout.trim()
.split(/\r?\n/)
.map(JSON.parse.bind(JSON))
.map(function (usage) { return usage.feature })
t.deepEqual(result, [
'css-gradients',
'css-gradients',
'css-repeating-gradients',
'css-repeating-gradients' ])
t.end(error)
})
})
test('--list-only should work', function (t) {
exec(commands.doiuse + '--list-only', function (error, stdout, stderr) {
t.equal(stdout.trim(), '[doiuse] Browsers: IE 8, IE 9, IE 10, IE 11')
t.end(error)
})
})
test('-c config file should work as input parameters', function (t) {
var configFile = path.join(__dirname, '/fixtures/doiuse.config.json')
var overflowWrapCssFile = path.join(__dirname, '/cases/overflow-wrap.css')
var expectedOverflowWrapConfig = '<streaming css input>:7:1: CSS3 Overflow-wrap only partially supported by: IE (11) (wordwrap)\n'
exec(commands.doiuse + '-c ' + configFile + ' ' + overflowWrapCssFile, function (error, stdout, stderr) {
t.equal(stdout, expectedOverflowWrapConfig.replace(/<streaming css input>/g, overflowWrapCssFile))
t.end(error)
})
})