-
Notifications
You must be signed in to change notification settings - Fork 108
/
Copy pathxmlwrite.os
274 lines (192 loc) · 14 KB
/
xmlwrite.os
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
///////////////////////////////////////////////////////////////////////
//
// Приемочные тесты объекта ЗаписьXML
//
//
///////////////////////////////////////////////////////////////////////
Перем юТест;
////////////////////////////////////////////////////////////////////
// Программный интерфейс
Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт
юТест = ЮнитТестирование;
ВсеТесты = Новый Массив;
ВсеТесты.Добавить("ТестДолжен_ЗаписатьВСтроку");
ВсеТесты.Добавить("ТестДолжен_ЗаписатьВФайл");
ВсеТесты.Добавить("ТестДолжен_ЗаписатьВФайл_BOM");
ВсеТесты.Добавить("ТестДолжен_ЗаписатьВФайл_БезBOM");
ВсеТесты.Добавить("ТестДолжен_ЗаписатьСоответствиеПространстваИмен");
ВсеТесты.Добавить("ТестДолжен_ПроверитьКонтекстПространствИменВоВремяЗаписи");
ВсеТесты.Добавить("ТестДолжен_ЗаписатьВСтрокуСОтступомТабами");
ВсеТесты.Добавить("ТестДолжен_ЗаписатьВСтрокуБезПробелаПередЗакрытием");
ВсеТесты.Добавить("ТестДолжен_ПроверитьПравильныйВыводПробелСлэша");
ВсеТесты.Добавить("ТестДолжен_ЗаписатьТекст");
Возврат ВсеТесты;
КонецФункции
Процедура ТестДолжен_ЗаписатьВСтроку() Экспорт
З = Новый ЗаписьXML;
З.УстановитьСтроку("windows-1251");
ЗаписатьСодержимое(З);
С = З.Закрыть();
НормализоватьПереводыСтрок(С);
юТест.ПроверитьРавенство(ЭталонДокумента(), С);
КонецПроцедуры
Процедура ТестДолжен_ЗаписатьВСтрокуСОтступомТабами() Экспорт
СтрокаОтступа = Символы.Таб + "
| ";
З = Новый ЗаписьXML();
З.УстановитьСтроку(Новый ПараметрыЗаписиXML("windows-1251",,,, СтрокаОтступа));
ЗаписатьСодержимое(З);
С = З.Закрыть();
НормализоватьПереводыСтрок(С);
юТест.ПроверитьРавенство(ЭталонДокумента(СтрокаОтступа), С);
КонецПроцедуры
Процедура ТестДолжен_ЗаписатьВФайл() Экспорт
ВремФайл = КаталогВременныхФайлов() + "/os-xml-write-test.xml";
З = Новый ЗаписьXML;
З.ОткрытьФайл(ВремФайл, "windows-1251");
С = "";
Попытка
ЗаписатьСодержимое(З);
З.Закрыть();
Чтение = Новый ЧтениеТекста(ВремФайл, "windows-1251");
С = Чтение.Прочитать();
Чтение.Закрыть();
Исключение
УдалитьВременныйФайл(ВремФайл);
ВызватьИсключение;
КонецПопытки;
УдалитьВременныйФайл(ВремФайл);
НормализоватьПереводыСтрок(С);
юТест.ПроверитьРавенство(ЭталонДокумента(), С);
КонецПроцедуры
Процедура ПроверитьЗаписьВУТФ_СБОМ_БезБОМ(СБом)
ВремФайл = КаталогВременныхФайлов() + "/os-xml-write-test.xml";
З = Новый ЗаписьXML;
З.ОткрытьФайл(ВремФайл, "UTF-8", СБОМ);
С = "";
Попытка
З.ЗаписатьНачалоЭлемента("root");
З.ЗаписатьКонецЭлемента();
З.Закрыть();
Ф = Новый Файл(ВремФайл);
Чтение = Новый ЧтениеТекста(ВремФайл);
Содержимое = Чтение.Прочитать();
Чтение.Закрыть();
Исключение
УдалитьВременныйФайл(ВремФайл);
ВызватьИсключение;
КонецПопытки;
РазмерФайла = Ф.Размер();
УдалитьВременныйФайл(ВремФайл);
ТеоретическийРазмерФайла = СтрДлина(Содержимое) + ?(СБОМ, 3, 0); // + размер BOM
юТест.ПроверитьРавенство(РазмерФайла, ТеоретическийРазмерФайла);
КонецПроцедуры
Процедура ТестДолжен_ЗаписатьВФайл_BOM() Экспорт
ПроверитьЗаписьВУТФ_СБОМ_БезБОМ(Истина);
КонецПроцедуры
Процедура ТестДолжен_ЗаписатьВФайл_БезBOM() Экспорт
ПроверитьЗаписьВУТФ_СБОМ_БезБОМ(Ложь);
КонецПроцедуры
Функция ЭталонДокумента(Знач СтрокаОтступа = " ")
Текст = СтрЗаменить(
"<?xml version=""1.0"" encoding=""windows-1251""?>
|<Привет xmlns:тест=""http://beaversoft.ru/oscript/test"">
| <Сообщение>Это текст <---></Сообщение>
|</Привет>", Символы.Таб, СтрокаОтступа);
НормализоватьПереводыСтрок(Текст);
Возврат Текст;
КонецФункции
Процедура ЗаписатьСодержимое(ЗаписьXML)
ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписьXML.ЗаписатьНачалоЭлемента("Привет");
ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("тест","http://beaversoft.ru/oscript/test");
ЗаписьXML.ЗаписатьНачалоЭлемента("Сообщение");
ЗаписьXML.ЗаписатьТекст("Это текст <--->");
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецПроцедуры
Процедура УдалитьВременныйФайл(Знач ВремФайл)
Ф = Новый Файл(ВремФайл);
Если Ф.Существует() Тогда
//УдалитьФайлы(Ф.ПолноеИмя);
КонецЕсли;
КонецПроцедуры
Процедура НормализоватьПереводыСтрок(Строка)
Строка = СтрЗаменить(Строка, Символы.ВК + Символы.ПС, Символы.ПС);
КонецПроцедуры
Процедура ТестДолжен_ЗаписатьСоответствиеПространстваИмен() Экспорт
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписьXML.ЗаписатьНачалоЭлемента("opm-metadata");
ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("", "http://oscript.io/schemas/opm-metadata/1.0");
ЗаписьXML.ЗаписатьНачалоЭлемента("test");
ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("v2", "http://oscript.io/schemas/opm-metadata/2.0");
юТест.ПроверитьРавенство(ЗаписьXML.НайтиПрефикс("http://oscript.io/schemas/opm-metadata/2.0"), "v2", "Пространство имён 2");
юТест.ПроверитьРавенство(ЗаписьXML.НайтиПрефикс("http://oscript.io/schemas/opm-metadata/1.0"), "", "Пространство имён по-умолчанию");
юТест.ПроверитьРавенство(ЗаписьXML.НайтиПрефикс("http://oscript.io/schemas/opm-metadata/x.x"), Неопределено, "Не заданное пространство имён");
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьКонецЭлемента();
Текст = ЗаписьXML.Закрыть();
Чтение = Новый ЧтениеXML;
Чтение.УстановитьСтроку(Текст);
Чтение.ПерейтиКСодержимому();
юТест.ПроверитьРавенство(Чтение.ПолучитьАтрибут("xmlns"), "http://oscript.io/schemas/opm-metadata/1.0");
Чтение.Закрыть();
КонецПроцедуры
Процедура ТестДолжен_ПроверитьКонтекстПространствИменВоВремяЗаписи() Экспорт
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
// Проверим, что скрипт не падает, когда ничего не начали записывать
НеПадает = ЗаписьXML.КонтекстПространствИмен.СоответствияПространствИмен();
ЗаписьXML.ЗаписатьНачалоЭлемента("Корень");
юТест.ПроверитьРавенство(ЗаписьXML.КонтекстПространствИмен.Глубина, 1);
ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("", "Пространство");
ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("П1", "ЕщёПространство");
юТест.ПроверитьРавенство(ЗаписьXML.КонтекстПространствИмен.ПространствоИменПоУмолчанию, "Пространство");
юТест.ПроверитьРавенство(ЗаписьXML.КонтекстПространствИмен.НайтиURIПространстваИмен("П1"), "ЕщёПространство");
ЗаписьXML.ЗаписатьНачалоЭлемента("Дитё");
юТест.ПроверитьРавенство(ЗаписьXML.КонтекстПространствИмен.ПространствоИменПоУмолчанию, "Пространство");
юТест.ПроверитьРавенство(ЗаписьXML.КонтекстПространствИмен.НайтиURIПространстваИмен("П1"), "ЕщёПространство");
ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("П2", "Пространство2");
юТест.ПроверитьРавенство(ЗаписьXML.КонтекстПространствИмен.НайтиURIПространстваИмен("П2"), "Пространство2");
ЗаписьXML.ЗаписатьКонецЭлемента();
юТест.ПроверитьРавенство(ЗаписьXML.КонтекстПространствИмен.ПространствоИменПоУмолчанию, "Пространство");
юТест.ПроверитьРавенство(ЗаписьXML.КонтекстПространствИмен.НайтиURIПространстваИмен("П1"), "ЕщёПространство");
юТест.ПроверитьРавенство(ЗаписьXML.КонтекстПространствИмен.НайтиURIПространстваИмен("П2"), Неопределено);
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецПроцедуры
Процедура ТестДолжен_ЗаписатьВСтрокуБезПробелаПередЗакрытием() Экспорт
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
ЗаписьXML.ЗаписатьНачалоЭлемента("Элемент");
ЗаписьXML.ЗаписатьАтрибут("Атрибут", "Значение");
ЗаписьXML.ЗаписатьКонецЭлемента();
СтрокаПроверки = ЗаписьXML.Закрыть();
юТест.ПроверитьРавенство(СтрокаПроверки, "<Элемент Атрибут=""Значение""/>");
КонецПроцедуры
Процедура ТестДолжен_ПроверитьПравильныйВыводПробелСлэша() Экспорт
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
ЗаписьXML.ЗаписатьНачалоЭлемента("Элемент");
ЗаписьXML.ЗаписатьАтрибут("Атрибут", XmlСтрока(" /"));
ЗаписьXML.ЗаписатьКонецЭлемента();
СтрокаПроверки = ЗаписьXML.Закрыть();
юТест.ПроверитьРавенство(СтрокаПроверки, "<Элемент Атрибут="" /""/>");
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
ЗаписьXML.ЗаписатьНачалоЭлемента("Элемент");
ЗаписьXML.ЗаписатьТекст(XmlСтрока(" /"));
ЗаписьXML.ЗаписатьКонецЭлемента();
СтрокаПроверки = ЗаписьXML.Закрыть();
юТест.ПроверитьРавенство(СтрокаПроверки, "<Элемент> /</Элемент>");
КонецПроцедуры
Процедура ТестДолжен_ЗаписатьТекст() Экспорт
Запись = Новый ЗаписьXML;
Запись.УстановитьСтроку();
Запись.ЗаписатьНачалоЭлемента("root");
Запись.ЗаписатьТекст("123");
Запись.ЗаписатьКонецЭлемента();
Результат = Запись.Закрыть();
юТест.ПроверитьРавенство(Результат, "<root>123</root>");
КонецПроцедуры