fix(skd-validate): видимый пропуск XSD, булево без схем, корень со строчной

По итогам прогона задачи «платформа пишет: нарушен порядок» субагентом
в проекте без схем: навык отвечал «Validation OK», и модель докладывала
бы, что схема в порядке.

- Итоговая строка говорит, что XSD-проверка не выполнялась и почему:
  «XSD not checked: no schemas (/v8-xsd-fetch)» / «template outside a dump».
- xs:boolean только true/false/1/0 — собственная проверка значений, без
  схем; в XSD-проходе та же ошибка второй раз не выводится.
- Корень dataCompositionSchema (строчная): PS молча пропускал (-ne без
  регистра), py считал ошибкой. Платформа такой файл загружает, а
  конфигуратор пишет DataCompositionSchema — теперь предупреждение в
  обоих портах. Фикстура drilldown-base приведена к виду конфигуратора.
- SKILL.md: когда скачивать схемы, как читать подсказки, когда
  нарушение — дефект навыка.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018dc2yLQfw6wppbopM1Y4Ps
This commit is contained in:
Nick Shirokov
2026-09-29 19:16:11 +03:00
co-authored by Claude Opus 5.5
parent 21ebd814de
commit 292b6c97de
15 changed files with 225 additions and 52 deletions
+6 -5
View File
@@ -31,9 +31,10 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/skd-validate.ps1" -
## Проверка по XSD
Если в проекте есть XSD-схемы платформы (`/v8-xsd-fetch`), дополнительно проверяет порядок элементов, типы и значения по схеме версии формата выгрузки. Строки вида `XSD 2.20, line N: <родитель>/<элемент>: …`:
Порядок элементов, типы и значения дополнительно сверяются с XSD-схемами платформы, если они скачаны в проект. Иначе итоговая строка заканчивается на `XSD not checked: <причина>` — это не «проверено всё». Когда проверка нужна (например, платформа пишет «нарушен порядок следования»), скачай схемы версии формата выгрузки — атрибут `version` в `Configuration.xml` — через `/v8-xsd-fetch -Versions <версия>` и запусти снова. То же при `[WARN] XSD: no schemas for format <версия>`.
- `must come before <X>` — элемент не на своём месте: перенести его перед `<X>`, содержимое не менять. `duplicate` — лишний повтор. `not allowed in <P>` — в этом месте такого элемента быть не должно. Остальное — недопустимое значение, текст говорит какое.
- `[ERROR]` — по схемам своей версии формата. `[WARN]` с `(no schemas for X)` — по более новой версии, ориентир, а не окончательный вердикт.
- Шаблон собран `/skd-compile` или изменён `/skd-edit` — нарушение означает дефект навыка: сообщи пользователю, а не правь XML вручную молча.
- `no schemas for format X — not checked` — предложи `/v8-xsd-fetch -Versions X`.
Нарушение: `XSD <версия>, line N: <родитель>/<элемент>: <что не так>`.
- `must come before <X>` — перенеси элемент непосредственно перед `<X>`, содержимое не меняй. `duplicate` — удали повтор. `not allowed in <P>` — элементу здесь не место. Иначе — текст о недопустимом значении.
- `[WARN]` с `(no schemas for <версия>)` — сверено по схемам более новой версии: ориентир, не вердикт.
- Если шаблон ты только что собрал или изменил `/skd-compile` или `/skd-edit`, нарушение — дефект навыка: сообщи о нём пользователю.
@@ -1,4 +1,4 @@
# skd-validate v1.6 — Validate 1C DCS structure
# skd-validate v1.7 — Validate 1C DCS structure
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
[CmdletBinding(PositionalBinding=$false)]
param(
@@ -55,6 +55,9 @@ $script:errors = 0
$script:warnings = 0
$script:okCount = 0
$script:stopped = $false
# Проверка, которая не выполнялась, — в итоговую строку: без этого «Validation OK» читается как
# «проверено всё» (модель так и докладывала пользователю при нарушенном порядке)
$script:xsdNote = $null
$script:output = New-Object System.Text.StringBuilder 4096
function Out-Line {
@@ -86,10 +89,12 @@ function Report-Warn {
$finalize = {
$checks = $script:okCount + $script:errors + $script:warnings
if ($script:errors -eq 0 -and $script:warnings -eq 0 -and -not $Detailed) {
$result = "=== Validation OK: $fileName ($checks checks) ==="
$note = if ($script:xsdNote) { "; $($script:xsdNote)" } else { "" }
$result = "=== Validation OK: $fileName ($checks checks$note) ==="
} else {
Out-Line ""
Out-Line "=== Result: $($script:errors) errors, $($script:warnings) warnings ($checks checks) ==="
$note = if ($script:xsdNote) { "; $($script:xsdNote)" } else { "" }
Out-Line "=== Result: $($script:errors) errors, $($script:warnings) warnings ($checks checks$note) ==="
$result = $script:output.ToString()
}
Write-Host $result
@@ -141,10 +146,15 @@ $root = $xmlDoc.DocumentElement
# --- 3. Root element checks ---
if ($root.LocalName -ne "DataCompositionSchema") {
Report-Error "Root element is '$($root.LocalName)', expected 'DataCompositionSchema'"
} else {
# Регистр значим: -ne его не различает, и корень со строчной пропускался молча. Строчную
# (dataCompositionSchema — имя из XSD, так пишет сериализатор XDTO) платформа загружает, но
# конфигуратор всегда пишет DataCompositionSchema — это предупреждение, не ошибка.
if ($root.LocalName -ceq "DataCompositionSchema") {
Report-OK "Root element: DataCompositionSchema"
} elseif ($root.LocalName -eq "DataCompositionSchema") {
Report-Warn "Root element is '$($root.LocalName)' — the platform loads it, but the Designer writes 'DataCompositionSchema'"
} else {
Report-Error "Root element is '$($root.LocalName)', expected 'DataCompositionSchema'"
}
$expectedNs = "http://v8.1c.ru/8.1/data-composition-system/schema"
@@ -918,6 +928,10 @@ foreach ($vn in $valueNodes) {
} elseif (-not ($text -match '^[A-Za-zА-Яа-яЁё]+\.[A-Za-zА-Яа-яЁё0-9_]+')) {
Report-Warn "<value xsi:type=`"dcscor:DesignTimeValue`">$text</value> — doesn't look like a typical ref path"
}
} elseif ($xsiType -ceq 'xs:boolean' -and @('true', 'false', '1', '0') -cnotcontains $text.Trim()) {
# Платформа прощает True/False, чтение по схеме (XDTO) — нет
Report-Error "<value xsi:type=`"xs:boolean`">$text</value> — boolean must be true or false (lowercase)"
$vOk = $false
}
}
if ($vChecked -gt 0 -and $vOk) {
@@ -1191,10 +1205,10 @@ function Compress-XsdMessage([string]$m) {
function Invoke-XsdCheck {
$xsdRoot = Resolve-XsdRoot ([System.IO.Path]::GetDirectoryName($resolvedPath))
if (-not $xsdRoot) { Report-OK "XSD: no schemas in project — not checked"; return }
if (-not $xsdRoot) { $script:xsdNote = "XSD not checked: no schemas (/v8-xsd-fetch)"; return }
$anchor = Find-DumpAnchor ([System.IO.Path]::GetDirectoryName($resolvedPath))
$ver = if ($anchor) { Get-RootVersion $anchor } else { $null }
if (-not $ver -or (Get-FormatRank $ver) -eq 0) { Report-OK "XSD: format version unknown (template outside a dump) — not checked"; return }
if (-not $ver -or (Get-FormatRank $ver) -eq 0) { $script:xsdNote = "XSD not checked: template outside a dump"; return }
# Точная версия — ошибки; ближайшая более новая — предупреждения; только старше — пропуск
$cands = @(Get-ChildItem -LiteralPath $xsdRoot -Directory |
@@ -1264,6 +1278,8 @@ function Invoke-XsdCheck {
$info = @{ elem = $top.name; parent = $(if ($st.Count -gt 1) { $st[$st.Count - 2].name } else { '' }); xsiNs = $top.xsiNs; xsiLocal = $top.xsiLocal }
}
if (Test-XsdPlatformNoise $info) { return }
# Недопустимое булево значение уже сообщила собственная проверка значений (раздел 17)
if ($info.elem -ceq 'value' -and $info.xsiNs -ceq 'http://www.w3.org/2001/XMLSchema' -and $info.xsiLocal -ceq 'boolean') { return }
$script:xsdFound++
$hint = $null
if ($sender.NodeType -eq 'Element') {
@@ -1,4 +1,4 @@
# skd-validate v1.6 — Validate 1C DCS structure (Python port)
# skd-validate v1.7 — Validate 1C DCS structure (Python port)
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
import os
@@ -78,6 +78,9 @@ errors = 0
warnings = 0
ok_count = 0
stopped = False
# Проверка, которая не выполнялась, — в итоговую строку: без этого «Validation OK» читается как
# «проверено всё» (модель так и докладывала пользователю при нарушенном порядке)
xsd_note = None
output_lines = []
@@ -109,10 +112,12 @@ def report_warn(msg):
def finalize():
checks = ok_count + errors + warnings
if errors == 0 and warnings == 0 and not detailed:
result = f"=== Validation OK: {file_name} ({checks} checks) ==="
note = f"; {xsd_note}" if xsd_note else ""
result = f"=== Validation OK: {file_name} ({checks} checks{note}) ==="
else:
out_line("")
out_line(f"=== Result: {errors} errors, {warnings} warnings ({checks} checks) ===")
note = f"; {xsd_note}" if xsd_note else ""
out_line(f"=== Result: {errors} errors, {warnings} warnings ({checks} checks{note}) ===")
result = "\n".join(output_lines)
print(result)
if out_file:
@@ -187,10 +192,14 @@ def inner_text(node):
# ── 3. Root element checks ───────────────────────────────────
if local_name(root) != "DataCompositionSchema":
report_error(f"Root element is '{local_name(root)}', expected 'DataCompositionSchema'")
else:
# Строчную (dataCompositionSchema — имя из XSD, так пишет сериализатор XDTO) платформа загружает,
# но конфигуратор всегда пишет DataCompositionSchema — это предупреждение, не ошибка.
if local_name(root) == "DataCompositionSchema":
report_ok("Root element: DataCompositionSchema")
elif local_name(root).lower() == "datacompositionschema":
report_warn(f"Root element is '{local_name(root)}' — the platform loads it, but the Designer writes 'DataCompositionSchema'")
else:
report_error(f"Root element is '{local_name(root)}', expected 'DataCompositionSchema'")
expected_ns = "http://v8.1c.ru/8.1/data-composition-system/schema"
root_ns = etree.QName(root.tag).namespace or ""
@@ -877,6 +886,10 @@ for vn in value_nodes:
v_ok = False
elif not _re_vt.match(r'^[A-Za-zА-Яа-яЁё]+\.[A-Za-zА-Яа-яЁё0-9_]+', stripped):
report_warn(f"<value xsi:type=\"dcscor:DesignTimeValue\">{text}</value> — doesn't look like a typical ref path")
elif xsi_type == 'xs:boolean' and text.strip() not in ('true', 'false', '1', '0'):
# Платформа прощает True/False, чтение по схеме (XDTO) — нет
report_error(f"<value xsi:type=\"xs:boolean\">{text}</value> — boolean must be true or false (lowercase)")
v_ok = False
if v_checked > 0 and v_ok:
report_ok(f"{v_checked} <value> element(s) with xsi:type: content OK")
@@ -1289,13 +1302,14 @@ def compress_xsd_message(m):
def xsd_check():
xsd_root = resolve_xsd_root(os.path.dirname(resolved_path))
global xsd_note
if not xsd_root:
report_ok("XSD: no schemas in project — not checked")
xsd_note = "XSD not checked: no schemas (/v8-xsd-fetch)"
return
anchor = find_dump_anchor(os.path.dirname(resolved_path))
ver = root_version(anchor) if anchor else None
if not ver or format_rank(ver) == 0:
report_ok("XSD: format version unknown (template outside a dump) — not checked")
xsd_note = "XSD not checked: template outside a dump"
return
# Точная версия — ошибки; ближайшая более новая — предупреждения; только старше — пропуск
@@ -1331,6 +1345,9 @@ def xsd_check():
info = _xsd_elem_info(el)
if xsd_platform_noise(info):
continue
# Недопустимое булево значение уже сообщила собственная проверка значений (раздел 17)
if info["elem"] == "value" and info["xsiNs"] == XS_NS and info["xsiLocal"] == "boolean":
continue
found += 1
hint = None
# «Лишний/не на месте» у libxml2 — «This element is not expected» (текст не локализуется)
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<dataCompositionSchema xmlns="http://v8.1c.ru/8.1/data-composition-system/schema" xmlns:dcsset="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<DataCompositionSchema xmlns="http://v8.1c.ru/8.1/data-composition-system/schema" xmlns:dcsset="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<dataSource>
<name>Источник</name>
<dataSourceType>Local</dataSourceType>
@@ -94,4 +94,4 @@
<dcsset:name>Основной</dcsset:name>
<dcsset:settings />
</settingsVariant>
</dataCompositionSchema>
</DataCompositionSchema>
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<dataCompositionSchema xmlns="http://v8.1c.ru/8.1/data-composition-system/schema" xmlns:dcsset="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<DataCompositionSchema xmlns="http://v8.1c.ru/8.1/data-composition-system/schema" xmlns:dcsset="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<dataSource>
<name>Источник</name>
<dataSourceType>Local</dataSourceType>
@@ -118,4 +118,4 @@
<dcsset:name>Основной</dcsset:name>
<dcsset:settings />
</settingsVariant>
</dataCompositionSchema>
</DataCompositionSchema>
@@ -0,0 +1,22 @@
{
"name": "Булево True/False без схем — ловит собственная проверка значений",
"setup": "fixture:xsd-bad-220",
"preRun": [
{
"writeFile": {
"path": ".v8-project.json",
"content": {
"xsdPath": "нет-такого-каталога"
}
}
}
],
"params": {
"templatePath": "Reports/Отчет/Templates/Схема/Ext/Template.xml"
},
"expect": {
"stdoutContains": "<value xsi:type=\"xs:boolean\">False</value> — boolean must be true or false (lowercase)"
},
"noSnapshot": "результат — только вывод",
"expectError": true
}
@@ -0,0 +1,97 @@
<?xml version="1.0" encoding="utf-8"?>
<dataCompositionSchema xmlns="http://v8.1c.ru/8.1/data-composition-system/schema" xmlns:dcsset="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<dataSource>
<name>Источник</name>
<dataSourceType>Local</dataSourceType>
</dataSource>
<dataSet xsi:type="DataSetQuery">
<name>Основной</name>
<field xsi:type="DataSetFieldField">
<dataPath>Ресурс1</dataPath>
<field>Ресурс1</field>
</field>
<field xsi:type="DataSetFieldField">
<dataPath>Ресурс2</dataPath>
<field>Ресурс2</field>
</field>
<field xsi:type="DataSetFieldField">
<dataPath>Счет</dataPath>
<field>Счет</field>
</field>
<dataSource>Источник</dataSource>
<query>ВЫБРАТЬ 1</query>
</dataSet>
<template>
<name>Макет1</name>
<template xmlns:dcsat="http://v8.1c.ru/8.1/data-composition-system/area-template" xsi:type="dcsat:AreaTemplate">
<dcsat:item xsi:type="dcsat:TableRow">
<dcsat:tableCell>
<dcsat:item xsi:type="dcsat:Field">
<dcsat:value xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Заголовок</v8:content>
</v8:item>
</dcsat:value>
</dcsat:item>
</dcsat:tableCell>
</dcsat:item>
</template>
</template>
<template>
<name>Макет3</name>
<template xmlns:dcsat="http://v8.1c.ru/8.1/data-composition-system/area-template" xsi:type="dcsat:AreaTemplate">
<dcsat:item xsi:type="dcsat:TableRow">
<dcsat:tableCell>
<dcsat:item xsi:type="dcsat:Field">
<dcsat:value xsi:type="dcscor:Parameter">Счет</dcsat:value>
</dcsat:item>
<dcsat:appearance>
<dcscor:item>
<dcscor:parameter>Шрифт</dcscor:parameter>
<dcscor:value xsi:type="v8ui:Font" faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100" />
</dcscor:item>
</dcsat:appearance>
</dcsat:tableCell>
<dcsat:tableCell>
<dcsat:item xsi:type="dcsat:Field">
<dcsat:value xsi:type="dcscor:Parameter">Рес1</dcsat:value>
</dcsat:item>
<dcsat:appearance>
<dcscor:item>
<dcscor:parameter>Шрифт</dcscor:parameter>
<dcscor:value xsi:type="v8ui:Font" faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100" />
</dcscor:item>
</dcsat:appearance>
</dcsat:tableCell>
<dcsat:tableCell>
<dcsat:item xsi:type="dcsat:Field">
<dcsat:value xsi:type="dcscor:Parameter">Рес2</dcsat:value>
</dcsat:item>
<dcsat:appearance>
<dcscor:item>
<dcscor:parameter>Шрифт</dcscor:parameter>
<dcscor:value xsi:type="v8ui:Font" faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100" />
</dcscor:item>
</dcsat:appearance>
</dcsat:tableCell>
</dcsat:item>
</template>
<parameter xmlns:dcsat="http://v8.1c.ru/8.1/data-composition-system/area-template" xsi:type="dcsat:ExpressionAreaTemplateParameter">
<dcsat:name>Счет</dcsat:name>
<dcsat:expression>Представление(Счет)</dcsat:expression>
</parameter>
<parameter xmlns:dcsat="http://v8.1c.ru/8.1/data-composition-system/area-template" xsi:type="dcsat:ExpressionAreaTemplateParameter">
<dcsat:name>Рес1</dcsat:name>
<dcsat:expression>Ресурс1</dcsat:expression>
</parameter>
<parameter xmlns:dcsat="http://v8.1c.ru/8.1/data-composition-system/area-template" xsi:type="dcsat:ExpressionAreaTemplateParameter">
<dcsat:name>Рес2</dcsat:name>
<dcsat:expression>Ресурс2</dcsat:expression>
</parameter>
</template>
<settingsVariant>
<dcsset:name>Основной</dcsset:name>
<dcsset:settings />
</settingsVariant>
</dataCompositionSchema>
@@ -49,7 +49,7 @@
<valueType>
<v8:Type>xs:boolean</v8:Type>
</valueType>
<value xsi:type="xs:boolean">False</value>
<value xsi:type="xs:boolean">false</value>
<useRestriction>false</useRestriction>
</parameter>
<settingsVariant>
@@ -9,6 +9,7 @@
<field xsi:type="DataSetFieldField">
<dataPath>Число</dataPath>
<field>Число</field>
<presentationExpression>Формат(Число, "ЧГ=")</presentationExpression>
<valueType>
<v8:Type>xs:decimal</v8:Type>
<v8:NumberQualifiers>
@@ -17,7 +18,6 @@
<v8:AllowedSign>Any</v8:AllowedSign>
</v8:NumberQualifiers>
</valueType>
<presentationExpression>Формат(Число, "ЧГ=")</presentationExpression>
</field>
<field xsi:type="DataSetFieldField">
<dataPath>Флаг</dataPath>
@@ -32,6 +32,9 @@
<calculatedField>
<dataPath>Удвоенное</dataPath>
<expression>Число * 2</expression>
<useRestriction>
<group>true</group>
</useRestriction>
<valueType>
<v8:Type>xs:decimal</v8:Type>
<v8:NumberQualifiers>
@@ -40,16 +43,13 @@
<v8:AllowedSign>Any</v8:AllowedSign>
</v8:NumberQualifiers>
</valueType>
<useRestriction>
<group>true</group>
</useRestriction>
</calculatedField>
<parameter>
<name>П</name>
<valueType>
<v8:Type>xs:boolean</v8:Type>
</valueType>
<value xsi:type="xs:boolean">False</value>
<value xsi:type="xs:boolean">false</value>
<useRestriction>false</useRestriction>
</parameter>
<settingsVariant>
@@ -73,6 +73,13 @@
<dcsset:right xsi:type="xs:boolean">true</dcsset:right>
</dcsset:item>
</dcsset:filter>
<dcsset:dataParameters>
<dcscor:item xsi:type="dcsset:SettingsParameterValue">
<dcscor:parameter>П</dcscor:parameter>
<dcscor:value xsi:type="xs:boolean">false</dcscor:value>
<dcsset:userSettingID>0eb70b37-3a01-40a0-81c1-98028ef06a05</dcsset:userSettingID>
</dcscor:item>
</dcsset:dataParameters>
<dcsset:outputParameters>
<dcscor:item xsi:type="dcsset:SettingsParameterValue">
<dcscor:parameter>Заголовок</dcscor:parameter>
@@ -84,13 +91,6 @@
</dcscor:value>
</dcscor:item>
</dcsset:outputParameters>
<dcsset:dataParameters>
<dcscor:item xsi:type="dcsset:SettingsParameterValue">
<dcscor:parameter>П</dcscor:parameter>
<dcscor:value xsi:type="xs:boolean">false</dcscor:value>
<dcsset:userSettingID>0930043f-cf2a-42c1-ae8c-4accf2fd2604</dcsset:userSettingID>
</dcscor:item>
</dcsset:dataParameters>
<dcsset:item xsi:type="dcsset:StructureItemGroup">
<dcsset:order>
<dcsset:item xsi:type="dcsset:OrderItemAuto"/>
@@ -0,0 +1,10 @@
{
"name": "Корень dataCompositionSchema со строчной — предупреждение: платформа загружает, конфигуратор пишет с заглавной",
"setup": "fixture:root-lowercase",
"params": { "templatePath": "Template.xml" },
"expect": {
"stdoutContains": "[WARN] Root element is 'dataCompositionSchema' — the platform loads it, but the Designer writes 'DataCompositionSchema'",
"stdoutNotContains": "[ERROR]"
},
"noSnapshot": "результат — только вывод"
}
@@ -1,5 +1,5 @@
{
"name": "XSD точной версии: подсказки по порядку и сжатый текст без пространств имён",
"name": "XSD точной версии: подсказки по порядку; False — один раз, собственной проверкой",
"setup": "fixture:xsd-bad-220",
"requires": ".v8-xsd/2.20",
"preRun": [
@@ -20,10 +20,14 @@
"stdoutContains": [
"[ERROR] XSD 2.20, line 20: field/presentationExpression: must come before <valueType>",
"[ERROR] XSD 2.20, line 43: calculatedField/useRestriction: must come before <valueType>",
"[ERROR] XSD 2.20, line 52: parameter/value:",
"[ERROR] XSD 2.20, line 87: settings/dataParameters: must come before <outputParameters>"
"[ERROR] XSD 2.20, line 87: settings/dataParameters: must come before <outputParameters>",
"<value xsi:type=\"xs:boolean\">False</value> — boolean must be true or false (lowercase)",
"=== Result: 4 errors"
],
"stdoutNotContains": "http://v8.1c.ru"
"stdoutNotContains": [
"http://v8.1c.ru",
"parameter/value"
]
},
"noSnapshot": "результат — только вывод; схемы 1С не должны попасть в эталон"
}
@@ -1,5 +1,5 @@
{
"name": "Шаблон вне выгрузки — версия формата неизвестна, проверка не выполняется",
"name": "Шаблон вне выгрузки — версия формата неизвестна, пометка в итоговой строке",
"setup": "fixture:xsd-no-anchor",
"preRun": [
{
@@ -24,7 +24,7 @@
"-Detailed"
],
"expect": {
"stdoutContains": "[OK] XSD: format version unknown (template outside a dump) — not checked",
"stdoutContains": "checks; XSD not checked: template outside a dump) ===",
"stdoutNotContains": [
"[ERROR]",
"[WARN]"
@@ -1,6 +1,6 @@
{
"name": "Каталога схем нет, -Detailed — строка о пропуске",
"setup": "fixture:xsd-bad-220",
"name": "Каталога схем нет, -Detailed — пометка в итоговой строке",
"setup": "fixture:xsd-good-220",
"preRun": [
{
"writeFile": {
@@ -18,7 +18,7 @@
"-Detailed"
],
"expect": {
"stdoutContains": "[OK] XSD: no schemas in project — not checked",
"stdoutContains": "checks; XSD not checked: no schemas (/v8-xsd-fetch)) ===",
"stdoutNotContains": [
"[ERROR]",
"[WARN]"
@@ -1,6 +1,6 @@
{
"name": "Каталога схем нет — проверки нет, строк XSD в выводе нет",
"setup": "fixture:xsd-bad-220",
"name": "Каталога схем нет — проверки нет, итоговая строка говорит об этом",
"setup": "fixture:xsd-good-220",
"preRun": [
{
"writeFile": {
@@ -15,8 +15,14 @@
"templatePath": "Reports/Отчет/Templates/Схема/Ext/Template.xml"
},
"expect": {
"stdoutContains": "=== Validation OK",
"stdoutNotContains": "XSD"
"stdoutContains": [
"=== Validation OK: Template.xml (",
"checks; XSD not checked: no schemas (/v8-xsd-fetch)) ==="
],
"stdoutNotContains": [
"[ERROR]",
"[WARN]"
]
},
"noSnapshot": "результат — только вывод"
}
@@ -1,6 +1,6 @@
{
"name": "В каталоге схем только старшие версии — предупреждение, проверка не выполняется",
"setup": "fixture:xsd-bad-220",
"setup": "fixture:xsd-good-220",
"preRun": [
{
"writeFile": {