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.ЮТЗапросыСлужебныйКлиентСервер