Skip to content

1.4.0 - python-зеркало догнало мастер, структурные свойства реквизита

Choose a tag to compare

@Desko77 Desko77 released this 16 Aug 21:58
· 36 commits to master since this release

Выпуск про две вещи: python-зеркало догнало мастер-версию целиком, и группа свойств реквизита перестала уезжать в файл текстом. Обе темы вскрыты одним приемом - сверкой того, что навык производит, с тем, что принимает живая платформа.

Зеркало сведено с мастером

Порты на python отставали шире, чем описывал реестр известных разрывов: 206 зеленых кейсов при 278 падениях вне реестра. Теперь 488 против 486 у PowerShell, регрессов ноль, и реестр действует для обоих рантаймов сразу. Два лишних кейса у зеркала - это разрывы самой PowerShell-версии, которые python проходит.

Падения группировались не по навыкам, а по девяти причинам в общем коде, и одна правка закрывала десятки кейсов: массив и объект в строковом контексте, неупорядоченный словарь, поиск узла без пространства имен, сериализация узла внутри разобранного документа, текстовая запись поверх готовых концов строк, список аргументов в запуске процесса, перехват вывода платформы, потеря формы пустого узла при повторной правке.

Правила приведения к строке в PowerShell не выводились по догадке, а замерены: одиночный объект в "$x" дает @{k=v}, массив склеивает через пробел результаты ToString(), и у разобранного из JSON объекта ToString() пуст.

Что сверка вскрыла в самой мастер-версии

Эталоны закрепляли эти дефекты годами, а тесты их не видели, потому что сравнивали вывод сам с собой.

Многоязычный заголовок выводился одной строкой вида @{ru=...; en=...} в пяти навыках - при том что тест назывался "Многоязычные title и presentation" и проходил.

Правка значения параметра СКД дописывала второй узел вместо изменения первого: поиск по XPath без префикса не находит узел в пространстве имен схемы. Имя теста прямо требовало не дублировать.

Обозначения пустого значения _ и null писались в XML буквально, хотя кейс называется "установка пустого значения". Дефект был замаскирован тем самым дублированием.

Ячейка без указанной колонки попадала в позицию -1, все в одну, вместо раскладки слева направо. Имя картинки терялось - в файл уходил весь объект. Порядок свойств в двух местах был случайным: словарь объявлен неупорядоченным, и эталон закрепил ту раскладку, которую хеш выдал в день записи.

Тест декомпиляции формы проходил по совпадению. Имена флагов в конфигурации навыка не совпадали ни с одной версией, PowerShell выдавал ошибку привязки параметра, а ожидаемой подстрокой было "Form" - она в тексте той ошибки есть.

Структурные свойства реквизита

Семь свойств - Format, EditFormat, ToolTip, MinValue, MaxValue, FillValue, ChoiceParameterLinks, а также LinkByType и ChoiceParameters - записывались текстом объекта. Результат навыка платформа не принимала вовсе: "Ошибка преобразования данных XML".

Формы замерены на 8.5.1 круговым прогоном исходники - база - выгрузка. Три правила стоили нескольких заходов зонда:

  • дочерние элементы LinkByType обязаны нести префикс xr; без него платформа принимает файл и молча выбрасывает содержимое;
  • путь к полю пишется полностью (<Тип>.<Имя>.Attribute.<Имя>), краткие формы отвергаются сообщением о неверном пути;
  • xsi:nil="true" обязан быть пустым тегом, текст внутри валит загрузку.

Приемка - не совпадение с эталоном, а загрузка платформой: цепочка справочник, форма, правка со всеми свойствами проходит без замечаний.

Прочее

Раскладка ячеек без указания колонки проверяется на переполнение, на смешивание с явными колонками и на выход номера за диапазон - три закрытых разрыва. Правка отсутствующего свойства создает его, а не пропускает молча, и сообщает об этом: при опечатке в имени молчание скрыло бы появление несуществующего свойства.

Реестр разрывов покрывает и интеграционные прогоны. Раньше одно известное падение делало код возврата ненулевым всегда, из-за чего в CI стоял фильтр, отсекавший интеграционные прогоны целиком. Фильтр снят, код возврата стал честным в обоих рантаймах.

В раннере появился флаг --keep-work: без сохраненного рабочего каталога расхождение видно только по обрезанной строке отчета.