From 3d52f6c821d441cf1a843c0f03276e3525af4f4d Mon Sep 17 00:00:00 2001 From: Julien Deniau Date: Thu, 7 Jun 2018 10:36:46 +0200 Subject: [PATCH] implement FormData.get and FormData.getAll --- lib/form_data.js | 14 ++++++++++++ test/integration/test-form-get-all.js | 33 +++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 test/integration/test-form-get-all.js diff --git a/lib/form_data.js b/lib/form_data.js index 3a1bb82..732e63b 100644 --- a/lib/form_data.js +++ b/lib/form_data.js @@ -31,6 +31,7 @@ function FormData(options) { this._overheadLength = 0; this._valueLength = 0; this._valuesToMeasure = []; + this._entryList = {}; CombinedStream.call(this); @@ -76,6 +77,19 @@ FormData.prototype.append = function(field, value, options) { // pass along options.knownLength this._trackLength(header, value, options); + + if (!this._entryList[field]) { + this._entryList[field] = []; + } + this._entryList[field].push(value); +}; + +FormData.prototype.get = function(field) { + return this._entryList[field] ? this._entryList[field][0] : null; +}; + +FormData.prototype.getAll = function(field) { + return this._entryList[field] || []; }; FormData.prototype._trackLength = function(header, value, options) { diff --git a/test/integration/test-form-get-all.js b/test/integration/test-form-get-all.js new file mode 100644 index 0000000..63bc2ee --- /dev/null +++ b/test/integration/test-form-get-all.js @@ -0,0 +1,33 @@ +var common = require('../common'); +var assert = common.assert; +var FormData = require(common.dir.lib + '/form_data'); + +(function testEmptyForm() { + var form = new FormData(); + + // Make sure our response is async + assert.strictEqual(form.get('foo'), null); + assert.deepEqual(form.getAll('foo'), []); +})(); + +(function testWithOneValue() { + var form = new FormData(); + + form.append('foo', 'bar'); + + // Make sure our response is async + assert.strictEqual(form.get('foo'), 'bar'); + assert.deepEqual(form.getAll('foo'), ['bar']); +})(); + +(function testWithMultipleValue() { + var form = new FormData(); + + form.append('foo', 'bar'); + form.append('foo', 'baz'); + form.append('foo', 'bad'); + + // Make sure our response is async + assert.strictEqual(form.get('foo'), 'bar'); + assert.deepEqual(form.getAll('foo'), ['bar', 'baz', 'bad']); +})();