Files
vue-tui/packages/runtime-tests/integration/lifecycle/write-synchronized.test.ts
T

50 lines
1.6 KiB
TypeScript
Raw Normal View History

import { EventEmitter } from "node:events";
import { test, expect } from "vite-plus/test";
import isInCi from "is-in-ci";
import { bsu, esu, shouldSynchronize } from "../../../runtime/src/io/write-synchronized.ts";
const createStream = ({ tty = false } = {}) => {
const stream = new EventEmitter() as unknown as NodeJS.WriteStream;
if (tty) {
stream.isTTY = true;
}
return stream;
};
test("bsu is the expected synchronized update sequence", () => {
expect(bsu).toBe("\x1b[?2026h");
});
test("esu is the expected synchronized update sequence", () => {
expect(esu).toBe("\x1b[?2026l");
});
test("shouldSynchronize returns true for interactive TTY stream", () => {
const stream = createStream({ tty: true });
expect(shouldSynchronize(stream, true)).toBe(true);
});
test("shouldSynchronize returns false for non-interactive TTY stream", () => {
const stream = createStream({ tty: true });
expect(shouldSynchronize(stream, false)).toBe(false);
});
test("shouldSynchronize returns false for non-TTY stream", () => {
const stream = createStream({ tty: false });
expect(shouldSynchronize(stream, true)).toBe(false);
});
test("shouldSynchronize uses CI detection when interactive is not specified", () => {
const ttyStream = createStream({ tty: true });
if (isInCi) {
expect(shouldSynchronize(ttyStream)).toBe(false);
} else {
expect(shouldSynchronize(ttyStream)).toBe(true);
}
});
test("shouldSynchronize returns false for non-TTY stream when interactive is not specified", () => {
const stream = createStream({ tty: false });
expect(shouldSynchronize(stream)).toBe(false);
});