/
smwwiki
/
OneScript_fork
Обзор
Документация
Войти
/
smwwiki
/
OneScript_fork
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
tests/ValueTableIndex.os
245 строк
11 KB
Sergey Batanov
#1211 Тесты
05 ноя 2023, 02:47
05 ноя 2023, 02:47
5ee2cf6
Код
Авторство
О чём код?
/////////////////////////////////////////////////////////////////////// // // Тест проверки работы таблицы значений // // /////////////////////////////////////////////////////////////////////// Перем юТест; //////////////////////////////////////////////////////////////////// // Программный интерфейс Функция Версия() Экспорт Возврат "0.2"; КонецФункции Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт юТест = ЮнитТестирование; ВсеТесты = Новый Массив; ВсеТесты.Добавить("ТестДолжен_СоздатьТаблицуЗначенийСИндексами"); ВсеТесты.Добавить("ТестДолжен_ПроверитьСтроковоеПредставлениеИндекса"); ВсеТесты.Добавить("ТестДолжен_ПроверитьПоискСИндексом"); ВсеТесты.Добавить("ТестДолжен_ПоведениеИндексовПриУдаленииКолонок"); ВсеТесты.Добавить("ТестДолжен_ПоведениеИндексовПриИзмененииЗначенийИндексированныхПолей"); ВсеТесты.Добавить("ТестДолжен_ПроверитьВыбросИсключений"); Возврат ВсеТесты; КонецФункции Процедура ТестДолжен_СоздатьТаблицуЗначенийСИндексами() Экспорт Т = Новый ТаблицаЗначений; Т.Колонки.Добавить("К1"); Т.Колонки.Добавить("К2"); Т.Колонки.Добавить("К3"); И1 = Т.Индексы.Добавить("К1"); И2 = Т.Индексы.Добавить("К1,К2"); И3 = Т.Индексы.Добавить("К1,К2,К3"); юТест.ПроверитьРавенство(Т.Индексы.Количество(), 3); Т.Индексы.Удалить(Т.Индексы[0]); юТест.ПроверитьРавенство(Т.Индексы.Количество(), 2); Т.Колонки.К1.Имя = "К_1"; юТест.ПроверитьРавенство(Т.Индексы[0][0], "К_1"); Для Каждого мИндекс Из Т.Индексы Цикл Для Каждого мИмяКолонки Из мИндекс Цикл Колонка = Т.Колонки.Найти(мИмяКолонки); юТест.ПроверитьНеравенство(Колонка, Неопределено, "Не найдена колонка " + мИмяКолонки); КонецЦикла; КонецЦикла; Т.Индексы.Очистить(); юТест.ПроверитьРавенство(Т.Индексы.Количество(), 0); ИндексСОдинаковымиПолями = Т.Индексы.Добавить("К2, К2, К2"); юТест.ПроверитьРавенство(ИндексСОдинаковымиПолями[0], "К2"); юТест.ПроверитьРавенство(ИндексСОдинаковымиПолями[1], "К2"); юТест.ПроверитьРавенство(ИндексСОдинаковымиПолями[2], "К2"); КонецПроцедуры Процедура ТестДолжен_ПроверитьСтроковоеПредставлениеИндекса() Экспорт Т = Новый ТаблицаЗначений; Т.Колонки.Добавить("К1"); Т.Колонки.Добавить("К2"); И1 = Т.Индексы.Добавить("К1"); И2 = Т.Индексы.Добавить("К1,К2"); И3 = Т.Индексы.Добавить("К1,К2,К2"); И4 = Т.Индексы.Добавить("К2,К1,К2"); юТест.ПроверитьРавенство(Строка(И1), "К1"); юТест.ПроверитьРавенство(Строка(И2), "К1, К2"); юТест.ПроверитьРавенство(Строка(И3), "К1, К2, К2"); юТест.ПроверитьРавенство(Строка(И4), "К2, К1, К2"); КонецПроцедуры Процедура ТестДолжен_ПроверитьПоискСИндексом() Экспорт Т = Новый ТаблицаЗначений; Т.Колонки.Добавить("К1"); Т.Колонки.Добавить("К2"); Т.Индексы.Добавить("К1"); Т.Индексы.Добавить("К2,К1"); НекоеБольшоеЧисло = 1000; // не такое уж большое, чтобы тесты проходили быстрее Для Инд = 1 По НекоеБольшоеЧисло Цикл НоваяСтрока = Т.Добавить(); НоваяСтрока.К1 = НекоеБольшоеЧисло; НоваяСтрока.К2 = Инд; НоваяСтрока.К1 = Инд; КонецЦикла; НайтиИПроверить(Т, НекоеБольшоеЧисло, "Поиск по индексированному полю"); Т.Колонки.К1.Имя = "ДругоеИмя"; НайтиИПроверить(Т, НекоеБольшоеЧисло, "Переименовали проиндексированную колонку"); юТест.ПроверитьРавенство(Т.Индексы[0][0], "ДругоеИмя"); Т.Колонки.ДругоеИмя.Имя = "К1"; НайтиИПроверить(Т, НекоеБольшоеЧисло, "Вернули имя"); Т.Свернуть("К2, К1"); НайтиИПроверить(Т, НекоеБольшоеЧисло, "Свернули 0 раз"); Т.Свернуть("К2", "К1"); НайтиИПроверить(Т, НекоеБольшоеЧисло, "Свернули 1 раз"); Т.Свернуть("К1", "К2"); НайтиИПроверить(Т, НекоеБольшоеЧисло, "Свернули 2 раз"); Т.Свернуть("К1"); НайтиИПроверить(Т, НекоеБольшоеЧисло, "Свернули 3 раз"); КонецПроцедуры Процедура ТестДолжен_ПоведениеИндексовПриУдаленииКолонок() Экспорт Т = Новый ТаблицаЗначений; Т.Колонки.Добавить("К1"); Т.Добавить().К1 = 1; Т.Добавить().К1 = 2; Т.Добавить().К1 = 3; Т.Индексы.Добавить("К1"); юТест.ПроверитьРавенство(Строка(Т.Индексы[0]), "К1"); Т.Колонки.Очистить(); юТест.ПроверитьРавенство(Строка(Т.Индексы[0]), ""); // Индекс не удаляется, состав полей пустой Т.Колонки.Добавить("К1"); Т[0].К1 = 3; Т[1].К1 = 2; Т[2].К1 = 1; СтруктураПоиска = Новый Структура("К1", 1); НайденныеСтроки = Т.НайтиСтроки(СтруктураПоиска); юТест.ПроверитьРавенство(НайденныеСтроки.Количество(), 1); юТест.ПроверитьРавенство(НайденныеСтроки[0], Т[2]); КонецПроцедуры Процедура ТестДолжен_ПоведениеИндексовПриИзмененииЗначенийИндексированныхПолей() Экспорт Т = Новый ТаблицаЗначений; Т.Колонки.Добавить("К1"); Т.Колонки.Добавить("К2"); Т.Индексы.Добавить("К2"); Т.Индексы.Добавить("К2, К1"); Т.Индексы.Добавить("К1"); Т.Добавить().К1 = 1; Т.Добавить().К1 = 2; Т.Добавить().К1 = 3; Т[0].К1 = 3; Т[1].К1 = 2; Т[2].К1 = 1; СтруктураПоиска = Новый Структура("К1", 1); НайденныеСтроки = Т.НайтиСтроки(СтруктураПоиска); юТест.ПроверитьРавенство(НайденныеСтроки.Количество(), 1); юТест.ПроверитьРавенство(НайденныеСтроки[0], Т[2]); КонецПроцедуры Процедура ТестДолжен_ПроверитьВыбросИсключений() Экспорт Т = Новый ТаблицаЗначений; Т.Колонки.Добавить("К1"); Т.Колонки.Добавить("К2"); Т.Индексы.Добавить("К2"); Т.Индексы.Добавить("К2, К1"); Т.Индексы.Добавить("К1"); БылоИсключение = Ложь; Попытка Индекс = Т.Индексы[4]; Исключение БылоИсключение = Истина; КонецПопытки; юТест.ПроверитьИстину(БылоИсключение, "Доступ за пределы диапазона"); БылоИсключение = Ложь; Попытка Индекс = Т.Индексы[-1]; Исключение БылоИсключение = Истина; КонецПопытки; юТест.ПроверитьИстину(БылоИсключение, "Доступ за пределы диапазона"); Индекс = Т.Индексы[0]; Т.Индексы.Удалить(Индекс); БылоИсключение = Ложь; Попытка Т.Индексы.Удалить(Индекс); Исключение БылоИсключение = Истина; КонецПопытки; юТест.ПроверитьИстину(БылоИсключение, "Удаление несуществующего индекса"); БылоИсключение = Ложь; Попытка Т.Индексы[0] = Индекс; Исключение БылоИсключение = Истина; КонецПопытки; юТест.ПроверитьИстину(БылоИсключение, "Запись по индексу"); БылоИсключение = Ложь; Попытка Т.Индексы.Добавить("НесуществующееПоле"); Исключение БылоИсключение = Истина; КонецПопытки; юТест.ПроверитьИстину(БылоИсключение, "Индекс по несуществующему полю"); КонецПроцедуры Процедура НайтиИПроверить(Знач Таблица, Знач ИскомоеЗначение, Знач Пояснение) // в проверяемом тесте индексированное поле всегда первое ИндексированноеПоле = Таблица.Колонки[0].Имя; Отбор = Новый Структура(ИндексированноеПоле, ИскомоеЗначение); ПоискПоИндексу = Таблица.НайтиСтроки(Отбор); юТест.ПроверитьРавенство(ПоискПоИндексу.Количество(), 1, Пояснение); юТест.ПроверитьРавенство(ПоискПоИндексу[0][ИндексированноеПоле], ИскомоеЗначение, Пояснение); КонецПроцедуры