1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2026-05-22 10:05:29 +02:00

Перенос формирования примеров кода в основной процесс

This commit is contained in:
Anton Titovets
2024-08-12 13:25:08 +03:00
parent 9dfc48fedf
commit 663b571f83
21 changed files with 3434 additions and 3055 deletions
@@ -0,0 +1,249 @@
#Использовать osparser
#использовать "../../../../../src/ru/OInt/tools/"
Перем МодульТестов;
Перем Парсер;
Перем ОбластьТестов;
Перем КаталогСохранения;
Перем КаталогЗаписиЗначений;
Перем ТекущаяСтруктураЗначений;
Перем СоответствиеТестов;
Процедура ПолучитьПримерыКодаДокументации(Знач ПутьТестов, Знач ПутьПримеров, Знач ПутьЗначений, Знач ПутьНабора) Экспорт
ОбластьТестов = "АтомарныеТесты";
КаталогСохранения = ПутьПримеров;
КаталогЗаписиЗначений = ПутьЗначений;
ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON.ОткрытьФайл(ПутьНабора);
СоответствиеТестов = ПрочитатьJSON(ЧтениеJSON, Истина);
ЧтениеJSON.Закрыть();
Парсер = Новый ПарсерВстроенногоЯзыка;
МодульТестов = Новый ТекстовыйДокумент();
МодульТестов.Прочитать(ПутьТестов);
Начало = 0;
Окончание = 0;
ПолучитьГраницыОбластиТестов(Начало, Окончание);
ДокументАтомарныхТестов = Новый ТекстовыйДокумент();
Для Н = Начало По Окончание Цикл
ДокументАтомарныхТестов.ДобавитьСтроку(МодульТестов.ПолучитьСтроку(Н));
КонецЦикла;
МодульТестов = ДокументАтомарныхТестов;
РазобратьТесты();
ЗаписьJSON = Новый ЗаписьJSON();
ЗаписьJSON.ОткрытьФайл(ПутьНабора);
ЗаписатьJSON(ЗаписьJSON, СоответствиеТестов);
ЗаписьJSON.Закрыть();
КонецПроцедуры
Процедура ПолучитьГраницыОбластиТестов(Начало, Окончание)
ТекстМодуля = МодульТестов.ПолучитьТекст();
СтруктураМодуля = Парсер.Разобрать(ТекстМодуля);
ВложенныеОбласти = 0;
Для Каждого Объявление Из СтруктураМодуля.Объявления Цикл
Если Строка(Объявление.Тип) = "ИнструкцияПрепроцессораОбласть" Тогда
Если Объявление.Имя = ОбластьТестов Тогда
Начало = Объявление.Начало.НомерСтроки;
КонецЕсли;
Если ЗначениеЗаполнено(Начало) Тогда
ВложенныеОбласти = ВложенныеОбласти + 1;
КонецЕсли;
КонецЕсли;
Если Строка(Объявление.Тип) = "ИнструкцияПрепроцессораКонецОбласти" И ЗначениеЗаполнено(Начало) Тогда
Если ВложенныеОбласти = 0 Тогда
Окончание = Объявление.Начало.НомерСтроки;
Прервать;
Иначе
ВложенныеОбласти = ВложенныеОбласти - 1;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура РазобратьТесты()
ТекстМодуля = МодульТестов.ПолучитьТекст();
СтруктураМодуля = Парсер.Разобрать(ТекстМодуля);
Для Каждого Объявление Из СтруктураМодуля.Объявления Цикл
Если Строка(Объявление.Тип) = "ОбъявлениеМетода" Тогда
РазобратьМетод(Объявление.Начало.НомерСтроки, Объявление.Сигнатура.Имя);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура РазобратьМетод(НомерСтроки, Имя)
РазбитоеИмя = СтрРазделить(Имя, "_", Ложь);
Если РазбитоеИмя.Количество() <> 2 Тогда
Сообщить("Метод " + Имя + " был найден но не обработан", СтатусСообщения.ОченьВажное);
Возврат;
КонецЕсли;
ТекстТекущейСтроки = МодульТестов.ПолучитьСтроку(НомерСтроки + 1);
ТекстПримера = "";
ТекущаяСтруктураЗначений = Новый Структура();
ПрошлаяПустая = Ложь;
Пока СтрНайти(ТекстТекущейСтроки, "END") = 0 И СтрНайти(ТекстТекущейСтроки, "КонецПроцедуры") = 0 Цикл
ТекущаяПустая = Ложь;
ЭтоСкип = СтрНайти(ТекстТекущейСтроки, "SKIP") <> 0;
ЭтоЛог = СтрНайти(ТекстТекущейСтроки, "ЗаписатьЛог") <> 0;
Если Не ЗначениеЗаполнено(СокрЛП(ТекстТекущейСтроки))
Или ЭтоСкип Или ЭтоЛог Тогда
ТекущаяПустая = Истина;
КонецЕсли;
Если Не ЭтоСкип И Не ЭтоЛог Тогда
Если Не (ТекущаяПустая И ПрошлаяПустая) Тогда
ТекстПримера = ТекстПримера + Символы.ПС + ПреобразоватьТекст(ТекстТекущейСтроки);
КонецЕсли;
КонецЕсли;
НомерСтроки = НомерСтроки + 1;
ТекстТекущейСтроки = МодульТестов.ПолучитьСтроку(НомерСтроки);
ПрошлаяПустая = ТекущаяПустая;
КонецЦикла;
Каталог = КаталогСохранения + РазбитоеИмя[0];
ОбъектКаталога = Новый Файл(Каталог);
Если Не ОбъектКаталога.Существует() Тогда
СоздатьКаталог(Каталог);
КонецЕсли;
ТекстПримера = СтрЗаменить(ТекстПримера, Символы.Таб, " ");
ТекстПримера = " " + СокрЛП(ТекстПримера);
ТекстПримера = СтрЗаменить(ТекстПримера, " " + Символы.ПС + " " + Символы.ПС, Символы.ПС);
ТекстПримера = СтрЗаменить(ТекстПримера, Символы.ПС + " " + Символы.ПС, Символы.ПС);
ПутьПримера = Каталог + "/" + РазбитоеИмя[1] + ".txt";
ФайлПримера = Новый ТекстовыйДокумент();
ФайлПримера.УстановитьТекст(ТекстПримера);
ФайлПримера.Записать(ПутьПримера);
СоответствиеТестов.Вставить(Имя, Истина);
Если ЗначениеЗаполнено(ТекущаяСтруктураЗначений) Тогда
КаталогЗначений = КаталогЗаписиЗначений + РазбитоеИмя[0];
ОбъектКаталога = Новый Файл(КаталогЗначений);
Если Не ОбъектКаталога.Существует() Тогда
СоздатьКаталог(КаталогЗначений);
КонецЕсли;
ПутьДанных = КаталогЗначений + "/" + РазбитоеИмя[1] + ".json";
ФайлДанных = Новый Файл(ПутьДанных);
Если ФайлДанных.Существует() Тогда
ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON.ОткрытьФайл(ПутьДанных, "UTF-8");
СтараяСтруктураЗначений = ПрочитатьJSON(ЧтениеJSON, Истина);
ЧтениеJSON.Закрыть();
Для Каждого ЭлементСтруктуры Из СтараяСтруктураЗначений Цикл
ТекущаяСтруктураЗначений.Вставить(ЭлементСтруктуры.Ключ, ЭлементСтруктуры.Значение);
КонецЦикла;
КонецЕсли;
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.ОткрытьФайл(ПутьДанных, , , Новый ПараметрыЗаписиJSON());
ЗаписатьJSON(ЗаписьJSON, ТекущаяСтруктураЗначений);
ЗаписьJSON.Закрыть();
КонецЕсли;
КонецПроцедуры
Функция ПреобразоватьТекст(Текст)
Если СтрНайти(Текст, "ПараметрыФункции") Тогда
РазбитоеЗначение = СтрРазделить(Текст, "=", Ложь);
ИмяПараметра = ОпределитьИмяПараметра(Текст);
Попытка
Значение = OPI_ПолучениеДанныхТестов.ПолучитьПараметр(ИмяПараметра);
Исключение
ОО = ОписаниеОшибки();
Возврат Текст;
КонецПопытки;
ЗакрытьСекретныеДанные(Значение, ИмяПараметра);
Если РазбитоеЗначение.Количество() = 2 Тогда
ТекущаяСтруктураЗначений.Вставить(СокрЛП(РазбитоеЗначение[0]), Значение);
КонецЕсли;
ОпределениеПараметра = "ПараметрыФункции[""" + ИмяПараметра + """]";
Текст = СтрЗаменить(Текст, ОпределениеПараметра, """" + Строка(Значение) + """");
КонецЕсли;
Возврат Текст;
КонецФункции
Функция ОпределитьИмяПараметра(Текст)
НачалоПараметра = СтрНайти(Текст, "ПараметрыФункции[""") + 18;
КонецПараметра = СтрНайти(Текст, """]");
Имя = Сред(Текст, НачалоПараметра, КонецПараметра - НачалоПараметра);
Возврат Имя;
КонецФункции
Процедура ЗакрытьСекретныеДанные(Значение, ИмяПараметра)
МассивПризнаковСекретов = Новый Массив;
МассивПризнаковСекретов.Добавить("Secret");
МассивПризнаковСекретов.Добавить("Token");
МассивПризнаковСекретов.Добавить("Key");
МассивПризнаковСекретов.Добавить("Refresh");
Для Каждого Признак Из МассивПризнаковСекретов Цикл
Если СтрНайти(нРег(ИмяПараметра), нРег(Признак)) <> 0 Тогда
Значение = Лев(Значение, Цел(СтрДлина(Значение) / 2)) + "...";
Прервать;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
+22 -9
View File
@@ -15,21 +15,29 @@
Перем КаталогWorkflow;
Перем КаталогПараметровЛок;
Перем КаталогДополнений;
Перем МодульТестов;
Перем КаталогПримеров;
Перем КаталогЗначенийТестов;
Перем ФайлПроверкиНабораТестов;
Процедура ПриСозданииОбъекта()
ДанныеПроекта = ОбщиеМетоды.ПолучитьДанныеПроекта();
// Основные
Корень = ДанныеПроекта["root"];
КаталогПакета = ДанныеПроекта["packageSrc"];
ОсновнойЯзык = ДанныеПроекта["mainLang"];
Версия = ДанныеПроекта["version"];
Языки = ДанныеПроекта["additionalLangs"];
КаталогСловарей = ДанныеПроекта["dictionariesSrc"];
КаталогWorkflow = ДанныеПроекта["workflowsSrc"];
КаталогПараметровЛок = ДанныеПроекта["locVarsSrc"];
КаталогДополнений = ДанныеПроекта["paramsExamplesSrc"];
Корень = ДанныеПроекта["root"];
КаталогПакета = ДанныеПроекта["packageSrc"];
ОсновнойЯзык = ДанныеПроекта["mainLang"];
Версия = ДанныеПроекта["version"];
Языки = ДанныеПроекта["additionalLangs"];
КаталогСловарей = ДанныеПроекта["dictionariesSrc"];
КаталогWorkflow = ДанныеПроекта["workflowsSrc"];
КаталогПараметровЛок = ДанныеПроекта["locVarsSrc"];
КаталогДополнений = ДанныеПроекта["paramsExamplesSrc"];
КаталогПримеров = ДанныеПроекта["codeExamplesSrc"];
КаталогЗначенийТестов = ДанныеПроекта["testValuesSrc"];
ФайлПроверкиНабораТестов = ДанныеПроекта["testsCheckFile"];
МодульТестов = ДанныеПроекта["testsModule"];
ОсновнойПутьИсходников = Корень + ОсновнойЯзык + "/";
ПутьПакета = ОсновнойПутьИсходников + КаталогПакета;
@@ -57,6 +65,11 @@
МетодыВерсионирования.ОбновитьLibConfig(СоответствиеМодулей, ПутьПакета);
МетодыКонвертации.ПортироватьНабор(СоответствиеМодулей, СоответствиеЗамен);
МетодыПримеровКода.ПолучитьПримерыКодаДокументации(МодульТестов
, КаталогПримеров
, КаталогЗначенийТестов,
ФайлПроверкиНабораТестов);
ЕстьНовыеСлова = МетодыСловарей.СоздатьНаборСловарей(ФайлыРазбораСловаря, Языки, КаталогСловарей);
Если Не ЕстьНовыеСлова Тогда