| #!/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') |
| }) |
| } |