arnaucube
arnaucube/comunicationLeapPublic Self-hosted repository
comunicationLeap/node_modules/formidable/test/integration/test-fixtures.js
node_modules/formidable/test/integration/test-fixtures.jsRaw
 1var hashish = require('hashish');
 2var fs = require('fs');
 3var findit = require('findit');
 4var path = require('path');
 5var http = require('http');
 6var net = require('net');
 7var assert = require('assert');
 8
 9var common = require('../common');
10var formidable = common.formidable;
11
12var server = http.createServer();
13server.listen(common.port, findFixtures);
14
15function 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
34function 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
60function 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}