1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2024-12-29 02:57:35 +02:00
OpenIntegrations/ci/os/tests_check.os
2024-10-19 20:51:38 +03:00

115 lines
5.1 KiB
Plaintext

#Использовать osparser
Перем ТекстТестов;
Перем МассивМетодов;
Процедура ПроверитьТесты()
Расположение = "./src/ru/OInt";
ОбщийМассивМодулей = Новый Массив;
МассивМетодов = Новый Массив;
ФайлыМодулей = НайтиФайлы(Расположение, "*.os", Истина);
Для Каждого Модуль Из ФайлыМодулей Цикл
ОбщийМассивМодулей.Добавить(Модуль);
КонецЦикла;
Для Каждого Модуль Из ОбщийМассивМодулей Цикл
ТекущийМодуль = Новый ТекстовыйДокумент();
ТекущийМодуль.Прочитать(Модуль.ПолноеИмя);
РазобратьМодуль(ТекущийМодуль, Модуль.ИмяБезРасширения);
КонецЦикла;
МассивТестов = Новый Массив;
МассивТестов.Добавить(Расположение + "/tests/Modules/internal/OPI_Тесты.os");
МассивТестов.Добавить(Расположение + "/tests/Modules/internal/OPI_ТестыCLI.os");
Для Каждого ФайлТестов Из МассивТестов Цикл
ФайлТестовИмя = Новый Файл(ФайлТестов);
ФайлТестовИмя = ФайлТестовИмя.ИмяБезРасширения;
МодульТестов = Новый ТекстовыйДокумент();
МодульТестов.Прочитать(ФайлТестов);
ТекстТестов = МодульТестов.ПолучитьТекст();
Для Каждого Метод Из МассивМетодов Цикл
Вхождения = СтрЧислоВхождений(ТекстТестов, СокрЛП(Метод));
Если Вхождения = 0 Тогда
Сообщить(ФайлТестовИмя + ": Тест не реализован: " + Метод);
ИначеЕсли Вхождения = 1 Тогда
Сообщить(ФайлТестовИмя + ": Тест встречается один раз. Возможно он реализован, но не вызван: " + Метод);
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Процедура РазобратьМодуль(ТекущийМодуль, ИмяМодуля)
ТекстМодуля = ТекущийМодуль.ПолучитьТекст();
СтруктураОбщихДанных = Новый Структура;
ПолучитьДанныеМодуля(СтруктураОбщихДанных, ТекущийМодуль);
Если Не ЗначениеЗаполнено(СтруктураОбщихДанных["Библиотека"]) Тогда
Возврат;
КонеЦесли;
ТекущаяБиблиотека = СтруктураОбщихДанных["Библиотека"];
Парсер = Новый ПарсерВстроенногоЯзыка;
СтруктураМодуля = Парсер.Разобрать(ТекстМодуля);
Для Каждого Метод Из СтруктураМодуля.Объявления Цикл
Если Метод.Тип = "ОбъявлениеМетода" И Метод.Сигнатура.Экспорт = Истина Тогда
ДокКом = СтрПолучитьСтроку(ТекстМодуля, Метод.Сигнатура.Начало.НомерСтроки - 1);
Первая = СтрПолучитьСтроку(ТекстМодуля, Метод.Сигнатура.Начало.НомерСтроки);
Если СтрНайти(ДокКом, "//") <> 0 И СтрНайти(Первая, "// Service") = 0 Тогда
МассивМетодов.Добавить(СтрЗаменить(ТекущаяБиблиотека, " ", "") + "_" + Метод.Сигнатура.Имя);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ПолучитьДанныеМодуля(СтруктураОбщихДанных, ТекущийМодуль)
Имя = ТекущийМодуль.ПолучитьСтроку(2);
CLI = ТекущийМодуль.ПолучитьСтроку(3);
Если СтрНайти(Имя, "Lib") = 0 Тогда
Имя = "";
Иначе
Имя = СтрЗаменить(Имя, "// Lib:", "");
Имя = СокрЛП(Имя);
КонецЕсли;
Если СтрНайти(CLI, "CLI") = 0 Тогда
CLI = "none";
Иначе
CLI = СтрЗаменить(CLI, "// CLI:", "");
CLI = СокрЛП(CLI);
КонецЕсли;
Каталог = СтрЗаменить(Имя, " ", "_");
СтруктураОбщихДанных.Вставить("Библиотека", Имя);
СтруктураОбщихДанных.Вставить("Команда" , CLI);
СтруктураОбщихДанных.Вставить("Каталог" , Каталог);
КонецПроцедуры
ПроверитьТесты();