UNPKG

dnssd

Version:

Bonjour/Avahi-like service discovery in pure JavaScript

155 lines (126 loc) 4.45 kB
const _ = require('lodash'); const chai = require('chai'); const expect = chai.expect; const rewire = require('rewire'); const sinon = require('sinon'); const sinonChai = require('sinon-chai'); chai.use(sinonChai); const dir = process['test-dir'] || '../../src/'; const ResourceRecord = require(dir + '/ResourceRecord'); describe('debug()', function() { let DEBUG, VERBOSE; before(function() { DEBUG = process.env.DEBUG; VERBOSE = process.env.VERBOSE; }); after(function() { process.env.DEBUG = DEBUG; process.env.VERBOSE = VERBOSE; }); beforeEach(function() { delete process.env.DEBUG; delete process.env.VERBOSE; }); describe('should return noop for disabled loggers', function() { const env = { '' : 'nothing', '-*' : 'anything', '-debug' : 'debug', 'this' : 'that', '*,-except' : 'except', '-some:subthing' : 'some:subthing', '-some:*' : 'some:other', 'some:*,-some:subthing' : 'some:subthing', }; describe('process.env.DEBUG', function() { _.forOwn(env, (namespace, input) => { it(input, function() { process.env.DEBUG = input; const debug = rewire(dir + '/debug'); const fn = debug(namespace); expect(fn.v.isEnabled).to.be.false; expect(fn.verbose.isEnabled).to.be.false; }); }); }); describe('process.env.VERBOSE', function() { _.forOwn(env, (namespace, input) => { it(input, function() { process.env.DEBUG = '*'; process.env.VERBOSE = input; const debug = rewire(dir + '/debug'); const fn = debug(namespace); expect(fn.v.isEnabled).to.be.false; expect(fn.verbose.isEnabled).to.be.false; }); }); }); }); describe('should return log fn for enabled loggers', function() { const env = { '*' : 'anything', 'debug' : 'debug', '-this,that' : 'that', 'some:subthing' : 'some:subthing', 'some:*' : 'some:other', }; describe('process.env.DEBUG', function() { _.forOwn(env, (namespace, input) => { it(input, function() { process.env.DEBUG = input; const debug = rewire(dir + '/debug'); const fn = debug(namespace); expect(fn).to.be.a.function; expect(fn.isEnabled).to.be.true; }); }); }); describe('process.env.VERBOSE', function() { _.forOwn(env, (namespace, input) => { it(input, function() { process.env.DEBUG = '*'; process.env.VERBOSE = input; const debug = rewire(dir + '/debug'); const fn = debug(namespace); expect(fn.v).to.be.a.function; expect(fn.v.isEnabled).to.be.true; }); }); }); }); describe('log fn should never throw (lazy testing)', function() { let debug, revert, fn; before(function() { process.env.DEBUG = 'test'; debug = rewire(dir + '/debug'); revert = debug.__set__('logger', sinon.stub()); fn = debug('test'); }); after(function() { revert(); }); const records = [ new ResourceRecord.A({name: 'Example'}), new ResourceRecord.AAAA({name: 'Example'}), ]; const tests = { 'strings' : ['An example string'], 'strings w/ formatters': ['An example string %s', 'stuff'], 'strings w/ extra args': ['An example string %s', 'stuff', 'extra'], 'arrays' : [['An', 'exmaple array']], 'arrays & formatters' : ['Array: %s', ['An', 'exmaple array']], 'arrays & extra args' : [['An', 'exmaple array'], ['extra']], 'objects' : [{An: 'example object'}], 'objects & formatters' : ['Object: %s', {An: 'example object'}], 'objects & extra args' : [{An: 'example object'}, {extra: 'arg'}], 'records formatter' : ['Records: %r', records], 'bad records formatter': ['Record?: %r', [...records, {not: 'actually a record'}]], }; tests['really big circular objects'] = [tests]; _.forOwn(tests, (args, type) => { it(`should handle ${type}`, function() { expect(() => fn(...args)).to.not.throw(); }); }); }); });