From b8e141e7ce8430833ef2adfd71541c455a87041a Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Sun, 19 Jul 2026 18:52:25 +0300 Subject: [PATCH] =?UTF-8?q?test(skills):=20=D1=80=D0=B5=D0=B3=D1=80=D0=B5?= =?UTF-8?q?=D1=81=D1=81=20=D0=BB=D0=BE=D0=B6=D0=BD=D0=BE=D0=B3=D0=BE=20?= =?UTF-8?q?=D1=83=D1=81=D0=BF=D0=B5=D1=85=D0=B0=20=D1=87=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=B7=20fake-=D0=BF=D0=BB=D0=B0=D1=82=D1=84=D0=BE=D1=80=D0=BC?= =?UTF-8?q?=D1=83=20+=20=D0=B3=D0=B5=D0=B9=D1=82=20runtimeOnly?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Кейсы с .cmd-заглушкой платформы (Start-Process исполняет .cmd) проверяют, что db-create/db-run/db-dump-cf не рапортуют успех, когда платформа вышла с 0/умерла без артефакта. Гейт runtimeOnly пропускает кейс на несовместимом порту (py list-exec не запускает .cmd) — гоняются под powershell на Windows. Co-Authored-By: Claude Opus 4.8 --- tests/skills/cases/db-create/false-success-no-ib.json | 9 +++++++++ .../skills/cases/db-dump-cf/false-success-no-output.json | 9 +++++++++ tests/skills/cases/db-run/early-exit.json | 9 +++++++++ tests/skills/runner.mjs | 6 ++++++ 4 files changed, 33 insertions(+) create mode 100644 tests/skills/cases/db-create/false-success-no-ib.json create mode 100644 tests/skills/cases/db-dump-cf/false-success-no-output.json create mode 100644 tests/skills/cases/db-run/early-exit.json diff --git a/tests/skills/cases/db-create/false-success-no-ib.json b/tests/skills/cases/db-create/false-success-no-ib.json new file mode 100644 index 00000000..63b3f3d0 --- /dev/null +++ b/tests/skills/cases/db-create/false-success-no-ib.json @@ -0,0 +1,9 @@ +{ + "name": "Ложный успех: платформа вернула 0 без 1Cv8.1CD (fake platform)", + "runtimeOnly": "powershell", + "preRun": [ + { "writeFile": { "path": "fake.cmd", "content": "@echo off\r\nexit /b 0\r\n" } } + ], + "args_extra": ["-V8Path", "{workDir}\\fake.cmd", "-InfoBasePath", "{workDir}\\ib"], + "expectError": true +} diff --git a/tests/skills/cases/db-dump-cf/false-success-no-output.json b/tests/skills/cases/db-dump-cf/false-success-no-output.json new file mode 100644 index 00000000..59b7c173 --- /dev/null +++ b/tests/skills/cases/db-dump-cf/false-success-no-output.json @@ -0,0 +1,9 @@ +{ + "name": "Ложный успех: платформа вернула 0 без выходного файла (fake platform)", + "runtimeOnly": "powershell", + "preRun": [ + { "writeFile": { "path": "fake.cmd", "content": "@echo off\r\nexit /b 0\r\n" } } + ], + "args_extra": ["-V8Path", "{workDir}\\fake.cmd", "-InfoBasePath", "{workDir}\\ib", "-OutputFile", "{workDir}\\out.cf"], + "expectError": true +} diff --git a/tests/skills/cases/db-run/early-exit.json b/tests/skills/cases/db-run/early-exit.json new file mode 100644 index 00000000..31ae8ccc --- /dev/null +++ b/tests/skills/cases/db-run/early-exit.json @@ -0,0 +1,9 @@ +{ + "name": "Ранний выход: процесс умер в контрольном окне, не должно быть launched (fake platform)", + "runtimeOnly": "powershell", + "preRun": [ + { "writeFile": { "path": "fake.cmd", "content": "@echo off\r\nexit /b 1\r\n" } } + ], + "args_extra": ["-V8Path", "{workDir}\\fake.cmd", "-InfoBasePath", "{workDir}\\ib"], + "expectError": true +} diff --git a/tests/skills/runner.mjs b/tests/skills/runner.mjs index 28d95a23..4454928b 100644 --- a/tests/skills/runner.mjs +++ b/tests/skills/runner.mjs @@ -539,6 +539,12 @@ async function runCaseAsync(testCase, opts) { let workDir = null; let inputFile = null; + // 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) { + return { id: testCase.id, skill: testCase.skillDir, name: testCase.name, passed: true, skipped: true, errors: [], elapsed: '0.0s' }; + } + try { const skillCasesDir = join(CASES, testCase.skillDir); const fixturePath = ensureSetup(setupName, opts.runtime, skillCasesDir);