mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-21 02:29:42 +03:00
fix(tests): пропуск платформенной верификации, привязанный к сборке платформы
Кейсы form-main-attr-dynamic-list и form-main-attr-list-query падали на маке. Диагностика:
дело не в порте (Windows+python проходит) и не в ОС (мак на 8.3.24.1691 проходит) — отвергает
конкретная сборка 8.3.27.1688. Решающий опыт: расширение, загруженное на 8.3.24 и выгруженное
самой платформой, сборка 1688 тоже отвергает с теми же «Неверный путь к данным» — то есть она
не принимает собственный артефакт Конфигуратора, а не наш эмит.
Глухой skipPlatformVerify снял бы проверку и на стендах, где она работает, поэтому он теперь
принимает объект {reason, platforms:[…]} — пропуск только на перечисленных сборках.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
e9a40a1499
commit
9dcaa9b6b1
@@ -300,7 +300,7 @@ ibcmd-проход автоматически `○ skipped`, если рядом
|
||||
| `osOnly` | нет | `"win32"` / `"darwin"` / `"linux"` — кейс работает только на этой ОС (напр. фейк платформы написан как `.cmd`), на других `○ skipped`. Принимает и массив: `["darwin","linux"]` |
|
||||
| `cwd` | нет | `"workDir"` — запустить навык из рабочего каталога (нужно, если кейс кладёт туда `.v8-project.json`) |
|
||||
| `skipValidation` | нет | `true` — не запускать `postValidate` из `_skill.json` (только при `--with-validation`) |
|
||||
| `skipPlatformVerify` | нет | Непустая строка с причиной — `verify-snapshots.mjs` пропускает кейс. Нужен, когда фикстура не является конфигурацией, которую можно загрузить (напр. фрагмент расширения) |
|
||||
| `skipPlatformVerify` | нет | Непустая строка с причиной — `verify-snapshots.mjs` пропускает кейс. Нужен, когда фикстура не является конфигурацией, которую можно загрузить (напр. фрагмент расширения). Объект `{"reason": "…", "platforms": ["8.3.27.1688"]}` — пропуск только на перечисленных сборках платформы: кейс валиден, но конкретная сборка его не принимает, а на остальных стендах проверка должна остаться |
|
||||
|
||||
### Ключи `expect`
|
||||
|
||||
|
||||
@@ -25,5 +25,9 @@
|
||||
"file": "cfe/Documents/Расход/Forms/ФормаСписка/Ext/Form.xml",
|
||||
"text": ["name=\"Объект\"", "<SavedData>"]
|
||||
}
|
||||
},
|
||||
"skipPlatformVerify": {
|
||||
"reason": "сборка 8.3.27.1688 (macOS) отвергает заимствованную форму с основным реквизитом-динамическим списком: те же «Неверный путь к данным» дала и выгрузка, сделанная самой платформой 8.3.24 из успешно загруженного расширения, — то есть отвергается её собственный артефакт, а не наш эмит. На 8.3.24.1691 и 8.3.27.1859 кейс проходит",
|
||||
"platforms": ["8.3.27.1688"]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,5 +18,9 @@
|
||||
"file": "cfe/Documents/Расход.xml",
|
||||
"text": "<Name>Товары</Name>"
|
||||
}
|
||||
},
|
||||
"skipPlatformVerify": {
|
||||
"reason": "сборка 8.3.27.1688 (macOS) отвергает заимствованную форму с основным реквизитом-динамическим списком: те же «Неверный путь к данным» дала и выгрузка, сделанная самой платформой 8.3.24 из успешно загруженного расширения, — то есть отвергается её собственный артефакт, а не наш эмит. На 8.3.24.1691 и 8.3.27.1859 кейс проходит",
|
||||
"platforms": ["8.3.27.1688"]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -753,10 +753,25 @@ async function verifyCase(skillName, caseName, skillConfig, caseData, opts) {
|
||||
// Кейс может осознанно исключаться из платформенной проверки — когда его
|
||||
// результат невалиден by design (например, операция намеренно оставляет
|
||||
// висящий импорт). Причина обязательна, молча пропускать нельзя.
|
||||
// Строка — пропуск всегда. Объект `{reason, platforms:[…]}` — пропуск ТОЛЬКО на перечисленных
|
||||
// сборках платформы: бывает, что кейс валиден и проверяется на всех стендах, кроме одного,
|
||||
// где сама платформа отвергает даже собственный артефакт. Глухой пропуск в таком случае снял
|
||||
// бы проверку и там, где она работает.
|
||||
if (caseData.skipPlatformVerify) {
|
||||
result.skipped = true;
|
||||
result.skipReason = String(caseData.skipPlatformVerify);
|
||||
return result;
|
||||
const spec = caseData.skipPlatformVerify;
|
||||
const isObj = typeof spec === 'object' && spec !== null;
|
||||
const reason = isObj ? spec.reason : String(spec);
|
||||
if (!reason) {
|
||||
result.errors.push('skipPlatformVerify: причина обязательна');
|
||||
return result;
|
||||
}
|
||||
const builds = isObj && Array.isArray(spec.platforms) ? spec.platforms : null;
|
||||
const v8exe = (opts.v8ctx && opts.v8ctx.v8exe) || '';
|
||||
if (!builds || builds.some(b => v8exe.includes(b))) {
|
||||
result.skipped = true;
|
||||
result.skipReason = reason;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
// caseFiles — файловый вход кейса (напр. XSD для xdto-compile), как в runner.mjs
|
||||
|
||||
Reference in New Issue
Block a user