global.util = require("util");
var argv = require('optimist').argv,
cleanCss = require('../index'),
- fs = require('fs');
+ fs = require('fs'),
+ path = require('path');
var options = {
source: null,
target: null
};
var cleanOptions = {};
+var fromStdin = !process.env['__DIRECT__'] && process.stdin.readable;
if (argv.o) options.target = argv.o;
if (argv._) options.source = argv._[0];
if (argv.e) cleanOptions.removeEmpty = true;
-if (argv.h || argv.help) {
- global.util.print('Usage: cleancss [-e] -o <output-file> <input-file>\n');
+if (argv.v) {
+ var packageConfig = fs.readFileSync(path.join(path.dirname(fs.realpathSync(process.argv[1])), '../package.json'));
+ util.puts(JSON.parse(packageConfig).version);
+ process.exit(0);
+}
+
+if (argv.h || argv.help || (!fromStdin && argv._.length == 0)) {
+ global.util.print('usage: cleancss [-e] -o <output-file> <input-file>\n');
process.exit(0);
}
--- /dev/null
+var vows = require('vows'),
+ assert = require('assert'),
+ exec = require('child_process').exec,
+ fs = require('fs');
+
+var binaryContext = function(options, context) {
+ context.topic = function() {
+ // We add __DIRECT__=1 to switch binary into 'non-piped' mode
+ exec("__DIRECT__=1 ./bin/cleancss " + options, this.callback);
+ };
+ return context;
+};
+
+var pipedContext = function(css, options, context) {
+ context.topic = function() {
+ exec("echo \"" + css + "\" | ./bin/cleancss " + options, this.callback);
+ };
+ return context;
+};
+
+exports.commandsSuite = vows.describe('binary commands').addBatch({
+ 'no options': binaryContext('', {
+ 'should output help': function(stdout) {
+ assert.equal(/usage:/.test(stdout), true);
+ }
+ }),
+ 'help': binaryContext('-h', {
+ 'should output help': function(error, stdout) {
+ assert.equal(/usage:/.test(stdout), true);
+ }
+ }),
+ 'version': binaryContext('-v', {
+ 'should output help': function(error, stdout) {
+ var version = JSON.parse(fs.readFileSync('./package.json')).version;
+ assert.equal(stdout, version + "\n");
+ }
+ }),
+ 'stdin': pipedContext("a{color: #f00}", '', {
+ 'should output data': function(error, stdout) {
+ assert.equal(stdout, "a{color:red}");
+ }
+ }),
+ 'no empty by default': pipedContext('a{}', '', {
+ 'should preserve content': function(error, stdout) {
+ assert.equal(stdout, "a{}");
+ }
+ }),
+ 'empty': pipedContext('a{}', '-e', {
+ 'should preserve content': function(error, stdout) {
+ assert.equal(stdout, "");
+ }
+ }),
+ 'from source': binaryContext('./test/data/reset.css', {
+ 'should minimize': function(error, stdout) {
+ var minimized = fs.readFileSync('./test/data/reset-min.css', 'utf-8').replace(/\n/g, '');
+ assert.equal(stdout, minimized);
+ }
+ }),
+ 'to file': binaryContext('-o reset-min.css ./test/data/reset.css', {
+ 'should give no output': function(error, stdout) {
+ assert.equal(stdout, '');
+ },
+ 'should minimize': function(stdout) {
+ var minimized = fs.readFileSync('./test/data/reset-min.css', 'utf-8').replace(/\n/g, '');
+ var target = fs.readFileSync('./reset-min.css', 'utf-8').replace(/\n/g, '');
+ assert.equal(minimized, target);
+ },
+ teardown: function() {
+ exec('rm reset-min.css');
+ }
+ })
+});
\ No newline at end of file