wishthis/node_modules/gulp-tap/tests/dest.test.coffee
2022-01-21 09:28:41 +01:00

84 lines
2.1 KiB
CoffeeScript

fs = require 'fs'
path = require 'path'
gulp = require 'gulp'
tap = require '../'
tapTest = require 'tap'
deleteDirectory = (p) ->
if fs.existsSync p
fs.readdirSync(p).forEach (file) ->
curP = (p + '/' + file)
if fs.lstatSync(curP).isDirectory()
deleteDirectory curP
else
fs.unlinkSync curP
fs.rmdirSync p
clean = ->
deleteDirectory 'assets'
deleteDirectory 'scripts'
deleteDirectory 'sass'
# helper function to get a path relative to the root
getPath = (rel) -> path.resolve __dirname, '..', rel
tapTest.test "gulp-tap can change dest in the middle of stream", (test) ->
test.tearDown(clean)
test.plan 3
destinations =
'scss': 'sass'
'js': 'scripts'
'img': 'assets/images'
fixturePath = getPath 'tests/fixtures/'
where = (file, t) ->
match = (p) ->
ext = (path.extname p)
.substr 1 # remove leading '.'
if( ext in ['jpg', 'png', 'svg', 'gif'] )
ext = 'img'
destinations[ext] or false
# for debugging
# console.log 'destPath', destPath, file.path
destPath = match file.path
if destPath
t.through gulp.dest, [destPath]
fs.readdir fixturePath, (err, files) ->
if err
console.trace('Can not read fixtures from ' + fixturePath)
test.end()
gulp.src files.map (p) -> (fixturePath + '/' + p)
.pipe tap where
.on 'end', ->
setTimeout (->
test.ok fs.existsSync getPath 'assets/images/img.png'
test.ok fs.existsSync getPath 'scripts/js.js'
test.ok fs.existsSync getPath 'sass/s.scss'
test.end()
), 500 # give gulp.dest a (500ms) chance to write the files
.on 'error', (err) ->
console.trace(err)
test.end()
.pipe tap(->) # We must provide a pipe to make stream end
### stub for https://github.com/geejs/gulp-tap/issues/3
exports.sameIOFileName =
'test for infinite loop, issue #3': (test) ->
test.plan 1
fixturePath = getPath 'tests/fixtures/'
gulp.src fixturePath + '/*'
test.ok true
test.end()###