You've already forked OpenIntegrations
mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2025-10-08 22:51:57 +02:00
Механизм создания примеров кода на основе тестов
This commit is contained in:
171
.github/workflows/os/docs_examples.os
vendored
Normal file
171
.github/workflows/os/docs_examples.os
vendored
Normal file
@@ -0,0 +1,171 @@
|
||||
#Использовать osparser
|
||||
#использовать "../../../OInt/tools/"
|
||||
|
||||
Перем МодульТестов;
|
||||
Перем Парсер;
|
||||
Перем ОбластьТестов;
|
||||
Перем КаталогСохранения;
|
||||
|
||||
Процедура ПриСозданииОбъекта()
|
||||
|
||||
ПутьКТестам = "./OInt/tests/Modules/internal/OPI_Тесты.os";
|
||||
ОбластьТестов = "АтомарныеТесты";
|
||||
КаталогСохранения = "./docs/examples/";
|
||||
|
||||
Парсер = Новый ПарсерВстроенногоЯзыка;
|
||||
|
||||
МодульТестов = Новый ТекстовыйДокумент();
|
||||
МодульТестов.Прочитать(ПутьКТестам);
|
||||
|
||||
Начало = 0;
|
||||
Окончание = 0;
|
||||
|
||||
ПолучитьГраницыОбластиТестов(Начало, Окончание);
|
||||
|
||||
ДокументАтомарныхТестов = Новый ТекстовыйДокумент();
|
||||
|
||||
Для Н = Начало По Окончание Цикл
|
||||
ДокументАтомарныхТестов.ДобавитьСтроку(МодульТестов.ПолучитьСтроку(Н));
|
||||
КонецЦикла;
|
||||
|
||||
МодульТестов = ДокументАтомарныхТестов;
|
||||
|
||||
РазобратьТесты();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПолучитьГраницыОбластиТестов(Начало, Окончание)
|
||||
|
||||
ТекстМодуля = МодульТестов.ПолучитьТекст();
|
||||
СтруктураМодуля = Парсер.Разобрать(ТекстМодуля);
|
||||
|
||||
ВложенныеОбласти = 0;
|
||||
|
||||
Для Каждого Объявление Из СтруктураМодуля.Объявления Цикл
|
||||
|
||||
Если Строка(Объявление.Тип) = "ИнструкцияПрепроцессораОбласть" Тогда
|
||||
|
||||
Если Объявление.Имя = ОбластьТестов Тогда
|
||||
Начало = Объявление.Начало.НомерСтроки;
|
||||
КонецЕсли;
|
||||
|
||||
Если ЗначениеЗаполнено(Начало) Тогда
|
||||
ВложенныеОбласти = ВложенныеОбласти + 1;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если Строка(Объявление.Тип) = "ИнструкцияПрепроцессораКонецОбласти" И ЗначениеЗаполнено(Начало) Тогда
|
||||
|
||||
Если ВложенныеОбласти = 0 Тогда
|
||||
Окончание = Объявление.Начало.НомерСтроки;
|
||||
Прервать;
|
||||
Иначе
|
||||
ВложенныеОбласти = ВложенныеОбласти - 1;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура РазобратьТесты()
|
||||
|
||||
ТекстМодуля = МодульТестов.ПолучитьТекст();
|
||||
СтруктураМодуля = Парсер.Разобрать(ТекстМодуля);
|
||||
|
||||
Для Каждого Объявление Из СтруктураМодуля.Объявления Цикл
|
||||
|
||||
Если Строка(Объявление.Тип) = "ОбъявлениеМетода" Тогда
|
||||
РазобратьМетод(Объявление.Начало.НомерСтроки, Объявление.Сигнатура.Имя);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура РазобратьМетод(НомерСтроки, Имя)
|
||||
|
||||
РазбитоеИмя = СтрРазделить(Имя, "_", Ложь);
|
||||
|
||||
Если РазбитоеИмя.Количество() <> 2 Тогда
|
||||
Сообщить("Метод " + Имя + " был найден но не обработан", СтатусСообщения.ОченьВажное);
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
ТекстТекущейСтроки = МодульТестов.ПолучитьСтроку(НомерСтроки + 1);
|
||||
ТекстПримера = "";
|
||||
|
||||
Пока СтрНайти(ТекстТекущейСтроки, "END") = 0 И СтрНайти(ТекстТекущейСтроки, "КонецПроцедуры") = 0 Цикл
|
||||
|
||||
Если Не СтрНайти(ТекстТекущейСтроки, "SKIP") <> 0 Тогда
|
||||
ТекстПримера = ТекстПримера + Символы.ПС + ПреобразоватьТекст(ТекстТекущейСтроки);
|
||||
КонецЕсли;
|
||||
|
||||
НомерСтроки = НомерСтроки + 1;
|
||||
ТекстТекущейСтроки = МодульТестов.ПолучитьСтроку(НомерСтроки);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Каталог = КаталогСохранения + РазбитоеИмя[0];
|
||||
ОбъектКаталога = Новый Файл(Каталог);
|
||||
|
||||
Если Не ОбъектКаталога.Существует() Тогда
|
||||
СоздатьКаталог(Каталог);
|
||||
КонецЕсли;
|
||||
|
||||
ТекстПримера = СтрЗаменить(ТекстПримера, Символы.Таб, " ");
|
||||
ТекстПримера = " " + СокрЛП(ТекстПримера);
|
||||
|
||||
ФайлПримера = Новый ТекстовыйДокумент();
|
||||
ФайлПримера.УстановитьТекст(ТекстПримера);
|
||||
ФайлПримера.Записать(Каталог + "/" + РазбитоеИмя[1] + ".txt");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ПреобразоватьТекст(Текст)
|
||||
|
||||
Если СтрНайти(Текст, "ПараметрыФункции") Тогда
|
||||
|
||||
ИмяПараметра = ОпределитьИмяПараметра(Текст);
|
||||
Значение = OPI_ПолучениеДанныхТестов.ПолучитьПараметр(ИмяПараметра);
|
||||
|
||||
ЗакрытьСекретныеДанные(Значение, ИмяПараметра);
|
||||
|
||||
ОпределениеПараметра = "ПараметрыФункции[""" + ИмяПараметра + """]";
|
||||
Текст = СтрЗаменить(Текст, ОпределениеПараметра, """" + Строка(Значение) + """");
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Текст;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ОпределитьИмяПараметра(Текст)
|
||||
|
||||
НачалоПараметра = СтрНайти(Текст, "ПараметрыФункции[""") + 18;
|
||||
КонецПараметра = СтрНайти(Текст, """]");
|
||||
Имя = Сред(Текст, НачалоПараметра, КонецПараметра - НачалоПараметра);
|
||||
|
||||
Возврат Имя;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ЗакрытьСекретныеДанные(Значение, ИмяПараметра)
|
||||
|
||||
МассивПризнаковСекретов = Новый Массив;
|
||||
МассивПризнаковСекретов.Добавить("Secret");
|
||||
МассивПризнаковСекретов.Добавить("Token");
|
||||
МассивПризнаковСекретов.Добавить("Key");
|
||||
МассивПризнаковСекретов.Добавить("Refresh");
|
||||
|
||||
Для Каждого Признак Из МассивПризнаковСекретов Цикл
|
||||
Если СтрНайти(нРег(ИмяПараметра), нРег(Признак)) <> 0 Тогда
|
||||
Значение = Лев(Значение, Цел(СтрДлина(Значение) / 2)) + "...";
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
ПриСозданииОбъекта();
|
Reference in New Issue
Block a user