Just a whole lot of crap

This commit is contained in:
2025-08-14 16:36:12 -05:00
parent 66b7e42275
commit 62f6d6f279
144 changed files with 41421 additions and 2458 deletions

View File

@@ -0,0 +1,341 @@
/**
* Windows Terminal Specific Tests
* Tests for Windows Terminal, Command Prompt, and PowerShell environments
*/
import { render } from "ink-testing-library";
import React from "react";
import { Text, Box } from "ink";
import {
detectWindowsTerminal,
getWindowsTerminalCapabilities,
getWindowsColorSupport,
getWindowsUnicodeSupport,
} from "../../../src/tui/utils/modernTerminal.js";
describe("Windows Terminal Environment Tests", () => {
const originalEnv = process.env;
const originalPlatform = process.platform;
beforeEach(() => {
// Reset environment
process.env = { ...originalEnv };
Object.defineProperty(process, "platform", {
value: "win32",
writable: true,
});
});
afterEach(() => {
process.env = originalEnv;
Object.defineProperty(process, "platform", {
value: originalPlatform,
writable: true,
});
});
describe("Windows Terminal Detection", () => {
test("should detect Windows Terminal with WT_SESSION", () => {
process.env.WT_SESSION = "abc123-def456";
process.env.TERM_PROGRAM = "Windows Terminal";
const isWindowsTerminal = detectWindowsTerminal();
expect(isWindowsTerminal).toBe(true);
});
test("should detect Windows Terminal Preview", () => {
process.env.WT_SESSION = "preview-session";
process.env.TERM_PROGRAM = "Windows Terminal Preview";
const isWindowsTerminal = detectWindowsTerminal();
expect(isWindowsTerminal).toBe(true);
});
test("should not detect Windows Terminal without proper env vars", () => {
delete process.env.WT_SESSION;
delete process.env.TERM_PROGRAM;
const isWindowsTerminal = detectWindowsTerminal();
expect(isWindowsTerminal).toBe(false);
});
});
describe("Command Prompt Detection", () => {
test("should detect Command Prompt environment", () => {
process.env.COMSPEC = "C:\\Windows\\system32\\cmd.exe";
process.env.PROMPT = "$P$G";
delete process.env.WT_SESSION;
delete process.env.TERM_PROGRAM;
delete process.env.PSModulePath;
delete process.env.COLORTERM;
const capabilities = getWindowsTerminalCapabilities();
expect(capabilities.isCommandPrompt).toBe(true);
expect(capabilities.terminalType).toBe("cmd");
});
test("should handle Command Prompt limitations", () => {
process.env.COMSPEC = "C:\\Windows\\system32\\cmd.exe";
delete process.env.WT_SESSION;
delete process.env.COLORTERM;
delete process.env.TERM_PROGRAM;
delete process.env.PSModulePath;
const capabilities = getWindowsTerminalCapabilities();
expect(capabilities.supportsUnicode).toBe(false);
expect(capabilities.supportsTrueColor).toBe(false);
expect(capabilities.supportsColor).toBe(true); // Basic colors only
});
});
describe("PowerShell Detection", () => {
test("should detect PowerShell environment", () => {
process.env.PSModulePath = "C:\\Program Files\\PowerShell\\Modules";
process.env.TERM_PROGRAM = "PowerShell";
delete process.env.WT_SESSION;
const capabilities = getWindowsTerminalCapabilities();
expect(capabilities.isPowerShell).toBe(true);
expect(capabilities.terminalType).toBe("powershell");
});
test("should detect PowerShell Core", () => {
process.env.PSModulePath = "C:\\Program Files\\PowerShell\\7\\Modules";
process.env.TERM_PROGRAM = "PowerShell Core";
const capabilities = getWindowsTerminalCapabilities();
expect(capabilities.isPowerShell).toBe(true);
expect(capabilities.supportsUnicode).toBe(true);
});
});
describe("Color Support Detection", () => {
test("should detect true color support in Windows Terminal", () => {
process.env.WT_SESSION = "test";
process.env.COLORTERM = "truecolor";
const colorSupport = getWindowsColorSupport();
expect(colorSupport.supportsTrueColor).toBe(true);
expect(colorSupport.supports256Color).toBe(true);
expect(colorSupport.supportsBasicColor).toBe(true);
});
test("should detect limited color support in Command Prompt", () => {
process.env.COMSPEC = "C:\\Windows\\system32\\cmd.exe";
delete process.env.WT_SESSION;
delete process.env.COLORTERM;
delete process.env.TERM_PROGRAM;
delete process.env.PSModulePath;
const colorSupport = getWindowsColorSupport();
expect(colorSupport.supportsTrueColor).toBe(false);
expect(colorSupport.supports256Color).toBe(false);
expect(colorSupport.supportsBasicColor).toBe(true);
});
test("should detect 256 color support in PowerShell", () => {
process.env.PSModulePath = "C:\\Program Files\\PowerShell\\Modules";
delete process.env.WT_SESSION;
delete process.env.COLORTERM;
const colorSupport = getWindowsColorSupport();
expect(colorSupport.supportsTrueColor).toBe(false);
expect(colorSupport.supports256Color).toBe(true);
expect(colorSupport.supportsBasicColor).toBe(true);
});
});
describe("Unicode Support Detection", () => {
test("should detect Unicode support in Windows Terminal", () => {
process.env.WT_SESSION = "test";
const unicodeSupport = getWindowsUnicodeSupport();
expect(unicodeSupport.supportsUnicode).toBe(true);
expect(unicodeSupport.supportsEmoji).toBe(true);
expect(unicodeSupport.supportsBoxDrawing).toBe(true);
});
test("should detect limited Unicode support in Command Prompt", () => {
process.env.COMSPEC = "C:\\Windows\\system32\\cmd.exe";
delete process.env.WT_SESSION;
delete process.env.COLORTERM;
delete process.env.TERM_PROGRAM;
delete process.env.PSModulePath;
const unicodeSupport = getWindowsUnicodeSupport();
expect(unicodeSupport.supportsUnicode).toBe(false);
expect(unicodeSupport.supportsEmoji).toBe(false);
expect(unicodeSupport.supportsBoxDrawing).toBe(false);
});
test("should detect partial Unicode support in PowerShell", () => {
process.env.PSModulePath = "C:\\Program Files\\PowerShell\\Modules";
delete process.env.WT_SESSION;
const unicodeSupport = getWindowsUnicodeSupport();
expect(unicodeSupport.supportsUnicode).toBe(true);
expect(unicodeSupport.supportsEmoji).toBe(false);
expect(unicodeSupport.supportsBoxDrawing).toBe(true);
});
});
describe("Character Generation Tests", () => {
test("should render progress bars correctly in Windows Terminal", () => {
process.env.WT_SESSION = "test";
process.env.COLORTERM = "truecolor";
const ProgressComponent = () => {
const capabilities = getWindowsTerminalCapabilities();
const progressChar = capabilities.supportsUnicode ? "█" : "#";
const emptyChar = capabilities.supportsUnicode ? "░" : "-";
return (
<Box>
<Text>
Progress: {progressChar.repeat(5)}
{emptyChar.repeat(5)} 50%
</Text>
</Box>
);
};
const { lastFrame } = render(<ProgressComponent />);
expect(lastFrame()).toContain("Progress: █████░░░░░ 50%");
});
test("should render progress bars with fallbacks in Command Prompt", () => {
process.env.COMSPEC = "C:\\Windows\\system32\\cmd.exe";
delete process.env.WT_SESSION;
const ProgressComponent = () => {
const capabilities = getWindowsTerminalCapabilities();
const progressChar = capabilities.supportsUnicode ? "█" : "#";
const emptyChar = capabilities.supportsUnicode ? "░" : "-";
return (
<Box>
<Text>
Progress: {progressChar.repeat(5)}
{emptyChar.repeat(5)} 50%
</Text>
</Box>
);
};
const { lastFrame } = render(<ProgressComponent />);
expect(lastFrame()).toContain("Progress: #####----- 50%");
});
test("should render status indicators correctly across terminals", () => {
const testTerminals = [
{ env: { WT_SESSION: "test" }, expected: "●" },
{ env: { COMSPEC: "C:\\Windows\\system32\\cmd.exe" }, expected: "*" },
{
env: { PSModulePath: "C:\\Program Files\\PowerShell\\Modules" },
expected: "●",
},
];
testTerminals.forEach(({ env, expected }) => {
// Set environment
Object.keys(env).forEach((key) => {
process.env[key] = env[key];
});
const StatusComponent = () => {
const capabilities = getWindowsTerminalCapabilities();
const statusChar = capabilities.supportsUnicode ? "●" : "*";
return <Text>Status: {statusChar} Connected</Text>;
};
const { lastFrame } = render(<StatusComponent />);
expect(lastFrame()).toContain(`Status: ${expected} Connected`);
// Clean up
Object.keys(env).forEach((key) => {
delete process.env[key];
});
});
});
});
describe("Keyboard Input Handling", () => {
test("should handle Windows-specific key codes", () => {
const keyMappings = {
"\x03": "ctrl+c",
"\x1a": "ctrl+z",
"\x1b": "escape",
"\r": "enter",
"\r\n": "enter", // Windows line ending
"\x08": "backspace",
"\x7f": "delete",
};
Object.entries(keyMappings).forEach(([keyCode, expectedKey]) => {
// Test key code recognition
expect(keyCode).toBeDefined();
expect(expectedKey).toBeDefined();
});
});
test("should handle Windows Terminal enhanced keyboard input", () => {
process.env.WT_SESSION = "test";
// Windows Terminal supports enhanced keyboard sequences
const enhancedKeys = [
"\x1b[1;5A", // Ctrl+Up
"\x1b[1;5B", // Ctrl+Down
"\x1b[1;2A", // Shift+Up
"\x1b[1;2B", // Shift+Down
];
enhancedKeys.forEach((keySequence) => {
expect(keySequence).toMatch(/\x1b\[/);
});
});
});
describe("Terminal Size Handling", () => {
test("should handle Windows terminal resize events", () => {
const originalColumns = process.stdout.columns;
const originalRows = process.stdout.rows;
// Mock terminal size
Object.defineProperty(process.stdout, "columns", {
value: 120,
writable: true,
});
Object.defineProperty(process.stdout, "rows", {
value: 30,
writable: true,
});
const SizeComponent = () => {
const [size, setSize] = React.useState({
width: process.stdout.columns || 80,
height: process.stdout.rows || 24,
});
return (
<Text>
Size: {size.width}x{size.height}
</Text>
);
};
const { lastFrame } = render(<SizeComponent />);
expect(lastFrame()).toContain("Size: 120x30");
// Restore original values
Object.defineProperty(process.stdout, "columns", {
value: originalColumns,
writable: true,
});
Object.defineProperty(process.stdout, "rows", {
value: originalRows,
writable: true,
});
});
});
});