-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathxmlread.os
206 lines (149 loc) · 10.5 KB
/
xmlread.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
///////////////////////////////////////////////////////////////////////
//
// Приемочные тесты объекта ЧтениеXML
//
//
///////////////////////////////////////////////////////////////////////
Перем юТест;
////////////////////////////////////////////////////////////////////
// Программный интерфейс
Функция Версия() Экспорт
Возврат "0.1";
КонецФункции
Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт
юТест = ЮнитТестирование;
ВсеТесты = Новый Массив;
ВсеТесты.Добавить("ТестДолжен_ПроверитьВерсию");
ВсеТесты.Добавить("ТестДолжен_ПрочитатьЭлементыИзСтроки");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтениеПустыхЭлементов");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтениеПустыхЭлементовСАтрибутами");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтениеНепустыхЭлементовСАтрибутами");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтениеПустыхЭлементовCЗаголовкомXML");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоПропускПереходитНаКонецЭлемента");
Возврат ВсеТесты;
КонецФункции
Процедура ТестДолжен_ПроверитьВерсию() Экспорт
Сообщить("Версия() = "+Версия());
КонецПроцедуры
Процедура ТестДолжен_ПрочитатьЭлементыИзСтроки() Экспорт
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(СтрокаXML());
юТест.ПроверитьИстину(ЧтениеXML.Прочитать(),"Данные XML пусты");
юТест.ПроверитьРавенство(ЧтениеXML.Имя, "xml");
юТест.ПроверитьРавенство(ЧтениеXML.ТипУзла, ТипУзлаXML.НачалоЭлемента);
ЧтениеXML.Прочитать();
юТест.ПроверитьРавенство(ЧтениеXML.ТипУзла, ТипУзлаXML.НачалоЭлемента, "тест типа узла: НачалоЭлемента data");
ЧтениеXML.Прочитать();
юТест.ПроверитьРавенство(ЧтениеXML.Значение, "hello");
ЧтениеXML.Прочитать();
юТест.ПроверитьРавенство(ЧтениеXML.ТипУзла, ТипУзлаXML.КонецЭлемента, "тест типа узла: КонецЭлемента data");
ЧтениеXML.Прочитать();
юТест.ПроверитьРавенство(ЧтениеXML.ТипУзла, ТипУзлаXML.КонецЭлемента, "тест типа узла: Текст КонецЭлемента xml");
ЧтениеXML.Закрыть();
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтениеПустыхЭлементов() Экспорт
Ч = Новый ЧтениеXml();
Ч.УстановитьСтроку("<Data />");
ТипыУзлов = Новый Массив;
Пока Ч.Прочитать() Цикл
ТипыУзлов.Добавить(Ч.ТипУзла);
Пока Ч.ПрочитатьАтрибут() Цикл
ТипыУзлов.Добавить(Ч.ТипУзла);
КонецЦикла
КонецЦикла;
Для Каждого Т Из ТипыУзлов Цикл
Сообщить(Т);
КонецЦикла;
юТест.ПроверитьРавенство(ТипыУзлов.Количество(),2);
юТест.ПроверитьРавенство(ТипыУзлов[0], ТипУзлаXML.НачалоЭлемента);
юТест.ПроверитьРавенство(ТипыУзлов[1], ТипУзлаXML.КонецЭлемента);
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтениеПустыхЭлементовСАтрибутами() Экспорт
Ч = Новый ЧтениеXml();
Ч.УстановитьСтроку("<Data f=""123"" d=""222"" b="">""/>");
ТипыУзлов = Новый Массив;
Пока Ч.Прочитать() Цикл
ТипыУзлов.Добавить(Ч.ТипУзла);
Сообщить(Ч.ТипУзла);
Пока Ч.ПрочитатьАтрибут() Цикл
Сообщить(Ч.ТипУзла);
ТипыУзлов.Добавить(Ч.ТипУзла);
КонецЦикла
КонецЦикла;
юТест.ПроверитьРавенство(ТипыУзлов.Количество(),8);
юТест.ПроверитьРавенство(ТипыУзлов[0], ТипУзлаXML.НачалоЭлемента,"0");
юТест.ПроверитьРавенство(ТипыУзлов[1], ТипУзлаXML.Атрибут,"1");
юТест.ПроверитьРавенство(ТипыУзлов[2], ТипУзлаXML.Атрибут,"2");
юТест.ПроверитьРавенство(ТипыУзлов[3], ТипУзлаXML.Атрибут,"3");
юТест.ПроверитьРавенство(ТипыУзлов[4], ТипУзлаXML.КонецЭлемента,"4");
юТест.ПроверитьРавенство(ТипыУзлов[5], ТипУзлаXML.КонецЭлемента,"5");
юТест.ПроверитьРавенство(ТипыУзлов[6], ТипУзлаXML.КонецЭлемента,"6");
юТест.ПроверитьРавенство(ТипыУзлов[7], ТипУзлаXML.КонецЭлемента,"7");
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтениеНепустыхЭлементовСАтрибутами() Экспорт
Ч = Новый ЧтениеXml();
Ч.УстановитьСтроку("<Data f=""123"" d=""222"" b="">""></Data>");
ТипыУзлов = Новый Массив;
Пока Ч.Прочитать() Цикл
ТипыУзлов.Добавить(Ч.ТипУзла);
Сообщить(Ч.ТипУзла);
Пока Ч.ПрочитатьАтрибут() Цикл
Сообщить(Ч.ТипУзла);
ТипыУзлов.Добавить(Ч.ТипУзла);
КонецЦикла
КонецЦикла;
юТест.ПроверитьРавенство(ТипыУзлов.Количество(),5);
юТест.ПроверитьРавенство(ТипыУзлов[0], ТипУзлаXML.НачалоЭлемента,"0");
юТест.ПроверитьРавенство(ТипыУзлов[1], ТипУзлаXML.Атрибут,"1");
юТест.ПроверитьРавенство(ТипыУзлов[2], ТипУзлаXML.Атрибут,"2");
юТест.ПроверитьРавенство(ТипыУзлов[3], ТипУзлаXML.Атрибут,"3");
юТест.ПроверитьРавенство(ТипыУзлов[4], ТипУзлаXML.КонецЭлемента,"4");
// EvilBeaver
// 1C переходит к атрибутам даже в конце элемента
// В документации сказано про то, что метод ПрочитатьАтрибут работает при НачалеЭлемента
// Вообще востребованность такого поведения сомнительна и не думаю, что стоит его эмулировать.
// Если раскомментировать строки ниже, то тест будет соответствовать поведению 1С.
// юТест.ПроверитьРавенство(ТипыУзлов[5], ТипУзлаXML.Атрибут,"5");
// юТест.ПроверитьРавенство(ТипыУзлов[6], ТипУзлаXML.Атрибут,"6");
// юТест.ПроверитьРавенство(ТипыУзлов[7], ТипУзлаXML.Атрибут,"7");
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтениеПустыхЭлементовCЗаголовкомXML() Экспорт
Ч = Новый ЧтениеXml();
Ч.УстановитьСтроку("<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?><Data />");
ТипыУзлов = Новый Массив;
Ч.ПерейтиКСодержимому();
юТест.ПроверитьРавенство(ТипУзлаXML.НачалоЭлемента, Ч.ТипУзла);
Пока Ч.Прочитать() Цикл
ТипыУзлов.Добавить(Ч.ТипУзла);
КонецЦикла;
юТест.ПроверитьРавенство(ТипыУзлов.Количество(),1);
юТест.ПроверитьРавенство(ТипыУзлов[0], ТипУзлаXML.КонецЭлемента);
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоПропускПереходитНаКонецЭлемента() Экспорт
Строка = "<build>
| <statusText>Step 5/6</statusText>
| <buildType id=""123123123""/>
| <tags/>
| <running-info percentageComplete=""97"" elapsedSeconds=""102"" estimatedTotalSeconds=""58"" currentStageText=""Step 5/6: Process exited with code 0"" outdated=""false"" probablyHanging=""false""/>
| <queuedDate>20141218T110711+0400</queuedDate>
| <startDate>20141218T110712+0400</startDate>
| <artifact-dependencies/>
|</build>";
ЧтениеXML = Новый ЧтениеXML();
ЧтениеXML.УстановитьСтроку(Строка);
ЧтениеXML.ПерейтиКСодержимому();
Если ЧтениеXML.Прочитать() Тогда
юТест.ПроверитьРавенство(ТипУзлаXML.НачалоЭлемента, ЧтениеXML.ТипУзла, "Проверка узла " + ЧтениеXML.ЛокальноеИмя);
Пока ЧтениеXML.Прочитать() и ЧтениеXML.ЛокальноеИмя <> "artifact-dependencies" Цикл
ЧтениеXML.Пропустить();
юТест.ПроверитьРавенство(ТипУзлаXML.КонецЭлемента, ЧтениеXML.ТипУзла, "Проверка узла " + ЧтениеXML.ЛокальноеИмя);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Функция СтрокаXML()
Текст =
"<xml>
| <data>hello</data>
|</xml>";
Возврат Текст;
КонецФункции