You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							106 lines
						
					
					
						
							3.2 KiB
						
					
					
				
			
		
		
	
	
							106 lines
						
					
					
						
							3.2 KiB
						
					
					
				#!/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') | 
						|
  }) | 
						|
}
 | 
						|
 |