mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-06 19:50:20 +03:00
fix(xdto): три дефекта, найденных платформенной верификацией снэпшотов
verify-snapshots загружает результат каждого кейса в 1С. Раньше навыки xdto через него не проходили вовсе; первый прогон дал 5 из 9. Ни корпусная сверка, ни валидатор такого не ловили: корпус состоит из заведомо валидных пакетов, а синтетические кейсы до сих пор в базу не грузились. 1. fixed. В модели XDTO это булев флаг, значение лежит в default; в XSD наоборот — fixed="V" несёт значение. Компилятор писал значение прямо в fixed, и платформа отвергала пакет («Отсутствует фиксированное значение свойства»). Перевод сделан в обе стороны; по принципу прощающего ввода принимается и модельная форма через зеркало xdto:fixed. Отображение выведено по корпусу: fixed встречается только вместе с default, значений всего два. 2. Импорт на несуществующий пакет платформа отвергает («xdto-package-3.3 … не определен»), а у нас проверки не было. Добавлена ошибка валидатора и, что важнее, предупреждение прямо на сборке — отказ при db-update дешевле поймать на шаг раньше. Правило пришлось калибровать корпусом: сначала оно дало 67 ложных срабатываний на платформенных пространствах имён, их список выведен и исключён. 3. localName проверяется как NCName — фикстура с пробелом в имени была негодной, заменена на реалистичный дефис (name="alpha_3" localName="alpha-3"). Харнесс получил skipPlatformVerify с обязательной причиной: результат set-namespace невалиден by design, операция намеренно оставляет висящий импорт у зависящего пакета. Итог: 9/9 компилятора, 9/10 + 1 осознанный пропуск у edit, round-trip 760/760, валидатор 0 ложных, 40 тестов на обоих рантаймах. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
3eb805f7b0
commit
5d5a1bc36a
@@ -686,6 +686,15 @@ async function verifyCase(skillName, caseName, skillConfig, caseData, opts) {
|
||||
const workDir = mkdtempSync(join(tmpdir(), `verify-${skillName}-${caseName}-`));
|
||||
result.workDir = workDir;
|
||||
|
||||
// Кейс может осознанно исключаться из платформенной проверки — когда его
|
||||
// результат невалиден by design (например, операция намеренно оставляет
|
||||
// висящий импорт). Причина обязательна, молча пропускать нельзя.
|
||||
if (caseData.skipPlatformVerify) {
|
||||
result.skipped = true;
|
||||
result.skipReason = String(caseData.skipPlatformVerify);
|
||||
return result;
|
||||
}
|
||||
|
||||
// caseFiles — файловый вход кейса (напр. XSD для xdto-compile), как в runner.mjs
|
||||
for (const rel of caseData.caseFiles || []) {
|
||||
const src = join(CASES, skillName, rel);
|
||||
@@ -1434,9 +1443,14 @@ async function main() {
|
||||
}
|
||||
|
||||
const passed = results.filter(r => r.passed).length;
|
||||
const failed = results.filter(r => !r.passed).length;
|
||||
const skipped = results.filter(r => r.skipped).length;
|
||||
const failed = results.filter(r => !r.passed && !r.skipped).length;
|
||||
console.log(`\n${'='.repeat(60)}`);
|
||||
console.log(`Results: ${passed} passed, ${failed} failed out of ${results.length}`);
|
||||
console.log(`Results: ${passed} passed, ${failed} failed`
|
||||
+ (skipped ? `, ${skipped} skipped` : '') + ` out of ${results.length}`);
|
||||
for (const r of results.filter(x => x.skipped)) {
|
||||
console.log(` \u25cb ${r.skill}/${r.case} \u2014 ${r.skipReason}`);
|
||||
}
|
||||
|
||||
writeReport(results);
|
||||
process.exit(failed > 0 ? 1 : 0);
|
||||
|
||||
Reference in New Issue
Block a user