Files
cc-1c-skills/tests/skills/cases/skd-compile/additional-properties-escaping.json
T
Nick ShirokovandClaude Opus 5 974ca3aac9 fix(form,skd,init,meta-edit): развести экранирование атрибута и текста
esc_xml был один на две задачи, и в атрибутном контексте применялся текстовый
вариант без ". form-compile с choiceParameters, имя которого содержит
кавычку, выдавал <app:item name="Отбор.Наименование "кавычка"">: lxml падает с
attributes construct error, то есть файл невалиден как XML. Затронуто 9 мест в
form-compile и 3 в skd-compile, одинаково в обоих портах.

Раундтрип через базу показал границу: в ТЕКСТЕ элемента платформа экранирует
только & < > (кавычка и апостроф возвращаются сырыми байт-в-байт), а в ЗНАЧЕНИИ
АТРИБУТА пишет &quot; — внутри "..." литеральная кавычка невалидна. Поэтому две
функции с говорящими именами, а не одна с флагом:
  esc_xml      — значение атрибута: & < > "
  esc_xml_text — текст элемента:    & < >

Заодно закрыто расхождение портов в init-навыках: PY экранировал текст с &quot;,
PS1 — через SecurityElement::Escape (ещё и &apos;), а epf-init/erf-init в PS1 не
экранировали вовсе, из-за чего амперсанд в синониме давал невалидный XML.

Кейсы: form-compile/attr-value-escaping, skd-compile/additional-properties-escaping,
cf-init/synonym-escaping — все три проверены негативным прогоном на обоих портах
и верификацией снэпшотов на платформе.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-08 20:53:12 +03:00

37 lines
1.1 KiB
JSON

{
"name": "additionalProperties: ключ идёт в значение атрибута — кавычка экранируется",
"params": {
"outputPath": "Template.xml"
},
"input": {
"dataSets": [
{
"name": "Основной",
"query": "ВЫБРАТЬ 1 КАК Поле1",
"fields": ["Поле1: Число(1,0)"]
}
],
"settingsVariants": [
{
"name": "Основной",
"presentation": "Основной вариант",
"settings": {
"additionalProperties": {
"Ключ \"в кавычках\" & <угол>": "Значение \"в кавычках\" & <угол>"
}
}
}
]
},
"validatePath": "Template.xml",
"expect": {
"fileContains": {
"file": "Template.xml",
"text": [
"<v8:Property name=\"Ключ &quot;в кавычках&quot; &amp; &lt;угол&gt;\">",
"<v8:Value xsi:type=\"xs:string\">Значение \"в кавычках\" &amp; &lt;угол&gt;</v8:Value>"
]
}
}
}