UNPKG

css-pipeline

Version:

roots extension for handling css production builds

140 lines (106 loc) 4.55 kB
path = require 'path' fs = require 'fs' should = require 'should' glob = require 'glob' rimraf = require 'rimraf' Roots = require 'roots' W = require 'when' nodefn = require 'when/node/function' _path = path.join(__dirname, 'fixtures') run = require('child_process').exec # setup, teardown, and utils should.file_exist = (path) -> fs.existsSync(path).should.be.ok should.file_not_exist = (path) -> fs.existsSync(path).should.not.be.ok should.have_content = (path) -> fs.readFileSync(path).length.should.be.above(1) should.contain = (path, content) -> fs.readFileSync(path, 'utf8').indexOf(content).should.not.equal(-1) compile_fixture = (fixture_name, done) -> @path = path.join(_path, fixture_name) @public = path.join(@path, 'public') project = new Roots(@path) project.compile().on('error', done).on('done', done) before (done) -> tasks = [] for d in glob.sync("#{_path}/*/package.json") p = path.dirname(d) if fs.existsSync(path.join(p, 'node_modules')) then continue console.log "installing deps for #{d.replace(_path,'').replace('/package.json','')}...".grey tasks.push nodefn.call(run, "cd #{p}; npm install") W.all(tasks).then(-> console.log(''); done()) after -> rimraf.sync(public_dir) for public_dir in glob.sync('test/fixtures/**/public') # tests describe 'development', -> before (done) -> compile_fixture.call(@, 'development', done) it 'css function should output a tag for each file', -> p = path.join(@public, 'index.html') should.contain(p, 'test.css') should.contain(p, 'wow.css') it 'files should have correct content', -> p1 = path.join(@public, 'css/test.css') p2 = path.join(@public, 'css/wow.css') should.file_exist(p1) should.contain(p1, 'color: #f00;') should.file_exist(p2) should.contain(p2, 'background: #008000;') describe 'concat', -> before (done) -> compile_fixture.call(@, 'concat', done) it 'css function should output a tag for the build file', -> p = path.join(@public, 'index.html') should.contain(p, 'build.css') it 'build file should have correct content', -> p = path.join(@public, 'css/build.css') should.file_exist(p) should.contain(p, 'color: #f00;') should.contain(p, 'background: #008000;') describe 'concat-minify', -> before (done) -> compile_fixture.call(@, 'concat-minify', done) it 'css function should output a tag for the build file', -> p = path.join(@public, 'index.html') should.contain(p, 'build.min.css') it 'build file should have correct content', -> p = path.join(@public, 'css/build.min.css') should.file_exist(p) should.contain(p, '.wow{background:green}') should.contain(p, 'p{color:red}') describe 'hash', -> before (done) -> compile_fixture.call(@, 'hash', done) it 'css function should output a tag for the hashed build file', -> p = path.join(@public, 'index.html') filename = fs.readdirSync(path.join(@public, 'css'))[0] should.contain(p, filename) describe 'manifest', -> before (done) -> compile_fixture.call(@, 'manifest', done) it 'css function should output a tag for each file', -> p = path.join(@public, 'index.html') should.contain(p, 'b-strizzle.css') should.contain(p, 't-nizzle.css') should.contain(p, 'test.css') should.contain(p, 'wow.css') it 'files should have correct content', -> p1 = path.join(@public, 'css/test.css') p2 = path.join(@public, 'css/wow.css') p3 = path.join(@public, 'css/b-strizzy/b-strizzle.css') p4 = path.join(@public, 'css/b-strizzy/t-nizzle.css') should.file_exist(p1) should.contain(p1, "color: #f00") should.file_exist(p2) should.contain(p2, 'background: #008000') should.file_exist(p3) should.contain(p3, "color: blue") should.file_exist(p4) should.contain(p4, 'content: "tizzle wizzle fizzle lizzle"') it 'manifest file should be ignored from output', -> should.file_not_exist(path.join(@public, 'css/manifest.yml')) describe 'concat-manifest', -> before (done) -> compile_fixture.call(@, 'concat-manifest', done) it 'css function should output a tag for the build file', -> p = path.join(@public, 'index.html') should.contain(p, 'build.css') it 'build file should have correct content', -> p = path.join(@public, 'css/build.css') should.file_exist(p) should.contain(p, '.bootstripe {\n color: blue;\n}\nbody:after {\n content: "tizzle wizzle fizzle lizzle"\n}\n.wow {\n background: #008000;\n}\np {\n color: #f00;\n}\n')