mirror of
https://github.com/bia-technologies/yaxunit.git
synced 2025-01-08 13:06:32 +02:00
#314 Асинхронная обработка зависимостей
This commit is contained in:
parent
c0174e340d
commit
4d184b1a7e
@ -18,102 +18,6 @@
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
// Разрешить зависимости.
|
||||
//
|
||||
// Параметры:
|
||||
// ТестовыйМодуль - см. ЮТФабрикаСлужебный.ОписаниеИсполняемогоТестовогоМодуля
|
||||
Процедура РазрешитьЗависимости(ТестовыйМодуль) Экспорт
|
||||
|
||||
РезультатРазрешенияЗависимостей = РазрешитьЗависимостиОбъекта(ТестовыйМодуль);
|
||||
Статусы = ЮТФабрика.СтатусыИсполненияТеста();
|
||||
|
||||
Если НЕ РезультатРазрешенияЗависимостей.Успешно Тогда
|
||||
УстановитьОшибкиВ(ТестовыйМодуль.НаборыТестов, РезультатРазрешенияЗависимостей.Ошибка);
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого Набор Из ТестовыйМодуль.НаборыТестов Цикл
|
||||
|
||||
РезультатРазрешенияЗависимостей = РазрешитьЗависимостиОбъекта(Набор);
|
||||
|
||||
Если НЕ РезультатРазрешенияЗависимостей.Успешно Тогда
|
||||
УстановитьОшибкиВ(Набор.Тесты, РезультатРазрешенияЗависимостей.Ошибка);
|
||||
Набор.Ошибки.Добавить(РезультатРазрешенияЗависимостей.Ошибка);
|
||||
Набор.Выполнять = Ложь;
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого Тест Из Набор.Тесты Цикл
|
||||
РезультатРазрешенияЗависимостей = РазрешитьЗависимостиОбъекта(Тест);
|
||||
|
||||
Если НЕ РезультатРазрешенияЗависимостей.Успешно Тогда
|
||||
Тест.Ошибки.Добавить(РезультатРазрешенияЗависимостей.Ошибка);
|
||||
Тест.Статус = Статусы.Пропущен;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Дедупликация зависимостей.
|
||||
//
|
||||
// Параметры:
|
||||
// РезультатЧтенияТестов - Массив из см. ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля - Набор описаний тестовых модулей, которые содержат информацию о запускаемых тестах
|
||||
Процедура ДедупликацияЗависимостей(РезультатЧтенияТестов) Экспорт
|
||||
|
||||
Зависимости = Новый Соответствие();
|
||||
|
||||
Для Каждого ТестовыйМодуль Из РезультатЧтенияТестов Цикл
|
||||
|
||||
ДедупликацияЗависимостейОбъекта(Зависимости, ТестовыйМодуль);
|
||||
|
||||
Для Каждого ТестовыйНабор Из ТестовыйМодуль.НаборыТестов Цикл
|
||||
|
||||
ДедупликацияЗависимостейОбъекта(Зависимости, ТестовыйНабор);
|
||||
|
||||
Для Каждого Тест Из ТестовыйНабор.Тесты Цикл
|
||||
ДедупликацияЗависимостейОбъекта(Зависимости, Тест);
|
||||
КонецЦикла;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура СохранитьРезультатРазрешенияЗависимости(КлючЗависимости, Результат) Экспорт
|
||||
|
||||
КонтекстРазрешенныеЗависимости = ЮТКонтекстСлужебный.ЗначениеКонтекста(ИмяКонтекстаРазрешенныеЗависимости());
|
||||
КонтекстРазрешенныеЗависимости.Вставить(КлючЗависимости, Результат);
|
||||
|
||||
ПередаваемыеЗначения = Новый Соответствие();
|
||||
ИмяКонтекстаДанныеЗависимостей = ИмяКонтекстаДанныеЗависимостей();
|
||||
|
||||
Если Результат.СохраняемыйКонтекст <> Неопределено Тогда
|
||||
|
||||
ПередаваемыеЗначения.Вставить(КлючЗависимости, Результат.СохраняемыйКонтекстСервер);
|
||||
ЮТКонтекстСлужебный.ВставитьЗначениеКонтекста(ИмяКонтекстаДанныеЗависимостей, ПередаваемыеЗначения);
|
||||
ЮТКонтекстСлужебный.ВставитьЗначениеКонтекста(ИмяКонтекстаДанныеЗависимостей, ПередаваемыеЗначения, Истина);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если Результат.СохраняемыйКонтекстСервер <> Неопределено Тогда
|
||||
|
||||
ПередаваемыеЗначения.Вставить(КлючЗависимости, Результат.СохраняемыйКонтекстСервер);
|
||||
ЮТКонтекстСлужебный.ВставитьЗначениеКонтекста(ИмяКонтекстаДанныеЗависимостей, ПередаваемыеЗначения, Истина);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если Результат.СохраняемыйКонтекстКлиент <> Неопределено Тогда
|
||||
|
||||
ПередаваемыеЗначения.Вставить(КлючЗависимости, Результат.СохраняемыйКонтекстКлиент);
|
||||
ЮТКонтекстСлужебный.ВставитьЗначениеКонтекста(ИмяКонтекстаДанныеЗависимостей, ПередаваемыеЗначения);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ДанныеЗависимости(ОписаниеЗависимости) Экспорт
|
||||
|
||||
КлючЗависимости = КлючЗависимости(ОписаниеЗависимости);
|
||||
@ -151,66 +55,7 @@
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Функция РазрешитьЗависимостиОбъекта(Объект)
|
||||
|
||||
Для Каждого Зависимость Из Объект.Зависимости Цикл
|
||||
|
||||
Результат = РазрешитьЗависимость(Зависимость);
|
||||
|
||||
Если НЕ Результат.Успешно Тогда
|
||||
Возврат Результат;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Новый Структура("Успешно, Ошибка", Истина);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция РазрешитьЗависимость(ОписаниеЗависимости)
|
||||
|
||||
Сообщение = СтрШаблон("Не удалось разрешить зависимость `%1`", ПредставлениеЗависимости(ОписаниеЗависимости));
|
||||
|
||||
РезультатРазрешения = РезультатРазрешенияЗависимости(ОписаниеЗависимости.Ключ);
|
||||
|
||||
Если РезультатРазрешения <> Неопределено Тогда
|
||||
Возврат РезультатРазрешения;
|
||||
КонецЕсли;
|
||||
|
||||
Попытка
|
||||
РезультатРазрешения = ЮТМетодыСлужебный.ВызватьФункцию(ОписаниеЗависимости.МетодРеализации, ОписаниеЗависимости.Параметры);
|
||||
Исключение
|
||||
РезультатРазрешения = ЮТФабрикаСлужебный.РезультатРазрешенияЗависимости();
|
||||
РезультатРазрешения.Ошибка = ОписаниеОшибкиПропуска(Сообщение, ИнформацияОбОшибке());
|
||||
СохранитьРезультатРазрешенияЗависимости(ОписаниеЗависимости.Ключ, РезультатРазрешения);
|
||||
Возврат РезультатРазрешения;
|
||||
КонецПопытки;
|
||||
|
||||
Если НЕ РезультатРазрешения.Успешно Тогда
|
||||
|
||||
Если РезультатРазрешения.Ошибка = Неопределено Тогда
|
||||
РезультатРазрешения.Ошибка = ОписаниеОшибкиПропуска(Сообщение);
|
||||
Иначе
|
||||
РезультатРазрешения.Ошибка = ОписаниеОшибкиПропуска(Сообщение, РезультатРазрешения.Ошибка);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
СохранитьРезультатРазрешенияЗависимости(ОписаниеЗависимости.Ключ, РезультатРазрешения);
|
||||
|
||||
Возврат РезультатРазрешения;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ДедупликацияЗависимостейОбъекта(Зависимости, Объект)
|
||||
|
||||
Для Инд = 0 По Объект.Зависимости.ВГраница() Цикл
|
||||
Объект.Зависимости[Инд] = УникальнаяЗависимость(Зависимости, Объект.Зависимости[Инд]);
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция КлючЗависимости(ОписаниеЗависимости)
|
||||
Функция КлючЗависимости(ОписаниеЗависимости) Экспорт
|
||||
|
||||
Идентификатор = ВРег(ОписаниеЗависимости.Идентификатор);
|
||||
|
||||
@ -222,6 +67,16 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПредставлениеЗависимости(ОписаниеЗависимости) Экспорт
|
||||
|
||||
Если ЗначениеЗаполнено(ОписаниеЗависимости.Параметры) Тогда
|
||||
Возврат ОписаниеЗависимости.Идентификатор + ЮТКоллекции.ПредставлениеМассива(ОписаниеЗависимости.Параметры);
|
||||
Иначе
|
||||
Возврат ОписаниеЗависимости.Идентификатор;
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция УникальнаяЗависимость(Зависимости, ОписаниеЗависимости) Экспорт
|
||||
|
||||
КлючЗависимости = КлючЗависимости(ОписаниеЗависимости);
|
||||
@ -244,53 +99,9 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПредставлениеЗависимости(ОписаниеЗависимости)
|
||||
|
||||
Если ЗначениеЗаполнено(ОписаниеЗависимости.Параметры) Тогда
|
||||
Возврат ОписаниеЗависимости.Идентификатор + ЮТКоллекции.ПредставлениеМассива(ОписаниеЗависимости.Параметры);
|
||||
Иначе
|
||||
Возврат ОписаниеЗависимости.Идентификатор;
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ОписаниеОшибкиПропуска(Описание, ИнформацияОбОшибке = Неопределено)
|
||||
|
||||
Ошибка = ЮТФабрикаСлужебный.ОписаниеОшибкиПропуска(Описание);
|
||||
|
||||
Если ИнформацияОбОшибке = Неопределено Тогда
|
||||
Возврат Ошибка;
|
||||
КонецЕсли;
|
||||
|
||||
ТипОшибки = ТипЗнч(ИнформацияОбОшибке);
|
||||
|
||||
Если ТипОшибки = Тип("Структура") Тогда
|
||||
ЗаполнитьЗначенияСвойств(Ошибка, ИнформацияОбОшибке, , "ТипОшибки, Сообщение");
|
||||
Ошибка.Сообщение = ЮТСтроки.ДобавитьСтроку(Описание, ИнформацияОбОшибке.Сообщение, Символы.ПС);
|
||||
ИначеЕсли ТипОшибки = Тип("ИнформацияОбОшибке") Тогда
|
||||
Ошибка.Стек = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке);
|
||||
ИначеЕсли ТипОшибки = Тип("Строка") Тогда
|
||||
Ошибка.Сообщение = ЮТСтроки.ДобавитьСтроку(Описание, ИнформацияОбОшибке, Символы.ПС);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Ошибка;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция УстановитьОшибкиВ(Объекты, Ошибка)
|
||||
|
||||
Для Каждого Объект Из Объекты Цикл
|
||||
Объект.Ошибки.Добавить(Ошибка);
|
||||
Объект.Выполнять = Ложь;
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Ошибка;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция РезультатРазрешенияЗависимости(КлючЗависимости)
|
||||
|
||||
ДанныеКонтекста = ЮТКонтекстСлужебный.ЗначениеКонтекста(ИмяКонтекстаРазрешенныеЗависимости());
|
||||
ДанныеКонтекста = КонтекстРазрешенныеЗависимости();
|
||||
Возврат ДанныеКонтекста[КлючЗависимости];
|
||||
|
||||
КонецФункции
|
||||
@ -311,13 +122,19 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ИмяКонтекстаРазрешенныеЗависимости()
|
||||
Функция КонтекстРазрешенныеЗависимости() Экспорт
|
||||
|
||||
Возврат ЮТКонтекстСлужебный.ЗначениеКонтекста(ИмяКонтекстаРазрешенныеЗависимости());
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ИмяКонтекстаРазрешенныеЗависимости() Экспорт
|
||||
|
||||
Возврат "КонтекстРазрешенныеЗависимости";
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ИмяКонтекстаДанныеЗависимостей()
|
||||
Функция ИмяКонтекстаДанныеЗависимостей() Экспорт
|
||||
|
||||
Возврат "КонтекстДанныеЗависимостей";
|
||||
|
||||
|
@ -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 По Объект.Зависимости.ВГраница() Цикл
|
||||
Объект.Зависимости[Инд] = ЮТЗависимостиСлужебный.УникальнаяЗависимость(Зависимости, Объект.Зависимости[Инд]);
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="8742463f-e915-43d3-b7bd-aaeedff6df08">
|
||||
<name>ЮТЗависимостиСлужебныйКлиент</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Зависимости служебный клиент</value>
|
||||
</synonym>
|
||||
<clientManagedApplication>true</clientManagedApplication>
|
||||
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||
</mdclass:CommonModule>
|
@ -28,6 +28,7 @@
|
||||
ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикПодключитьКомпоненты");
|
||||
ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикИнициализация");
|
||||
ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикЗагрузитьТесты");
|
||||
ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикРазрешитьЗависимости");
|
||||
ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикВыполнитьТестирование");
|
||||
ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикСохранитьОтчет");
|
||||
ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикСохранитьКодВозврата");
|
||||
@ -44,6 +45,7 @@
|
||||
|
||||
ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикИнициализация");
|
||||
ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикЗагрузитьТесты");
|
||||
ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикРазрешитьЗависимости");
|
||||
ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикВыполнитьТестирование");
|
||||
ПараметрыИсполнения.Цепочка.Добавить(ОбработчикЗавершения);
|
||||
|
||||
@ -73,8 +75,6 @@
|
||||
СерверныеНаборы = Новый Массив();
|
||||
ПропущенныеНаборы = Новый Массив();
|
||||
|
||||
ЮТЗависимостиСлужебный.РазрешитьЗависимости(ТестовыйМодуль);
|
||||
|
||||
Для Каждого Набор Из ТестовыйМодуль.НаборыТестов Цикл
|
||||
|
||||
Если НЕ Набор.Выполнять Тогда
|
||||
@ -191,6 +191,14 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОбработчикРазрешитьЗависимости(Результат, ДополнительныеПараметры) Экспорт
|
||||
|
||||
Обработчик = ЮТАсинхроннаяОбработкаСлужебныйКлиент.СледующийОбработчик(ДополнительныеПараметры);
|
||||
|
||||
ЮТЗависимостиСлужебныйКлиент.РазрешитьЗависимости(ДополнительныеПараметры.ИсполняемыеТестовыеМодули, Обработчик);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОбработчикВыполнитьТестирование(Результат, ДополнительныеПараметры) Экспорт
|
||||
|
||||
ЮТСобытияСлужебный.ПередВыполнениемТестов(ДополнительныеПараметры.ИсполняемыеТестовыеМодули);
|
||||
|
@ -18,36 +18,24 @@
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Функция ФайлыПроекта(ПутьКФайламПроекта) Экспорт
|
||||
Процедура ФайлыПроекта(ПутьКФайлуПроекта, Обработчик) Экспорт
|
||||
|
||||
Результат = ЮТФабрикаСлужебный.РезультатРазрешенияЗависимости();
|
||||
ПолныйПуть = ПутьКФайламПроекта(ПутьКФайлуПроекта);
|
||||
|
||||
ПолныйПуть = ПутьКФайламПроекта(ПутьКФайламПроекта);
|
||||
ПараметрыИсполнения = ЮТАсинхроннаяОбработкаСлужебныйКлиент.ЦепочкаАсинхроннойОбработки();
|
||||
ПараметрыИсполнения.Вставить("ФинальныйОбработчик", Обработчик);
|
||||
ПараметрыИсполнения.Вставить("ПолныйПуть", ПолныйПуть);
|
||||
ПараметрыИсполнения.Вставить("ПутьКФайлуПроекта", ПутьКФайлуПроекта);
|
||||
|
||||
Если ЮТФайлы.ЭтоКаталог(ПолныйПуть) Тогда
|
||||
Файлы = НайтиФайлы(ПолныйПуть, "*.*", Истина);
|
||||
Иначе
|
||||
Файлы = НайтиФайлы(ПолныйПуть);
|
||||
КонецЕсли;
|
||||
ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикПроверкиСуществования");
|
||||
ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикПроверкиКаталога");
|
||||
ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикРезультатовПоиска");
|
||||
ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикПеремещения");
|
||||
ПараметрыИсполнения.Цепочка.Добавить(Обработчик);
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(Файлы) Тогда
|
||||
Результат.Ошибка = СтрШаблон("Не удалось найти файлы каталога проекта по пути `%1`", ПутьКФайламПроекта);
|
||||
Возврат Результат;
|
||||
КонецЕсли;
|
||||
ЮТФайлы.Существует(ПолныйПуть, ЮТАсинхроннаяОбработкаСлужебныйКлиент.СледующийОбработчик(ПараметрыИсполнения));
|
||||
|
||||
РезультатПередачиФайлов = ОбработкаНайденныхФайлов(Файлы, ПутьКФайламПроекта);
|
||||
|
||||
Результат.Успешно = РезультатПередачиФайлов <> Неопределено;
|
||||
|
||||
Если Результат.Успешно Тогда
|
||||
Результат.СохраняемыйКонтекстКлиент = Новый Структура("РабочийКаталог, ПолноеИмя", ЮТНастройкиВыполнения.КаталогПроекта(), ПолныйПуть);
|
||||
Результат.СохраняемыйКонтекстСервер = РезультатПередачиФайлов;
|
||||
Результат.СохраняемыйКонтекстСервер.Вставить("ПолноеИмя", ЮТФайлы.ОбъединитьПути(Результат.СохраняемыйКонтекстСервер.РабочийКаталог, ПутьКФайламПроекта));
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
@ -55,13 +43,36 @@
|
||||
|
||||
#Область ФайлыПроекта
|
||||
|
||||
Функция ПутьКФайламПроекта(ИмяФайла) Экспорт
|
||||
Процедура ОбработчикПроверкиСуществования(Существует, Параметры) Экспорт
|
||||
|
||||
Возврат ЮТФайлы.ОбъединитьПути(ЮТНастройкиВыполнения.КаталогПроекта(), ИмяФайла);
|
||||
Если НЕ Существует Тогда
|
||||
Сообщение = СтрШаблон("Файл/каталог проекта `%1` не существует", Параметры.ПутьКФайлуПроекта);
|
||||
ПрерватьОбработку(Сообщение, Параметры);
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
ЮТФайлы.ЭтоКаталог(Параметры.ПолныйПуть, ЮТАсинхроннаяОбработкаСлужебныйКлиент.СледующийОбработчик(Параметры));
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ОбработкаНайденныхФайлов(НайденныеФайлы, ПутьКФайламПроекта) Экспорт
|
||||
Процедура ОбработчикПроверкиКаталога(ЭтоКаталог, Параметры) Экспорт
|
||||
|
||||
Обработчик = ЮТАсинхроннаяОбработкаСлужебныйКлиент.СледующийОбработчик(Параметры);
|
||||
Если ЭтоКаталог Тогда
|
||||
НачатьПоискФайлов(Обработчик, Параметры.ПолныйПуть, "*.*", Истина);
|
||||
Иначе
|
||||
НачатьПоискФайлов(Обработчик, Параметры.ПолныйПуть);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОбработчикРезультатовПоиска(НайденныеФайлы, Параметры) Экспорт
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(НайденныеФайлы) Тогда
|
||||
Сообщение = СтрШаблон("Не удалось найти файлы каталога проекта по пути `%1`", Параметры.ПутьКФайлуПроекта);
|
||||
ПрерватьОбработку(Сообщение, Параметры);
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
ФайлыДляПеремещения = Новый Массив();
|
||||
|
||||
@ -69,13 +80,57 @@
|
||||
ФайлыДляПеремещения.Добавить(Новый ОписаниеПередаваемогоФайла(Файл.ПолноеИмя));
|
||||
КонецЦикла;
|
||||
|
||||
ПомещенныеФайлы = Новый Массив();;
|
||||
Если ПоместитьФайлы(ФайлыДляПеремещения, ПомещенныеФайлы, , Ложь) Тогда
|
||||
Возврат ЮТРазрешениеЗависимостейСлужебныйВызовСервера.ПоместитьФайлыВРабочийКаталог(ПомещенныеФайлы);
|
||||
Обработчик = ЮТАсинхроннаяОбработкаСлужебныйКлиент.СледующийОбработчик(Параметры);
|
||||
НачатьПомещениеФайлов(Обработчик, ФайлыДляПеремещения, , Ложь);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОбработчикПеремещения(ПомещенныеФайлы, Параметры) Экспорт
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(ПомещенныеФайлы) Тогда
|
||||
Сообщение = СтрШаблон("Не удалось передать на сервер файлы проекта из каталога `%1`", Параметры.ПутьКФайлуПроекта);
|
||||
ПрерватьОбработку(Сообщение, Параметры);
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
РезультатПередачиФайлов = ЮТРазрешениеЗависимостейСлужебныйВызовСервера.ПоместитьФайлыВРабочийКаталог(ПомещенныеФайлы);
|
||||
|
||||
Результат = ЮТФабрикаСлужебный.РезультатРазрешенияЗависимости();
|
||||
Результат.Успешно = РезультатПередачиФайлов <> Неопределено;
|
||||
|
||||
Если Результат.Успешно Тогда
|
||||
Результат.СохраняемыйКонтекстКлиент = Новый Структура("РабочийКаталог, ПолноеИмя", ЮТНастройкиВыполнения.КаталогПроекта(), Параметры.ПолныйПуть);
|
||||
Результат.СохраняемыйКонтекстСервер = РезультатПередачиФайлов;
|
||||
Результат.СохраняемыйКонтекстСервер.Вставить("ПолноеИмя", ЮТФайлы.ОбъединитьПути(Результат.СохраняемыйКонтекстСервер.РабочийКаталог, Параметры.ПутьКФайлуПроекта));
|
||||
КонецЕсли;
|
||||
|
||||
ЮТАсинхроннаяОбработкаСлужебныйКлиент.ВызватьСледующийОбработчик(Параметры, Результат);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПрерватьОбработку(Ошибка, Параметры)
|
||||
|
||||
Обработчик = Параметры.ФинальныйОбработчик;
|
||||
Результат = ЮТФабрикаСлужебный.РезультатРазрешенияЗависимости();
|
||||
Результат.Ошибка = Ошибка;
|
||||
|
||||
ЮТАсинхроннаяОбработкаСлужебныйКлиент.ВызватьОбработчик(Обработчик, Результат);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ПутьКФайламПроекта(ИмяФайла) Экспорт
|
||||
|
||||
Возврат ЮТФайлы.ОбъединитьПути(ЮТНастройкиВыполнения.КаталогПроекта(), ИмяФайла);
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
Процедура ДобавитьОбработчикЦепочки(ПараметрыИсполнения, ИмяМетода)
|
||||
|
||||
Обработчик = Новый ОписаниеОповещения(ИмяМетода, ЭтотОбъект, ПараметрыИсполнения);
|
||||
ПараметрыИсполнения.Цепочка.Добавить(Обработчик);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -43,7 +43,7 @@
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ЮТЗависимостиСлужебный.ДедупликацияЗависимостей(Результат);
|
||||
ЮТЗависимостиСлужебныйКлиент.ДедупликацияЗависимостей(Результат);
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
|
@ -63,6 +63,7 @@
|
||||
<commonModules>CommonModule.ЮТест</commonModules>
|
||||
<commonModules>CommonModule.ЮТЗависимости</commonModules>
|
||||
<commonModules>CommonModule.ЮТЗависимостиСлужебный</commonModules>
|
||||
<commonModules>CommonModule.ЮТЗависимостиСлужебныйКлиент</commonModules>
|
||||
<commonModules>CommonModule.ЮТЗапросы</commonModules>
|
||||
<commonModules>CommonModule.ЮТЗапросыСлужебныйВызовСервера</commonModules>
|
||||
<commonModules>CommonModule.ЮТЗапросыСлужебныйКлиентСервер</commonModules>
|
||||
|
Loading…
Reference in New Issue
Block a user