529 lines
24 KiB
JavaScript
529 lines
24 KiB
JavaScript
var expect = require('expect.js');
|
|
|
|
describe('lookup', function () {
|
|
var mimeFormat = require('./index.js');
|
|
|
|
describe('edge case', function () {
|
|
it('handles handle undefined mime with raw format', function () {
|
|
var mime = mimeFormat.lookup();
|
|
expect(mime).have.property('type', 'unknown');
|
|
expect(mime).have.property('format', 'raw');
|
|
expect(mime).have.property('guessed', true);
|
|
expect(mime).have.property('orphan', true);
|
|
expect(mime).not.have.property('charset');
|
|
});
|
|
|
|
it('handles handle blank mime with raw format', function () {
|
|
var mime = mimeFormat.lookup('');
|
|
expect(mime).have.property('type', 'unknown');
|
|
expect(mime).have.property('format', 'raw');
|
|
expect(mime).have.property('guessed', true);
|
|
expect(mime).have.property('orphan', true);
|
|
});
|
|
|
|
it('handles uppercase headers', function () {
|
|
var mime = mimeFormat.lookup('Application/Pdf');
|
|
expect(mime).have.property('type', 'embed');
|
|
expect(mime).have.property('format', 'pdf');
|
|
expect(mime).not.have.property('guessed');
|
|
});
|
|
|
|
it('handles normal charset', function () {
|
|
var mime = mimeFormat.lookup('application/unknown-stream; charset=utf8');
|
|
expect(mime).have.property('type', 'application');
|
|
expect(mime).have.property('format', 'raw');
|
|
expect(mime).have.property('guessed', true);
|
|
});
|
|
|
|
it('handles malformed charset', function () {
|
|
var mime = mimeFormat.lookup('application/pdf ; charset = text/utf8');
|
|
expect(mime).have.property('type', 'embed');
|
|
expect(mime).have.property('format', 'pdf');
|
|
expect(mime).not.have.property('guessed');
|
|
expect(mime).have.property('source', 'application/pdf');
|
|
expect(mime).have.property('charset', 'text');
|
|
});
|
|
|
|
it('handles untrimmed boundary whitespaces', function () {
|
|
var mime = mimeFormat.lookup(' application/pdf ; charset = text/utf8');
|
|
expect(mime).have.property('type', 'embed');
|
|
expect(mime).have.property('format', 'pdf');
|
|
expect(mime).not.have.property('guessed');
|
|
expect(mime).have.property('source', 'application/pdf');
|
|
expect(mime).have.property('charset', 'text');
|
|
});
|
|
|
|
it('handles untrimmed internal whitespaces outside db', function () {
|
|
var mime = mimeFormat.lookup('application / grooscript');
|
|
expect(mime).have.property('type', 'text');
|
|
expect(mime).have.property('format', 'script');
|
|
expect(mime).have.property('guessed', true);
|
|
expect(mime).have.property('source', 'application/grooscript');
|
|
});
|
|
|
|
it('removes unwanted spaces before referring db', function () {
|
|
var mime = mimeFormat.lookup('application / xml');
|
|
expect(mime).have.property('type', 'text');
|
|
expect(mime).have.property('format', 'xml');
|
|
expect(mime).not.have.property('guessed');
|
|
expect(mime).have.property('source', 'application/xml');
|
|
});
|
|
|
|
it('unknown bases return as "unknown"', function () {
|
|
var mime = mimeFormat.lookup('somebase/no-subtype');
|
|
expect(mime).have.property('type', 'unknown');
|
|
expect(mime).have.property('format', 'raw');
|
|
expect(mime).have.property('guessed');
|
|
expect(mime).have.property('orphan', true);
|
|
});
|
|
});
|
|
|
|
describe('sanity', function () {
|
|
it('"application/jwt" is treated as text with "jwt" format', function () {
|
|
var mime = mimeFormat.lookup('application/jwt');
|
|
expect(mime).have.property('type', 'text');
|
|
expect(mime).have.property('format', 'jwt');
|
|
expect(mime).not.have.property('guessed');
|
|
});
|
|
|
|
it('"application/x-www-form-urlencoded" is treated as text with "plain" format', function () {
|
|
var mime = mimeFormat.lookup('application/x-www-form-urlencoded');
|
|
expect(mime).have.property('type', 'text');
|
|
expect(mime).have.property('format', 'plain');
|
|
expect(mime).not.have.property('guessed');
|
|
});
|
|
|
|
it('"text/pdf" is treated as text even though it has "pdf" keyword', function () {
|
|
var mime = mimeFormat.lookup('text/pdf');
|
|
expect(mime).have.property('type', 'text');
|
|
expect(mime).have.property('format', 'plain');
|
|
expect(mime).have.property('guessed', true);
|
|
});
|
|
|
|
it('"text/plain" is basic and must work', function () {
|
|
var mime = mimeFormat.lookup('text/plain');
|
|
expect(mime).have.property('type', 'text');
|
|
expect(mime).have.property('format', 'plain');
|
|
expect(mime).have.property('guessed', true);
|
|
});
|
|
|
|
it('"text/xml" returns text with format as "xml"', function () {
|
|
var mime = mimeFormat.lookup('text/xml');
|
|
expect(mime).have.property('type', 'text');
|
|
expect(mime).have.property('format', 'xml');
|
|
expect(mime).have.property('guessed', true);
|
|
});
|
|
|
|
it('"text/hodor+mxml" has "mxml" ans as such matches xml format', function () {
|
|
var mime = mimeFormat.lookup('text/hodor+mxml');
|
|
expect(mime).have.property('type', 'text');
|
|
expect(mime).have.property('format', 'xml');
|
|
expect(mime).have.property('guessed', true);
|
|
});
|
|
|
|
it('"application/json" is "text" with json format', function () {
|
|
var mime = mimeFormat.lookup('application/json');
|
|
expect(mime).have.property('type', 'text');
|
|
expect(mime).have.property('format', 'json');
|
|
expect(mime).not.have.property('guessed');
|
|
});
|
|
|
|
it('"application/some+javascript" is text with "script" as format', function () {
|
|
var mime = mimeFormat.lookup('application/some+javascript');
|
|
expect(mime).have.property('type', 'text');
|
|
expect(mime).have.property('format', 'script');
|
|
expect(mime).have.property('guessed', true);
|
|
});
|
|
|
|
it('"application/some+vml" is treated as text with "vml" format', function () {
|
|
var mime = mimeFormat.lookup('application/some+vml');
|
|
expect(mime).have.property('type', 'text');
|
|
expect(mime).have.property('format', 'vml');
|
|
expect(mime).have.property('guessed', true);
|
|
});
|
|
|
|
it('"audio/some+vmll" is treated as audio even if it has "vml" keyword owing to the base', function () {
|
|
var mime = mimeFormat.lookup('audio/some+vml');
|
|
expect(mime).have.property('type', 'audio');
|
|
expect(mime).have.property('format', 'audio');
|
|
expect(mime).have.property('guessed', true);
|
|
});
|
|
|
|
it('"image/some+vmll" is treated as image even if it has "vml" keyword owing to the base', function () {
|
|
var mime = mimeFormat.lookup('image/some+vml');
|
|
expect(mime).have.property('type', 'image');
|
|
expect(mime).have.property('format', 'image');
|
|
expect(mime).have.property('guessed', true);
|
|
});
|
|
|
|
it('"application/pdf" is special and is treated as "embed" type with format as "pdf"', function () {
|
|
var mime = mimeFormat.lookup('application/pdf');
|
|
expect(mime).have.property('type', 'embed');
|
|
expect(mime).have.property('format', 'pdf');
|
|
expect(mime).not.have.property('guessed');
|
|
});
|
|
|
|
it('"application/xml" is simple text and returns format as xml', function () {
|
|
var mime = mimeFormat.lookup('application/xml');
|
|
expect(mime).have.property('type', 'text');
|
|
expect(mime).have.property('format', 'xml');
|
|
expect(mime).not.have.property('guessed');
|
|
});
|
|
});
|
|
|
|
describe("application autocompletes", function () {
|
|
it("application/atom+xml", function () {
|
|
var mime = mimeFormat.lookup('application/atom+xml');
|
|
expect(mime).have.property('type', 'text');
|
|
expect(mime).have.property('format', 'xml');
|
|
expect(mime).not.have.property('guessed');
|
|
});
|
|
it("application/ecmascript", function () {
|
|
var mime = mimeFormat.lookup('application/ecmascript');
|
|
expect(mime).have.property('type', 'text');
|
|
expect(mime).have.property('format', 'script');
|
|
expect(mime).not.have.property('guessed');
|
|
});
|
|
it("application/json", function () {
|
|
var mime = mimeFormat.lookup('application/json');
|
|
expect(mime).have.property('type', 'text');
|
|
expect(mime).have.property('format', 'json');
|
|
expect(mime).not.have.property('guessed');
|
|
});
|
|
it("application/javascript", function () {
|
|
var mime = mimeFormat.lookup('application/javascript');
|
|
expect(mime).have.property('type', 'text');
|
|
expect(mime).have.property('format', 'script');
|
|
expect(mime).not.have.property('guessed');
|
|
});
|
|
it("application/ogg", function () {
|
|
var mime = mimeFormat.lookup('application/ogg');
|
|
expect(mime).have.property('type', 'audio');
|
|
expect(mime).have.property('format', 'ogg');
|
|
expect(mime).not.have.property('guessed');
|
|
});
|
|
it("application/rdf+xml", function () {
|
|
var mime = mimeFormat.lookup('application/rdf+xml');
|
|
expect(mime).have.property('type', 'text');
|
|
expect(mime).have.property('format', 'xml');
|
|
expect(mime).not.have.property('guessed');
|
|
});
|
|
it("application/rss+xml", function () {
|
|
var mime = mimeFormat.lookup('application/rss+xml');
|
|
expect(mime).have.property('type', 'text');
|
|
expect(mime).have.property('format', 'xml');
|
|
expect(mime).not.have.property('guessed');
|
|
});
|
|
it("application/soap+xml", function () {
|
|
var mime = mimeFormat.lookup('application/soap+xml');
|
|
expect(mime).have.property('type', 'text');
|
|
expect(mime).have.property('format', 'xml');
|
|
expect(mime).not.have.property('guessed');
|
|
});
|
|
it("application/xhtml+xml", function () {
|
|
var mime = mimeFormat.lookup('application/xhtml+xml');
|
|
expect(mime).have.property('type', 'text');
|
|
expect(mime).have.property('format', 'xml');
|
|
expect(mime).not.have.property('guessed');
|
|
});
|
|
|
|
// need to add in db
|
|
it("application/octet-stream", function () {
|
|
var mime = mimeFormat.lookup('application/octet-stream');
|
|
expect(mime).have.property('type', 'application');
|
|
expect(mime).have.property('format', 'raw');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
it("application/pdf", function () {
|
|
var mime = mimeFormat.lookup('application/pdf');
|
|
expect(mime).have.property('type', 'embed');
|
|
expect(mime).have.property('format', 'pdf');
|
|
expect(mime).not.have.property('guessed');
|
|
});
|
|
it("application/postscript", function () {
|
|
var mime = mimeFormat.lookup('application/postscript');
|
|
expect(mime).have.property('type', 'text');
|
|
expect(mime).have.property('format', 'script');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
it("application/font-woff", function () {
|
|
var mime = mimeFormat.lookup('application/font-woff');
|
|
expect(mime).have.property('type', 'application');
|
|
expect(mime).have.property('format', 'raw');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
it("application/x-yaml", function () {
|
|
var mime = mimeFormat.lookup('application/x-yaml');
|
|
expect(mime).have.property('type', 'text');
|
|
expect(mime).have.property('format', 'yaml');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
it("application/xml", function () {
|
|
var mime = mimeFormat.lookup('application/xml');
|
|
expect(mime).have.property('type', 'text');
|
|
expect(mime).have.property('format', 'xml');
|
|
expect(mime).not.have.property('guessed');
|
|
});
|
|
it("application/xml-dtd", function () {
|
|
var mime = mimeFormat.lookup('application/xml-dtd');
|
|
expect(mime).have.property('type', 'text');
|
|
expect(mime).have.property('format', 'xml');
|
|
expect(mime).not.have.property('guessed');
|
|
});
|
|
it("application/xop+xml", function () {
|
|
var mime = mimeFormat.lookup('application/xop+xml');
|
|
expect(mime).have.property('type', 'text');
|
|
expect(mime).have.property('format', 'xml');
|
|
expect(mime).not.have.property('guessed');
|
|
});
|
|
it("application/zip", function () {
|
|
var mime = mimeFormat.lookup('application/zip');
|
|
expect(mime).have.property('type', 'application');
|
|
expect(mime).have.property('format', 'raw');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
it("application/gzip", function () {
|
|
var mime = mimeFormat.lookup('application/gzip');
|
|
expect(mime).have.property('type', 'application');
|
|
expect(mime).have.property('format', 'raw');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
it("application/graphql", function () {
|
|
var mime = mimeFormat.lookup('application/graphql');
|
|
expect(mime).have.property('type', 'application');
|
|
expect(mime).have.property('format', 'raw');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
it("audio/basic", function () {
|
|
var mime = mimeFormat.lookup('audio/ogg');
|
|
expect(mime).have.property('type', 'audio');
|
|
expect(mime).have.property('format', 'audio');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
it("audio/L24", function () {
|
|
var mime = mimeFormat.lookup('audio/L24');
|
|
expect(mime).have.property('type', 'audio');
|
|
expect(mime).have.property('format', 'audio');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
it("audio/mp4", function () {
|
|
var mime = mimeFormat.lookup('audio/mp4');
|
|
expect(mime).have.property('type', 'audio');
|
|
expect(mime).have.property('format', 'audio');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
it("audio/mpeg", function () {
|
|
var mime = mimeFormat.lookup('audio/mpeg');
|
|
expect(mime).have.property('type', 'audio');
|
|
expect(mime).have.property('format', 'audio');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
it("audio/ogg", function () {
|
|
var mime = mimeFormat.lookup('audio/ogg');
|
|
expect(mime).have.property('type', 'audio');
|
|
expect(mime).have.property('format', 'audio');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
it("audio/vorbis", function () {
|
|
var mime = mimeFormat.lookup('audio/vorbis');
|
|
expect(mime).have.property('type', 'audio');
|
|
expect(mime).have.property('format', 'audio');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
it("audio/vnd.rn-realaudio", function () {
|
|
var mime = mimeFormat.lookup('audio/vnd.rn-realaudio');
|
|
expect(mime).have.property('type', 'audio');
|
|
expect(mime).have.property('format', 'audio');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
it("audio/vnd.wave", function () {
|
|
var mime = mimeFormat.lookup('audio/ogvnd.waveg');
|
|
expect(mime).have.property('type', 'audio');
|
|
expect(mime).have.property('format', 'audio');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
it("audio/webm", function () {
|
|
var mime = mimeFormat.lookup('audio/webm');
|
|
expect(mime).have.property('type', 'audio');
|
|
expect(mime).have.property('format', 'audio');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
it("image/gif", function () {
|
|
var mime = mimeFormat.lookup('image/gif');
|
|
expect(mime).have.property('type', 'image');
|
|
expect(mime).have.property('format', 'image');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
it("image/jpeg", function () {
|
|
var mime = mimeFormat.lookup('image/jpeg');
|
|
expect(mime).have.property('type', 'image');
|
|
expect(mime).have.property('format', 'image');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
it("image/pjpeg", function () {
|
|
var mime = mimeFormat.lookup('image/pjpeg');
|
|
expect(mime).have.property('type', 'image');
|
|
expect(mime).have.property('format', 'image');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
it("image/png", function () {
|
|
var mime = mimeFormat.lookup('image/png');
|
|
expect(mime).have.property('type', 'image');
|
|
expect(mime).have.property('format', 'image');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
it("image/svg+xml", function () {
|
|
var mime = mimeFormat.lookup('image/svg+xml');
|
|
expect(mime).have.property('type', 'image');
|
|
expect(mime).have.property('format', 'image');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
it("image/tiff", function () {
|
|
var mime = mimeFormat.lookup('image/tiff');
|
|
expect(mime).have.property('type', 'image');
|
|
expect(mime).have.property('format', 'image');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
it("message/http", function () {
|
|
var mime = mimeFormat.lookup('message/http');
|
|
expect(mime).have.property('type', 'message');
|
|
expect(mime).have.property('format', 'raw');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
it("message/imdn+xml", function () {
|
|
var mime = mimeFormat.lookup('message/imdn+xml');
|
|
expect(mime).have.property('type', 'text');
|
|
expect(mime).have.property('format', 'xml');
|
|
expect(mime).not.have.property('guessed');
|
|
});
|
|
it("message/partial", function () {
|
|
var mime = mimeFormat.lookup('message/partial');
|
|
expect(mime).have.property('type', 'message');
|
|
expect(mime).have.property('format', 'raw');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
it("message/rfc822", function () {
|
|
var mime = mimeFormat.lookup('message/rfc822');
|
|
expect(mime).have.property('type', 'message');
|
|
expect(mime).have.property('format', 'raw');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
it("multipart/mixed", function () {
|
|
var mime = mimeFormat.lookup('multipart/mixed');
|
|
expect(mime).have.property('type', 'multipart');
|
|
expect(mime).have.property('format', 'raw');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
it("multipart/alternative", function () {
|
|
var mime = mimeFormat.lookup('multipart/alternative');
|
|
expect(mime).have.property('type', 'multipart');
|
|
expect(mime).have.property('format', 'raw');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
it("multipart/related", function () {
|
|
var mime = mimeFormat.lookup('multipart/related');
|
|
expect(mime).have.property('type', 'multipart');
|
|
expect(mime).have.property('format', 'raw');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
it("multipart/form-data", function () {
|
|
var mime = mimeFormat.lookup('multipart/form-data');
|
|
expect(mime).have.property('type', 'multipart');
|
|
expect(mime).have.property('format', 'raw');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
it("multipart/signed", function () {
|
|
var mime = mimeFormat.lookup('multipart/signed');
|
|
expect(mime).have.property('type', 'multipart');
|
|
expect(mime).have.property('format', 'raw');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
it("multipart/encrypted", function () {
|
|
var mime = mimeFormat.lookup('multipart/encrypted');
|
|
expect(mime).have.property('type', 'multipart');
|
|
expect(mime).have.property('format', 'raw');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
it("text/cmd", function () {
|
|
var mime = mimeFormat.lookup('text/cmd');
|
|
expect(mime).have.property('type', 'text');
|
|
expect(mime).have.property('format', 'plain');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
it("text/css", function () {
|
|
var mime = mimeFormat.lookup('text/css');
|
|
expect(mime).have.property('type', 'text');
|
|
expect(mime).have.property('format', 'plain');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
it("text/csv", function () {
|
|
var mime = mimeFormat.lookup('text/csv');
|
|
expect(mime).have.property('type', 'text');
|
|
expect(mime).have.property('format', 'plain');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
it("text/html", function () {
|
|
var mime = mimeFormat.lookup('text/html');
|
|
expect(mime).have.property('type', 'text');
|
|
expect(mime).have.property('format', 'html');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
it("text/plain", function () {
|
|
var mime = mimeFormat.lookup('text/plain');
|
|
expect(mime).have.property('type', 'text');
|
|
expect(mime).have.property('format', 'plain');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
it("text/vcard", function () {
|
|
var mime = mimeFormat.lookup('text/vcard');
|
|
expect(mime).have.property('type', 'text');
|
|
expect(mime).have.property('format', 'plain');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
it("text/xml", function () {
|
|
var mime = mimeFormat.lookup('text/xml');
|
|
expect(mime).have.property('type', 'text');
|
|
expect(mime).have.property('format', 'xml');
|
|
expect(mime).have.property('guessed');
|
|
});
|
|
});
|
|
describe("Charset from headers", function () {
|
|
it("text/html; charset=Shift_JIS", function() {
|
|
var mime = mimeFormat.lookup('text/html; charset=Shift_JIS');
|
|
expect(mime).have.property('charset', 'shift_jis');
|
|
});
|
|
|
|
it("text/html; charset=ISO-8859-1", function() {
|
|
var mime = mimeFormat.lookup('text/html; charset=ISO-8859-1');
|
|
expect(mime).have.property('charset', 'iso-8859-1');
|
|
});
|
|
});
|
|
|
|
describe("Charset won't be available if it is not mentioned", function () {
|
|
it("text/html", function() {
|
|
var mime = mimeFormat.lookup('text/html;');
|
|
expect(mime).not.have.property('charset');
|
|
});
|
|
|
|
it("charset which is not word, number and -, say text/html; charset=中文编码", function() {
|
|
var mime = mimeFormat.lookup('text/html;charset=中文编码');
|
|
expect(mime).not.have.property('charset');
|
|
});
|
|
});
|
|
|
|
describe("Regression", function () {
|
|
// Refer: https://github.com/postmanlabs/postman-app-support/issues/8876
|
|
it("charset provided in a call should not persist in subsequent calls without charset", function () {
|
|
var mime = mimeFormat.lookup('application/json; charset=utf-16');
|
|
expect(mime).have.property('type', 'text');
|
|
expect(mime).have.property('format', 'json');
|
|
expect(mime).have.property('charset', 'utf-16');
|
|
|
|
mime = mimeFormat.lookup('application/json');
|
|
expect(mime).have.property('type', 'text');
|
|
expect(mime).have.property('format', 'json');
|
|
expect(mime).not.have.property('charset');
|
|
});
|
|
})
|
|
});
|