mirror of
https://github.com/Llewellynvdm/nativefier.git
synced 2024-06-21 04:42:21 +00:00
e664bc6af8
This PR allows us to code playwright integration tests that can potentially replace some of our manual tests and allow us automated testing of the app itself. Current technical limitations: * No app level keyboard simulation support (e.g, zoom in, zoom out, etc.) * No code coverage support, so even though we are testing the app, the code coverage does not reflect this fact
83 lines
2.8 KiB
TypeScript
83 lines
2.8 KiB
TypeScript
// This helper allows logs to either be printed to the console as they would normally or if
|
|
// the USE_LOG_FILE environment variable is set (such as through our playwright tests), then
|
|
// the logs can be diverted from the command line to a log file, so that they can be displayed
|
|
// later (such as at the end of a playwright test run to help diagnose potential failures).
|
|
// Use this instead of loglevel whenever logging messages inside the app.
|
|
|
|
import * as fs from 'fs';
|
|
import * as path from 'path';
|
|
|
|
import loglevel from 'loglevel';
|
|
|
|
import { safeGetEnv } from './playwrightHelpers';
|
|
|
|
const USE_LOG_FILE = safeGetEnv('USE_LOG_FILE') === '1';
|
|
const LOG_FILE_DIR = safeGetEnv('LOG_FILE_DIR') ?? process.cwd();
|
|
const LOG_FILENAME = path.join(LOG_FILE_DIR, `${new Date().getTime()}.log`);
|
|
|
|
const logLevelNames = ['TRACE', 'DEBUG', 'INFO ', 'WARN ', 'ERROR'];
|
|
|
|
function _logger(
|
|
logFunc: (...args: unknown[]) => void,
|
|
level: loglevel.LogLevelNumbers,
|
|
...args: unknown[]
|
|
): void {
|
|
if (USE_LOG_FILE && loglevel.getLevel() >= level) {
|
|
for (const arg of args) {
|
|
try {
|
|
const lines =
|
|
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
|
|
JSON.stringify(arg, null, 2)?.split('\n') ?? `${arg}`.split('\n');
|
|
for (const line of lines) {
|
|
fs.appendFileSync(
|
|
LOG_FILENAME,
|
|
`${new Date().getTime()} ${logLevelNames[level]} ${line}\n`,
|
|
);
|
|
}
|
|
} catch {
|
|
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
|
|
fs.appendFileSync(LOG_FILENAME, `${logLevelNames[level]} ${arg}\n`);
|
|
}
|
|
}
|
|
} else {
|
|
logFunc(...args);
|
|
}
|
|
}
|
|
|
|
export function debug(...args: unknown[]): void {
|
|
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
_logger(loglevel.debug, loglevel.levels.DEBUG, ...args);
|
|
}
|
|
|
|
export function error(...args: unknown[]): void {
|
|
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
_logger(loglevel.error, loglevel.levels.ERROR, ...args);
|
|
}
|
|
|
|
export function info(...args: unknown[]): void {
|
|
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
_logger(loglevel.info, loglevel.levels.INFO, ...args);
|
|
}
|
|
|
|
export function log(...args: unknown[]): void {
|
|
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
_logger(loglevel.info, loglevel.levels.INFO, ...args);
|
|
}
|
|
|
|
export function setLevel(
|
|
level: loglevel.LogLevelDesc,
|
|
persist?: boolean,
|
|
): void {
|
|
loglevel.setLevel(level, persist);
|
|
}
|
|
|
|
export function trace(...args: unknown[]): void {
|
|
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
_logger(loglevel.trace, loglevel.levels.TRACE, ...args);
|
|
}
|
|
|
|
export function warn(...args: unknown[]): void {
|
|
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
_logger(loglevel.warn, loglevel.levels.WARN, ...args);
|
|
}
|