mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-28 22:19:41 +03:00
docs(tests): описать fakePlatform в формате кейса
Раннер получил новое поле — формат кейса обязан его описывать, иначе следующий автор снова напишет .cmd руками и пометит кейс osOnly. Отдельно сказано, что таким кейсам osOnly не нужен, и почему: именно забытый -posix двойник давал дыру, из-за которой на маке выполнялся один кейс из двенадцати. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
0704c0ef12
commit
e26f122895
+29
-1
@@ -370,7 +370,8 @@ ibcmd-проход автоматически `○ skipped`, если рядом
|
||||
| `noSnapshot` | нет | Непустая строка с причиной — кейс объявляет, что эталон не нужен (см. «Эталоны») |
|
||||
| `idempotent` | нет | `true` — повторный прогон с теми же аргументами должен дать байт-в-байт тот же `workDir` |
|
||||
| `runtimeOnly` | нет | `"powershell"` / `"python"` — кейс имеет смысл только на одном порте, на другом `○ skipped` |
|
||||
| `osOnly` | нет | `"win32"` / `"darwin"` / `"linux"` — кейс работает только на этой ОС (напр. фейк платформы написан как `.cmd`), на других `○ skipped`. Принимает и массив: `["darwin","linux"]` |
|
||||
| `osOnly` | нет | `"win32"` / `"darwin"` / `"linux"` — кейс работает только на этой ОС, на других `○ skipped`. Принимает и массив: `["darwin","linux"]`. Для фейка платформы **не нужен**: см. `fakePlatform` |
|
||||
| `fakePlatform` | нет | `{ "log": "…", "exit": 0 }` — кейсу нужна фейковая платформа (см. ниже) |
|
||||
| `cwd` | нет | `"workDir"` — запустить навык из рабочего каталога (нужно, если кейс кладёт туда `.v8-project.json`) |
|
||||
| `skipValidation` | нет | `true` — не запускать `postValidate` из `_skill.json` (только при `--with-validation`) |
|
||||
| `skipPlatformVerify` | нет | Непустая строка с причиной — `verify-snapshots.mjs` пропускает кейс. Нужен, когда фикстура не является конфигурацией, которую можно загрузить (напр. фрагмент расширения). Объект `{"reason": "…", "platforms": ["8.3.27.1688"]}` — пропуск только на перечисленных сборках платформы: кейс валиден, но конкретная сборка его не принимает, а на остальных стендах проверка должна остаться |
|
||||
@@ -421,6 +422,33 @@ ibcmd-проход автоматически `○ skipped`, если рядом
|
||||
`preserves` и эталон **дополняют** друг друга: первый следит за байтовым стилем файла, второй — за
|
||||
структурой содержимого. Наличие одного не отменяет необходимости другого.
|
||||
|
||||
### Фейковая платформа (`fakePlatform`)
|
||||
|
||||
Кейс объявляет, что платформа должна положить в `/Out` и с каким кодом выйти. Раннер сам кладёт
|
||||
`fake.cmd` (Windows) или `fake.sh` с битом исполнения (*nix), пишет `log.txt` и заглушку базы
|
||||
`ib/1Cv8.1CD`, а в `args_extra` подставляет путь вместо `{fakePlatform}`:
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "Тихий отказ в логе: платформа вернула 0, навык предупреждает",
|
||||
"fakePlatform": { "log": "Загрузка…\r\nНеверное свойство…\r\n", "exit": 0 },
|
||||
"args_extra": ["-V8Path", "{fakePlatform}", "-InfoBasePath", "{workDir}/ib"],
|
||||
"expect": { "stdoutContains": "[warning] platform reported success" }
|
||||
}
|
||||
```
|
||||
|
||||
| Поле | По умолчанию | Описание |
|
||||
|------|--------------|----------|
|
||||
| `log` | `""` | Содержимое `/Out`. Пишется как есть — с BOM и CRLF, если объявлены: настоящий `/Out` выглядит именно так |
|
||||
| `exit` | `0` | Код возврата фейка |
|
||||
| `baseStub` | `true` | `false` — не создавать `ib/1Cv8.1CD` (для кейсов, проверяющих отказ на отсутствующей базе) |
|
||||
|
||||
**Не ставьте таким кейсам `osOnly`.** Смысл поля в том, что один кейс проверяется на обеих ОС:
|
||||
раньше сценарий писался под `.cmd`, помечался `osOnly: win32` и требовал `-posix` двойника, а
|
||||
забытый двойник означал дыру — у `db-repo` на маке выполнялся один кейс из двенадцати.
|
||||
|
||||
Пути в `args_extra` пишите через `/`: он работает на обеих ОС.
|
||||
|
||||
### Шаги `preRun`
|
||||
|
||||
Массив шагов, выполняемых до запуска проверяемого навыка:
|
||||
|
||||
Reference in New Issue
Block a user