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.
		
		
		
		
		
			
		
			
				
					
					
						
							107 lines
						
					
					
						
							3.2 KiB
						
					
					
				
			
		
		
	
	
							107 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')
 | 
						|
  })
 | 
						|
}
 |