UNPKG

3.24 kBJavaScriptView Raw
1#!/usr/bin/env node
2
3var concat = require('concat-stream')
4var cp = require('child_process')
5var fs = require('fs')
6var hyperquest = require('hyperquest')
7var path = require('path')
8var split = require('split')
9var through = require('through2')
10
11var url = 'https://api.github.com/repos/nodejs/node/contents'
12var dirs = [
13 '/test/parallel',
14 '/test/pummel'
15]
16
17cp.execSync('rm -rf node/*.js', { cwd: path.join(__dirname, '../test') })
18
19var httpOpts = {
20 headers: {
21 'User-Agent': null
22 // auth if github rate-limits you...
23 // 'Authorization': 'Basic ' + Buffer('username:password').toString('base64'),
24 }
25}
26
27dirs.forEach(function (dir) {
28 var req = hyperquest(url + dir, httpOpts)
29 req.pipe(concat(function (data) {
30 if (req.response.statusCode !== 200) {
31 throw new Error(url + dir + ': ' + data.toString())
32 }
33 downloadBufferTests(dir, JSON.parse(data))
34 }))
35})
36
37function downloadBufferTests (dir, files) {
38 files.forEach(function (file) {
39 if (!/test-buffer.*/.test(file.name)) return
40
41 if (file.name === 'test-buffer-fakes.js') {
42 // These teses only apply to node, where they're calling into C++ and need to
43 // ensure the prototype can't be faked, or else there will be a segfault.
44 return
45 }
46
47 console.log(file.download_url)
48
49 var out = path.join(__dirname, '../test/node', file.name)
50 hyperquest(file.download_url, httpOpts)
51 .pipe(split())
52 .pipe(testfixer(file.name))
53 .pipe(fs.createWriteStream(out))
54 .on('finish', function () {
55 console.log('wrote ' + file.name)
56 })
57 })
58}
59
60function testfixer (filename) {
61 var firstline = true
62
63 return through(function (line, enc, cb) {
64 line = line.toString()
65
66 if (firstline) {
67 // require buffer explicitly
68 var preamble = 'var Buffer = require(\'../../\').Buffer;\n'
69 if (/use strict/.test(line)) line += '\n' + preamble
70 else line + preamble + '\n' + line
71 firstline = false
72 }
73
74 // use `var` instead of `const`/`let`
75 line = line.replace(/(const|let) /g, 'var ')
76
77 // make `var common = require('common')` work
78 line = line.replace(/(var common = require.*)/g, 'var common = { skip: function () {} };')
79
80 // make `require('../common')` work
81 line = line.replace(/require\('\.\.\/common'\);/g, '')
82
83 // require browser buffer
84 line = line.replace(/(.*)require\('buffer'\)(.*)/g, '$1require(\'../../\')$2')
85
86 // comment out console logs
87 line = line.replace(/(.*console\..*)/g, '// $1')
88
89 // we can't reliably test typed array max-sizes in the browser
90 if (filename === 'test-buffer-big.js') {
91 line = line.replace(/(.*new Int8Array.*RangeError.*)/, '// $1')
92 line = line.replace(/(.*new ArrayBuffer.*RangeError.*)/, '// $1')
93 line = line.replace(/(.*new Float64Array.*RangeError.*)/, '// $1')
94 }
95
96 // https://github.com/nodejs/node/blob/v0.12/test/parallel/test-buffer.js#L1138
97 // unfortunately we can't run this because crypto-browserify doesn't work in old
98 // versions of ie
99 if (filename === 'test-buffer.js') {
100 line = line.replace(/^(\s*)(var crypto = require.*)/, '$1// $2')
101 line = line.replace(/(crypto.createHash.*\))/, '1 /*$1*/')
102 }
103
104 cb(null, line + '\n')
105 })
106}