From 9f6ed7e3042a1f27c20c0c1bee1bcdf0fadf8fd4 Mon Sep 17 00:00:00 2001 From: Maximov Valery Date: Tue, 18 Apr 2023 10:20:11 +0300 Subject: [PATCH] =?UTF-8?q?=20-=20ORAIS-773:=20=D0=94=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=82=D0=BA=D0=B0=20=D0=B8=D0=BC=D0=B5=D0=BD=20=D0=BC?= =?UTF-8?q?=D0=B5=D1=82=D0=B0=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20=D1=82?= =?UTF-8?q?=D0=B0=D0=B1=D0=BB=D0=B8=D1=86=20=D0=B2=D0=BD=D0=B5=D1=88=D0=BD?= =?UTF-8?q?=D0=B8=D1=85=20=D0=B8=D1=81=D1=82=D0=BE=D1=87=D0=BD=D0=B8=D0=BA?= =?UTF-8?q?=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - исправлены ошибки в тестах --- src/Модули/МенеджерНастроек.os | 6 +- src/Модули/СценарииОбработки.os | 3 +- .../СортировкаСоставаПодсистем.os | 71 ++++++++++++------- .../Интеграция.xml | 1 + .../УведомленияПриИзмененииОбъектов.mdo | 1 + tests/ПроверкаСценариевОбработки.os | 6 +- 6 files changed, 59 insertions(+), 29 deletions(-) diff --git a/src/Модули/МенеджерНастроек.os b/src/Модули/МенеджерНастроек.os index 544b5d7..bdf1ce6 100644 --- a/src/Модули/МенеджерНастроек.os +++ b/src/Модули/МенеджерНастроек.os @@ -282,7 +282,11 @@ Функция ЭтоНовый() Экспорт - Возврат Настройки().ЭтоНовый(); + Если НЕ НастройкиИнициализированы Тогда + Возврат Истина; + Иначе + Возврат Настройки().ЭтоНовый(); + КонецЕсли; КонецФункции diff --git a/src/Модули/СценарииОбработки.os b/src/Модули/СценарииОбработки.os index 2a773c9..9cb8048 100644 --- a/src/Модули/СценарииОбработки.os +++ b/src/Модули/СценарииОбработки.os @@ -3,8 +3,7 @@ ТекущийКаталогСценариев = МенеджерПриложения.КаталогСценариев(); ВсеЗагруженные = Новый Массив; ФайлыГлобальныхСценариев = НайтиФайлы(ТекущийКаталогСценариев, "*.os"); - ФайлыЛокальныхСценариев = Новый Массив; - + ФайлыЛокальныхСценариев = Новый Массив; Лог = МенеджерПриложения.ПолучитьЛог(); diff --git a/src/СценарииОбработки/СортировкаСоставаПодсистем.os b/src/СценарииОбработки/СортировкаСоставаПодсистем.os index 1f0055f..4a2f3d1 100644 --- a/src/СценарииОбработки/СортировкаСоставаПодсистем.os +++ b/src/СценарииОбработки/СортировкаСоставаПодсистем.os @@ -39,8 +39,8 @@ Если АнализируемыйФайл.Существует() Тогда - Если ТипыФайлов.ЭтоФайлОписанияПодсистемы(АнализируемыйФайл) ИЛИ - ТипыФайлов.ЭтоФайлОписанияПодсистемыEDT(АнализируемыйФайл) Тогда + Если ТипыФайлов.ЭтоФайлОписанияПодсистемы(АнализируемыйФайл) + ИЛИ ТипыФайлов.ЭтоФайлОписанияПодсистемыEDT(АнализируемыйФайл) Тогда Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария()); ЭтоЕДТ = ТипыФайлов.ЭтоФайлОписанияПодсистемыEDT(АнализируемыйФайл); @@ -57,18 +57,14 @@ КонецЕсли; - Возврат ЛОЖЬ; + Возврат Ложь; КонецФункции // ОбработатьФайл() Функция ОтсортироватьПодсистему(Знач ИмяФайла, ЭтоЕДТ) СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла); - - ПоискДочерних = ?(ЭтоЕДТ, "(?:)([\w\W]+)(?:<\/content>)", "(\s+)(<[\w\W]+>)(\s+<\/Content>)"); - Регексп = Новый РегулярноеВыражение(ПоискДочерних); - Регексп.ИгнорироватьРегистр = ИСТИНА; - Регексп.Многострочный = ИСТИНА; + Регексп = РегекспСостав(ЭтоЕДТ); ПодчиненныеМетаданные = Регексп.НайтиСовпадения(СодержимоеФайла); Если ПодчиненныеМетаданные.Количество() = 0 Тогда @@ -78,31 +74,33 @@ КонецЕсли; ИсходнаяСтрока = ПодчиненныеМетаданные[0].Группы[0].Значение; - - //Тип.Объект или GUID - ПоискМетаданных = ?(ЭтоЕДТ, "^\s*<[\w]+>(?:([a-zA-Z]+)\.([а-яa-zA-ZА-Я0-9_]+)|(([a-zA-z0-9\-]+)))<\/[\w]+>", "^\s+<[\w:\s=""]+>(?:([a-zA-Z0-9_]+).([а-яa-zA-ZА-Я0-9_]+)|(([a-zA-z0-9\-]+)))<\/[\w:]+>"); - РегекспМетаданные = Новый РегулярноеВыражение(ПоискМетаданных); - РегекспМетаданные.ИгнорироватьРегистр = Истина; - РегекспМетаданные.Многострочный = Истина; - ОбъектыМетаданныхСтроки = РегекспМетаданные.НайтиСовпадения(ИсходнаяСтрока); + ОбъектыМетаданныхСтроки = РегекспМетаданные(ЭтоЕДТ).НайтиСовпадения(ИсходнаяСтрока); - ОбъектыТипаПоПорядку = Новый СписокЗначений; // отдельный список с типами, нужен для того, чтобы сохранить порядок при обходе соответствия + // отдельный список с типами, нужен для того, чтобы сохранить порядок при обходе соответствия + ОбъектыТипаПоПорядку = Новый СписокЗначений; ОбъектыМетаданных = Новый Соответствие; ПоследнийТип = ""; ОбъектыТипа = Новый СписокЗначений; Для Каждого ОбъектМетаданных Из ОбъектыМетаданныхСтроки Цикл - Список = ОбъектыМетаданных.Получить(ОбъектМетаданных.Группы[1].Значение); + ТипМетаданных = ОбъектМетаданных.Группы[1].Значение; + СтрокаМетаданных = ОбъектМетаданных.Группы[0].Значение; + ИмяМетаданного = ОбъектМетаданных.Группы[2].Значение; + Если СтрНачинаетсяС(ИмяМетаданного, ".") Тогда + ИмяМетаданного = Сред(ИмяМетаданного, 2); + КонецЕсли; + + Список = ОбъектыМетаданных.Получить(ТипМетаданных); Если Список = Неопределено Тогда Список = Новый СписокЗначений; - ОбъектыМетаданных.Вставить(ОбъектМетаданных.Группы[1].Значение, Список); - ОбъектыТипаПоПорядку.Добавить(ОбъектМетаданных.Группы[1].Значение); - КонецЕсли; - + ОбъектыМетаданных.Вставить(ТипМетаданных, Список); + ОбъектыТипаПоПорядку.Добавить(ТипМетаданных); + КонецЕсли; + Если Список.НайтиПоЗначению(ОбъектМетаданных.Группы[0].Значение) = Неопределено Тогда - Список.Добавить(ОбъектМетаданных.Группы[0].Значение, ОбъектМетаданных.Группы[2].Значение); + Список.Добавить(ОбъектМетаданных.Группы[0].Значение, ИмяМетаданного); КонецЕсли; КонецЦикла; @@ -120,7 +118,8 @@ КонецЦикла; Если НЕ ЭтоЕДТ Тогда - СтрокаЗамены = ПодчиненныеМетаданные[0].Группы[1].Значение + СокрЛП(СтрокаЗамены) + ПодчиненныеМетаданные[0].Группы[3].Значение; + СтрокаЗамены = ПодчиненныеМетаданные[0].Группы[1].Значение + СокрЛП(СтрокаЗамены) + + ПодчиненныеМетаданные[0].Группы[3].Значение; КонецЕсли; Если СтрСравнить(ИсходнаяСтрока, СтрокаЗамены) = 0 Тогда @@ -139,4 +138,28 @@ Возврат Истина; -КонецФункции \ No newline at end of file +КонецФункции + +Функция РегекспСостав(ЭтоЕДТ) + + ПоискДочерних = ?(ЭтоЕДТ, "(?:)([\w\W]+)(?:<\/content>)", "(\s+)(<[\w\W]+>)(\s+<\/Content>)"); + Регексп = Новый РегулярноеВыражение(ПоискДочерних); + Регексп.ИгнорироватьРегистр = Истина; + Регексп.Многострочный = Истина; + + Возврат Регексп; + +КонецФункции + +Функция РегекспМетаданные(ЭтоЕДТ) + + ШаблонНачало = ?(ЭтоЕДТ, "^\s*<[\w]+>", "^\s+<[\w:\s=""]+>"); + ШаблонИмяМетаданных = "([a-zA-Z]+)((?:\.(?:[а-яa-zA-ZА-Я0-9_]+))+)"; + ШаблонУИД = "(([a-zA-z0-9\-]+))"; + ПоискМетаданных = СтрШаблон("%1(?:%2|%3)<\/[\w:]+>", ШаблонНачало, ШаблонУИД, ШаблонИмяМетаданных); + Регексп = Новый РегулярноеВыражение(ПоискМетаданных); + Регексп.ИгнорироватьРегистр = Истина; + Регексп.Многострочный = Истина; + + Возврат Регексп; +КонецФункции diff --git a/tests/fixtures/СортировкаОбъектовВПодсистемах/Интеграция.xml b/tests/fixtures/СортировкаОбъектовВПодсистемах/Интеграция.xml index a7a0271..6129550 100644 --- a/tests/fixtures/СортировкаОбъектовВПодсистемах/Интеграция.xml +++ b/tests/fixtures/СортировкаОбъектовВПодсистемах/Интеграция.xml @@ -25,6 +25,7 @@ 4308b2f2-9e92-486e-8c34-13c11fd5fb49 Enum.Енум7 Enum.Енум6 + ExternalDataSource.ТекущаяСУБД.Table.ИнформацияОбОшибках diff --git a/tests/fixtures/СортировкаОбъектовВПодсистемах/УведомленияПриИзмененииОбъектов.mdo b/tests/fixtures/СортировкаОбъектовВПодсистемах/УведомленияПриИзмененииОбъектов.mdo index 90bd8a7..cea45be 100644 --- a/tests/fixtures/СортировкаОбъектовВПодсистемах/УведомленияПриИзмененииОбъектов.mdo +++ b/tests/fixtures/СортировкаОбъектовВПодсистемах/УведомленияПриИзмененииОбъектов.mdo @@ -14,5 +14,6 @@ CommonModule.УведомленияПереопределяемый Catalog.ВидыУведомлений CommonModule.УведомленияСерверПовтИсп + ExternalDataSource.ТекущаяСУБД.Table.ИнформацияОбОшибках Subsystem.ПодсистемыБСП.Subsystem.ОбменСообщениями diff --git a/tests/ПроверкаСценариевОбработки.os b/tests/ПроверкаСценариевОбработки.os index f0f1047..1ace3e3 100644 --- a/tests/ПроверкаСценариевОбработки.os +++ b/tests/ПроверкаСценариевОбработки.os @@ -3,6 +3,7 @@ #Использовать logos #Использовать tempfiles #Использовать fs +#Использовать ".." Перем юТест; Перем Лог; @@ -102,7 +103,7 @@ Ожидаем.Что(Результат, Истина).ЭтоИстина(); ТекстПосле = ФайловыеОперации.ПрочитатьТекстФайла(Файл.ПолноеИмя); Ожидаем.Что(ТекстДо, Истина).Не_().Равно(ТекстПосле); - + Ожидаем.Что(СтрЧислоСтрок(ТекстДо), Истина).Равно(СтрЧислоСтрок(ТекстПосле)); ИмяФайла = "СортировкаОбъектовВПодсистемах/УведомленияПриИзмененииОбъектов.mdo"; Файл = ПодготовитьИзменяемыйТестовыйФайл(ИмяФайла, "УведомленияПриИзмененииОбъектов.mdo", "Subsystems"); @@ -111,6 +112,7 @@ Ожидаем.Что(Результат, Истина).ЭтоИстина(); ТекстПосле = ФайловыеОперации.ПрочитатьТекстФайла(Файл.ПолноеИмя); Ожидаем.Что(ТекстДо, Истина).Не_().Равно(ТекстПосле); + Ожидаем.Что(СтрЧислоСтрок(ТекстДо), Истина).Равно(СтрЧислоСтрок(ТекстПосле)); ИмяФайла = "СортировкаОбъектовВПодсистемах/ОбменСообщениями.mdo"; Файл = ПодготовитьИзменяемыйТестовыйФайл(ИмяФайла, "ОбменСообщениями.mdo", "Subsystems"); @@ -120,7 +122,7 @@ Ожидаем.Что(Результат, Истина).ЭтоИстина(); ТекстПосле = ФайловыеОперации.ПрочитатьТекстФайла(Файл.ПолноеИмя); Ожидаем.Что(ТекстДо, Истина).Равно(ТекстПосле); - + Ожидаем.Что(СтрЧислоСтрок(ТекстДо), Истина).Равно(СтрЧислоСтрок(ТекстПосле)); КонецПроцедуры