Cover Handler property accessors, format delegation, emit contract, and close lifecycle. Cover Logger level methods, isEnabledFor caching, manager property assignment, handler management, debug invocation, and makeRecord extra key collision. Cover Manager getLogger hierarchy setup, placeholder fixup, disable level, and loggerClass validation. Cover basicConfig option handling, force flag, mutual exclusion of stream/filename/handlers, and formatter assignment.
92 lines
2.9 KiB
TypeScript
92 lines
2.9 KiB
TypeScript
import {expect, jest, test} from '@jest/globals';
|
|
import { Handler, StreamHandler, StderrHandler } from '../../src/handler';
|
|
import { Formatter, DEFAULT_FORMATTER } from '../../src/formatter';
|
|
import { LogRecord } from '../../src/log-record';
|
|
import { DEBUG, WARNING, ERROR, NOTSET } from '../../src/log-level';
|
|
function makeRecord(level: number, msg: string): LogRecord {
|
|
return new LogRecord('test', { level, msg });
|
|
}
|
|
|
|
describe('Handler', () => {
|
|
describe('constructor', () => {
|
|
test('defaults to NOTSET level', () => {
|
|
const h = new Handler();
|
|
expect(h.level).toBe(NOTSET);
|
|
});
|
|
|
|
test('accepts a level argument', () => {
|
|
const h = new Handler(WARNING);
|
|
expect(h.level).toBe(WARNING);
|
|
});
|
|
});
|
|
|
|
describe('level setter', () => {
|
|
test('sets the level without infinite recursion', () => {
|
|
const h = new Handler();
|
|
h.level = ERROR;
|
|
expect(h.level).toBe(ERROR);
|
|
});
|
|
});
|
|
|
|
describe('formatter', () => {
|
|
test('getter returns null when no formatter set', () => {
|
|
const h = new Handler();
|
|
expect(h.formatter).toBeNull();
|
|
});
|
|
|
|
test('getter returns assigned formatter', () => {
|
|
const h = new Handler();
|
|
const fmt = new Formatter();
|
|
h.formatter = fmt;
|
|
expect(h.formatter).toBe(fmt);
|
|
});
|
|
});
|
|
|
|
describe('format', () => {
|
|
test('uses DEFAULT_FORMATTER when no formatter assigned', () => {
|
|
const h = new Handler();
|
|
const record = makeRecord(DEBUG, 'hello');
|
|
const result = h.format(record);
|
|
expect(typeof result).toBe('string');
|
|
});
|
|
|
|
test('uses assigned formatter', () => {
|
|
const h = new Handler();
|
|
const fmt = new Formatter({ fmt: '%(message)s' });
|
|
h.formatter = fmt;
|
|
const record = makeRecord(DEBUG, 'hello');
|
|
const result = h.format(record);
|
|
expect(typeof result).toBe('string');
|
|
});
|
|
|
|
test('returns a string', () => {
|
|
const h = new Handler();
|
|
const record = makeRecord(WARNING, 'test message');
|
|
expect(typeof h.format(record)).toBe('string');
|
|
});
|
|
});
|
|
|
|
describe('emit', () => {
|
|
test('throws NotImplementedError on base class', () => {
|
|
const h = new Handler();
|
|
const record = makeRecord(DEBUG, 'hello');
|
|
expect(() => h.emit(record)).toThrow('emit must be implemented');
|
|
});
|
|
});
|
|
|
|
describe('close', () => {
|
|
test('sets closed to true', () => {
|
|
const h = new Handler();
|
|
expect(h.closed).toBe(false);
|
|
h.close();
|
|
expect(h.closed).toBe(true);
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('StderrHandler', () => {
|
|
test('accepts a level', () => {
|
|
const h = new StderrHandler(ERROR);
|
|
expect(h.level).toBe(ERROR);
|
|
});
|
|
});
|