UNPKG

negotiated

Version:

A low-level, standards-compliant utility for parsing HTTP content negotiation headers

52 lines (49 loc) 2.59 kB
'use strict'; const { expect } = require('chai'); const { parameters, mediaTypes, transferEncodings } = require('../.'); const param = (key, value) => ({ key, value }); const parse = (iterator, ext = false) => [...parameters([...iterator][0][ext ? 'extensions' : 'params'])]; describe('parameters', function () { it('should throw when given improper input', function () { expect(() => [...parameters(1)]).to.throw(TypeError); expect(() => [...parameters({})]).to.throw(TypeError); expect(() => [...parameters('foo')]).to.throw(Error); expect(() => [...parameters('foo=bar')]).to.throw(Error); expect(() => [...parameters('; foo;')]).to.throw(Error); expect(() => [...parameters('; foo ')]).to.throw(Error); expect(() => [...parameters('; foo=bar;')]).to.throw(Error); expect(() => [...parameters('; foo=bar ')]).to.throw(Error); expect(() => [...parameters('; foo="bar" ')]).to.throw(Error); }); it('should correctly parse media parameters', function () { expect(parse(mediaTypes('#/#; a=b'))).to.deep.equal([param('a', 'b')]); expect(parse(mediaTypes('#/#; FOO=BAR'))).to.deep.equal([param('foo', 'BAR')]); expect(parse(mediaTypes('#/#; FOO=" ;ba\\r\\\\\\\" "'))).to.deep.equal([param('foo', ' ;bar\\" ')]); expect(parse(mediaTypes('#/#; FOO=" ;ba\\r\\\\\\\" " ; *=bcde123'))).to.deep.equal([ param('foo', ' ;bar\\" '), param('*', 'bcde123'), ]); }); it('should correctly parse transfer-encoding parameters', function () { expect(parse(transferEncodings('#; a \t= b'))).to.deep.equal([param('a', 'b')]); expect(parse(transferEncodings('#; FOO = BAR'))).to.deep.equal([param('foo', 'BAR')]); expect(parse(transferEncodings('#; FOO = \t" ;ba\\r\\\\\\\" "'))).to.deep.equal([param('foo', ' ;bar\\" ')]); expect(parse(transferEncodings('#; FOO=\t\t" ;ba\\r\\\\\\\" " ; *\t =bcde123'))).to.deep.equal([ param('foo', ' ;bar\\" '), param('*', 'bcde123'), ]); }); it('should correctly parse extension parameters', function () { expect(parse(mediaTypes('#/#;q=1; a=b'), true)).to.deep.equal([param('a', 'b')]); expect(parse(mediaTypes('#/#;q=1; A'), true)).to.deep.equal([param('a')]); expect(parse(mediaTypes('#/#;q=1; FOO=BAR'), true)).to.deep.equal([param('foo', 'BAR')]); expect(parse(mediaTypes('#/#;q=1; FOO=" ;ba\\r\\\\\\\" "'), true)).to.deep.equal([param('foo', ' ;bar\\" ')]); expect(parse(mediaTypes('#/#;q=1; FOO=" ;ba\\r\\\\\\\" " ; X ; YZ ; *=bcde123; ***'), true)).to.deep.equal([ param('foo', ' ;bar\\" '), param('x'), param('yz'), param('*', 'bcde123'), param('***'), ]); }); });