]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.maps.server/node/node-v4.8.0-win-x64/node_modules/npm/node_modules/tar/test/dir-normalization.js
Adding integrated tile server
[simantics/district.git] / org.simantics.maps.server / node / node-v4.8.0-win-x64 / node_modules / npm / node_modules / tar / test / dir-normalization.js
diff --git a/org.simantics.maps.server/node/node-v4.8.0-win-x64/node_modules/npm/node_modules/tar/test/dir-normalization.js b/org.simantics.maps.server/node/node-v4.8.0-win-x64/node_modules/npm/node_modules/tar/test/dir-normalization.js
new file mode 100644 (file)
index 0000000..9719c42
--- /dev/null
@@ -0,0 +1,177 @@
+// 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()
+    }
+  }
+})