diff --git a/tests/skills/README.md b/tests/skills/README.md index cf5f7be4..16923a35 100644 --- a/tests/skills/README.md +++ b/tests/skills/README.md @@ -233,6 +233,8 @@ ibcmd-проход автоматически `○ skipped`, если рядом | `noSnapshot` | нет | Непустая строка с причиной — кейс объявляет, что эталон не нужен (см. «Эталоны») | | `idempotent` | нет | `true` — повторный прогон с теми же аргументами должен дать байт-в-байт тот же `workDir` | | `runtimeOnly` | нет | `"powershell"` / `"python"` — кейс имеет смысл только на одном порте, на другом `○ skipped` | +| `osOnly` | нет | `"win32"` / `"darwin"` / `"linux"` — кейс работает только на этой ОС (напр. фейк платформы написан как `.cmd`), на других `○ skipped` | +| `cwd` | нет | `"workDir"` — запустить навык из рабочего каталога (нужно, если кейс кладёт туда `.v8-project.json`) | | `skipValidation` | нет | `true` — не запускать `postValidate` из `_skill.json` (только при `--with-validation`) | ### Ключи `expect` diff --git a/tests/skills/cases/db-create/extra-args-from-project.json b/tests/skills/cases/db-create/extra-args-from-project.json index 81eed912..607c97cb 100644 --- a/tests/skills/cases/db-create/extra-args-from-project.json +++ b/tests/skills/cases/db-create/extra-args-from-project.json @@ -25,5 +25,6 @@ }, "expectError": true, "noSnapshot": "проверяется командная строка в stdout, файлов на выходе нет", - "cwd": "workDir" + "cwd": "workDir", + "osOnly": "win32" } diff --git a/tests/skills/cases/db-create/extra-args-ibcmd-passthrough.json b/tests/skills/cases/db-create/extra-args-ibcmd-passthrough.json index 5e7275ae..57c5243d 100644 --- a/tests/skills/cases/db-create/extra-args-ibcmd-passthrough.json +++ b/tests/skills/cases/db-create/extra-args-ibcmd-passthrough.json @@ -1,13 +1,29 @@ { "name": "Доп. аргументы ibcmd доходят до платформы, секрет замаскирован (fake platform)", "preRun": [ - { "writeFile": { "path": "ibcmd.cmd", "content": "@echo off\r\necho ARGS: %*\r\nexit /b 0\r\n" } } + { + "writeFile": { + "path": "ibcmd.cmd", + "content": "@echo off\r\necho ARGS: %*\r\nexit /b 0\r\n" + } + } + ], + "args_extra": [ + "-V8Path", + "{workDir}\\ibcmd.cmd", + "-InfoBasePath", + "{workDir}\\ib", + "-AdditionalIbcmdArguments", + "--verbose,--token=topsecret" ], - "args_extra": ["-V8Path", "{workDir}\\ibcmd.cmd", "-InfoBasePath", "{workDir}\\ib", - "-AdditionalIbcmdArguments", "--verbose,--token=topsecret"], "expect": { - "stdoutContains": ["ARGS: infobase create", "--verbose --token=topsecret", "--token=***"] + "stdoutContains": [ + "ARGS: infobase create", + "--verbose --token=topsecret", + "--token=***" + ] }, "expectError": true, - "noSnapshot": "проверяется командная строка в stdout, файлов на выходе нет" + "noSnapshot": "проверяется командная строка в stdout, файлов на выходе нет", + "osOnly": "win32" } diff --git a/tests/skills/cases/db-create/extra-args-passthrough-py.json b/tests/skills/cases/db-create/extra-args-passthrough-py.json index 3d5cbb9e..34a148bc 100644 --- a/tests/skills/cases/db-create/extra-args-passthrough-py.json +++ b/tests/skills/cases/db-create/extra-args-passthrough-py.json @@ -2,11 +2,25 @@ "name": "Доп. аргументы 1cv8 попадают в командную строку, py-порт (fake platform)", "runtimeOnly": "python", "preRun": [ - { "writeFile": { "path": "fake.cmd", "content": "@echo off\r\necho ARGS: %*\r\nexit /b 0\r\n" } } + { + "writeFile": { + "path": "fake.cmd", + "content": "@echo off\r\necho ARGS: %*\r\nexit /b 0\r\n" + } + } ], - "args_extra": ["-V8Path", "{workDir}\\fake.cmd", "-InfoBasePath", "{workDir}\\ib", - "-AdditionalV8Arguments", "/UseHwLicenses+"], - "expect": { "stdoutContains": "/DisableStartupDialogs /UseHwLicenses+" }, + "args_extra": [ + "-V8Path", + "{workDir}\\fake.cmd", + "-InfoBasePath", + "{workDir}\\ib", + "-AdditionalV8Arguments", + "/UseHwLicenses+" + ], + "expect": { + "stdoutContains": "/DisableStartupDialogs /UseHwLicenses+" + }, "expectError": true, - "noSnapshot": "py-порт печатает лог /Out, а не stdout платформы — проверяется строка запуска" + "noSnapshot": "py-порт печатает лог /Out, а не stdout платформы — проверяется строка запуска", + "osOnly": "win32" } diff --git a/tests/skills/cases/db-create/extra-args-passthrough.json b/tests/skills/cases/db-create/extra-args-passthrough.json index 48d9e3fc..9e223270 100644 --- a/tests/skills/cases/db-create/extra-args-passthrough.json +++ b/tests/skills/cases/db-create/extra-args-passthrough.json @@ -1,12 +1,29 @@ { "name": "Доп. аргументы 1cv8 доходят до платформы (fake platform)", "preRun": [ - { "writeFile": { "path": "fake.cmd", "content": "@echo off\r\necho ARGS: %*\r\nexit /b 0\r\n" } } + { + "writeFile": { + "path": "fake.cmd", + "content": "@echo off\r\necho ARGS: %*\r\nexit /b 0\r\n" + } + } + ], + "args_extra": [ + "-V8Path", + "{workDir}\\fake.cmd", + "-InfoBasePath", + "{workDir}\\ib", + "-AdditionalV8Arguments", + "/UseHwLicenses+" ], - "args_extra": ["-V8Path", "{workDir}\\fake.cmd", "-InfoBasePath", "{workDir}\\ib", - "-AdditionalV8Arguments", "/UseHwLicenses+"], "runtimeOnly": "powershell", - "expect": { "stdoutContains": ["ARGS: CREATEINFOBASE", "/DisableStartupDialogs /UseHwLicenses+"] }, + "expect": { + "stdoutContains": [ + "ARGS: CREATEINFOBASE", + "/DisableStartupDialogs /UseHwLicenses+" + ] + }, "expectError": true, - "noSnapshot": "проверяется командная строка в stdout, файлов на выходе нет" + "noSnapshot": "проверяется командная строка в stdout, файлов на выходе нет", + "osOnly": "win32" } diff --git a/tests/skills/cases/db-run/extra-args-passthrough.json b/tests/skills/cases/db-run/extra-args-passthrough.json index e9318709..3e2b896e 100644 --- a/tests/skills/cases/db-run/extra-args-passthrough.json +++ b/tests/skills/cases/db-run/extra-args-passthrough.json @@ -1,11 +1,25 @@ { "name": "Доп. аргументы доходят до 1cv8 при строковой склейке (fake platform)", "preRun": [ - { "writeFile": { "path": "fake.cmd", "content": "@echo off\r\necho ARGS: %*\r\nexit /b 1\r\n" } } + { + "writeFile": { + "path": "fake.cmd", + "content": "@echo off\r\necho ARGS: %*\r\nexit /b 1\r\n" + } + } ], - "args_extra": ["-V8Path", "{workDir}\\fake.cmd", "-InfoBasePath", "{workDir}\\ib", - "-AdditionalV8Arguments", "/ClearCache,/UseHwLicenses+"], - "expect": { "stdoutContains": "/DisableStartupDialogs /ClearCache /UseHwLicenses+" }, + "args_extra": [ + "-V8Path", + "{workDir}\\fake.cmd", + "-InfoBasePath", + "{workDir}\\ib", + "-AdditionalV8Arguments", + "/ClearCache,/UseHwLicenses+" + ], + "expect": { + "stdoutContains": "/DisableStartupDialogs /ClearCache /UseHwLicenses+" + }, "expectError": true, - "noSnapshot": "проверяется командная строка в stdout, файлов на выходе нет" + "noSnapshot": "проверяется командная строка в stdout, файлов на выходе нет", + "osOnly": "win32" } diff --git a/tests/skills/cases/epf-build/extra-args-stub-chain.json b/tests/skills/cases/epf-build/extra-args-stub-chain.json index 842785bb..ea24c621 100644 --- a/tests/skills/cases/epf-build/extra-args-stub-chain.json +++ b/tests/skills/cases/epf-build/extra-args-stub-chain.json @@ -1,13 +1,29 @@ { "name": "Доп. аргументы уходят и во временную базу, и в сборку (fake platform)", "preRun": [ - { "writeFile": { "path": "fake.cmd", "content": "@echo off\r\necho ARGS: %*\r\nexit /b 0\r\n" } }, - { "writeFile": { "path": "src/Обработка.xml", "content": "\n\n" } } + { + "writeFile": { + "path": "fake.cmd", + "content": "@echo off\r\necho ARGS: %*\r\nexit /b 0\r\n" + } + }, + { + "writeFile": { + "path": "src/Обработка.xml", + "content": "\n\n" + } + } + ], + "args_extra": [ + "-V8Path", + "{workDir}\\fake.cmd", + "-SourceFile", + "{workDir}\\src\\Обработка.xml", + "-OutputFile", + "{workDir}\\build\\Обработка.epf", + "-AdditionalV8Arguments", + "/UseHwLicenses+" ], - "args_extra": ["-V8Path", "{workDir}\\fake.cmd", - "-SourceFile", "{workDir}\\src\\Обработка.xml", - "-OutputFile", "{workDir}\\build\\Обработка.epf", - "-AdditionalV8Arguments", "/UseHwLicenses+"], "runtimeOnly": "powershell", "expect": { "stdoutContains": [ @@ -18,5 +34,6 @@ ] }, "expectError": true, - "noSnapshot": "проверяются командные строки в stdout, платформа фейковая — EPF не создаётся" + "noSnapshot": "проверяются командные строки в stdout, платформа фейковая — EPF не создаётся", + "osOnly": "win32" } diff --git a/tests/skills/runner.mjs b/tests/skills/runner.mjs index 5666a92e..b1994f47 100644 --- a/tests/skills/runner.mjs +++ b/tests/skills/runner.mjs @@ -588,6 +588,12 @@ async function runCaseAsync(testCase, opts) { let workDir = null; let inputFile = null; + // osOnly: gate a case to one OS (e.g. a fake platform written as a .cmd cannot run on + // macOS/Linux at all, whatever the port). Values are process.platform strings. + if (caseData.osOnly && caseData.osOnly !== process.platform) { + return { id: testCase.id, skill: testCase.skillDir, name: testCase.name, passed: true, skipped: true, errors: [], elapsed: '0.0s' }; + } + // runtimeOnly: gate a case to a single port (e.g. a .cmd fake platform only runs via // PowerShell's Start-Process; python's list-exec can't launch it). Skipped elsewhere. if (caseData.runtimeOnly && caseData.runtimeOnly !== opts.runtime) {