保誠-保戶業務員媒合平台
HelenHuang
2022-06-09 9bdb95c9e34cef640534e5e5a1e2225a80442000
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#!/usr/bin/env node
 
var concat = require('concat-stream')
var cp = require('child_process')
var fs = require('fs')
var hyperquest = require('hyperquest')
var path = require('path')
var split = require('split')
var through = require('through2')
 
var url = 'https://api.github.com/repos/nodejs/node/contents'
var dirs = [
  '/test/parallel',
  '/test/pummel'
]
 
cp.execSync('rm -rf node/*.js', { cwd: path.join(__dirname, '../test') })
 
var httpOpts = {
  headers: {
    'User-Agent': null
    // auth if github rate-limits you...
    // 'Authorization': 'Basic ' + Buffer('username:password').toString('base64'),
  }
}
 
dirs.forEach(function (dir) {
  var req = hyperquest(url + dir, httpOpts)
  req.pipe(concat(function (data) {
    if (req.response.statusCode !== 200) {
      throw new Error(url + dir + ': ' + data.toString())
    }
    downloadBufferTests(dir, JSON.parse(data))
  }))
})
 
function downloadBufferTests (dir, files) {
  files.forEach(function (file) {
    if (!/test-buffer.*/.test(file.name)) return
 
    if (file.name === 'test-buffer-fakes.js') {
      // These teses only apply to node, where they're calling into C++ and need to
      // ensure the prototype can't be faked, or else there will be a segfault.
      return
    }
 
    console.log(file.download_url)
 
    var out = path.join(__dirname, '../test/node', file.name)
    hyperquest(file.download_url, httpOpts)
      .pipe(split())
      .pipe(testfixer(file.name))
      .pipe(fs.createWriteStream(out))
      .on('finish', function () {
        console.log('wrote ' + file.name)
      })
  })
}
 
function testfixer (filename) {
  var firstline = true
 
  return through(function (line, enc, cb) {
    line = line.toString()
 
    if (firstline) {
      // require buffer explicitly
      var preamble = 'var Buffer = require(\'../../\').Buffer;\n'
      if (/use strict/.test(line)) line += '\n' + preamble
      else line + preamble + '\n' + line
      firstline = false
    }
 
    // use `var` instead of `const`/`let`
    line = line.replace(/(const|let) /g, 'var ')
 
    // make `var common = require('common')` work
    line = line.replace(/(var common = require.*)/g, 'var common = { skip: function () {} };')
 
    // make `require('../common')` work
    line = line.replace(/require\('\.\.\/common'\);/g, '')
 
    // require browser buffer
    line = line.replace(/(.*)require\('buffer'\)(.*)/g, '$1require(\'../../\')$2')
 
    // comment out console logs
    line = line.replace(/(.*console\..*)/g, '// $1')
 
    // we can't reliably test typed array max-sizes in the browser
    if (filename === 'test-buffer-big.js') {
      line = line.replace(/(.*new Int8Array.*RangeError.*)/, '// $1')
      line = line.replace(/(.*new ArrayBuffer.*RangeError.*)/, '// $1')
      line = line.replace(/(.*new Float64Array.*RangeError.*)/, '// $1')
    }
 
    // https://github.com/nodejs/node/blob/v0.12/test/parallel/test-buffer.js#L1138
    // unfortunately we can't run this because crypto-browserify doesn't work in old
    // versions of ie
    if (filename === 'test-buffer.js') {
      line = line.replace(/^(\s*)(var crypto = require.*)/, '$1// $2')
      line = line.replace(/(crypto.createHash.*\))/, '1 /*$1*/')
    }
 
    cb(null, line + '\n')
  })
}