333
schangxiang@126.com
2025-09-19 18966e02fb573c7e2bb0c6426ed792b38b910940
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
'use strict'
let { zip, unzip } = require('../')
let test = require('ava')
let fs = require('fs-extra-promise')
let { join, basename } = require('path')
 
let src = __dirname
let pack = join(__dirname, '归档.zip')
let pack_tmp = join(__dirname, '归档.zip.tmp')
let dest = join(__dirname, '归档_dest')
 
test.serial('module exports', t => {
  t.is(typeof unzip, 'function')
  t.is(typeof unzip.zip, 'function')
  t.is(unzip.unzip, unzip)
})
 
test.serial('zip compress', async t => {
  // compress
  await t2p(cb => {
    zip(src, pack, cb)
  })
  // verify
  let exists = await fs.existsAsync(pack)
  t.true(exists)
})
 
test.serial('zip decompress', async t => {
  // decompress
  await t2p(cb => {
    unzip(pack, dest, cb)
  })
  // verify
  let files = await fs.readdirAsync(dest)
  let expected = [basename(src)]
  t.deepEqual(files, expected)
})
 
test.after('cleanup', async t => {
  await remove(dest)
  await remove(pack)
  await remove(pack_tmp)
})
 
// util: remove file if exists
async function remove (file) {
  if (await fs.existsAsync(file)) {
    await fs.removeAsync(file)
  }
}
 
// util: delay some duration
function delay (duration) {
  return new Promise(rs => {
    setTimeout(rs, duration)
  })
}
 
// util: thunk to promise
function t2p (thunk) {
  return new Promise((rs, rj) => {
    thunk((err, ...args) => {
      err ? rj(err) : rs(args)
    })
  })
}