var vows = require('vows'),
    assert = require('assert'),
    path = require('path'),
    fs = require('fs'),
    exists = fs.existsSync || path.existsSync,
    base = path.join(__dirname, './files'),
    cssmin = require('../cssmin').cssmin,
    files = fs.readdirSync(base),
    tests = {
        'should be loaded': {
            topic: function() {
                return require('../cssmin').cssmin;
            },
            'should be a function': function(topic) {
                assert.isFunction(topic);
            }
        }
    };

files.forEach(function(file) {
    if (path.extname(file) === '.css') {
        var comp = path.join(base, file + '.min');
        if (exists(comp)) {
            tests['should be loaded'][file] = (function(file) {
                var expected = (fs.readFileSync(path.join(base, file + '.min'), 'utf8')).trim(),
                    str = (fs.readFileSync(path.join(base, file), 'utf8')).trim();
                return function(topic) {
                    var out = topic(str);
                    assert.equal(expected, out);
                };
            }(file));
        }
    }
});

//Line Break Test
(function() {
    var file = 'linebreakpos.css';
    tests['should be loaded']['and should handle linebreak'] = (function(file) {
        var expected = (fs.readFileSync(path.join(base, 'special', file + '.min'), 'utf8')).trim(),
            str = (fs.readFileSync(path.join(base, 'special', file), 'utf8')).trim();
        return function(topic) {
            var out = topic(str, 100);
            assert.equal(expected, out);
        };
    }(file));
}());

vows.describe('cssmin tests').addBatch(tests).export(module);