OneScript
OneScript copied to clipboard
Отличия в создании XML-файлов на Win и Linux
Опишите ошибку Источник: https://travis-ci.org/oscript-library/opm/jobs/435356648#L1686
Есть странное падение тестов в тревисе, хотя локально в Windows ошибок нет.
Падает из-за того, что на Линукс формируется немного другой xml-файл, отличающийся от Windows.
- На Вин формируется строка
<depends-on name="asserts" />
- На Линукс формируется строка
<depends-on name="asserts"/>
отличие в пробеле перед />
и так в нескольких местах
Полный текст ошибки
ОШИБКА: Тест: <ТестДолжен_ЗаписатьМетаданныеВXML>
Файл: </work_dir/tests/mft-serializer-test.os>
Сообщение: {Модуль /usr/share/oscript/lib/asserts/src/xunit-asserts.os / Ошибка в строке: 30 / Сравниваемые значения (<?xml version="1.0" encoding="utf-8"?>
<opm-metadata xmlns="http://oscript.io/schemas/opm-metadata/1.0">
<name>mft-test</name>
<author>Я</author>
<version>1.0.5</version>
<engine-version>1.0</engine-version>
<description>Это пакет для тестирования</description>
<author-email>[email protected]</author-email>
<depends-on name="asserts" />
<depends-on name="cmdline" version=">=2.1" version-max="<3.0" />
<executable>src/app1.os</executable>
<executable>src/app2.os</executable>
</opm-metadata>; <?xml version="1.0" encoding="utf-8"?>
<opm-metadata xmlns="http://oscript.io/schemas/opm-metadata/1.0">
<name>mft-test</name>
<author>Я</author>
<version>1.0.5</version>
<engine-version>1.0</engine-version>
<description>Это пакет для тестирования</description>
<author-email>[email protected]</author-email>
<depends-on name="asserts"/>
<depends-on name="cmdline" version=">=2.1" version-max="<3.0"/>
<executable>src/app1.os</executable>
<executable>src/app2.os</executable>
</opm-metadata>) не равны, а хотели, чтобы бы��и равны.}
ВызватьИсключение(СообщениеОшибки);
Ожидаемое поведение Хотелось бы одинакового поведения во всех ОС
Окружение
- Версия: 1.0.20.220
Сдаётся мне, моя работа.
@dmpas похоже на то. Хотя оба варианта валидны с точки зрения XML
@artbear не подскажешь, на какой вресии моно там всё это дело запускается?
Не знаю, в линуксе почти не волоку.
В шапке я привел ссылку на сборку тревиса, где все логи есть. уверен, там найдешь версию.
или @khorevaa с @nixel2007 подскажут.
@dmpas докер-образ evilbeaver/onescript основан на mono 5.4
мммм. В моно запись XML по-другому сделана. С наскоку не починить
Предлагаю не чинить совсем. Стандарты XML не нарушает. А кто обрабатывает XML как строки, тот ССЗБ (p.s. Злой Бобер Злой)
На 1.0.21.1 Название ОС: Microsoft Windows 7 Корпоративная Версия ОС: 6.1.7601 Service Pack 1 сборка 7601
ЗаписьXML = Новый ЗаписьXML();
ЗаписьXML.УстановитьСтроку("UTF-8");
ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписьXML.ЗаписатьНачалоЭлемента("Settings", "http://v8.1c.ru/8.3/config/merge/settings");
ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xs", "http://www.w3.org/2001/XMLSchema");
ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance");
ЗаписьXML.ЗаписатьКонецЭлемента();
Результат = ЗаписьXML.Закрыть();
ПерваяСтрокаРезультат = СтрПолучитьСтроку(Результат, 1);
Сообщить(ПерваяСтрокаРезультат);
ПерваяСтрокаРезультатДлина = СтрДлина(ПерваяСтрокаРезультат);
Сообщить(ПерваяСтрокаРезультатДлина);
Для Сч = 1 По ПерваяСтрокаРезультатДлина Цикл
// Выводим позицию, символ в позиции, код символа в позиции.
Текст = СтрШаблон("%1 - %2 - %3",
Сч, Сред(ПерваяСтрокаРезультат, Сч, 1), КодСимвола(ПерваяСтрокаРезультат, Сч));
Сообщить(Текст);
КонецЦикла;
выводит
<?xml version="1.0" encoding="utf-8"?>
39
1 - < - 60
2 - ? - 63
3 - x - 120
4 - m - 109
5 - l - 108
6 - - 32
7 - v - 118
8 - e - 101
9 - r - 114
10 - s - 115
11 - i - 105
12 - o - 111
13 - n - 110
14 - = - 61
15 - " - 34
16 - 1 - 49
17 - . - 46
18 - 0 - 48
19 - " - 34
20 - - 32
21 - e - 101
22 - n - 110
23 - c - 99
24 - o - 111
25 - d - 100
26 - i - 105
27 - n - 110
28 - g - 103
29 - = - 61
30 - " - 34
31 - u - 117
32 - t - 116
33 - f - 102
34 - - - 45
35 - 8 - 56
36 - " - 34
37 - ? - 63
38 - > - 62
- 13
По поводу обработки XML, как строки, у меня кейс простой: тест проверяет, что сгенерированный кодом XML корректный путем сравнения строкового представления XML и текстового файла-фикстуры.