Name: js-handler/node_modules/restify/node_modules/formidable/test/integration/test-fixtures.js
| 1: | var hashish = require('hashish'); |
| 2: | var fs = require('fs'); |
| 3: | var findit = require('findit'); |
| 4: | var path = require('path'); |
| 5: | var http = require('http'); |
| 6: | var net = require('net'); |
| 7: | var assert = require('assert'); |
| 8: | |
| 9: | var common = require('../common'); |
| 10: | var formidable = common.formidable; |
| 11: | |
| 12: | var server = http.createServer(); |
| 13: | server.listen(common.port, findFixtures); |
| 14: | |
| 15: | function findFixtures() { |
| 16: | var fixtures = []; |
| 17: | findit |
| 18: | .sync(common.dir.fixture + '/js') |
| 19: | .forEach(function(jsPath) { |
| 20: | if (!/\.js$/.test(jsPath)) return; |
| 21: | |
| 22: | var group = path.basename(jsPath, '.js'); |
| 23: | hashish.forEach(require(jsPath), function(fixture, name) { |
| 24: | fixtures.push({ |
| 25: | name : group + '/' + name, |
| 26: | fixture : fixture, |
| 27: | }); |
| 28: | }); |
| 29: | }); |
| 30: | |
| 31: | testNext(fixtures); |
| 32: | } |
| 33: | |
| 34: | function testNext(fixtures) { |
| 35: | var fixture = fixtures.shift(); |
| 36: | if (!fixture) return server.close(); |
| 37: | |
| 38: | var name = fixture.name; |
| 39: | var fixture = fixture.fixture; |
| 40: | |
| 41: | uploadFixture(name, function(err, parts) { |
| 42: | if (err) throw err; |
| 43: | |
| 44: | fixture.forEach(function(expectedPart, i) { |
| 45: | var parsedPart = parts[i]; |
| 46: | assert.equal(parsedPart.type, expectedPart.type); |
| 47: | assert.equal(parsedPart.name, expectedPart.name); |
| 48: | |
| 49: | if (parsedPart.type === 'file') { |
| 50: | var file = parsedPart.value; |
| 51: | assert.equal(file.name, expectedPart.filename); |
| 52: | if(expectedPart.sha1) assert.equal(file.hash, expectedPart.sha1); |
| 53: | } |
| 54: | }); |
| 55: | |
| 56: | testNext(fixtures); |
| 57: | }); |
| 58: | }; |
| 59: | |
| 60: | function uploadFixture(name, cb) { |
| 61: | server.once('request', function(req, res) { |
| 62: | var form = new formidable.IncomingForm(); |
| 63: | form.uploadDir = common.dir.tmp; |
| 64: | form.hash = "sha1"; |
| 65: | form.parse(req); |
| 66: | |
| 67: | function callback() { |
| 68: | var realCallback = cb; |
| 69: | cb = function() {}; |
| 70: | realCallback.apply(null, arguments); |
| 71: | } |
| 72: | |
| 73: | var parts = []; |
| 74: | form |
| 75: | .on('error', callback) |
| 76: | .on('fileBegin', function(name, value) { |
| 77: | parts.push({type: 'file', name: name, value: value}); |
| 78: | }) |
| 79: | .on('field', function(name, value) { |
| 80: | parts.push({type: 'field', name: name, value: value}); |
| 81: | }) |
| 82: | .on('end', function() { |
| 83: | res.end('OK'); |
| 84: | callback(null, parts); |
| 85: | }); |
| 86: | }); |
| 87: | |
| 88: | var socket = net.createConnection(common.port); |
| 89: | var file = fs.createReadStream(common.dir.fixture + '/http/' + name); |
| 90: | |
| 91: | file.pipe(socket, {end: false}); |
| 92: | socket.on('data', function () { |
| 93: | socket.end(); |
| 94: | }); |
| 95: | |
| 96: | } |
