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:
}