| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 | 
							- // Set the umask, so that it works the same everywhere.
 
- process.umask(parseInt('22', 8))
 
- var fs = require('fs')
 
- var path = require('path')
 
- var fstream = require('fstream')
 
- var test = require('tap').test
 
- var tar = require('../tar.js')
 
- var file = path.resolve(__dirname, 'dir-normalization.tar')
 
- var target = path.resolve(__dirname, 'tmp/dir-normalization-test')
 
- var ee = 0
 
- var expectEntries = [
 
-   { path: 'fixtures/',
 
-     mode: '755',
 
-     type: '5',
 
-     linkpath: ''
 
-   },
 
-   { path: 'fixtures/a/',
 
-     mode: '755',
 
-     type: '5',
 
-     linkpath: ''
 
-   },
 
-   { path: 'fixtures/the-chumbler',
 
-     mode: '755',
 
-     type: '2',
 
-     linkpath: path.resolve(target, 'a/b/c/d/the-chumbler'),
 
-   },
 
-   { path: 'fixtures/a/b/',
 
-     mode: '755',
 
-     type: '5',
 
-     linkpath: ''
 
-   },
 
-   { path: 'fixtures/a/x',
 
-     mode: '644',
 
-     type: '0',
 
-     linkpath: ''
 
-   },
 
-   { path: 'fixtures/a/b/c/',
 
-     mode: '755',
 
-     type: '5',
 
-     linkpath: ''
 
-   },
 
-   { path: 'fixtures/a/b/c/y',
 
-     mode: '755',
 
-     type: '2',
 
-     linkpath: '../../x',
 
-   }
 
- ]
 
- var ef = 0
 
- var expectFiles = [
 
-   { path: '',
 
-     mode: '40755',
 
-     type: 'Directory',
 
-     depth: 0,
 
-     linkpath: undefined
 
-   },
 
-   { path: '/fixtures',
 
-     mode: '40755',
 
-     type: 'Directory',
 
-     depth: 1,
 
-     linkpath: undefined
 
-   },
 
-   { path: '/fixtures/a',
 
-     mode: '40755',
 
-     type: 'Directory',
 
-     depth: 2,
 
-     linkpath: undefined
 
-   },
 
-   { path: '/fixtures/a/b',
 
-     mode: '40755',
 
-     type: 'Directory',
 
-     depth: 3,
 
-     linkpath: undefined
 
-   },
 
-   { path: '/fixtures/a/b/c',
 
-     mode: '40755',
 
-     type: 'Directory',
 
-     depth: 4,
 
-     linkpath: undefined
 
-   },
 
-   { path: '/fixtures/a/b/c/y',
 
-     mode: '120755',
 
-     type: 'SymbolicLink',
 
-     depth: 5,
 
-     linkpath: '../../x'
 
-   },
 
-   { path: '/fixtures/a/x',
 
-     mode: '100644',
 
-     type: 'File',
 
-     depth: 3,
 
-     linkpath: undefined
 
-   },
 
-   { path: '/fixtures/the-chumbler',
 
-     mode: '120755',
 
-     type: 'SymbolicLink',
 
-     depth: 2,
 
-     linkpath: path.resolve(target, 'a/b/c/d/the-chumbler')
 
-   }
 
- ]
 
- test('preclean', function (t) {
 
-   require('rimraf').sync(path.join(__dirname, '/tmp/dir-normalization-test'))
 
-   t.pass('cleaned!')
 
-   t.end()
 
- })
 
- test('extract test', function (t) {
 
-   var extract = tar.Extract(target)
 
-   var inp = fs.createReadStream(file)
 
-   inp.pipe(extract)
 
-   extract.on('end', function () {
 
-     t.equal(ee, expectEntries.length, 'should see ' + expectEntries.length + ' entries')
 
-     // should get no more entries after end
 
-     extract.removeAllListeners('entry')
 
-     extract.on('entry', function (e) {
 
-       t.fail('Should not get entries after end!')
 
-     })
 
-     next()
 
-   })
 
-   extract.on('entry', function (entry) {
 
-     var mode = entry.props.mode & (~parseInt('22', 8))
 
-     var found = {
 
-       path: entry.path,
 
-       mode: mode.toString(8),
 
-       type: entry.props.type,
 
-       linkpath: entry.props.linkpath,
 
-     }
 
-     var wanted = expectEntries[ee++]
 
-     t.equivalent(found, wanted, 'tar entry ' + ee + ' ' + (wanted && wanted.path))
 
-   })
 
-   function next () {
 
-     var r = fstream.Reader({
 
-       path: target,
 
-       type: 'Directory',
 
-       sort: 'alpha'
 
-     })
 
-     r.on('ready', function () {
 
-       foundEntry(r)
 
-     })
 
-     r.on('end', finish)
 
-     function foundEntry (entry) {
 
-       var p = entry.path.substr(target.length)
 
-       var mode = entry.props.mode & (~parseInt('22', 8))
 
-       var found = {
 
-         path: p,
 
-         mode: mode.toString(8),
 
-         type: entry.props.type,
 
-         depth: entry.props.depth,
 
-         linkpath: entry.props.linkpath
 
-       }
 
-       var wanted = expectFiles[ef++]
 
-       t.equivalent(found, wanted, 'unpacked file ' + ef + ' ' + (wanted && wanted.path))
 
-       entry.on('entry', foundEntry)
 
-     }
 
-     function finish () {
 
-       t.equal(ef, expectFiles.length, 'should have ' + ef + ' items')
 
-       t.end()
 
-     }
 
-   }
 
- })
 
 
  |