Skip to content

Commit

Permalink
refactor: Make Logger an interface.
Browse files Browse the repository at this point in the history
  • Loading branch information
RubenVerborgh committed Apr 1, 2022
1 parent 624c883 commit 3d66828
Show file tree
Hide file tree
Showing 2 changed files with 87 additions and 36 deletions.
2 changes: 1 addition & 1 deletion src/logging/LazyLoggerFactory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import type { LoggerFactory } from './LoggerFactory';
import type { LogLevel } from './LogLevel';

/**
* Temporary {@link LoggerFactory} that creates buffered {@link WrappingLogger}s
* Temporary {@link LoggerFactory} that buffers log messages in memory
* until the {@link TemporaryLoggerFactory#switch} method is called.
*/
class TemporaryLoggerFactory implements LoggerFactory {
Expand Down
121 changes: 86 additions & 35 deletions test/unit/logging/Logger.test.ts
Original file line number Diff line number Diff line change
@@ -1,44 +1,95 @@
import { BaseLogger } from '../../../src/logging/Logger';
import { BaseLogger, WrappingLogger } from '../../../src/logging/Logger';
import type { SimpleLogger } from '../../../src/logging/Logger';

describe('BaseLogger', (): void => {
let logger: BaseLogger;
beforeEach(async(): Promise<void> => {
logger = new (BaseLogger as any)();
logger.log = jest.fn();
});
describe('Logger', (): void => {
describe('a BaseLogger', (): void => {
let logger: BaseLogger;

it('Error delegates to log.', async(): Promise<void> => {
logger.error('my message');
expect(logger.log).toHaveBeenCalledTimes(1);
expect(logger.log).toHaveBeenCalledWith('error', 'my message');
});
beforeEach(async(): Promise<void> => {
logger = new (BaseLogger as any)();
logger.log = jest.fn();
});

it('Warn delegates to log.', async(): Promise<void> => {
logger.warn('my message');
expect(logger.log).toHaveBeenCalledTimes(1);
expect(logger.log).toHaveBeenCalledWith('warn', 'my message');
});
it('delegates error to log.', async(): Promise<void> => {
logger.error('my message');
expect(logger.log).toHaveBeenCalledTimes(1);
expect(logger.log).toHaveBeenCalledWith('error', 'my message');
});

it('Info delegates to log.', async(): Promise<void> => {
logger.info('my message');
expect(logger.log).toHaveBeenCalledTimes(1);
expect(logger.log).toHaveBeenCalledWith('info', 'my message');
});
it('Verbose delegates to log.', async(): Promise<void> => {
logger.verbose('my message');
expect(logger.log).toHaveBeenCalledTimes(1);
expect(logger.log).toHaveBeenCalledWith('verbose', 'my message');
});
it('warn delegates to log.', async(): Promise<void> => {
logger.warn('my message');
expect(logger.log).toHaveBeenCalledTimes(1);
expect(logger.log).toHaveBeenCalledWith('warn', 'my message');
});

it('info delegates to log.', async(): Promise<void> => {
logger.info('my message');
expect(logger.log).toHaveBeenCalledTimes(1);
expect(logger.log).toHaveBeenCalledWith('info', 'my message');
});

it('verbose delegates to log.', async(): Promise<void> => {
logger.verbose('my message');
expect(logger.log).toHaveBeenCalledTimes(1);
expect(logger.log).toHaveBeenCalledWith('verbose', 'my message');
});

it('debug delegates to log.', async(): Promise<void> => {
logger.debug('my message');
expect(logger.log).toHaveBeenCalledTimes(1);
expect(logger.log).toHaveBeenCalledWith('debug', 'my message');
});

it('Debug delegates to log.', async(): Promise<void> => {
logger.debug('my message');
expect(logger.log).toHaveBeenCalledTimes(1);
expect(logger.log).toHaveBeenCalledWith('debug', 'my message');
it('silly delegates to log.', async(): Promise<void> => {
logger.silly('my message');
expect(logger.log).toHaveBeenCalledTimes(1);
expect(logger.log).toHaveBeenCalledWith('silly', 'my message');
});
});

it('Silly delegates to log.', async(): Promise<void> => {
logger.silly('my message');
expect(logger.log).toHaveBeenCalledTimes(1);
expect(logger.log).toHaveBeenCalledWith('silly', 'my message');
describe('a WrappingLogger', (): void => {
let logger: SimpleLogger;
let wrapper: WrappingLogger;

beforeEach(async(): Promise<void> => {
logger = { log: jest.fn() };
wrapper = new WrappingLogger(logger);
});

it('error delegates to the internal logger.', async(): Promise<void> => {
wrapper.error('my message');
expect(logger.log).toHaveBeenCalledTimes(1);
expect(logger.log).toHaveBeenCalledWith('error', 'my message');
});

it('warn delegates to the internal logger.', async(): Promise<void> => {
wrapper.warn('my message');
expect(logger.log).toHaveBeenCalledTimes(1);
expect(logger.log).toHaveBeenCalledWith('warn', 'my message');
});

it('info delegates to the internal logger.', async(): Promise<void> => {
wrapper.info('my message');
expect(logger.log).toHaveBeenCalledTimes(1);
expect(logger.log).toHaveBeenCalledWith('info', 'my message');
});

it('verbose delegates to the internal logger.', async(): Promise<void> => {
wrapper.verbose('my message');
expect(logger.log).toHaveBeenCalledTimes(1);
expect(logger.log).toHaveBeenCalledWith('verbose', 'my message');
});

it('debug delegates to the internal logger.', async(): Promise<void> => {
wrapper.debug('my message');
expect(logger.log).toHaveBeenCalledTimes(1);
expect(logger.log).toHaveBeenCalledWith('debug', 'my message');
});

it('silly delegates to the internal logger.', async(): Promise<void> => {
wrapper.silly('my message');
expect(logger.log).toHaveBeenCalledTimes(1);
expect(logger.log).toHaveBeenCalledWith('silly', 'my message');
});
});
});

0 comments on commit 3d66828

Please sign in to comment.