var assert = require('assert')
var specifications = require('../specifications.json')
var compressible = require('../')
// None of these should be actual types so that the lookup will never include them.
var example_types = [
{ type: 'something/text', should: true },
{ type: 'type/json', should: true },
{ type: 'data/beans+xml', should: true },
{ type: 'asdf/nope', should: false },
{ type: 'cats', should: false }
]
var invalid_types = [
undefined,
null,
0,
1,
false,
true
]
var object_true = {
compressible: true,
sources: ["compressible.regex"],
notes: "Automatically generated via regex."
}, object_false = {
compressible: false,
sources: ["compressible.regex"],
notes: "Automatically generated via regex."
}
describe('Testing if spec lookups are correct.', function () {
for (var type in specifications) {
var value = specifications[type].compressible
it(type + ' should' + (value ? ' ' : ' not ') + 'be compressible', function () {
assert.equal(compressible(type), value)
})
}
})
describe('Testing if the regex works as intended.', function () {
example_types.forEach(function (example) {
it(example.type + ' should' + (example.should ? ' ' : ' not ') + 'be compressible', function () {
assert.equal(compressible(example.type), example.should)
})
})
})
describe('Testing if getter returns the correct objects.', function () {
it('All spec objects should be get-able', function () {
for (var type in specifications) {
assert.equal(compressible.get(type), specifications[type])
}
})
example_types.forEach(function (example) {
it(example.type + ' should generate a ' + (example.should ? 'true' : 'false') + ' object', function () {
assert.deepEqual(compressible.get(example.type), example.should ? object_true: object_false)
})
})
})
describe('Testing if charsets are handled correctly.', function () {
it('Charsets should be stripped off without issue', function () {
for (var type in specifications) {
var value = specifications[type].compressible
assert.equal(compressible(type + '; charset=utf-8'), value)
}
})
it('Types with charsets should be get-able', function () {
for (var type in specifications) {
assert.equal(compressible.get(type + '; charset=utf-8'), specifications[type])
}
})
})
describe('Ensuring invalid types do not cause errors.', function () {
it('No arguments should return false without error', function () {
assert.equal(compressible(), false)
})
invalid_types.forEach(function (invalid) {
it(invalid + ' should return false without error', function () {
assert.doesNotThrow(function () {
assert.equal(compressible(invalid), false)
})
})
})
})