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}