mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-31 11:51:22 +00:00
Merged via squash.
Prepared head SHA: 39c15ee70d
Co-authored-by: kvokka <15954013+kvokka@users.noreply.github.com>
Co-authored-by: altaywtf <9790196+altaywtf@users.noreply.github.com>
Reviewed-by: @altaywtf
95 lines
2.9 KiB
TypeScript
95 lines
2.9 KiB
TypeScript
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
|
import { captureConsoleSnapshot, type ConsoleSnapshot } from "./test-helpers/console-snapshot.js";
|
|
|
|
const shouldSkipMutatingLoggingConfigReadMock = vi.hoisted(() => vi.fn(() => false));
|
|
|
|
vi.mock("./config.js", () => ({
|
|
readLoggingConfig: () => undefined,
|
|
shouldSkipMutatingLoggingConfigRead: () => shouldSkipMutatingLoggingConfigReadMock(),
|
|
}));
|
|
|
|
vi.mock("./logger.js", () => ({
|
|
getLogger: () => ({
|
|
trace: () => {},
|
|
debug: () => {},
|
|
info: () => {},
|
|
warn: () => {},
|
|
error: () => {},
|
|
fatal: () => {},
|
|
}),
|
|
}));
|
|
|
|
let loadConfigCalls = 0;
|
|
let originalIsTty: boolean | undefined;
|
|
let originalOpenClawTestConsole: string | undefined;
|
|
let snapshot: ConsoleSnapshot;
|
|
let logging: typeof import("../logging.js");
|
|
let state: typeof import("./state.js");
|
|
|
|
beforeAll(async () => {
|
|
logging = await import("../logging.js");
|
|
state = await import("./state.js");
|
|
});
|
|
|
|
beforeEach(() => {
|
|
loadConfigCalls = 0;
|
|
shouldSkipMutatingLoggingConfigReadMock.mockReset();
|
|
shouldSkipMutatingLoggingConfigReadMock.mockReturnValue(false);
|
|
snapshot = captureConsoleSnapshot();
|
|
originalIsTty = process.stdout.isTTY;
|
|
originalOpenClawTestConsole = process.env.OPENCLAW_TEST_CONSOLE;
|
|
process.env.OPENCLAW_TEST_CONSOLE = "1";
|
|
Object.defineProperty(process.stdout, "isTTY", { value: false, configurable: true });
|
|
});
|
|
|
|
afterEach(() => {
|
|
console.log = snapshot.log;
|
|
console.info = snapshot.info;
|
|
console.warn = snapshot.warn;
|
|
console.error = snapshot.error;
|
|
console.debug = snapshot.debug;
|
|
console.trace = snapshot.trace;
|
|
if (originalOpenClawTestConsole === undefined) {
|
|
delete process.env.OPENCLAW_TEST_CONSOLE;
|
|
} else {
|
|
process.env.OPENCLAW_TEST_CONSOLE = originalOpenClawTestConsole;
|
|
}
|
|
Object.defineProperty(process.stdout, "isTTY", { value: originalIsTty, configurable: true });
|
|
logging.setConsoleConfigLoaderForTests();
|
|
vi.restoreAllMocks();
|
|
});
|
|
|
|
function loadLogging() {
|
|
state.loggingState.cachedConsoleSettings = null;
|
|
logging.setConsoleConfigLoaderForTests(() => {
|
|
loadConfigCalls += 1;
|
|
if (loadConfigCalls > 5) {
|
|
return {};
|
|
}
|
|
console.error("config load failed");
|
|
return {};
|
|
});
|
|
return { logging, state };
|
|
}
|
|
|
|
describe("getConsoleSettings", () => {
|
|
it("does not recurse when loadConfig logs during resolution", () => {
|
|
const { logging } = loadLogging();
|
|
logging.setConsoleTimestampPrefix(true);
|
|
logging.enableConsoleCapture();
|
|
const { getConsoleSettings } = logging;
|
|
getConsoleSettings();
|
|
expect(loadConfigCalls).toBe(1);
|
|
});
|
|
|
|
it("skips config fallback during re-entrant resolution", () => {
|
|
const { logging, state } = loadLogging();
|
|
state.loggingState.resolvingConsoleSettings = true;
|
|
logging.setConsoleTimestampPrefix(true);
|
|
logging.enableConsoleCapture();
|
|
logging.getConsoleSettings();
|
|
expect(loadConfigCalls).toBe(0);
|
|
state.loggingState.resolvingConsoleSettings = false;
|
|
});
|
|
});
|