UNPKG

2.06 kBJavaScriptView Raw
1'use strict';
2
3const assert = require('assert');
4const { inspect } = require('util');
5
6const { mustCall } = require(`${__dirname}/common.js`);
7
8const busboy = require('..');
9
10const input = Buffer.from([
11 '-----------------------------paZqsnEHRufoShdX6fh0lUhXBP4k',
12 'Content-Disposition: form-data; '
13 + 'name="upload_file_0"; filename="テスト.dat"',
14 'Content-Type: application/octet-stream',
15 '',
16 'A'.repeat(1023),
17 '-----------------------------paZqsnEHRufoShdX6fh0lUhXBP4k--'
18].join('\r\n'));
19const boundary = '---------------------------paZqsnEHRufoShdX6fh0lUhXBP4k';
20const expected = [
21 { type: 'file',
22 name: 'upload_file_0',
23 data: Buffer.from('A'.repeat(1023)),
24 info: {
25 filename: 'テスト.dat',
26 encoding: '7bit',
27 mimeType: 'application/octet-stream',
28 },
29 limited: false,
30 },
31];
32const bb = busboy({
33 defParamCharset: 'utf8',
34 headers: {
35 'content-type': `multipart/form-data; boundary=${boundary}`,
36 }
37});
38const results = [];
39
40bb.on('field', (name, val, info) => {
41 results.push({ type: 'field', name, val, info });
42});
43
44bb.on('file', (name, stream, info) => {
45 const data = [];
46 let nb = 0;
47 const file = {
48 type: 'file',
49 name,
50 data: null,
51 info,
52 limited: false,
53 };
54 results.push(file);
55 stream.on('data', (d) => {
56 data.push(d);
57 nb += d.length;
58 }).on('limit', () => {
59 file.limited = true;
60 }).on('close', () => {
61 file.data = Buffer.concat(data, nb);
62 assert.strictEqual(stream.truncated, file.limited);
63 }).once('error', (err) => {
64 file.err = err.message;
65 });
66});
67
68bb.on('error', (err) => {
69 results.push({ error: err.message });
70});
71
72bb.on('partsLimit', () => {
73 results.push('partsLimit');
74});
75
76bb.on('filesLimit', () => {
77 results.push('filesLimit');
78});
79
80bb.on('fieldsLimit', () => {
81 results.push('fieldsLimit');
82});
83
84bb.on('close', mustCall(() => {
85 assert.deepStrictEqual(
86 results,
87 expected,
88 'Results mismatch.\n'
89 + `Parsed: ${inspect(results)}\n`
90 + `Expected: ${inspect(expected)}`
91 );
92}));
93
94bb.end(input);