2024-05-28 13:43:59 +02:00
|
|
|
#Использовать osparser
|
2024-05-31 23:02:00 +02:00
|
|
|
#использовать "../../../src/ru/OInt/tools/"
|
2024-05-28 13:43:59 +02:00
|
|
|
|
|
|
|
Перем МодульТестов;
|
|
|
|
Перем Парсер;
|
|
|
|
Перем ОбластьТестов;
|
|
|
|
Перем КаталогСохранения;
|
2024-05-28 15:04:06 +02:00
|
|
|
Перем КаталогЗаписиЗначений;
|
|
|
|
Перем ТекущаяСтруктураЗначений;
|
2024-05-28 13:43:59 +02:00
|
|
|
|
|
|
|
Процедура ПриСозданииОбъекта()
|
|
|
|
|
2024-05-31 23:02:00 +02:00
|
|
|
ПутьКТестам = "./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os";
|
2024-05-28 15:04:06 +02:00
|
|
|
ОбластьТестов = "АтомарныеТесты";
|
2024-06-04 16:23:37 +02:00
|
|
|
КаталогСохранения = "./docs/ru/examples/";
|
|
|
|
КаталогЗаписиЗначений = "./docs/ru/data/";
|
2024-05-28 13:43:59 +02:00
|
|
|
|
|
|
|
Парсер = Новый ПарсерВстроенногоЯзыка;
|
|
|
|
|
|
|
|
МодульТестов = Новый ТекстовыйДокумент();
|
|
|
|
МодульТестов.Прочитать(ПутьКТестам);
|
|
|
|
|
|
|
|
Начало = 0;
|
|
|
|
Окончание = 0;
|
|
|
|
|
|
|
|
ПолучитьГраницыОбластиТестов(Начало, Окончание);
|
|
|
|
|
|
|
|
ДокументАтомарныхТестов = Новый ТекстовыйДокумент();
|
|
|
|
|
|
|
|
Для Н = Начало По Окончание Цикл
|
|
|
|
ДокументАтомарныхТестов.ДобавитьСтроку(МодульТестов.ПолучитьСтроку(Н));
|
|
|
|
КонецЦикла;
|
|
|
|
|
|
|
|
МодульТестов = ДокументАтомарныхТестов;
|
|
|
|
|
|
|
|
РазобратьТесты();
|
|
|
|
|
|
|
|
КонецПроцедуры
|
|
|
|
|
|
|
|
Процедура ПолучитьГраницыОбластиТестов(Начало, Окончание)
|
|
|
|
|
|
|
|
ТекстМодуля = МодульТестов.ПолучитьТекст();
|
|
|
|
СтруктураМодуля = Парсер.Разобрать(ТекстМодуля);
|
|
|
|
|
|
|
|
ВложенныеОбласти = 0;
|
|
|
|
|
|
|
|
Для Каждого Объявление Из СтруктураМодуля.Объявления Цикл
|
|
|
|
|
|
|
|
Если Строка(Объявление.Тип) = "ИнструкцияПрепроцессораОбласть" Тогда
|
|
|
|
|
|
|
|
Если Объявление.Имя = ОбластьТестов Тогда
|
|
|
|
Начало = Объявление.Начало.НомерСтроки;
|
|
|
|
КонецЕсли;
|
|
|
|
|
|
|
|
Если ЗначениеЗаполнено(Начало) Тогда
|
|
|
|
ВложенныеОбласти = ВложенныеОбласти + 1;
|
|
|
|
КонецЕсли;
|
|
|
|
|
|
|
|
КонецЕсли;
|
|
|
|
|
|
|
|
Если Строка(Объявление.Тип) = "ИнструкцияПрепроцессораКонецОбласти" И ЗначениеЗаполнено(Начало) Тогда
|
|
|
|
|
|
|
|
Если ВложенныеОбласти = 0 Тогда
|
|
|
|
Окончание = Объявление.Начало.НомерСтроки;
|
|
|
|
Прервать;
|
|
|
|
Иначе
|
|
|
|
ВложенныеОбласти = ВложенныеОбласти - 1;
|
|
|
|
КонецЕсли;
|
|
|
|
|
|
|
|
КонецЕсли;
|
|
|
|
|
|
|
|
КонецЦикла;
|
|
|
|
|
|
|
|
КонецПроцедуры
|
|
|
|
|
|
|
|
Процедура РазобратьТесты()
|
|
|
|
|
|
|
|
ТекстМодуля = МодульТестов.ПолучитьТекст();
|
|
|
|
СтруктураМодуля = Парсер.Разобрать(ТекстМодуля);
|
|
|
|
|
|
|
|
Для Каждого Объявление Из СтруктураМодуля.Объявления Цикл
|
|
|
|
|
|
|
|
Если Строка(Объявление.Тип) = "ОбъявлениеМетода" Тогда
|
|
|
|
РазобратьМетод(Объявление.Начало.НомерСтроки, Объявление.Сигнатура.Имя);
|
|
|
|
КонецЕсли;
|
|
|
|
|
|
|
|
КонецЦикла;
|
|
|
|
|
|
|
|
КонецПроцедуры
|
|
|
|
|
|
|
|
Процедура РазобратьМетод(НомерСтроки, Имя)
|
|
|
|
|
|
|
|
РазбитоеИмя = СтрРазделить(Имя, "_", Ложь);
|
|
|
|
|
|
|
|
Если РазбитоеИмя.Количество() <> 2 Тогда
|
|
|
|
Сообщить("Метод " + Имя + " был найден но не обработан", СтатусСообщения.ОченьВажное);
|
|
|
|
Возврат;
|
|
|
|
КонецЕсли;
|
|
|
|
|
|
|
|
ТекстТекущейСтроки = МодульТестов.ПолучитьСтроку(НомерСтроки + 1);
|
|
|
|
ТекстПримера = "";
|
|
|
|
|
2024-05-28 15:04:06 +02:00
|
|
|
ТекущаяСтруктураЗначений = Новый Структура();
|
|
|
|
|
2024-06-05 10:29:36 +02:00
|
|
|
ПрошлаяПустая = Ложь;
|
2024-05-28 13:43:59 +02:00
|
|
|
Пока СтрНайти(ТекстТекущейСтроки, "END") = 0 И СтрНайти(ТекстТекущейСтроки, "КонецПроцедуры") = 0 Цикл
|
2024-06-05 10:29:36 +02:00
|
|
|
|
|
|
|
ТекущаяПустая = Ложь;
|
|
|
|
|
|
|
|
Если Не ЗначениеЗаполнено(СокрЛП(ТекстТекущейСтроки)) Тогда
|
|
|
|
ТекущаяПустая = Истина;
|
|
|
|
КонецЕсли;
|
|
|
|
|
2024-06-05 10:44:53 +02:00
|
|
|
Если СтрНайти(ТекстТекущейСтроки, "SKIP") = 0
|
|
|
|
И СтрНайти(ТекстТекущейСтроки, "ЗаписатьЛог") = 0 Тогда
|
2024-06-05 10:29:36 +02:00
|
|
|
Если Не (ТекущаяПустая И ПрошлаяПустая) Тогда
|
|
|
|
ТекстПримера = ТекстПримера + Символы.ПС + ПреобразоватьТекст(ТекстТекущейСтроки);
|
|
|
|
КонецЕсли;
|
2024-05-28 13:43:59 +02:00
|
|
|
КонецЕсли;
|
|
|
|
|
|
|
|
НомерСтроки = НомерСтроки + 1;
|
|
|
|
ТекстТекущейСтроки = МодульТестов.ПолучитьСтроку(НомерСтроки);
|
|
|
|
|
2024-06-05 10:29:36 +02:00
|
|
|
ПрошлаяПустая = ТекущаяПустая;
|
2024-06-05 10:44:53 +02:00
|
|
|
|
2024-05-28 13:43:59 +02:00
|
|
|
КонецЦикла;
|
|
|
|
|
|
|
|
Каталог = КаталогСохранения + РазбитоеИмя[0];
|
|
|
|
ОбъектКаталога = Новый Файл(Каталог);
|
|
|
|
|
|
|
|
Если Не ОбъектКаталога.Существует() Тогда
|
|
|
|
СоздатьКаталог(Каталог);
|
|
|
|
КонецЕсли;
|
|
|
|
|
|
|
|
ТекстПримера = СтрЗаменить(ТекстПримера, Символы.Таб, " ");
|
|
|
|
ТекстПримера = " " + СокрЛП(ТекстПримера);
|
2024-06-05 10:44:53 +02:00
|
|
|
ТекстПримера = СтрЗаменить(ТекстПримера, " " + Символы.ПС + " " + Символы.ПС, Символы.ПС);
|
|
|
|
ТекстПримера = СтрЗаменить(ТекстПримера, Символы.ПС + " " + Символы.ПС, Символы.ПС);
|
2024-05-28 13:43:59 +02:00
|
|
|
|
2024-06-05 11:58:00 +02:00
|
|
|
ПутьПримера = Каталог + "/" + РазбитоеИмя[1] + ".txt";
|
|
|
|
ОбъектПримера = Новый Файл(ПутьПримера);
|
|
|
|
|
|
|
|
Если Не ОбъектПримера.Существует() Тогда
|
|
|
|
ФайлПримера = Новый ТекстовыйДокумент();
|
|
|
|
ФайлПримера.УстановитьТекст(ТекстПримера);
|
|
|
|
ФайлПримера.Записать();
|
|
|
|
КонецЕсли;
|
2024-05-28 13:43:59 +02:00
|
|
|
|
2024-05-28 15:04:06 +02:00
|
|
|
Если ЗначениеЗаполнено(ТекущаяСтруктураЗначений) Тогда
|
|
|
|
|
|
|
|
КаталогЗначений = КаталогЗаписиЗначений + РазбитоеИмя[0];
|
|
|
|
ОбъектКаталога = Новый Файл(КаталогЗначений);
|
|
|
|
|
|
|
|
Если Не ОбъектКаталога.Существует() Тогда
|
|
|
|
СоздатьКаталог(КаталогЗначений);
|
|
|
|
КонецЕсли;
|
|
|
|
|
2024-06-05 11:58:00 +02:00
|
|
|
ПутьДанных = КаталогЗначений + "/" + РазбитоеИмя[1] + ".json";
|
|
|
|
ФайлДанных = Новый Файл(ПутьДанных);
|
|
|
|
|
|
|
|
Если Не ФайлДанных.Существует() Тогда
|
|
|
|
ЗаписьJSON = Новый ЗаписьJSON;
|
|
|
|
ЗаписьJSON.ОткрытьФайл(ПутьДанных, , , Новый ПараметрыЗаписиJSON());
|
|
|
|
ЗаписатьJSON(ЗаписьJSON, ТекущаяСтруктураЗначений);
|
|
|
|
ЗаписьJSON.Закрыть();
|
|
|
|
КонецЕсли;
|
2024-05-28 15:04:06 +02:00
|
|
|
|
|
|
|
КонецЕсли;
|
|
|
|
|
2024-05-28 13:43:59 +02:00
|
|
|
КонецПроцедуры
|
|
|
|
|
|
|
|
Функция ПреобразоватьТекст(Текст)
|
|
|
|
|
|
|
|
Если СтрНайти(Текст, "ПараметрыФункции") Тогда
|
|
|
|
|
2024-05-28 15:04:06 +02:00
|
|
|
РазбитоеЗначение = СтрРазделить(Текст, "=", Ложь);
|
|
|
|
|
2024-05-28 13:43:59 +02:00
|
|
|
ИмяПараметра = ОпределитьИмяПараметра(Текст);
|
|
|
|
Значение = OPI_ПолучениеДанныхТестов.ПолучитьПараметр(ИмяПараметра);
|
|
|
|
|
|
|
|
ЗакрытьСекретныеДанные(Значение, ИмяПараметра);
|
2024-05-28 15:04:06 +02:00
|
|
|
|
|
|
|
Если РазбитоеЗначение.Количество() = 2 Тогда
|
|
|
|
ТекущаяСтруктураЗначений.Вставить(СокрЛП(РазбитоеЗначение[0]), Значение);
|
|
|
|
КонецЕсли;
|
2024-05-28 13:43:59 +02:00
|
|
|
|
|
|
|
ОпределениеПараметра = "ПараметрыФункции[""" + ИмяПараметра + """]";
|
|
|
|
Текст = СтрЗаменить(Текст, ОпределениеПараметра, """" + Строка(Значение) + """");
|
|
|
|
КонецЕсли;
|
|
|
|
|
|
|
|
Возврат Текст;
|
|
|
|
|
|
|
|
КонецФункции
|
|
|
|
|
|
|
|
Функция ОпределитьИмяПараметра(Текст)
|
|
|
|
|
|
|
|
НачалоПараметра = СтрНайти(Текст, "ПараметрыФункции[""") + 18;
|
|
|
|
КонецПараметра = СтрНайти(Текст, """]");
|
|
|
|
Имя = Сред(Текст, НачалоПараметра, КонецПараметра - НачалоПараметра);
|
|
|
|
|
|
|
|
Возврат Имя;
|
|
|
|
|
|
|
|
КонецФункции
|
|
|
|
|
|
|
|
Процедура ЗакрытьСекретныеДанные(Значение, ИмяПараметра)
|
|
|
|
|
|
|
|
МассивПризнаковСекретов = Новый Массив;
|
|
|
|
МассивПризнаковСекретов.Добавить("Secret");
|
|
|
|
МассивПризнаковСекретов.Добавить("Token");
|
|
|
|
МассивПризнаковСекретов.Добавить("Key");
|
|
|
|
МассивПризнаковСекретов.Добавить("Refresh");
|
|
|
|
|
|
|
|
Для Каждого Признак Из МассивПризнаковСекретов Цикл
|
|
|
|
Если СтрНайти(нРег(ИмяПараметра), нРег(Признак)) <> 0 Тогда
|
|
|
|
Значение = Лев(Значение, Цел(СтрДлина(Значение) / 2)) + "...";
|
|
|
|
Прервать;
|
|
|
|
КонецЕсли;
|
|
|
|
КонецЦикла;
|
|
|
|
|
|
|
|
КонецПроцедуры
|
|
|
|
|
|
|
|
ПриСозданииОбъекта();
|