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 = ':8:1: CSS Gradients not supported by: IE (8,9) (css-gradients)\n' + ':12:1: CSS Gradients not supported by: IE (8,9) (css-gradients)\n' var expectedCssRepeatingGradients = ':16:1: CSS Repeating Gradients not supported by: IE (8,9) (css-repeating-gradients)\n' + ':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(//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(//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 = ':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(//g, overflowWrapCssFile)) t.end(error) }) })