summaryrefslogtreecommitdiffstats
path: root/node_modules/buffer/bin/download-node-tests.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/buffer/bin/download-node-tests.js')
-rwxr-xr-xnode_modules/buffer/bin/download-node-tests.js106
1 files changed, 106 insertions, 0 deletions
diff --git a/node_modules/buffer/bin/download-node-tests.js b/node_modules/buffer/bin/download-node-tests.js
new file mode 100755
index 0000000..97efde0
--- /dev/null
+++ b/node_modules/buffer/bin/download-node-tests.js
@@ -0,0 +1,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')
+ })
+}