# test-helpers.mjs

## Огляд

Цей файл надає допоміжні функції для тестування скриптів пакета `@nitra/cursor`. Він забезпечує створення тимчасових каталогів та запис JSON-файлів у абсолютний шлях, гарантуючи ізольованість тестів та запобігаючи мутації глобального контексту процесу. Ці функції використовуються для створення безпечного середовища для тестування, особливо при використанні git-операцій та інших файлових операцій.

## Поведінка

withTmpDir: Створює тимчасову директорію та виконує функцію з її абсолютним шляхом, потім видаляє директорію.
writeJson: Записує JSON-файл в абсолютний шлях, форматує його та додає символ переносу рядка.
ensureDir: Створює вкладену директорію в заданому абсолютному шляху.
withShellcheckStubInPath: Створює тимчасову директорію з підставленим `shellcheck` (якщо платформа Windows), додає її до `PATH`, виконує функцію, а потім відновлює оригінальний `PATH` та видаляє тимчасову директорію.
withBinRemovedFromPath: Видаляє заданий виконуваний файл з `PATH`, виконує функцію, а потім відновлює оригінальний `PATH` та встановлює `N_CURSOR_NO_AUTO_INSTALL=1`.

## Публічний API

- withTmpDir — Створює тимчасову директорію та передає її шлях у `fn`, потім видаляє директорію.
- writeJson — Записує JSON-файл з форматуванням.
- ensureDir — Створює вкладені каталоги.
- withShellcheckStubInPath — Створює тимчасовий каталог із `shellcheck`, додає його на `PATH` та відновлює оригінальний `PATH`.
- withBinRemovedFromPath — Виконує `fn` з `PATH`, з якого видалено каталоги з `<bin>`.
- N_CURSOR_NO_AUTO_INSTALL — Встановлює прапорець для запобігання автоматичному встановленню інструментів.

## Гарантії поведінки

- `withTmpDir` створює тимчасовий каталог і передає його абсолютний шлях у функцію `fn`.
- `writeJson` записує об'єкт `data` у файл JSON в абсолютний шлях каталогу `dir`.
- `ensureDir` створює каталог `dir`, якщо він не існує.
- `withShellcheckStubInPath` встановлює stub Shellcheck у каталозі `dir`.
- `withBinRemovedFromPath` видаляє біни з шляху `dir`.
- Абсолютний шлях каталогу тимчасового каталогу, створеного `withTmpDir`, завжди доступний для використання.
- Функції не кидають винятків. У разі помилки, функція завершується з помилкою.
- Немає кешування.
- Не використовується `process.chdir`.
- `process.cwd` встановлюється на абсолютний шлях тимчасового каталогу.
- Всі child-процеси отримують абсолютний шлях тимчасового каталогу через `cwd`.
