-
Notifications
You must be signed in to change notification settings - Fork 108
/
Copy pathvalue-list.os
394 lines (302 loc) · 21.8 KB
/
value-list.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
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
Перем юТест;
Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт
юТест = ЮнитТестирование;
ВсеТесты = Новый Массив;
ВсеТесты.Добавить("ТестДолжен_ПроверитьСозданиеСпискаЗначений");
ВсеТесты.Добавить("ТестДолжен_ПроверитьДобавлениеЭлементов");
ВсеТесты.Добавить("ТестДолжен_ПроверитьДоступКСвойствамЭлементаСписка");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЗаписьСвойствЭлементаСписка");
ВсеТесты.Добавить("ТестДолжен_ПроверитьИтерациюПоСписку");
ВсеТесты.Добавить("ТестДолжен_ПроверитьДоступПоИндексу");
ВсеТесты.Добавить("ТестДолжен_ПроверитьМетодИндексСпискаЗначений");
ВсеТесты.Добавить("ТестДолжен_ПроверитьМетодВставитьСпискаЗначений");
ВсеТесты.Добавить("ТестДолжен_ПроверитьМетодСдвинутьСпискаЗначений");
ВсеТесты.Добавить("ТестДолжен_ПроверитьМетодСортироватьПоЗначениюСпискаЗначений");
ВсеТесты.Добавить("ТестДолжен_ПроверитьМетодСортироватьПоПредставлениюСпискаЗначений");
ВсеТесты.Добавить("ТестДолжен_ПроверитьМетодНайтиСпискаЗначений");
ВсеТесты.Добавить("ТестДолжен_ПроверитьМетодУдалитьСпискаЗначений");
Возврат ВсеТесты;
КонецФункции
Процедура ТестДолжен_ПроверитьСозданиеСпискаЗначений() Экспорт
СЗ = Новый СписокЗначений;
юТест.ПроверитьРавенство(Тип("СписокЗначений"), ТипЗнч(СЗ));
КонецПроцедуры
Процедура ТестДолжен_ПроверитьДобавлениеЭлементов() Экспорт
СЗ = Новый СписокЗначений;
СЗ.Добавить("Один");
СЗ.Добавить("Два");
юТест.ПроверитьРавенство(2, СЗ.Количество());
юТест.ПроверитьРавенство(Тип("ЭлементСпискаЗначений"), ТипЗнч(СЗ.Получить(0)));
КонецПроцедуры
Процедура ТестДолжен_ПроверитьДоступКСвойствамЭлементаСписка() Экспорт
СЗ = Новый СписокЗначений;
СЗ.Добавить(1,"Представление");
СЗ.Добавить(2,"Представление2", Истина);
СЗ.Добавить(3,"Представление3", Истина, "Тут должна быть картинка, но сейчас может быть любое значение");
СЗ.Добавить(1);
Элемент = СЗ[0];
юТест.ПроверитьРавенство(1, Элемент.Значение, "Значение элемента 0 должно быть установлено");
юТест.ПроверитьРавенство("Представление", Элемент.Представление, "Представление элемента 0 должно быть установлено");
юТест.ПроверитьРавенство(Ложь, Элемент.Пометка, "Пометка элемента 0 не должна быть установлена");
юТест.ПроверитьРавенство(Неопределено, Элемент.Картинка, "Картинка элемента 0 не должна быть установлена");
Элемент = СЗ[1];
юТест.ПроверитьРавенство(2, Элемент.Значение, "Значение элемента 1 должно быть установлено");
юТест.ПроверитьРавенство("Представление2", Элемент.Представление, "Представление элемента 1 должно быть установлено");
юТест.ПроверитьРавенство(Истина, Элемент.Пометка, "Пометка элемента 1 должна быть установлена");
Элемент = СЗ[2];
юТест.ПроверитьРавенство(3, Элемент.Значение, "Значение элемента 2 должно быть установлено");
юТест.ПроверитьРавенство("Представление3", Элемент.Представление, "Представление элемента 2 должно быть установлено");
юТест.ПроверитьРавенство(Истина, Элемент.Пометка, "Пометка элемента 2 должна быть установлена");
юТест.ПроверитьРавенство("Тут должна быть картинка, но сейчас может быть любое значение", Элемент.Картинка, "Картинка элемента 2 должна быть установлена");
юТест.ПроверитьРавенство("", СЗ[3].Представление, "Должно быть пустое представление по умолчанию");
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЗаписьСвойствЭлементаСписка() Экспорт
СЗ = Новый СписокЗначений;
Элемент = СЗ.Добавить(1);
Элемент.Значение = 2;
Элемент.Представление = "Привет";
Элемент.Пометка = Истина;
Элемент.Картинка = "---";
юТест.ПроверитьРавенство(2, Элемент.Значение, "Значение элемента должно быть установлено");
юТест.ПроверитьРавенство("Привет", Элемент.Представление, "Представление элемента должно быть установлено");
юТест.ПроверитьРавенство(Истина, Элемент.Пометка, "Пометка элемента должна быть установлена");
юТест.ПроверитьРавенство("---", Элемент.Картинка, "Картинка элемента должна быть установлена");
КонецПроцедуры
Процедура ТестДолжен_ПроверитьИтерациюПоСписку() Экспорт
СЗ = Новый СписокЗначений;
СЗ.Добавить(1);
СЗ.Добавить(2);
СЗ.Добавить(3);
СЗ.Добавить(4);
Сч = 0;
Для Каждого Элемент Из СЗ Цикл
Сч = Сч + 1;
КонецЦикла;
юТест.ПроверитьРавенство(4, Сч);
КонецПроцедуры
Процедура ТестДолжен_ПроверитьДоступПоИндексу() Экспорт
СЗ = Новый СписокЗначений;
СЗ.Добавить(1);
юТест.ПроверитьРавенство(1, СЗ[0].Значение);
Попытка
СЗ[0] = СЗ[0];
Исключение
юТест.ПроверитьРавенство("Индексированное значение доступно только для чтения", ИнформацияОбОшибке().Описание);
Возврат;
КонецПопытки;
ВызватьИсключение "Должно было быть выброшено исключение, но это не произошло";
КонецПроцедуры
Процедура ТестДолжен_ПроверитьМетодИндексСпискаЗначений() Экспорт
СЗ = Новый СписокЗначений;
СЗ.Добавить(1);
СЗ.Добавить(2);
СЗ.Добавить(3);
СЗ.Добавить(4);
юТест.ПроверитьРавенство(СЗ.Индекс(СЗ[0]), 0, "Метод Индекс() списка значений");
юТест.ПроверитьРавенство(СЗ.Индекс(СЗ[1]), 1, "Метод Индекс() списка значений");
юТест.ПроверитьРавенство(СЗ.Индекс(СЗ[2]), 2, "Метод Индекс() списка значений");
юТест.ПроверитьРавенство(СЗ.Индекс(СЗ[3]), 3, "Метод Индекс() списка значений");
ДругойСЗ = Новый СписокЗначений;
ДругойСЗ.Добавить(1);
юТест.ПроверитьРавенство(СЗ.Индекс(ДругойСЗ[0]), -1, "Метод Индекс() списка значений: несуществующий элемент");
КонецПроцедуры
Процедура ТестДолжен_ПроверитьМетодВставитьСпискаЗначений() Экспорт
СЗ = Новый СписокЗначений;
Э3 = СЗ.Вставить(0, 3); // Вставка в пустой список
Э1 = СЗ.Вставить(0, 1); // Вставка в начало
Э2 = СЗ.Вставить(1, 2); // Вставка в середину
Э4 = СЗ.Вставить(3, 4); // Вставка в конец
юТест.ПроверитьРавенство(СЗ.Индекс(Э1), 0, "Метод Вставить() списка значений");
юТест.ПроверитьРавенство(СЗ.Индекс(Э2), 1, "Метод Вставить() списка значений");
юТест.ПроверитьРавенство(СЗ.Индекс(Э3), 2, "Метод Вставить() списка значений");
юТест.ПроверитьРавенство(СЗ.Индекс(Э4), 3, "Метод Вставить() списка значений");
КонецПроцедуры
Процедура ТестДолжен_ПроверитьМетодУдалитьСпискаЗначений() Экспорт
СЗ = Новый СписокЗначений;
Для Инд = 1 По 5 Цикл
СЗ.Добавить(Инд);
КонецЦикла;
Э1 = СЗ[0];
Э2 = СЗ[1];
Э3 = СЗ[2];
Э4 = СЗ[3];
Э5 = СЗ[4];
СЗ.Удалить(1);
юТест.ПроверитьРавенство(СЗ.Количество(),4, "Удаление по индексу");
юТест.ПроверитьРавенство(СЗ.Индекс(Э2),-1, "Удаление по индексу");
юТест.ПроверитьРавенство(СЗ.Индекс(Э4),2, "Удаление по индексу");
СЗ.Удалить(Э1);
юТест.ПроверитьРавенство(СЗ.Количество(),3, "Удаление элемента");
юТест.ПроверитьРавенство(СЗ.Индекс(Э1),-1, "Удаление элемента");
юТест.ПроверитьРавенство(СЗ.Индекс(Э4),1, "Удаление элемента");
СЗ.Удалить("1");
юТест.ПроверитьРавенство(СЗ.Количество(),2, "Удаление по индексу типа строка");
юТест.ПроверитьРавенство(СЗ.Индекс(Э4),-1, "Удаление по индексу типа строка");
юТест.ПроверитьРавенство(СЗ.Индекс(Э5),1, "Удаление по индексу типа строка");
// Проверим ошибки
Ошибка = "Удаление с неверным индексом";
Попытка
СЗ.Удалить(10);
Исключение
Ошибка = ИнформацияОбОшибке().Описание;
КонецПопытки;
юТест.ПроверитьРавенство(Ошибка, "Значение индекса выходит за пределы диапазона");
Ошибка = "Удаление несуществующего элемента";
ДругойСЗ = Новый СписокЗначений;
ДругойСЗ.Добавить(1);
Попытка
СЗ.Удалить(ДругойСЗ[0]);
Исключение
Ошибка = ИнформацияОбОшибке().Описание;
КонецПопытки;
юТест.ПроверитьРавенство(Ошибка, "Элемент не принадлежит списку значений");
Ошибка = "Удаление с неверным типом параметра";
Попытка
СЗ.Удалить("ё");
Исключение
Ошибка = ИнформацияОбОшибке().Описание;
КонецПопытки;
юТест.ПроверитьРавенство(Ошибка, "Неверный тип аргумента");
КонецПроцедуры
Функция ПроверитьПорядок(Знач СЗ, Знач П1,
Знач П2 = Неопределено,
Знач П3 = Неопределено,
Знач П4 = Неопределено,
Знач П5 = Неопределено)
Массив = Новый Массив;
Массив.Добавить(П1);
Если П2 <> Неопределено Тогда
Массив.Добавить(П2);
КонецЕсли;
Если П3 <> Неопределено Тогда
Массив.Добавить(П3);
КонецЕсли;
Если П4 <> Неопределено Тогда
Массив.Добавить(П4);
КонецЕсли;
Если П5 <> Неопределено Тогда
Массив.Добавить(П5);
КонецЕсли;
Для Инд = 0 По Массив.ВГраница() Цикл
Если СЗ[Инд].Значение <> Массив[Инд] Тогда
Возврат Ложь;
КонецЕсли;
КонецЦикла;
Возврат Истина;
КонецФункции
Процедура ТестДолжен_ПроверитьМетодСдвинутьСпискаЗначений() Экспорт
СЗ = Новый СписокЗначений;
Для Инд = 1 По 5 Цикл
СЗ.Добавить(Инд);
КонецЦикла;
С1 = СЗ[0];
С2 = СЗ[1];
С3 = СЗ[2];
С4 = СЗ[3];
С5 = СЗ[4];
// Проверим обычное перемещение
СЗ.Сдвинуть(С2, -1);
юТест.ПроверитьИстину(ПроверитьПорядок(СЗ, 2, 1, 3, 4, 5), "Сдвиг вверх");
СЗ.Сдвинуть(С1, 2);
юТест.ПроверитьИстину(ПроверитьПорядок(СЗ, 2, 3, 4, 1, 5), "Сдвиг вниз");
СЗ.Сдвинуть(3, -2);
юТест.ПроверитьИстину(ПроверитьПорядок(СЗ, 2, 1, 3, 4, 5), "Сдвиг по индексу вверх");
СЗ.Сдвинуть(1, 2);
юТест.ПроверитьИстину(ПроверитьПорядок(СЗ, 2, 3, 4, 1, 5), "Сдвиг по индексу вниз");
// Проверим приведение типа
СЗ.Сдвинуть("2", 2);
юТест.ПроверитьИстину(ПроверитьПорядок(СЗ, 2, 3, 1, 5, 4), "Сдвиг, индекс - строка");
СЗ.Сдвинуть("1", "2");
юТест.ПроверитьИстину(ПроверитьПорядок(СЗ, 2, 1, 5, 3, 4), "Сдвиг, индекс и смещение - строки");
// Проверим крайние случаи
СЗ.Сдвинуть(0, 4);
юТест.ПроверитьИстину(ПроверитьПорядок(СЗ, 1, 5, 3, 4, 2), "Сдвиг по индексу вниз");
СЗ.Сдвинуть(4, -4);
юТест.ПроверитьИстину(ПроверитьПорядок(СЗ, 2, 1, 5, 3, 4), "Сдвиг по индексу вниз");
// Проверим ошибки
Ошибка = "Сдвиг за пределы вниз";
Попытка
СЗ.Сдвинуть(0, 5);
Исключение
Ошибка = ИнформацияОбОшибке().Описание;
КонецПопытки;
юТест.ПроверитьРавенство(Ошибка, "Неверное значение аргумента номер 2");
Ошибка = "Сдвиг за пределы вверх";
Попытка
СЗ.Сдвинуть(1, -3);
Исключение
Ошибка = ИнформацияОбОшибке().Описание;
КонецПопытки;
юТест.ПроверитьРавенство(Ошибка, "Неверное значение аргумента номер 2");
Ошибка = "Сдвиг с неверным индексом";
Попытка
СЗ.Сдвинуть(10, 2);
Исключение
Ошибка = ИнформацияОбОшибке().Описание;
КонецПопытки;
юТест.ПроверитьРавенство(Ошибка, "Значение индекса выходит за пределы диапазона");
Ошибка = "Сдвиг несуществующего элемента";
ДругойСЗ = Новый СписокЗначений;
ДругойСЗ.Добавить(1);
Попытка
СЗ.Сдвинуть(ДругойСЗ[0], 2);
Исключение
Ошибка = ИнформацияОбОшибке().Описание;
КонецПопытки;
юТест.ПроверитьРавенство(Ошибка, "Элемент не принадлежит списку значений");
Ошибка = "Сдвиг с неверным типом параметра";
Попытка
СЗ.Сдвинуть("ё", 2);
Исключение
Ошибка = ИнформацияОбОшибке().Описание;
КонецПопытки;
юТест.ПроверитьРавенство(Ошибка, "Неверный тип аргумента");
КонецПроцедуры
Процедура ТестДолжен_ПроверитьМетодСортироватьПоЗначениюСпискаЗначений() Экспорт
СЗ = Новый СписокЗначений;
СЗ.Добавить(4);
СЗ.Добавить(3);
СЗ.Добавить(2);
СЗ.Добавить(1);
СЗ.СортироватьПоЗначению();
юТест.ПроверитьИстину(ПроверитьПорядок(СЗ, 1, 2, 3, 4), "Сортировка по-умолчанию");
СЗ.СортироватьПоЗначению(НаправлениеСортировки.Убыв);
юТест.ПроверитьИстину(ПроверитьПорядок(СЗ, 4, 3, 2, 1), "Сортировка по убыванию");
СЗ.СортироватьПоЗначению(НаправлениеСортировки.Возр);
юТест.ПроверитьИстину(ПроверитьПорядок(СЗ, 1, 2, 3, 4), "Сортировка по возрастанию");
СЗ = Новый СписокЗначений;
СЗ.Добавить("аааааб");
СЗ.Добавить("аааааа");
СЗ.Добавить("Бааааа");
СЗ.СортироватьПоЗначению();
юТест.ПроверитьИстину(ПроверитьПорядок(СЗ, "аааааа", "аааааб", "Бааааа"), "Сортировка по регистру");
КонецПроцедуры
Процедура ТестДолжен_ПроверитьМетодСортироватьПоПредставлениюСпискаЗначений() Экспорт
СЗ = Новый СписокЗначений;
СЗ.Добавить(4,"14");
СЗ.Добавить(3,"3");
СЗ.Добавить(2,"2");
СЗ.Добавить(1,"1");
СЗ.СортироватьПоПредставлению();
юТест.ПроверитьИстину(ПроверитьПорядок(СЗ, 1, 4, 2, 3), "Сортировка по-умолчанию");
СЗ.СортироватьПоПредставлению(НаправлениеСортировки.Убыв);
юТест.ПроверитьИстину(ПроверитьПорядок(СЗ, 3, 2, 4, 1), "Сортировка по убыванию");
СЗ.СортироватьПоПредставлению(НаправлениеСортировки.Возр);
юТест.ПроверитьИстину(ПроверитьПорядок(СЗ, 1, 4, 2, 3), "Сортировка по возрастанию");
КонецПроцедуры
Процедура ТестДолжен_ПроверитьМетодНайтиСпискаЗначений() Экспорт
СЗ = Новый СписокЗначений;
Э0 = СЗ.Добавить(1.2);
Э1 = СЗ.Добавить("абв");
Э2 = СЗ.Добавить('20161009');
Э3 = СЗ.Добавить(Истина);
Э4 = СЗ.Добавить(Null);
Э5 = СЗ.Добавить(Неопределено);
юТест.ПроверитьРавенство(СЗ.НайтиПоЗначению(1.2) , Э0, "Поиск числа");
юТест.ПроверитьРавенство(СЗ.НайтиПоЗначению("абв") , Э1, "Поиск строки");
юТест.ПроверитьРавенство(СЗ.НайтиПоЗначению("АБВ") , Неопределено, "Поиск строки в другом регистре");
юТест.ПроверитьРавенство(СЗ.НайтиПоЗначению('20161009') , Э2, "Поиск даты");
юТест.ПроверитьРавенство(СЗ.НайтиПоЗначению(Истина) , Э3, "Поиск Истины");
юТест.ПроверитьРавенство(СЗ.НайтиПоЗначению(Null) , Э4, "Поиск Null");
юТест.ПроверитьРавенство(СЗ.НайтиПоЗначению(Неопределено), Э5, "Поиск Неопределено");
КонецПроцедуры