diff --git "a/plugins/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Ext/ObjectModule.bsl" "b/plugins/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Ext/ObjectModule.bsl" index 0df51a3c1..8fd7915bc 100644 --- "a/plugins/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Ext/ObjectModule.bsl" +++ "b/plugins/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Ext/ObjectModule.bsl" @@ -4,9 +4,12 @@ Перем ЗагружаемыйПуть; Перем КонтейнерТестов; -Перем ТекущаяГруппа; +Перем ТекущаяГруппа; + +Перем ЗагрузкаИзМодуляФормы; // { Plugin interface + Функция ОписаниеПлагина(КонтекстЯдра, ВозможныеТипыПлагинов) Экспорт Результат = Новый Структура; Результат.Вставить("Тип", ВозможныеТипыПлагинов.Загрузчик); @@ -18,10 +21,13 @@ Процедура Инициализация(КонтекстЯдраПараметр) Экспорт КонецПроцедуры + // } Plugin interface // { Loader interface + #Если ТолстыйКлиентОбычноеПриложение Тогда + Функция ВыбратьПутьИнтерактивно(КонтекстЯдра, ТекущийПуть = "") Экспорт ФормаВыбораПодсистем = ЭтотОбъект.ПолучитьФорму("ФормаВыбораПодсистемы"); ФормаВыбораПодсистем.РежимВыбора = Истина; @@ -30,6 +36,7 @@ Возврат ВыбранныйПуть; КонецФункции + #КонецЕсли Функция Загрузить(КонтекстЯдра, Путь) Экспорт @@ -38,22 +45,36 @@ ПостроительДереваТестов = КонтекстЯдра.Плагин("ПостроительДереваТестов"); ЗагрузчикФайла = КонтекстЯдра.Плагин("ЗагрузчикФайла"); - ДеревоТестов = ЗагрузитьПуть(Путь, ПостроительДереваТестов, ЗагрузчикФайла); + ДеревоТестов = ЗагрузитьПуть(Путь, ПостроительДереваТестов, ЗагрузчикФайла, КонтекстЯдра); Возврат ДеревоТестов; КонецФункции -Функция ПолучитьКонтекстПоПути(КонтекстЯдра, Путь) Экспорт - ОбъектМетаданных = ПолучитьОбъектМетаданныхПоПути(Путь); - Контекст = СоздатьОбработкуПоМетаданным(ОбъектМетаданных); - - Возврат Контекст; -КонецФункции +Функция ПолучитьКонтекстПоПути(КонтекстЯдра, Путь) Экспорт + + Если Найти(Путь, ПрефиксПутейСФормами()) > 0 Тогда + + ПрефиксПутейСФормами = ПрефиксПутейСФормами(); + ИмяОбъектаМетаданных = Сред(Путь, СтрДлина(ПрефиксПутейСФормами) + 1); + ОбъектМетаданных = ПолучитьОбъектМетаданныхПоПути(ИмяОбъектаМетаданных); + Контекст = ПолучитьФорму("Обработка."+ ОбъектМетаданных.Имя + ".Форма"); + + Иначе + + ОбъектМетаданных = ПолучитьОбъектМетаданныхПоПути(Путь); + Контекст = СоздатьОбработкуПоМетаданным(ОбъектМетаданных); + + КонецЕсли; + + Возврат Контекст; + +КонецФункции + // } Loader interface -Функция ЗагрузитьПуть(Путь, ПостроительДереваТестов, ЗагрузчикФайла) Экспорт +Функция ЗагрузитьПуть(Путь, ПостроительДереваТестов, ЗагрузчикФайла, КонтекстЯдра = Неопределено) Экспорт ОбъектМетаданных = ПолучитьОбъектМетаданныхПоПути(Путь); - ДеревоТестов = ОбработатьОбъектМетаданных(ОбъектМетаданных, ПостроительДереваТестов, ЗагрузчикФайла); + ДеревоТестов = ОбработатьОбъектМетаданных(ОбъектМетаданных, ПостроительДереваТестов, ЗагрузчикФайла, КонтекстЯдра); Возврат ДеревоТестов; КонецФункции @@ -69,11 +90,11 @@ Возврат ОбъектКонфигурации; КонецФункции -Функция ОбработатьОбъектМетаданных(ОбъектМетаданных, ПостроительДереваТестов, ЗагрузчикФайла) +Функция ОбработатьОбъектМетаданных(ОбъектМетаданных, ПостроительДереваТестов, ЗагрузчикФайла, КонтекстЯдра) Если ЭтоПодсистема(ОбъектМетаданных) Тогда - Контейнер = ЗагрузитьПодсистему(ОбъектМетаданных, ПостроительДереваТестов, ЗагрузчикФайла); + Контейнер = ЗагрузитьПодсистему(ОбъектМетаданных, ПостроительДереваТестов, ЗагрузчикФайла, КонтекстЯдра); Иначе - Контейнер = ЗагрузитьОбработку(ОбъектМетаданных, ПостроительДереваТестов, ЗагрузчикФайла); + Контейнер = ЗагрузитьОбработку(ОбъектМетаданных, ПостроительДереваТестов, ЗагрузчикФайла, КонтекстЯдра); КонецЕсли; Возврат Контейнер; @@ -83,10 +104,10 @@ Возврат (Найти(НРег(ОбъектМетаданных.ПолноеИмя()), НРег("Подсистема")) > 0); КонецФункции -Функция ЗагрузитьПодсистему(Подсистема, ПостроительДереваТестов, ЗагрузчикФайла) +Функция ЗагрузитьПодсистему(Подсистема, ПостроительДереваТестов, ЗагрузчикФайла, КонтекстЯдра) Контейнер = ПостроительДереваТестов.СоздатьКонтейнер(Подсистема.Имя, ПостроительДереваТестов.ИконкиУзловДереваТестов.Подсистема); Для каждого ПодчиненнаяПодсистема Из Подсистема.Подсистемы цикл - КонтейнерПодчиненнойПодсистемы = ЗагрузитьПодсистему(ПодчиненнаяПодсистема, ПостроительДереваТестов, ЗагрузчикФайла); + КонтейнерПодчиненнойПодсистемы = ЗагрузитьПодсистему(ПодчиненнаяПодсистема, ПостроительДереваТестов, ЗагрузчикФайла, КонтекстЯдра); Если КонтейнерПодчиненнойПодсистемы.Строки.Количество() > 0 Тогда Контейнер.Строки.Добавить(КонтейнерПодчиненнойПодсистемы); КонецЕсли; @@ -95,7 +116,7 @@ Для каждого ДочернееМетаданное Из Подсистема.Состав цикл Если Метаданные.Обработки.Найти(ДочернееМетаданное.Имя) <> Неопределено ИЛИ Метаданные.Отчеты.Найти(ДочернееМетаданное.Имя) <> Неопределено Тогда - КонтейнерСТестамиОбработки = ЗагрузитьОбработку(ДочернееМетаданное, ПостроительДереваТестов, ЗагрузчикФайла); + КонтейнерСТестамиОбработки = ЗагрузитьОбработку(ДочернееМетаданное, ПостроительДереваТестов, ЗагрузчикФайла, КонтекстЯдра); Если КонтейнерСТестамиОбработки.Строки.Количество() > 0 Тогда Контейнер.Строки.Добавить(КонтейнерСТестамиОбработки); КонецЕсли; @@ -105,10 +126,10 @@ Возврат Контейнер; КонецФункции -Функция ЗагрузитьОбработку(МетаданныеОбработки, ПостроительДереваТестов, ЗагрузчикФайла) Экспорт +Функция ЗагрузитьОбработку(МетаданныеОбработки, ПостроительДереваТестов, ЗагрузчикФайла, КонтекстЯдра) Экспорт Обработка = СоздатьОбработкуПоМетаданным(МетаданныеОбработки); Попытка - Контейнер = ЗагрузитьТестыВНовомФормате(ПостроительДереваТестов, Обработка, МетаданныеОбработки, ЗагрузчикФайла); + Контейнер = ЗагрузитьТестыВНовомФормате(ПостроительДереваТестов, Обработка, МетаданныеОбработки, ЗагрузчикФайла, КонтекстЯдра); Исключение ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); Если ЭтоНовыйФорматОбработки(ТекстОшибки) Тогда @@ -121,23 +142,116 @@ Возврат Контейнер; КонецФункции -Функция ЗагрузитьТестыВНовомФормате(ПостроительДереваТестов, Обработка, МетаданныеОбработки, ЗагрузчикФайла) - КэшПостроительДереваТестов = ПостроительДереваТестов; +Функция ЗагрузитьТестыВНовомФормате(ПостроительДереваТестов, Обработка, МетаданныеОбработки, ЗагрузчикФайла, КонтекстЯдра) + + КэшПостроительДереваТестов = ПостроительДереваТестов; Если Метаданные.Обработки.Содержит(МетаданныеОбработки) Тогда - ЗагружаемыйПуть = СтрЗаменить("Метаданные." + МетаданныеОбработки.ПолноеИмя(), ".Обработка.", ".Обработки."); + + ЗагружаемыйПуть = СтрЗаменить("Метаданные." + МетаданныеОбработки.ПолноеИмя(), ".Обработка.", ".Обработки."); ИконкаУзла = ПостроительДереваТестов.ИконкиУзловДереваТестов.Обработка; - ИначеЕсли Метаданные.Отчеты.Содержит(МетаданныеОбработки) Тогда - ЗагружаемыйПуть = СтрЗаменить("Метаданные." + МетаданныеОбработки.ПолноеИмя(), ".Отчет.", ".Отчеты."); + + ИначеЕсли Метаданные.Отчеты.Содержит(МетаданныеОбработки) Тогда + + ЗагружаемыйПуть = СтрЗаменить("Метаданные." + МетаданныеОбработки.ПолноеИмя(), ".Отчет.", ".Отчеты."); ИконкаУзла = ПостроительДереваТестов.ИконкиУзловДереваТестов.Отчет; - КонецЕсли; - КонтейнерТестов = ПостроительДереваТестов.СоздатьКонтейнер(МетаданныеОбработки.Имя, ИконкаУзла); - Обработка.ЗаполнитьНаборТестов(ЭтотОбъект); - Результат = КонтейнерТестов; + + КонецЕсли; + + КонтейнерТестов = ПостроительДереваТестов.СоздатьКонтейнер(МетаданныеОбработки.Имя, ИконкаУзла); + ЗаполнитьНаборКонтейнераТестов(Обработка, МетаданныеОбработки, КонтекстЯдра); + + Результат = КонтейнерТестов; КонтейнерТестов = Неопределено; ТекущаяГруппа = Неопределено; Возврат Результат; -КонецФункции + +КонецФункции + +Процедура ЗаполнитьНаборКонтейнераТестов(Обработка, МетаданныеОбработки, КонтекстЯдра) + + // Порядок попыток заполнения набора тестов + // ___________________________________________________________________________ + // | Место поиска | Тестовый метод | + // |________________|_________________________________________________________| + // | Модуль объекта | Обработка.ЗаполнитьНаборТестов(ЭтотОбъект, КонтекстЯдра)| + // |________________|_________________________________________________________| + // | Модуль объекта | Обработка.ЗаполнитьНаборТестов(ЭтотОбъект) | + // |________________|_________________________________________________________| + // | Модуль формы | Форма.ЗаполнитьНаборТестов(ЭтотОбъект, КонтекстЯдра) | + // |________________|_________________________________________________________| + + КонтейнерТестовЗаполненИзМодуляОбъекта = ЗаполнитьНаборКонтейнераИзМодуляОбработки(Обработка, КонтекстЯдра); + Если КонтейнерТестовЗаполненИзМодуляОбъекта Тогда + Возврат; + КонецЕсли; + + КонтейнерТестовЗаполненИзМодуляФормы = Ложь; + #Если ТолстыйКлиентОбычноеПриложение Тогда + КонтейнерТестовЗаполненИзМодуляФормы = ЗаполнитьНаборКонтейнераИзМодуляФормыОбработки(МетаданныеОбработки, КонтекстЯдра); + #КонецЕсли + + Если ЗагрузкаИзМодуляФормы И НЕ КонтейнерТестовЗаполненИзМодуляФормы Тогда + ВызватьИсключение НСтр("ru='Обработка не содержит доступных наборов тестов для заполнения'"); + КонецЕсли; + +КонецПроцедуры + +Функция ЗаполнитьНаборКонтейнераИзМодуляОбработки(Обработка, КонтекстЯдра) + + ЗагрузкаИзМодуляФормы = Ложь; + КонтейнерТестовЗаполнен = Ложь; + + Попытка + + Обработка.ЗаполнитьНаборТестов(ЭтотОбъект, КонтекстЯдра); + КонтейнерТестовЗаполнен = Истина; + + Исключение + + Инфо = ИнформацияОбОшибке(); + Если Инфо.ИмяМодуля = "ВнешняяОбработка.ЗагрузчикИзПодсистемКонфигурации.МодульОбъекта" + И ((Инфо.Описание = "Слишком много фактических параметров" ИЛИ Инфо.Описание = "Too many actual parameters")) + И Найти(Инфо.ИсходнаяСтрока, "Обработка.ЗаполнитьНаборТестов(ЭтотОбъект, КонтекстЯдра);") > 0 Тогда + + Попытка + Обработка.ЗаполнитьНаборТестов(ЭтотОбъект); + КонтейнерТестовЗаполнен = Истина; + Исключение + ВызватьИсключение + КонецПопытки + + КонецЕсли; + + КонецПопытки; + + Возврат КонтейнерТестовЗаполнен; + +КонецФункции + +#Если ТолстыйКлиентОбычноеПриложение Тогда + +Функция ЗаполнитьНаборКонтейнераИзМодуляФормыОбработки(МетаданныеОбработки, КонтекстЯдра) + + КонтейнерТестовЗаполненИзМодуляФормы = Ложь; + ЗагрузкаИзМодуляФормы = Истина; + + Попытка + + ФормаОбработкиСИменемФорма = ПолучитьФорму(МетаданныеОбработки.ПолноеИмя() + ".Форма"); + ФормаОбработкиСИменемФорма.ЗаполнитьНаборТестов(ЭтотОбъект, КонтекстЯдра); + + КонтейнерТестовЗаполненИзМодуляФормы = Истина; + + Исключение + ВызватьИсключение; + КонецПопытки; + + Возврат КонтейнерТестовЗаполненИзМодуляФормы; + +КонецФункции + + #КонецЕсли Функция ЭтоНовыйФорматОбработки(Знач ТекстОшибки) ЭтоНовыйФорматОбработки = Не ЕстьОшибка_МетодОбъектаНеОбнаружен(ТекстОшибки, "ЗаполнитьНаборТестов"); @@ -192,6 +306,7 @@ КонецФункции //{ Работа со встроенными в конфигурацию тестами и подсистемами + Процедура ЗаполнитьДеревоПодсистем(ДеревоПодсистем, ОтборПоИмениТеста) Экспорт Для каждого МетаПодсистема из Метаданные.Подсистемы цикл ДобавитьПодсистемуВДерево(МетаПодсистема, ДеревоПодсистем, ЭтотОбъект, ОтборПоИмениТеста); @@ -245,9 +360,11 @@ КонецЕсли; Возврат Рез; КонецФункции + //} // { API нового формата + Процедура СлучайныйПорядокВыполнения() Экспорт Если ЗначениеЗаполнено(КонтейнерТестов) Тогда КонтейнерТестов.СлучайныйПорядокВыполнения = Истина; @@ -275,23 +392,41 @@ КонецПроцедуры Процедура НачатьГруппу(Знач ИмяГруппы, Знач СтрогийПорядокВыполнения = Ложь) Экспорт - ТекущаяГруппа = КэшПостроительДереваТестов.СоздатьКонтейнер(ИмяГруппы, КэшПостроительДереваТестов.ИконкиУзловДереваТестов.Группа); - ТекущаяГруппа.Путь = ЗагружаемыйПуть; + + ЗагружаемыйПутьДляГруппы = ЗагружаемыйПуть; + Если ЗагрузкаИзМодуляФормы Тогда + ЗагружаемыйПутьДляГруппы = ПрефиксПутейСФормами() + ЗагружаемыйПуть; + КонецЕсли; + + ТекущаяГруппа = КэшПостроительДереваТестов.СоздатьКонтейнер(ИмяГруппы, КэшПостроительДереваТестов.ИконкиУзловДереваТестов.Группа); + ТекущаяГруппа.Путь = ЗагружаемыйПутьДляГруппы; ТекущаяГруппа.СлучайныйПорядокВыполнения = Не СтрогийПорядокВыполнения; КонтейнерТестов.Строки.Добавить(ТекущаяГруппа); + КонецПроцедуры Функция Добавить(Знач ИмяМетода, Знач Параметры = Неопределено, Знач Представление = "") Экспорт - Если Не ЗначениеЗаполнено(Параметры) ИЛИ ТипЗнч(Параметры) <> Тип("Массив") Тогда + + Если НЕ ЗначениеЗаполнено(Параметры) ИЛИ ТипЗнч(Параметры) <> Тип("Массив") Тогда Если ТипЗнч(Параметры) = Тип("Строка") И Представление = "" Тогда Представление = Параметры; КонецЕсли; - Параметры = Неопределено; - КонецЕсли; - Элемент = КэшПостроительДереваТестов.СоздатьЭлемент(ЗагружаемыйПуть, ИмяМетода, Представление); - Если Параметры <> Неопределено Тогда + Параметры = Неопределено; + КонецЕсли; + + ЗагружаемыйПутьДляПостроителяДереваТестов = ЗагружаемыйПуть; + Если ЗагрузкаИзМодуляФормы Тогда + ЗагружаемыйПутьДляПостроителяДереваТестов = ПрефиксПутейСФормами() + ЗагружаемыйПуть; + КонецЕсли; + + Элемент = КэшПостроительДереваТестов.СоздатьЭлемент(ЗагружаемыйПутьДляПостроителяДереваТестов, + ИмяМетода, + Представление); + + Если Параметры <> Неопределено Тогда Элемент.Параметры = Параметры; - КонецЕсли; + КонецЕсли; + Если ЗначениеЗаполнено(ТекущаяГруппа) Тогда ТекущаяГруппа.Строки.Добавить(Элемент); Иначе @@ -299,6 +434,7 @@ КонецЕсли; Возврат Элемент; + КонецФункции Функция ДобавитьДеструктор(Знач ИмяМетодаДеструктора, Знач Представление = "") Экспорт @@ -340,6 +476,23 @@ Возврат ПараметрыТеста; КонецФункции +Функция ПрефиксПутейСФормами() + Возврат "УпрФорма # "; +КонецФункции + +// } API нового формата + +// { Helpers +Функция ЕстьОшибка_МетодОбъектаНеОбнаружен(Знач ТекстОшибки, Знач ИмяМетода) + Результат = Ложь; + Если Найти(текстОшибки, "Метод объекта не обнаружен (" + ИмяМетода + ")") > 0 + ИЛИ Найти(текстОшибки, "Object method not found (" + ИмяМетода + ")") > 0 Тогда + Результат = Истина; + КонецЕсли; + + Возврат Результат; +КонецФункции + // Пропустить тест, при этом ядро не пытается найти и выполнять тест, а сразу помечает его неиспользованным // Такой подход значительно ускорит прогон тестов, о которых еще на этапе подготовки известно, что они должны быть пропущены. // @@ -357,19 +510,6 @@ Возврат Элемент; КонецФункции - -// } API нового формата - -// { Helpers -Функция ЕстьОшибка_МетодОбъектаНеОбнаружен(Знач ТекстОшибки, Знач ИмяМетода) - Результат = Ложь; - Если Найти(текстОшибки, "Метод объекта не обнаружен (" + ИмяМетода + ")") > 0 - ИЛИ Найти(текстОшибки, "Object method not found (" + ИмяМетода + ")") > 0 Тогда - Результат = Истина; - КонецЕсли; - - Возврат Результат; -КонецФункции // } Helpers мЗначенияТиповСтроки = Новый Структура; diff --git "a/plugins/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Forms/\320\243\320\277\321\200\320\260\320\262\320\273\321\217\320\265\320\274\320\260\321\217\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/plugins/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Forms/\320\243\320\277\321\200\320\260\320\262\320\273\321\217\320\265\320\274\320\260\321\217\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" index 48e066dbd..aefd15e3c 100644 --- "a/plugins/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Forms/\320\243\320\277\321\200\320\260\320\262\320\273\321\217\320\265\320\274\320\260\321\217\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" +++ "b/plugins/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Forms/\320\243\320\277\321\200\320\260\320\262\320\273\321\217\320\265\320\274\320\260\321\217\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -37,7 +37,7 @@ СтруктураМетаданных = СтруктураМетаданныхПоПереданномуПути(Путь); ПостроительДереваТестов = КонтекстЯдра.Плагин("ПостроительДереваТестов"); ДеревоТестов = Неопределено; - ОбработатьОбъектМетаданных(СтруктураМетаданных, ДеревоТестов); + ОбработатьОбъектМетаданных(СтруктураМетаданных, ДеревоТестов, КонтекстЯдра); Возврат ДеревоТестов; КонецФункции @@ -48,7 +48,7 @@ СтруктураМетаданных = СтруктураМетаданныхПоПереданномуПути(Путь); ПостроительДереваТестов = КонтекстЯдра.Плагин("ПостроительДереваТестов"); ДеревоТестов = Неопределено; - ОбработатьОбъектМетаданных(СтруктураМетаданных, ДеревоТестов); + ОбработатьОбъектМетаданных(СтруктураМетаданных, ДеревоТестов, КонтекстЯдра); ВыполнитьОбработкуОповещения(ОбработкаОповещения, ДеревоТестов); @@ -124,11 +124,11 @@ КонецФункции &НаКлиенте -Функция ОбработатьОбъектМетаданных(СтруктураМетаданных, ДеревоТестов) +Функция ОбработатьОбъектМетаданных(СтруктураМетаданных, ДеревоТестов, КонтекстЯдра) Если ЭтоПодсистема(СтруктураМетаданных.ПолноеИмя) Тогда - Контейнер = ЗагрузитьПодсистему(СтруктураМетаданных, ДеревоТестов); + Контейнер = ЗагрузитьПодсистему(СтруктураМетаданных, ДеревоТестов, КонтекстЯдра); Иначе - Контейнер = ЗагрузитьОбработку(СтруктураМетаданных, ДеревоТестов); + Контейнер = ЗагрузитьОбработку(СтруктураМетаданных, ДеревоТестов, КонтекстЯдра); КонецЕсли; Возврат Контейнер; @@ -140,14 +140,14 @@ КонецФункции &НаКлиенте -Функция ЗагрузитьПодсистему(СтруктураМетаданных, ДеревоТестов) +Функция ЗагрузитьПодсистему(СтруктураМетаданных, ДеревоТестов, КонтекстЯдра) Контейнер = ПостроительДереваТестов.СоздатьКонтейнер(СтруктураМетаданных.Имя, ПостроительДереваТестов.Объект.ИконкиУзловДереваТестов.Подсистема); Для Каждого ПодчиненноеМетаданное Из СтруктураМетаданных.Строки Цикл Если ЭтоПодсистема(ПодчиненноеМетаданное.ПолноеИмя) Тогда - ЗагрузитьПодсистему(ПодчиненноеМетаданное, Контейнер); + ЗагрузитьПодсистему(ПодчиненноеМетаданное, Контейнер, КонтекстЯдра); Иначе - ЗагрузитьОбработку(ПодчиненноеМетаданное, Контейнер); + ЗагрузитьОбработку(ПодчиненноеМетаданное, Контейнер, КонтекстЯдра); КонецЕсли; КонецЦикла; @@ -161,11 +161,11 @@ КонецФункции &НаКлиенте -Функция ЗагрузитьОбработку(СтруктураМетаданных, ДеревоТестов) +Функция ЗагрузитьОбработку(СтруктураМетаданных, ДеревоТестов, КонтекстЯдра) ЗагружаемыйПуть = СтрЗаменить("Метаданные." + СтруктураМетаданных.ПолноеИмя, ".Обработка.", ".Обработки."); ЗагружаемыйПуть = СтрЗаменить(ЗагружаемыйПуть, ".Отчет.", ".Отчеты."); Контейнер = ЗагрузитьОбработкуНаСервере(ЗагружаемыйПуть); - КонтейнерСКлиентскимиТестамиОбработки = ЗагрузитьОбработкуНаКлиенте(СтруктураМетаданных); + КонтейнерСКлиентскимиТестамиОбработки = ЗагрузитьОбработкуНаКлиенте(СтруктураМетаданных, КонтекстЯдра); Если КонтейнерСКлиентскимиТестамиОбработки.Строки.Количество() > 0 Тогда Контейнер.Строки.Добавить(КонтейнерСКлиентскимиТестамиОбработки); КонецЕсли; @@ -185,16 +185,16 @@ ПостроительДереваТестов = КонтекстЯдра.СоздатьОбъектПлагина("ПостроительДереваТестов"); ЗагрузчикФайла = КонтекстЯдра.СоздатьОбъектПлагина("ЗагрузчикФайла"); - ДеревоТестов = ЭтотОбъектНаСервере().ЗагрузитьПуть(Путь, ПостроительДереваТестов, ЗагрузчикФайла); + ДеревоТестов = ЭтотОбъектНаСервере().ЗагрузитьПуть(Путь, ПостроительДереваТестов, ЗагрузчикФайла, КонтекстЯдра); Возврат ДеревоТестов; КонецФункции &НаКлиенте -Функция ЗагрузитьОбработкуНаКлиенте(СтруктураМетаданных) +Функция ЗагрузитьОбработкуНаКлиенте(СтруктураМетаданных, КонтекстЯдра) ФормаОбработки = ПолучитьФорму(СтруктураМетаданных.ПолноеИмя + ".Форма"); Попытка - Контейнер = ЗагрузитьТестыВНовомФормате_НаКлиенте(ФормаОбработки); + Контейнер = ЗагрузитьТестыВНовомФормате_НаКлиенте(ФормаОбработки, КонтекстЯдра); Исключение ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); Если ЭтоНовыйФорматОбработки(ТекстОшибки) Тогда @@ -214,14 +214,30 @@ КонецФункции &НаКлиенте -Функция ЗагрузитьТестыВНовомФормате_НаКлиенте(ФормаОбработки) - КонтейнерТестов = ПостроительДереваТестов.СоздатьКонтейнер(ПрефиксПутейСФормами() + СтрЗаменить(ЗагружаемыйПуть, "Метаданные.Обработки.", ""), ПостроительДереваТестов.Объект.ИконкиУзловДереваТестов.Форма); - ФормаОбработки.ЗаполнитьНаборТестов(ЭтаФорма); +Функция ЗагрузитьТестыВНовомФормате_НаКлиенте(ФормаОбработки, КонтекстЯдра) + + КонтейнерТестов = ПостроительДереваТестов.СоздатьКонтейнер(ПрефиксПутейСФормами() + СтрЗаменить(ЗагружаемыйПуть, "Метаданные.Обработки.", ""), ПостроительДереваТестов.Объект.ИконкиУзловДереваТестов.Форма); + Попытка + ФормаОбработки.ЗаполнитьНаборТестов(ЭтаФорма, КонтекстЯдра); + Исключение + Инфо = ИнформацияОбОшибке(); + Если Инфо.ИмяМодуля = "ВнешняяОбработка.ЗагрузчикФайла.Форма.Форма.Форма" И + (Инфо.Описание = "Слишком много фактических параметров" Или + Инфо.Описание = "Too many actual parameters") И + Найти(Инфо.ИсходнаяСтрока, "ФормаОбработки.ЗаполнитьНаборТестов(ЭтаФорма, КонтекстЯдра);") > 0 + Тогда + + ФормаОбработки.ЗаполнитьНаборТестов(ЭтаФорма); + Иначе + ВызватьИсключение; + КонецЕсли; + КонецПопытки; Результат = КонтейнерТестов; КонтейнерТестов = Неопределено; ТекущаяГруппа = Неопределено; Возврат Результат; + КонецФункции &НаКлиенте @@ -383,26 +399,6 @@ Возврат ПараметрыТеста; КонецФункции - -// Пропустить тест, при этом ядро не пытается найти и выполнять тест, а сразу помечает его неиспользованным -// Такой подход значительно ускорит прогон тестов, о которых еще на этапе подготовки известно, что они должны быть пропущены. -// -// Параметры: -// Представление - Строка - Представление теста -// -// Возвращаемое значение: -// Произвольный - созданный элемент. См. Добавить -// -&НаКлиенте -Функция ПропуститьТест(Знач Представление) Экспорт - - Элемент = Добавить(Представление, Неопределено, Представление); - Элемент.ПропуститьТест = Истина; - - Возврат Элемент; - -КонецФункции - // } API нового формата // { Helpers @@ -479,4 +475,23 @@ КонецПроцедуры -// } Вспомогательные методы \ No newline at end of file +// Пропустить тест, при этом ядро не пытается найти и выполнять тест, а сразу помечает его неиспользованным +// Такой подход значительно ускорит прогон тестов, о которых еще на этапе подготовки известно, что они должны быть пропущены. +// +// Параметры: +// Представление - Строка - Представление теста +// +// Возвращаемое значение: +// Произвольный - созданный элемент. См. Добавить +// +&НаКлиенте +Функция ПропуститьТест(Знач Представление) Экспорт + + Элемент = Добавить(Представление, Неопределено, Представление); + Элемент.ПропуститьТест = Истина; + + Возврат Элемент; + +КонецФункции + +// } Вспомогательные методы