diff --git a/exts/yaxunit/src/CommonModules/ЮТЗависимостиСлужебный/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТЗависимостиСлужебный/Module.bsl index 439178b9..3001f07f 100644 --- a/exts/yaxunit/src/CommonModules/ЮТЗависимостиСлужебный/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТЗависимостиСлужебный/Module.bsl @@ -18,102 +18,6 @@ #Область СлужебныйПрограммныйИнтерфейс -// Разрешить зависимости. -// -// Параметры: -// ТестовыйМодуль - см. ЮТФабрикаСлужебный.ОписаниеИсполняемогоТестовогоМодуля -Процедура РазрешитьЗависимости(ТестовыйМодуль) Экспорт - - РезультатРазрешенияЗависимостей = РазрешитьЗависимостиОбъекта(ТестовыйМодуль); - Статусы = ЮТФабрика.СтатусыИсполненияТеста(); - - Если НЕ РезультатРазрешенияЗависимостей.Успешно Тогда - УстановитьОшибкиВ(ТестовыйМодуль.НаборыТестов, РезультатРазрешенияЗависимостей.Ошибка); - Возврат; - КонецЕсли; - - Для Каждого Набор Из ТестовыйМодуль.НаборыТестов Цикл - - РезультатРазрешенияЗависимостей = РазрешитьЗависимостиОбъекта(Набор); - - Если НЕ РезультатРазрешенияЗависимостей.Успешно Тогда - УстановитьОшибкиВ(Набор.Тесты, РезультатРазрешенияЗависимостей.Ошибка); - Набор.Ошибки.Добавить(РезультатРазрешенияЗависимостей.Ошибка); - Набор.Выполнять = Ложь; - Продолжить; - КонецЕсли; - - Для Каждого Тест Из Набор.Тесты Цикл - РезультатРазрешенияЗависимостей = РазрешитьЗависимостиОбъекта(Тест); - - Если НЕ РезультатРазрешенияЗависимостей.Успешно Тогда - Тест.Ошибки.Добавить(РезультатРазрешенияЗависимостей.Ошибка); - Тест.Статус = Статусы.Пропущен; - КонецЕсли; - КонецЦикла; - - КонецЦикла; - -КонецПроцедуры - -// Дедупликация зависимостей. -// -// Параметры: -// РезультатЧтенияТестов - Массив из см. ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля - Набор описаний тестовых модулей, которые содержат информацию о запускаемых тестах -Процедура ДедупликацияЗависимостей(РезультатЧтенияТестов) Экспорт - - Зависимости = Новый Соответствие(); - - Для Каждого ТестовыйМодуль Из РезультатЧтенияТестов Цикл - - ДедупликацияЗависимостейОбъекта(Зависимости, ТестовыйМодуль); - - Для Каждого ТестовыйНабор Из ТестовыйМодуль.НаборыТестов Цикл - - ДедупликацияЗависимостейОбъекта(Зависимости, ТестовыйНабор); - - Для Каждого Тест Из ТестовыйНабор.Тесты Цикл - ДедупликацияЗависимостейОбъекта(Зависимости, Тест); - КонецЦикла; - - КонецЦикла; - - КонецЦикла; - -КонецПроцедуры - -Процедура СохранитьРезультатРазрешенияЗависимости(КлючЗависимости, Результат) Экспорт - - КонтекстРазрешенныеЗависимости = ЮТКонтекстСлужебный.ЗначениеКонтекста(ИмяКонтекстаРазрешенныеЗависимости()); - КонтекстРазрешенныеЗависимости.Вставить(КлючЗависимости, Результат); - - ПередаваемыеЗначения = Новый Соответствие(); - ИмяКонтекстаДанныеЗависимостей = ИмяКонтекстаДанныеЗависимостей(); - - Если Результат.СохраняемыйКонтекст <> Неопределено Тогда - - ПередаваемыеЗначения.Вставить(КлючЗависимости, Результат.СохраняемыйКонтекстСервер); - ЮТКонтекстСлужебный.ВставитьЗначениеКонтекста(ИмяКонтекстаДанныеЗависимостей, ПередаваемыеЗначения); - ЮТКонтекстСлужебный.ВставитьЗначениеКонтекста(ИмяКонтекстаДанныеЗависимостей, ПередаваемыеЗначения, Истина); - - КонецЕсли; - - Если Результат.СохраняемыйКонтекстСервер <> Неопределено Тогда - - ПередаваемыеЗначения.Вставить(КлючЗависимости, Результат.СохраняемыйКонтекстСервер); - ЮТКонтекстСлужебный.ВставитьЗначениеКонтекста(ИмяКонтекстаДанныеЗависимостей, ПередаваемыеЗначения, Истина); - - КонецЕсли; - - Если Результат.СохраняемыйКонтекстКлиент <> Неопределено Тогда - - ПередаваемыеЗначения.Вставить(КлючЗависимости, Результат.СохраняемыйКонтекстКлиент); - ЮТКонтекстСлужебный.ВставитьЗначениеКонтекста(ИмяКонтекстаДанныеЗависимостей, ПередаваемыеЗначения); - - КонецЕсли; - -КонецПроцедуры - Функция ДанныеЗависимости(ОписаниеЗависимости) Экспорт КлючЗависимости = КлючЗависимости(ОписаниеЗависимости); @@ -151,66 +55,7 @@ #Область СлужебныеПроцедурыИФункции -Функция РазрешитьЗависимостиОбъекта(Объект) - - Для Каждого Зависимость Из Объект.Зависимости Цикл - - Результат = РазрешитьЗависимость(Зависимость); - - Если НЕ Результат.Успешно Тогда - Возврат Результат; - КонецЕсли; - - КонецЦикла; - - Возврат Новый Структура("Успешно, Ошибка", Истина); - -КонецФункции - -Функция РазрешитьЗависимость(ОписаниеЗависимости) - - Сообщение = СтрШаблон("Не удалось разрешить зависимость `%1`", ПредставлениеЗависимости(ОписаниеЗависимости)); - - РезультатРазрешения = РезультатРазрешенияЗависимости(ОписаниеЗависимости.Ключ); - - Если РезультатРазрешения <> Неопределено Тогда - Возврат РезультатРазрешения; - КонецЕсли; - - Попытка - РезультатРазрешения = ЮТМетодыСлужебный.ВызватьФункцию(ОписаниеЗависимости.МетодРеализации, ОписаниеЗависимости.Параметры); - Исключение - РезультатРазрешения = ЮТФабрикаСлужебный.РезультатРазрешенияЗависимости(); - РезультатРазрешения.Ошибка = ОписаниеОшибкиПропуска(Сообщение, ИнформацияОбОшибке()); - СохранитьРезультатРазрешенияЗависимости(ОписаниеЗависимости.Ключ, РезультатРазрешения); - Возврат РезультатРазрешения; - КонецПопытки; - - Если НЕ РезультатРазрешения.Успешно Тогда - - Если РезультатРазрешения.Ошибка = Неопределено Тогда - РезультатРазрешения.Ошибка = ОписаниеОшибкиПропуска(Сообщение); - Иначе - РезультатРазрешения.Ошибка = ОписаниеОшибкиПропуска(Сообщение, РезультатРазрешения.Ошибка); - КонецЕсли; - - КонецЕсли; - - СохранитьРезультатРазрешенияЗависимости(ОписаниеЗависимости.Ключ, РезультатРазрешения); - - Возврат РезультатРазрешения; - -КонецФункции - -Процедура ДедупликацияЗависимостейОбъекта(Зависимости, Объект) - - Для Инд = 0 По Объект.Зависимости.ВГраница() Цикл - Объект.Зависимости[Инд] = УникальнаяЗависимость(Зависимости, Объект.Зависимости[Инд]); - КонецЦикла; - -КонецПроцедуры - -Функция КлючЗависимости(ОписаниеЗависимости) +Функция КлючЗависимости(ОписаниеЗависимости) Экспорт Идентификатор = ВРег(ОписаниеЗависимости.Идентификатор); @@ -222,6 +67,16 @@ КонецФункции +Функция ПредставлениеЗависимости(ОписаниеЗависимости) Экспорт + + Если ЗначениеЗаполнено(ОписаниеЗависимости.Параметры) Тогда + Возврат ОписаниеЗависимости.Идентификатор + ЮТКоллекции.ПредставлениеМассива(ОписаниеЗависимости.Параметры); + Иначе + Возврат ОписаниеЗависимости.Идентификатор; + КонецЕсли; + +КонецФункции + Функция УникальнаяЗависимость(Зависимости, ОписаниеЗависимости) Экспорт КлючЗависимости = КлючЗависимости(ОписаниеЗависимости); @@ -244,53 +99,9 @@ КонецФункции -Функция ПредставлениеЗависимости(ОписаниеЗависимости) - - Если ЗначениеЗаполнено(ОписаниеЗависимости.Параметры) Тогда - Возврат ОписаниеЗависимости.Идентификатор + ЮТКоллекции.ПредставлениеМассива(ОписаниеЗависимости.Параметры); - Иначе - Возврат ОписаниеЗависимости.Идентификатор; - КонецЕсли; - -КонецФункции - -Функция ОписаниеОшибкиПропуска(Описание, ИнформацияОбОшибке = Неопределено) - - Ошибка = ЮТФабрикаСлужебный.ОписаниеОшибкиПропуска(Описание); - - Если ИнформацияОбОшибке = Неопределено Тогда - Возврат Ошибка; - КонецЕсли; - - ТипОшибки = ТипЗнч(ИнформацияОбОшибке); - - Если ТипОшибки = Тип("Структура") Тогда - ЗаполнитьЗначенияСвойств(Ошибка, ИнформацияОбОшибке, , "ТипОшибки, Сообщение"); - Ошибка.Сообщение = ЮТСтроки.ДобавитьСтроку(Описание, ИнформацияОбОшибке.Сообщение, Символы.ПС); - ИначеЕсли ТипОшибки = Тип("ИнформацияОбОшибке") Тогда - Ошибка.Стек = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); - ИначеЕсли ТипОшибки = Тип("Строка") Тогда - Ошибка.Сообщение = ЮТСтроки.ДобавитьСтроку(Описание, ИнформацияОбОшибке, Символы.ПС); - КонецЕсли; - - Возврат Ошибка; - -КонецФункции - -Функция УстановитьОшибкиВ(Объекты, Ошибка) - - Для Каждого Объект Из Объекты Цикл - Объект.Ошибки.Добавить(Ошибка); - Объект.Выполнять = Ложь; - КонецЦикла; - - Возврат Ошибка; - -КонецФункции - Функция РезультатРазрешенияЗависимости(КлючЗависимости) - ДанныеКонтекста = ЮТКонтекстСлужебный.ЗначениеКонтекста(ИмяКонтекстаРазрешенныеЗависимости()); + ДанныеКонтекста = КонтекстРазрешенныеЗависимости(); Возврат ДанныеКонтекста[КлючЗависимости]; КонецФункции @@ -311,13 +122,19 @@ КонецПроцедуры -Функция ИмяКонтекстаРазрешенныеЗависимости() +Функция КонтекстРазрешенныеЗависимости() Экспорт + + Возврат ЮТКонтекстСлужебный.ЗначениеКонтекста(ИмяКонтекстаРазрешенныеЗависимости()); + +КонецФункции + +Функция ИмяКонтекстаРазрешенныеЗависимости() Экспорт Возврат "КонтекстРазрешенныеЗависимости"; КонецФункции -Функция ИмяКонтекстаДанныеЗависимостей() +Функция ИмяКонтекстаДанныеЗависимостей() Экспорт Возврат "КонтекстДанныеЗависимостей"; diff --git a/exts/yaxunit/src/CommonModules/ЮТЗависимостиСлужебныйКлиент/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТЗависимостиСлужебныйКлиент/Module.bsl new file mode 100644 index 00000000..33999de7 --- /dev/null +++ b/exts/yaxunit/src/CommonModules/ЮТЗависимостиСлужебныйКлиент/Module.bsl @@ -0,0 +1,320 @@ +//©///////////////////////////////////////////////////////////////////////////©// +// +// Copyright 2021-2024 BIA-Technologies Limited Liability Company +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//©///////////////////////////////////////////////////////////////////////////©// + +#Область СлужебныйПрограммныйИнтерфейс + +// Разрешить зависимости. +// +// Параметры: +// ТестовыеМодули - Массив из см. ЮТФабрикаСлужебный.ОписаниеИсполняемогоТестовогоМодуля +// Обработчик - ОписаниеОповещения +Процедура РазрешитьЗависимости(ТестовыеМодули, Обработчик) Экспорт + + Зависимости = СобратьЗависимости(ТестовыеМодули); + + Если НЕ ЗначениеЗаполнено(Зависимости) Тогда + ЮТЛогирование.Отладка("Обработка зависимостей: нет зависимостей"); + ЮТАсинхроннаяОбработкаСлужебныйКлиент.ВызватьОбработчик(Обработчик); + Возврат; + КонецЕсли; + + ПараметрыИсполнения = ЮТАсинхроннаяОбработкаСлужебныйКлиент.ЦепочкаАсинхроннойОбработки(); + ПараметрыИсполнения.Вставить("ТестовыеМодули", ТестовыеМодули); + + Для Каждого ОписаниеЗависимости Из Зависимости Цикл + Параметры = Новый Структура("ОписаниеЗависимости, ПараметрыИсполнения", ОписаниеЗависимости, ПараметрыИсполнения); + + Если ОписаниеЗависимости.Асинхронный Тогда + Загрузчик = Новый ОписаниеОповещения("РазрешитьЗависимостьАсинхронно", ЭтотОбъект, Параметры); + Иначе + Загрузчик = Новый ОписаниеОповещения("РазрешитьЗависимость", ЭтотОбъект, Параметры); + КонецЕсли; + + ПараметрыИсполнения.Цепочка.Добавить(Загрузчик); + КонецЦикла; + + ПараметрыИсполнения.Цепочка.Добавить(Новый ОписаниеОповещения("ПослеОбработкиЗависимостей", ЭтотОбъект, ПараметрыИсполнения)); + ПараметрыИсполнения.Цепочка.Добавить(Обработчик); + + ЮТАсинхроннаяОбработкаСлужебныйКлиент.ВызватьСледующийОбработчик(ПараметрыИсполнения); + +КонецПроцедуры + +// Дедупликация зависимостей. +// +// Параметры: +// РезультатЧтенияТестов - Массив из см. ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля - Набор описаний тестовых модулей, которые содержат информацию о запускаемых тестах +Процедура ДедупликацияЗависимостей(РезультатЧтенияТестов) Экспорт + + Зависимости = Новый Соответствие(); + + Для Каждого ТестовыйМодуль Из РезультатЧтенияТестов Цикл + + ДедупликацияЗависимостейОбъекта(Зависимости, ТестовыйМодуль); + + Для Каждого ТестовыйНабор Из ТестовыйМодуль.НаборыТестов Цикл + + ДедупликацияЗависимостейОбъекта(Зависимости, ТестовыйНабор); + + Для Каждого Тест Из ТестовыйНабор.Тесты Цикл + ДедупликацияЗависимостейОбъекта(Зависимости, Тест); + КонецЦикла; + + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область РазрешениеЗависимостей + +Функция СобратьЗависимости(ТестовыеМодули) + + Зависимости = Новый Массив(); + ДобавленныеЗависимости = Новый Соответствие(); + + Для Каждого ТестовыйМодуль Из ТестовыеМодули Цикл + + СобратьЗависимостиОбъекта(ТестовыйМодуль, Зависимости, ДобавленныеЗависимости); + + Для Каждого Набор Из ТестовыйМодуль.НаборыТестов Цикл + + СобратьЗависимостиОбъекта(Набор, Зависимости, ДобавленныеЗависимости); + + Для Каждого Тест Из Набор.Тесты Цикл + СобратьЗависимостиОбъекта(Тест, Зависимости, ДобавленныеЗависимости); + КонецЦикла; + + КонецЦикла; + + КонецЦикла; + + Возврат Зависимости; + +КонецФункции + +Процедура СобратьЗависимостиОбъекта(Объект, Зависимости, ДобавленныеЗависимости) + + Для Каждого Зависимость Из Объект.Зависимости Цикл + + Если ДобавленныеЗависимости[Зависимость.Ключ] = Неопределено Тогда + Зависимости.Добавить(Зависимость); + ДобавленныеЗависимости.Вставить(Зависимость.Ключ, Истина); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура РазрешитьЗависимостьАсинхронно(Результат, Параметры) Экспорт + + ОписаниеЗависимости = Параметры.ОписаниеЗависимости; + ЮТЛогирование.Отладка("Обработка зависимостей: асинхронная обработка зависимости " + ЮТЗависимостиСлужебный.ПредставлениеЗависимости(ОписаниеЗависимости)); + + Обработчик = Новый ОписаниеОповещения("ОбработатьРезультатРазрешенияЗависимости", ЭтотОбъект, Параметры); + + ИмяМетода = ОписаниеЗависимости.МетодРеализации; + ПараметрыМетода = ЮТКоллекции.СкопироватьМассив(ОписаниеЗависимости.Параметры); + ПараметрыМетода.Добавить(Обработчик); + + Ошибка = ЮТМетодыСлужебный.ВыполнитьМетод(ИмяМетода, ПараметрыМетода); + + Если Ошибка <> Неопределено Тогда + РезультатРазрешения = ЮТФабрикаСлужебный.РезультатРазрешенияЗависимости(); + РезультатРазрешения.Ошибка = Ошибка; + ОбработатьРезультатРазрешенияЗависимости(РезультатРазрешения, Параметры); + КонецЕсли; + +КонецПроцедуры + +Процедура ОбработатьРезультатРазрешенияЗависимости(Результат, Параметры) Экспорт + + ОписаниеЗависимости = Параметры.ОписаниеЗависимости; + ПредставлениеЗависимости = ЮТЗависимостиСлужебный.ПредставлениеЗависимости(ОписаниеЗависимости); + ЮТЛогирование.Отладка("Обработка зависимостей: заврешена обработка зависимости " + ПредставлениеЗависимости); + + ПараметрыИсполнения = Параметры.ПараметрыИсполнения; + + Если НЕ Результат.Успешно Тогда + Сообщение = СтрШаблон("Не удалось разрешить зависимость `%1`", ПредставлениеЗависимости); + Результат.Ошибка = ОписаниеОшибкиПропуска(Сообщение, Результат.Ошибка); + ЮТЛогирование.Ошибка(Результат.Ошибка.Сообщение); + КонецЕсли; + + СохранитьРезультатРазрешенияЗависимости(ОписаниеЗависимости.Ключ, Результат); + ЮТАсинхроннаяОбработкаСлужебныйКлиент.ВызватьСледующийОбработчик(ПараметрыИсполнения); + +КонецПроцедуры + +Процедура РазрешитьЗависимость(Результат, Параметры) Экспорт + + ОписаниеЗависимости = Параметры.ОписаниеЗависимости; + + Попытка + РезультатРазрешения = ЮТМетодыСлужебный.ВызватьФункцию(ОписаниеЗависимости.МетодРеализации, ОписаниеЗависимости.Параметры); + Исключение + РезультатРазрешения = ЮТФабрикаСлужебный.РезультатРазрешенияЗависимости(); + РезультатРазрешения.Ошибка = ИнформацияОбОшибке(); + КонецПопытки; + + ОбработатьРезультатРазрешенияЗависимости(РезультатРазрешения, Параметры); + +КонецПроцедуры + +Процедура СохранитьРезультатРазрешенияЗависимости(КлючЗависимости, Результат) Экспорт + + ИмяКонтекстаДанныеЗависимостей = ЮТЗависимостиСлужебный.ИмяКонтекстаДанныеЗависимостей(); + + КонтекстРазрешенныеЗависимости = ЮТЗависимостиСлужебный.КонтекстРазрешенныеЗависимости(); + КонтекстРазрешенныеЗависимости.Вставить(КлючЗависимости, Результат); + + ПередаваемыеЗначения = Новый Соответствие(); + + Если Результат.СохраняемыйКонтекст <> Неопределено Тогда + + ПередаваемыеЗначения.Вставить(КлючЗависимости, Результат.СохраняемыйКонтекстСервер); + ЮТКонтекстСлужебный.ВставитьЗначениеКонтекста(ИмяКонтекстаДанныеЗависимостей, ПередаваемыеЗначения); + ЮТКонтекстСлужебный.ВставитьЗначениеКонтекста(ИмяКонтекстаДанныеЗависимостей, ПередаваемыеЗначения, Истина); + + КонецЕсли; + + Если Результат.СохраняемыйКонтекстСервер <> Неопределено Тогда + + ПередаваемыеЗначения.Вставить(КлючЗависимости, Результат.СохраняемыйКонтекстСервер); + ЮТКонтекстСлужебный.ВставитьЗначениеКонтекста(ИмяКонтекстаДанныеЗависимостей, ПередаваемыеЗначения, Истина); + + КонецЕсли; + + Если Результат.СохраняемыйКонтекстКлиент <> Неопределено Тогда + + ПередаваемыеЗначения.Вставить(КлючЗависимости, Результат.СохраняемыйКонтекстКлиент); + ЮТКонтекстСлужебный.ВставитьЗначениеКонтекста(ИмяКонтекстаДанныеЗависимостей, ПередаваемыеЗначения); + + КонецЕсли; + +КонецПроцедуры + +Процедура ПослеОбработкиЗависимостей(Результат, ПараметрыИсполнения) Экспорт + + РазрешенныеЗависимости = ЮТЗависимостиСлужебный.КонтекстРазрешенныеЗависимости(); + Статусы = ЮТФабрика.СтатусыИсполненияТеста(); + + Для Каждого ТестовыйМодуль Из ПараметрыИсполнения.ТестовыеМодули Цикл + РезультатРазрешенияЗависимостей = ПроверкаРазрешенныхЗависимостей(ТестовыйМодуль, РазрешенныеЗависимости); + + Если НЕ РезультатРазрешенияЗависимостей.Успешно Тогда + УстановитьОшибкиВ(ТестовыйМодуль.НаборыТестов, РезультатРазрешенияЗависимостей.Ошибка); + Прервать; + КонецЕсли; + + Для Каждого Набор Из ТестовыйМодуль.НаборыТестов Цикл + + РезультатРазрешенияЗависимостей = ПроверкаРазрешенныхЗависимостей(Набор, РазрешенныеЗависимости); + + Если НЕ РезультатРазрешенияЗависимостей.Успешно Тогда + УстановитьОшибкиВ(Набор.Тесты, РезультатРазрешенияЗависимостей.Ошибка); + Набор.Ошибки.Добавить(РезультатРазрешенияЗависимостей.Ошибка); + Набор.Выполнять = Ложь; + Продолжить; + КонецЕсли; + + Для Каждого Тест Из Набор.Тесты Цикл + РезультатРазрешенияЗависимостей = ПроверкаРазрешенныхЗависимостей(Тест, РазрешенныеЗависимости); + + Если НЕ РезультатРазрешенияЗависимостей.Успешно Тогда + Тест.Ошибки.Добавить(РезультатРазрешенияЗависимостей.Ошибка); + Тест.Статус = Статусы.Пропущен; + КонецЕсли; + КонецЦикла; + + КонецЦикла; + КонецЦикла; + + ЮТАсинхроннаяОбработкаСлужебныйКлиент.ВызватьСледующийОбработчик(ПараметрыИсполнения); + +КонецПроцедуры + +Функция ОписаниеОшибкиПропуска(Описание, ИнформацияОбОшибке = Неопределено) + + Ошибка = ЮТФабрикаСлужебный.ОписаниеОшибкиПропуска(Описание); + + Если ИнформацияОбОшибке = Неопределено Тогда + Возврат Ошибка; + КонецЕсли; + + ТипОшибки = ТипЗнч(ИнформацияОбОшибке); + + Если ТипОшибки = Тип("Структура") Тогда + ЗаполнитьЗначенияСвойств(Ошибка, ИнформацияОбОшибке, , "ТипОшибки, Сообщение"); + Ошибка.Сообщение = ЮТСтроки.ДобавитьСтроку(Описание, ИнформацияОбОшибке.Сообщение, Символы.ПС); + ИначеЕсли ТипОшибки = Тип("ИнформацияОбОшибке") Тогда + Ошибка.Стек = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + ИначеЕсли ТипОшибки = Тип("Строка") Тогда + Ошибка.Сообщение = ЮТСтроки.ДобавитьСтроку(Описание, ИнформацияОбОшибке, Символы.ПС); + КонецЕсли; + + Возврат Ошибка; + +КонецФункции + +Функция УстановитьОшибкиВ(Объекты, Ошибка) + + Для Каждого Объект Из Объекты Цикл + Объект.Ошибки.Добавить(Ошибка); + Объект.Выполнять = Ложь; + КонецЦикла; + + Возврат Ошибка; + +КонецФункции + +Функция ПроверкаРазрешенныхЗависимостей(Объект, РазрешенныеЗависимости) + + Для Каждого ОписаниеЗависимости Из Объект.Зависимости Цикл + Результат = РазрешенныеЗависимости[ОписаниеЗависимости.Ключ]; + + Если Результат = Неопределено Тогда + Результат = ЮТФабрикаСлужебный.РезультатРазрешенияЗависимости(); + Сообщение = СтрШаблон("Нет информации о зависимости `%1`, что-то пошло не так", ЮТЗависимостиСлужебный.ПредставлениеЗависимости(ОписаниеЗависимости)); + Результат.Ошибка = ОписаниеОшибкиПропуска(Сообщение); + КонецЕсли; + + Если НЕ Результат.Успешно Тогда + Возврат Результат; + КонецЕсли; + КонецЦикла; + + Возврат Новый Структура("Успешно", Истина); + +КонецФункции + +#КонецОбласти + +Процедура ДедупликацияЗависимостейОбъекта(Зависимости, Объект) + + Для Инд = 0 По Объект.Зависимости.ВГраница() Цикл + Объект.Зависимости[Инд] = ЮТЗависимостиСлужебный.УникальнаяЗависимость(Зависимости, Объект.Зависимости[Инд]); + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти diff --git a/exts/yaxunit/src/CommonModules/ЮТЗависимостиСлужебныйКлиент/ЮТЗависимостиСлужебныйКлиент.mdo b/exts/yaxunit/src/CommonModules/ЮТЗависимостиСлужебныйКлиент/ЮТЗависимостиСлужебныйКлиент.mdo new file mode 100644 index 00000000..b0cf4a16 --- /dev/null +++ b/exts/yaxunit/src/CommonModules/ЮТЗависимостиСлужебныйКлиент/ЮТЗависимостиСлужебныйКлиент.mdo @@ -0,0 +1,10 @@ + + + ЮТЗависимостиСлужебныйКлиент + + ru + Зависимости служебный клиент + + true + true + diff --git a/exts/yaxunit/src/CommonModules/ЮТИсполнительСлужебныйКлиент/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТИсполнительСлужебныйКлиент/Module.bsl index 4157060a..9e1bb838 100644 --- a/exts/yaxunit/src/CommonModules/ЮТИсполнительСлужебныйКлиент/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТИсполнительСлужебныйКлиент/Module.bsl @@ -28,6 +28,7 @@ ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикПодключитьКомпоненты"); ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикИнициализация"); ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикЗагрузитьТесты"); + ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикРазрешитьЗависимости"); ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикВыполнитьТестирование"); ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикСохранитьОтчет"); ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикСохранитьКодВозврата"); @@ -44,6 +45,7 @@ ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикИнициализация"); ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикЗагрузитьТесты"); + ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикРазрешитьЗависимости"); ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикВыполнитьТестирование"); ПараметрыИсполнения.Цепочка.Добавить(ОбработчикЗавершения); @@ -73,8 +75,6 @@ СерверныеНаборы = Новый Массив(); ПропущенныеНаборы = Новый Массив(); - ЮТЗависимостиСлужебный.РазрешитьЗависимости(ТестовыйМодуль); - Для Каждого Набор Из ТестовыйМодуль.НаборыТестов Цикл Если НЕ Набор.Выполнять Тогда @@ -191,6 +191,14 @@ КонецПроцедуры +Процедура ОбработчикРазрешитьЗависимости(Результат, ДополнительныеПараметры) Экспорт + + Обработчик = ЮТАсинхроннаяОбработкаСлужебныйКлиент.СледующийОбработчик(ДополнительныеПараметры); + + ЮТЗависимостиСлужебныйКлиент.РазрешитьЗависимости(ДополнительныеПараметры.ИсполняемыеТестовыеМодули, Обработчик); + +КонецПроцедуры + Процедура ОбработчикВыполнитьТестирование(Результат, ДополнительныеПараметры) Экспорт ЮТСобытияСлужебный.ПередВыполнениемТестов(ДополнительныеПараметры.ИсполняемыеТестовыеМодули); diff --git a/exts/yaxunit/src/CommonModules/ЮТРазрешениеЗависимостейСлужебныйКлиент/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТРазрешениеЗависимостейСлужебныйКлиент/Module.bsl index 8dabb2bf..4ba3f14d 100644 --- a/exts/yaxunit/src/CommonModules/ЮТРазрешениеЗависимостейСлужебныйКлиент/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТРазрешениеЗависимостейСлужебныйКлиент/Module.bsl @@ -18,36 +18,24 @@ #Область СлужебныйПрограммныйИнтерфейс -Функция ФайлыПроекта(ПутьКФайламПроекта) Экспорт +Процедура ФайлыПроекта(ПутьКФайлуПроекта, Обработчик) Экспорт - Результат = ЮТФабрикаСлужебный.РезультатРазрешенияЗависимости(); + ПолныйПуть = ПутьКФайламПроекта(ПутьКФайлуПроекта); - ПолныйПуть = ПутьКФайламПроекта(ПутьКФайламПроекта); + ПараметрыИсполнения = ЮТАсинхроннаяОбработкаСлужебныйКлиент.ЦепочкаАсинхроннойОбработки(); + ПараметрыИсполнения.Вставить("ФинальныйОбработчик", Обработчик); + ПараметрыИсполнения.Вставить("ПолныйПуть", ПолныйПуть); + ПараметрыИсполнения.Вставить("ПутьКФайлуПроекта", ПутьКФайлуПроекта); - Если ЮТФайлы.ЭтоКаталог(ПолныйПуть) Тогда - Файлы = НайтиФайлы(ПолныйПуть, "*.*", Истина); - Иначе - Файлы = НайтиФайлы(ПолныйПуть); - КонецЕсли; + ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикПроверкиСуществования"); + ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикПроверкиКаталога"); + ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикРезультатовПоиска"); + ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикПеремещения"); + ПараметрыИсполнения.Цепочка.Добавить(Обработчик); - Если НЕ ЗначениеЗаполнено(Файлы) Тогда - Результат.Ошибка = СтрШаблон("Не удалось найти файлы каталога проекта по пути `%1`", ПутьКФайламПроекта); - Возврат Результат; - КонецЕсли; + ЮТФайлы.Существует(ПолныйПуть, ЮТАсинхроннаяОбработкаСлужебныйКлиент.СледующийОбработчик(ПараметрыИсполнения)); - РезультатПередачиФайлов = ОбработкаНайденныхФайлов(Файлы, ПутьКФайламПроекта); - - Результат.Успешно = РезультатПередачиФайлов <> Неопределено; - - Если Результат.Успешно Тогда - Результат.СохраняемыйКонтекстКлиент = Новый Структура("РабочийКаталог, ПолноеИмя", ЮТНастройкиВыполнения.КаталогПроекта(), ПолныйПуть); - Результат.СохраняемыйКонтекстСервер = РезультатПередачиФайлов; - Результат.СохраняемыйКонтекстСервер.Вставить("ПолноеИмя", ЮТФайлы.ОбъединитьПути(Результат.СохраняемыйКонтекстСервер.РабочийКаталог, ПутьКФайламПроекта)); - КонецЕсли; - - Возврат Результат; - -КонецФункции +КонецПроцедуры #КонецОбласти @@ -55,13 +43,36 @@ #Область ФайлыПроекта -Функция ПутьКФайламПроекта(ИмяФайла) Экспорт +Процедура ОбработчикПроверкиСуществования(Существует, Параметры) Экспорт - Возврат ЮТФайлы.ОбъединитьПути(ЮТНастройкиВыполнения.КаталогПроекта(), ИмяФайла); + Если НЕ Существует Тогда + Сообщение = СтрШаблон("Файл/каталог проекта `%1` не существует", Параметры.ПутьКФайлуПроекта); + ПрерватьОбработку(Сообщение, Параметры); + Возврат; + КонецЕсли; -КонецФункции + ЮТФайлы.ЭтоКаталог(Параметры.ПолныйПуть, ЮТАсинхроннаяОбработкаСлужебныйКлиент.СледующийОбработчик(Параметры)); + +КонецПроцедуры -Функция ОбработкаНайденныхФайлов(НайденныеФайлы, ПутьКФайламПроекта) Экспорт +Процедура ОбработчикПроверкиКаталога(ЭтоКаталог, Параметры) Экспорт + + Обработчик = ЮТАсинхроннаяОбработкаСлужебныйКлиент.СледующийОбработчик(Параметры); + Если ЭтоКаталог Тогда + НачатьПоискФайлов(Обработчик, Параметры.ПолныйПуть, "*.*", Истина); + Иначе + НачатьПоискФайлов(Обработчик, Параметры.ПолныйПуть); + КонецЕсли; + +КонецПроцедуры + +Процедура ОбработчикРезультатовПоиска(НайденныеФайлы, Параметры) Экспорт + + Если НЕ ЗначениеЗаполнено(НайденныеФайлы) Тогда + Сообщение = СтрШаблон("Не удалось найти файлы каталога проекта по пути `%1`", Параметры.ПутьКФайлуПроекта); + ПрерватьОбработку(Сообщение, Параметры); + Возврат; + КонецЕсли; ФайлыДляПеремещения = Новый Массив(); @@ -69,13 +80,57 @@ ФайлыДляПеремещения.Добавить(Новый ОписаниеПередаваемогоФайла(Файл.ПолноеИмя)); КонецЦикла; - ПомещенныеФайлы = Новый Массив();; - Если ПоместитьФайлы(ФайлыДляПеремещения, ПомещенныеФайлы, , Ложь) Тогда - Возврат ЮТРазрешениеЗависимостейСлужебныйВызовСервера.ПоместитьФайлыВРабочийКаталог(ПомещенныеФайлы); + Обработчик = ЮТАсинхроннаяОбработкаСлужебныйКлиент.СледующийОбработчик(Параметры); + НачатьПомещениеФайлов(Обработчик, ФайлыДляПеремещения, , Ложь); + +КонецПроцедуры + +Процедура ОбработчикПеремещения(ПомещенныеФайлы, Параметры) Экспорт + + Если НЕ ЗначениеЗаполнено(ПомещенныеФайлы) Тогда + Сообщение = СтрШаблон("Не удалось передать на сервер файлы проекта из каталога `%1`", Параметры.ПутьКФайлуПроекта); + ПрерватьОбработку(Сообщение, Параметры); + Возврат; КонецЕсли; + РезультатПередачиФайлов = ЮТРазрешениеЗависимостейСлужебныйВызовСервера.ПоместитьФайлыВРабочийКаталог(ПомещенныеФайлы); + + Результат = ЮТФабрикаСлужебный.РезультатРазрешенияЗависимости(); + Результат.Успешно = РезультатПередачиФайлов <> Неопределено; + + Если Результат.Успешно Тогда + Результат.СохраняемыйКонтекстКлиент = Новый Структура("РабочийКаталог, ПолноеИмя", ЮТНастройкиВыполнения.КаталогПроекта(), Параметры.ПолныйПуть); + Результат.СохраняемыйКонтекстСервер = РезультатПередачиФайлов; + Результат.СохраняемыйКонтекстСервер.Вставить("ПолноеИмя", ЮТФайлы.ОбъединитьПути(Результат.СохраняемыйКонтекстСервер.РабочийКаталог, Параметры.ПутьКФайлуПроекта)); + КонецЕсли; + + ЮТАсинхроннаяОбработкаСлужебныйКлиент.ВызватьСледующийОбработчик(Параметры, Результат); + +КонецПроцедуры + +Процедура ПрерватьОбработку(Ошибка, Параметры) + + Обработчик = Параметры.ФинальныйОбработчик; + Результат = ЮТФабрикаСлужебный.РезультатРазрешенияЗависимости(); + Результат.Ошибка = Ошибка; + + ЮТАсинхроннаяОбработкаСлужебныйКлиент.ВызватьОбработчик(Обработчик, Результат); + +КонецПроцедуры + +Функция ПутьКФайламПроекта(ИмяФайла) Экспорт + + Возврат ЮТФайлы.ОбъединитьПути(ЮТНастройкиВыполнения.КаталогПроекта(), ИмяФайла); + КонецФункции #КонецОбласти +Процедура ДобавитьОбработчикЦепочки(ПараметрыИсполнения, ИмяМетода) + + Обработчик = Новый ОписаниеОповещения(ИмяМетода, ЭтотОбъект, ПараметрыИсполнения); + ПараметрыИсполнения.Цепочка.Добавить(Обработчик); + +КонецПроцедуры + #КонецОбласти diff --git a/exts/yaxunit/src/CommonModules/ЮТЧитательСлужебный/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТЧитательСлужебный/Module.bsl index 70912d92..7df7a18c 100644 --- a/exts/yaxunit/src/CommonModules/ЮТЧитательСлужебный/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТЧитательСлужебный/Module.bsl @@ -43,7 +43,7 @@ КонецЦикла; - ЮТЗависимостиСлужебный.ДедупликацияЗависимостей(Результат); + ЮТЗависимостиСлужебныйКлиент.ДедупликацияЗависимостей(Результат); Возврат Результат; diff --git a/exts/yaxunit/src/Configuration/Configuration.mdo b/exts/yaxunit/src/Configuration/Configuration.mdo index 7d3415eb..b7555e03 100644 --- a/exts/yaxunit/src/Configuration/Configuration.mdo +++ b/exts/yaxunit/src/Configuration/Configuration.mdo @@ -63,6 +63,7 @@ CommonModule.ЮТест CommonModule.ЮТЗависимости CommonModule.ЮТЗависимостиСлужебный + CommonModule.ЮТЗависимостиСлужебныйКлиент CommonModule.ЮТЗапросы CommonModule.ЮТЗапросыСлужебныйВызовСервера CommonModule.ЮТЗапросыСлужебныйКлиентСервер