OneScript icon indicating copy to clipboard operation
OneScript copied to clipboard

Отличия в создании XML-файлов на Win и Linux

Open artbear opened this issue 5 years ago • 9 comments

Опишите ошибку Источник: https://travis-ci.org/oscript-library/opm/jobs/435356648#L1686

Есть странное падение тестов в тревисе, хотя локально в Windows ошибок нет.

Падает из-за того, что на Линукс формируется немного другой xml-файл, отличающийся от Windows.

  • На Вин формируется строка <depends-on name="asserts" />
  • На Линукс формируется строка <depends-on name="asserts"/>

отличие в пробеле перед />

и так в нескольких местах

image

Полный текст ошибки

ОШИБКА: Тест: <ТестДолжен_ЗаписатьМетаданныеВ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="&gt;=2.1" version-max="&lt;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="&gt;=2.1" version-max="&lt;3.0"/>
    <executable>src/app1.os</executable>
    <executable>src/app2.os</executable>
</opm-metadata>) не равны, а хотели, чтобы бы��и равны.}    
		ВызватьИсключение(СообщениеОшибки);

Ожидаемое поведение Хотелось бы одинакового поведения во всех ОС

Окружение

  • Версия: 1.0.20.220

artbear avatar Sep 30 '18 21:09 artbear

Сдаётся мне, моя работа.

dmpas avatar Oct 01 '18 06:10 dmpas

@dmpas похоже на то. Хотя оба варианта валидны с точки зрения XML

EvilBeaver avatar Oct 01 '18 06:10 EvilBeaver

@artbear не подскажешь, на какой вресии моно там всё это дело запускается?

dmpas avatar Oct 08 '18 13:10 dmpas

Не знаю, в линуксе почти не волоку.

В шапке я привел ссылку на сборку тревиса, где все логи есть. уверен, там найдешь версию.

или @khorevaa с @nixel2007 подскажут.

artbear avatar Oct 08 '18 13:10 artbear

@dmpas докер-образ evilbeaver/onescript основан на mono 5.4

nixel2007 avatar Oct 08 '18 13:10 nixel2007

мммм. В моно запись XML по-другому сделана. С наскоку не починить

dmpas avatar Oct 08 '18 13:10 dmpas

Предлагаю не чинить совсем. Стандарты XML не нарушает. А кто обрабатывает XML как строки, тот ССЗБ (p.s. Злой Бобер Злой)

EvilBeaver avatar Oct 09 '18 12:10 EvilBeaver

На 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

1cgh avatar Jan 21 '19 07:01 1cgh

По поводу обработки XML, как строки, у меня кейс простой: тест проверяет, что сгенерированный кодом XML корректный путем сравнения строкового представления XML и текстового файла-фикстуры.

1cgh avatar Jan 21 '19 07:01 1cgh