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