1
0
mirror of https://github.com/bia-technologies/yaxunit.git synced 2024-11-24 08:22:22 +02:00

#322 Новая зависимость - ФабрикаXDTO

This commit is contained in:
alkoleft 2024-04-03 00:03:30 +03:00
parent b3bbf387e0
commit 678067ff2c
14 changed files with 429 additions and 63 deletions

View File

@ -22,7 +22,7 @@
// Гарантирует доступность файлов как на клиенте, так и на сервере.
//
// Параметры:
// ПутьКФайлам - Строка - Относетельный путь к файлу проекта (относительно настройки projectPath)
// ПутьКФайлам - Строка - Относительный путь к файлу проекта (относительно настройки projectPath)
//
// Возвращаемое значение:
// CommonModule.ЮТТесты - Файлы проекта
@ -38,4 +38,27 @@
КонецФункции
// Указывает зависимость теста (набора или модуля) от фабрики XDTO, создаваемой на основании файлов.
// Создает и кэширует фабрику, предоставляя к доступ из любого серверного теста
//
// Параметры:
// ПутьКФайлам - Строка - Относительный путь к файлу проекта (относительно настройки projectPath)
//
// Возвращаемое значение:
// CommonModule.ЮТТесты - Файлы проекта
Функция ФабрикаXDTO(ПутьКФайлам) Экспорт
ФайлыПроекта(ПутьКФайлам);
ОписаниеЗависимости = ЮТФабрика.НовоеОписаниеЗависимости();
ОписаниеЗависимости.Идентификатор = "ФабрикаXDTO";
ОписаниеЗависимости.МетодРеализации = "ЮТРазрешениеЗависимостейСлужебныйВызовСервера.ФабрикаXDTO";
ОписаниеЗависимости.Параметры.Добавить(ПутьКФайлам);
ОписаниеЗависимости.ОбработкаНаСервере = Истина;
ОписаниеЗависимости.ДоступностьНаКлиенте = Ложь;
Возврат ЮТЗависимостиСлужебный.ДобавитьЗависимостьПриРегистрации(ОписаниеЗависимости);
КонецФункции
#КонецОбласти

View File

@ -25,10 +25,27 @@
Результаты = ЮТКонтекстСлужебный.ЗначениеКонтекста(ИмяКонтекстаДанныеЗависимостей());
ДанныеЗависимости = Результаты[КлючЗависимости];
Если ДанныеЗависимости = Неопределено И НЕ ЗависимостьРазрешена(КлючЗависимости) Тогда
ВызватьИсключение СтрШаблон("Не указана или не разрешена зависимость `%1`", ПредставлениеЗависимости(ОписаниеЗависимости));
Если ДанныеЗависимости <> Неопределено Тогда
Возврат ДанныеЗависимости;
КонецЕсли;
РезультатРазрешения = РезультатРазрешенияЗависимости(КлючЗависимости);
ПредставлениеЗависимости = ПредставлениеЗависимости(ОписаниеЗависимости);
Если РезультатРазрешения = Неопределено Или НЕ РезультатРазрешения.Успешно Тогда
ВызватьИсключение СтрШаблон("Не указана или не разрешена зависимость `%1`", ПредставлениеЗависимости);
КонецЕсли;
#Если Сервер Тогда
Если НЕ РезультатРазрешения.ДоступностьНаСервере Тогда
ВызватьИсключение СтрШаблон("Зависимость `%1` недоступна на сервере", ПредставлениеЗависимости);
КонецЕсли;
#Иначе
Если НЕ РезультатРазрешения.ДоступностьНаКлиенте Тогда
ВызватьИсключение СтрШаблон("Зависимость `%1` недоступна на клиенте", ПредставлениеЗависимости);
КонецЕсли;
#КонецЕсли
Возврат ДанныеЗависимости;
КонецФункции
@ -42,7 +59,7 @@
// CommonModule.ЮТТесты
Функция ДобавитьЗависимостьПриРегистрации(ОписаниеЗависимости) Экспорт
Если ЮТКонтекстСлужебный.КонтекстИсполнения() <> Неопределено Тогда
Если ЮТКонтекстСлужебный.ТекущийЭтапПрогона() <> ЮТФабрика.ЭтапыПрогона().ЗагрузкаТестов Тогда
Возврат ОписаниеЗависимости;
Иначе
ЮТТестыСлужебный.ДобавитьЗависимость(ОписаниеЗависимости);

View File

@ -0,0 +1,50 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// 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.
//
//©///////////////////////////////////////////////////////////////////////////©//
#Область СлужебныйПрограммныйИнтерфейс
Функция РазрешитьЗависимость(Знач ОписаниеЗависимости) Экспорт
Попытка
Результат = ЮТМетодыСлужебный.ВызватьФункцию(ОписаниеЗависимости.МетодРеализации, ОписаниеЗависимости.Параметры, Ложь);
Исключение
Результат = ЮТФабрикаСлужебный.РезультатРазрешенияЗависимости();
Результат.Ошибка = ИнформацияОбОшибке();
КонецПопытки;
СохраняемыйКонтекст = Результат.СохраняемыйКонтекстСервер;
Если СохраняемыйКонтекст = Неопределено Тогда
СохраняемыйКонтекст = Результат.СохраняемыйКонтекст;
КонецЕсли;
Если СохраняемыйКонтекст <> Неопределено Тогда
ПередаваемыеЗначения = Новый Соответствие();
ПередаваемыеЗначения.Вставить(ОписаниеЗависимости.Ключ, СохраняемыйКонтекст);
ЮТКонтекстСлужебный.ВставитьЗначениеКонтекста(ЮТЗависимостиСлужебный.ИмяКонтекстаДанныеЗависимостей(), ПередаваемыеЗначения);
КонецЕсли;
Результат.СохраняемыйКонтекст = Неопределено;
Результат.СохраняемыйКонтекстСервер = Неопределено;
Возврат Результат;
КонецФункции
#КонецОбласти

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="aadcdc6d-a7a4-48d0-a3ac-3d77022cca43">
<name>ЮТЗависимостиСлужебныйВызовСервера</name>
<synonym>
<key>ru</key>
<value>Зависимости служебный вызов сервера</value>
</synonym>
<server>true</server>
<serverCall>true</serverCall>
</mdclass:CommonModule>

View File

@ -58,7 +58,8 @@
// Дедупликация зависимостей.
//
// Параметры:
// РезультатЧтенияТестов - Массив из см. ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля - Набор описаний тестовых модулей, которые содержат информацию о запускаемых тестах
// РезультатЧтенияТестов - Массив из см. ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля - Набор описаний тестовых модулей,
// которые содержат информацию о запускаемых тестах
Процедура ДедупликацияЗависимостей(РезультатЧтенияТестов) Экспорт
Зависимости = Новый Соответствие();
@ -125,10 +126,19 @@
КонецПроцедуры
Процедура РазрешитьЗависимостьАсинхронно(Результат, Параметры) Экспорт
Процедура РазрешитьЗависимостьАсинхронно(_, Параметры) Экспорт
ОписаниеЗависимости = Параметры.ОписаниеЗависимости;
ЮТЛогирование.Отладка("Обработка зависимостей: асинхронная обработка зависимости " + ЮТЗависимостиСлужебный.ПредставлениеЗависимости(ОписаниеЗависимости));
ПредставлениеЗависимости = ЮТЗависимостиСлужебный.ПредставлениеЗависимости(ОписаниеЗависимости);
ЮТЛогирование.Отладка("Обработка зависимостей: асинхронная обработка зависимости " + ПредставлениеЗависимости);
Если ОписаниеЗависимости.ОбработкаНаСервере Тогда
Результат = ЮТФабрикаСлужебный.РезультатРазрешенияЗависимости();
Результат.Ошибка = "Скорректируйте параметры зависимости, асинхронная зависимость не может обрабатываться на сервере";
ОбработатьРезультатРазрешенияЗависимости(Результат, Параметры);
Возврат;
КонецЕсли;
Обработчик = Новый ОписаниеОповещения("ОбработатьРезультатРазрешенияЗависимости", ЭтотОбъект, Параметры);
@ -139,20 +149,40 @@
Ошибка = ЮТМетодыСлужебный.ВыполнитьМетод(ИмяМетода, ПараметрыМетода);
Если Ошибка <> Неопределено Тогда
РезультатРазрешения = ЮТФабрикаСлужебный.РезультатРазрешенияЗависимости();
РезультатРазрешения.Ошибка = Ошибка;
ОбработатьРезультатРазрешенияЗависимости(РезультатРазрешения, Параметры);
Результат = ЮТФабрикаСлужебный.РезультатРазрешенияЗависимости();
Результат.Ошибка = Ошибка;
ОбработатьРезультатРазрешенияЗависимости(Результат, Параметры);
КонецЕсли;
КонецПроцедуры
Процедура РазрешитьЗависимость(_, Параметры) Экспорт
ОписаниеЗависимости = Параметры.ОписаниеЗависимости;
Попытка
Если ОписаниеЗависимости.ОбработкаНаСервере Тогда
Результат = ЮТЗависимостиСлужебныйВызовСервера.РазрешитьЗависимость(ОписаниеЗависимости);
Иначе
Результат = ЮТМетодыСлужебный.ВызватьФункцию(ОписаниеЗависимости.МетодРеализации, ОписаниеЗависимости.Параметры, Ложь);
КонецЕсли;
Исключение
Результат = ЮТФабрикаСлужебный.РезультатРазрешенияЗависимости();
Результат.Ошибка = ИнформацияОбОшибке();
КонецПопытки;
ОбработатьРезультатРазрешенияЗависимости(Результат, Параметры);
КонецПроцедуры
Процедура ОбработатьРезультатРазрешенияЗависимости(Результат, Параметры) Экспорт
ОписаниеЗависимости = Параметры.ОписаниеЗависимости;
ПредставлениеЗависимости = ЮТЗависимостиСлужебный.ПредставлениеЗависимости(ОписаниеЗависимости);
ЮТЛогирование.Отладка("Обработка зависимостей: заврешена обработка зависимости " + ПредставлениеЗависимости);
ПараметрыИсполнения = Параметры.ПараметрыИсполнения;
ПредставлениеЗависимости = ЮТЗависимостиСлужебный.ПредставлениеЗависимости(ОписаниеЗависимости);
ЮТЛогирование.Отладка("Обработка зависимостей: сохранение результата обработки зависимости " + ПредставлениеЗависимости);
Если НЕ Результат.Успешно Тогда
Сообщение = СтрШаблон("Не удалось разрешить зависимость `%1`", ПредставлениеЗависимости);
@ -160,60 +190,55 @@
ЮТЛогирование.Ошибка(Результат.Ошибка.Сообщение);
КонецЕсли;
СохранитьРезультатРазрешенияЗависимости(ОписаниеЗависимости.Ключ, Результат);
ЮТАсинхроннаяОбработкаСлужебныйКлиент.ВызватьСледующийОбработчик(ПараметрыИсполнения);
СохранитьРезультатРазрешенияЗависимости(ОписаниеЗависимости, Результат);
ЮТАсинхроннаяОбработкаСлужебныйКлиент.ВызватьСледующийОбработчик(Параметры.ПараметрыИсполнения);
ЮТЛогирование.Отладка("Обработка зависимостей: завершена обработка зависимости " + ПредставлениеЗависимости);
КонецПроцедуры
Процедура РазрешитьЗависимость(Результат, Параметры) Экспорт
Процедура СохранитьРезультатРазрешенияЗависимости(ОписаниеЗависимости, Результат) Экспорт
ОписаниеЗависимости = Параметры.ОписаниеЗависимости;
ИмяДанныеЗависимостей = ЮТЗависимостиСлужебный.ИмяКонтекстаДанныеЗависимостей();
ИмяРазрешенныеЗависимости = ЮТЗависимостиСлужебный.ИмяКонтекстаРазрешенныеЗависимости();
Попытка
РезультатРазрешения = ЮТМетодыСлужебный.ВызватьФункцию(ОписаниеЗависимости.МетодРеализации, ОписаниеЗависимости.Параметры);
Исключение
РезультатРазрешения = ЮТФабрикаСлужебный.РезультатРазрешенияЗависимости();
РезультатРазрешения.Ошибка = ИнформацияОбОшибке();
КонецПопытки;
ОбработатьРезультатРазрешенияЗависимости(РезультатРазрешения, Параметры);
КонецПроцедуры
Процедура СохранитьРезультатРазрешенияЗависимости(КлючЗависимости, Результат) Экспорт
ИмяКонтекстаДанныеЗависимостей = ЮТЗависимостиСлужебный.ИмяКонтекстаДанныеЗависимостей();
Результат.ДоступностьНаКлиенте = ОписаниеЗависимости.ДоступностьНаКлиенте;
Результат.ДоступностьНаСервере = ОписаниеЗависимости.ДоступностьНаСервере;
КонтекстРазрешенныеЗависимости = ЮТЗависимостиСлужебный.КонтекстРазрешенныеЗависимости();
КонтекстРазрешенныеЗависимости.Вставить(КлючЗависимости, Результат);
КонтекстРазрешенныеЗависимости.Вставить(ОписаниеЗависимости.Ключ, Результат);
ПередаваемыеЗначения = Новый Соответствие();
ПередаваемыеЗначения.Вставить(ОписаниеЗависимости.Ключ, Результат);
ЮТКонтекстСлужебный.ВставитьЗначениеКонтекста(ИмяРазрешенныеЗависимости, ПередаваемыеЗначения);
ЮТКонтекстСлужебный.ВставитьЗначениеКонтекста(ИмяРазрешенныеЗависимости, ПередаваемыеЗначения, Истина);
Если Результат.СохраняемыйКонтекст <> Неопределено Тогда
ПередаваемыеЗначения.Вставить(КлючЗависимости, Результат.СохраняемыйКонтекстСервер);
ЮТКонтекстСлужебный.ВставитьЗначениеКонтекста(ИмяКонтекстаДанныеЗависимостей, ПередаваемыеЗначения);
ЮТКонтекстСлужебный.ВставитьЗначениеКонтекста(ИмяКонтекстаДанныеЗависимостей, ПередаваемыеЗначения, Истина);
ПередаваемыеЗначения.Вставить(ОписаниеЗависимости.Ключ, Результат.СохраняемыйКонтекст);
ЮТКонтекстСлужебный.ВставитьЗначениеКонтекста(ИмяДанныеЗависимостей, ПередаваемыеЗначения);
ЮТКонтекстСлужебный.ВставитьЗначениеКонтекста(ИмяДанныеЗависимостей, ПередаваемыеЗначения, Истина);
КонецЕсли;
Если Результат.СохраняемыйКонтекстСервер <> Неопределено Тогда
ПередаваемыеЗначения.Вставить(КлючЗависимости, Результат.СохраняемыйКонтекстСервер);
ЮТКонтекстСлужебный.ВставитьЗначениеКонтекста(ИмяКонтекстаДанныеЗависимостей, ПередаваемыеЗначения, Истина);
ПередаваемыеЗначения.Вставить(ОписаниеЗависимости.Ключ, Результат.СохраняемыйКонтекстСервер);
ЮТКонтекстСлужебный.ВставитьЗначениеКонтекста(ИмяДанныеЗависимостей, ПередаваемыеЗначения, Истина);
КонецЕсли;
Если Результат.СохраняемыйКонтекстКлиент <> Неопределено Тогда
ПередаваемыеЗначения.Вставить(КлючЗависимости, Результат.СохраняемыйКонтекстКлиент);
ЮТКонтекстСлужебный.ВставитьЗначениеКонтекста(ИмяКонтекстаДанныеЗависимостей, ПередаваемыеЗначения);
ПередаваемыеЗначения.Вставить(ОписаниеЗависимости.Ключ, Результат.СохраняемыйКонтекстКлиент);
ЮТКонтекстСлужебный.ВставитьЗначениеКонтекста(ИмяДанныеЗависимостей, ПередаваемыеЗначения);
КонецЕсли;
КонецПроцедуры
Процедура ПослеОбработкиЗависимостей(Результат, ПараметрыИсполнения) Экспорт
Процедура ПослеОбработкиЗависимостей(_, ПараметрыИсполнения) Экспорт
РазрешенныеЗависимости = ЮТЗависимостиСлужебный.КонтекстРазрешенныеЗависимости();
Статусы = ЮТФабрика.СтатусыИсполненияТеста();
@ -294,7 +319,8 @@
Если Результат = Неопределено Тогда
Результат = ЮТФабрикаСлужебный.РезультатРазрешенияЗависимости();
Сообщение = СтрШаблон("Нет информации о зависимости `%1`, что-то пошло не так", ЮТЗависимостиСлужебный.ПредставлениеЗависимости(ОписаниеЗависимости));
ПредставлениеЗависимости = ЮТЗависимостиСлужебный.ПредставлениеЗависимости(ОписаниеЗависимости);
Сообщение = СтрШаблон("Нет информации о зависимости `%1`, что-то пошло не так", ПредставлениеЗависимости);
Результат.Ошибка = ОписаниеОшибкиПропуска(Сообщение);
КонецЕсли;

View File

@ -122,6 +122,8 @@
Процедура ВыполнитьИнициализацию(ПараметрыЗапуска) Экспорт
ЮТКонтекстСлужебный.ИнициализироватьКонтекст();
ЮТКонтекстСлужебный.УстановитьТекущийЭтапПрогона(ЮТФабрика.ЭтапыПрогона().Инициализация);
ЮТКонтекстСлужебный.СохранитьПараметрыЗапуска(ПараметрыЗапуска);
ЮТКонтекстСлужебный.УстановитьГлобальныеНастройкиВыполнения(ПараметрыЗапуска.settings);
@ -144,7 +146,7 @@
КонецПроцедуры
Процедура ОбработчикЗагрузитьПараметры(Результат, ДополнительныеПараметры) Экспорт
Процедура ОбработчикЗагрузитьПараметры(_, ДополнительныеПараметры) Экспорт
Обработчик = ЮТАсинхроннаяОбработкаСлужебныйКлиент.СледующийОбработчик(ДополнительныеПараметры);
ЮТПараметрыЗапускаСлужебный.ПараметрыЗапуска(ДополнительныеПараметры.АргументыЗапуска, Обработчик);
@ -163,15 +165,16 @@
КонецПроцедуры
Процедура ОбработчикИнициализация(Результат, ДополнительныеПараметры) Экспорт
Процедура ОбработчикИнициализация(_, ДополнительныеПараметры) Экспорт
ВыполнитьИнициализацию(ДополнительныеПараметры.ПараметрыЗапуска);
ЮТАсинхроннаяОбработкаСлужебныйКлиент.ВызватьСледующийОбработчик(ДополнительныеПараметры);
КонецПроцедуры
Процедура ОбработчикЗагрузитьТесты(Результат, ДополнительныеПараметры) Экспорт
Процедура ОбработчикЗагрузитьТесты(_, ДополнительныеПараметры) Экспорт
ЮТКонтекстСлужебный.УстановитьТекущийЭтапПрогона(ЮТФабрика.ЭтапыПрогона().ЗагрузкаТестов);
ЮТСобытияСлужебный.ПередЧтениеСценариев();
ТестовыеМодули = ЮТЧитательСлужебный.ЗагрузитьТесты(ДополнительныеПараметры.ПараметрыЗапуска);
@ -191,16 +194,18 @@
КонецПроцедуры
Процедура ОбработчикРазрешитьЗависимости(Результат, ДополнительныеПараметры) Экспорт
Процедура ОбработчикРазрешитьЗависимости(_, ДополнительныеПараметры) Экспорт
ЮТКонтекстСлужебный.УстановитьТекущийЭтапПрогона(ЮТФабрика.ЭтапыПрогона().РазрешениеЗависимостей);
Обработчик = ЮТАсинхроннаяОбработкаСлужебныйКлиент.СледующийОбработчик(ДополнительныеПараметры);
ЮТЗависимостиСлужебныйКлиент.РазрешитьЗависимости(ДополнительныеПараметры.ИсполняемыеТестовыеМодули, Обработчик);
КонецПроцедуры
Процедура ОбработчикВыполнитьТестирование(Результат, ДополнительныеПараметры) Экспорт
Процедура ОбработчикВыполнитьТестирование(_, ДополнительныеПараметры) Экспорт
ЮТКонтекстСлужебный.УстановитьТекущийЭтапПрогона(ЮТФабрика.ЭтапыПрогона().ПрогонТестов);
ЮТСобытияСлужебный.ПередВыполнениемТестов(ДополнительныеПараметры.ИсполняемыеТестовыеМодули);
РезультатыТестирования = Новый Массив();
@ -219,8 +224,9 @@
КонецПроцедуры
Процедура ОбработчикСохранитьОтчет(Результат, ДополнительныеПараметры) Экспорт
Процедура ОбработчикСохранитьОтчет(_, ДополнительныеПараметры) Экспорт
ЮТКонтекстСлужебный.УстановитьТекущийЭтапПрогона(ЮТФабрика.ЭтапыПрогона().ФормированиеОтчета);
Если ЗначениеЗаполнено(ДополнительныеПараметры.ПараметрыЗапуска.reportPath) Тогда
Обработчик = ЮТАсинхроннаяОбработкаСлужебныйКлиент.СледующийОбработчик(ДополнительныеПараметры);
ЮТОтчетСлужебный.СформироватьОтчет(ДополнительныеПараметры.РезультатыТестирования, ДополнительныеПараметры.ПараметрыЗапуска, Обработчик);
@ -230,14 +236,14 @@
КонецПроцедуры
Процедура ОбработчикСохранитьКодВозврата(Результат, ДополнительныеПараметры) Экспорт
Процедура ОбработчикСохранитьКодВозврата(_, ДополнительныеПараметры) Экспорт
ЗаписатьКодВозврата(ДополнительныеПараметры.РезультатыТестирования, ДополнительныеПараметры.ПараметрыЗапуска);
ЮТАсинхроннаяОбработкаСлужебныйКлиент.ВызватьСледующийОбработчик(ДополнительныеПараметры);
КонецПроцедуры
Процедура ОбработчикЗавершить(Результат, ДополнительныеПараметры) Экспорт
Процедура ОбработчикЗавершить(_, ДополнительныеПараметры) Экспорт
Параметры = ДополнительныеПараметры.ПараметрыЗапуска;
ЮТКонтекстСлужебный.УдалитьКонтекст();
@ -250,7 +256,7 @@
КонецПроцедуры
Процедура ОбработчикПодключитьКомпоненты(Результат, ДополнительныеПараметры) Экспорт
Процедура ОбработчикПодключитьКомпоненты(_, ДополнительныеПараметры) Экспорт
Если ДополнительныеПараметры.ПараметрыЗапуска.ПодключатьВнешниеКомпоненты Тогда
Обработчик = ЮТАсинхроннаяОбработкаСлужебныйКлиент.СледующийОбработчик(ДополнительныеПараметры);

View File

@ -255,6 +255,12 @@
КонецФункции
Функция ТекущийЭтапПрогона() Экспорт
Возврат ЗначениеКонтекста(ИмяКонтекстаЭтапПрогона());
КонецФункции
// см. ЮТФабрика.ПараметрыЗапуска
Функция ПараметрыЗапуска() Экспорт
@ -320,6 +326,16 @@
КонецПроцедуры
Процедура УстановитьТекущийЭтапПрогона(Этап) Экспорт
Если НЕ ЮТФабрика.ЭтапыПрогона().Свойство(Этап) Тогда
ВызватьИсключение СтрШаблон("Передан неизвестный этап тестового прогона: `%1`", Этап);
КонецЕсли;
УстановитьЗначениеКонтекста(ИмяКонтекстаЭтапПрогона(), Этап, Истина);
КонецПроцедуры
Процедура УдалитьКонтекст() Экспорт
#Если Клиент Тогда
@ -381,4 +397,10 @@
КонецФункции
Функция ИмяКонтекстаЭтапПрогона()
Возврат "КонтекстЭтапПрогона";
КонецФункции
#КонецОбласти

View File

@ -18,13 +18,6 @@
#Область СлужебныйПрограммныйИнтерфейс
// Поместить файлы в рабочий каталог.
//
// Параметры:
// ПереданныеФайлы - Массив Из ОписаниеПереданногоФайла
//
// Возвращаемое значение:
//
Функция ПоместитьФайлыВРабочийКаталог(Знач ПереданныеФайлы) Экспорт
Контекст = Новый Структура();
@ -48,6 +41,41 @@
КонецФункции
Функция ФабрикаXDTO(Знач КаталогСхем) Экспорт
Каталог = ЮТест.Зависимость(ЮТЗависимости.ФайлыПроекта(КаталогСхем)).ПолноеИмя;
ПостроительСхем = Новый ПостроительСхемXML();
ПостроительDOM = Новый ПостроительDOM();
НаборСхем = Новый НаборСхемXML();
ФайлыСхем = НайтиФайлы(Каталог, "*.xsd", Истина);
Для Каждого Файл Из ФайлыСхем Цикл
ЧтениеXML = Новый ЧтениеXML();
ЧтениеXML.ОткрытьФайл(Файл.ПолноеИмя);
Схема = ПостроительСхем.СоздатьСхемуXML(ПостроительDOM.Прочитать(ЧтениеXML).ЭлементДокумента);
ЧтениеXML.Закрыть();
Если Схема <> Неопределено Тогда
НаборСхем.Добавить(Схема);
КонецЕсли;
КонецЦикла;
Фабрика = Новый ФабрикаXDTO(НаборСхем);
Результат = ЮТФабрикаСлужебный.РезультатРазрешенияЗависимости();
Результат.Успешно = Фабрика <> Неопределено;
Если Результат.Успешно Тогда
Результат.СохраняемыйКонтекст = Новый Структура("Фабрика", Фабрика);
КонецЕсли;
Возврат Результат;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции

View File

@ -87,7 +87,7 @@
КонецФункции
// Возвращает перечисление возможные уровнией исполнения тестрв.
// Возвращает перечисление возможные уровней исполнения тестов.
//
// Возвращаемое значение:
// ФиксированнаяСтруктура - Уровни исполнения:
@ -105,6 +105,28 @@
КонецФункции
// Возвращает перечисление для описания жизненного цикла прогона тестов
//
// Возвращаемое значение:
// ФиксированнаяСтруктура - Этапа прогона:
// * Инициализация - Строка
// * ЗагрузкаТестов - Строка
// * РазрешениеЗависимостей - Строка
// * ПрогонТестов - Строка
// * ФормированиеОтчета - Строка
Функция ЭтапыПрогона() Экспорт
Этапы = Новый Структура;
Этапы.Вставить("Инициализация", "Инициализация");
Этапы.Вставить("ЗагрузкаТестов", "ЗагрузкаТестов");
Этапы.Вставить("РазрешениеЗависимостей", "РазрешениеЗависимостей");
Этапы.Вставить("ПрогонТестов", "ПрогонТестов");
Этапы.Вставить("ФормированиеОтчета", "ФормированиеОтчета");
Возврат Новый ФиксированнаяСтруктура(Этапы);
КонецФункции
#КонецОбласти
// ПараметрыЗапуска
@ -121,7 +143,7 @@
// * reportFormat - Строка - Формат отчета о тестировании.
// Модули реализующие различные форматы отчетов собраны в подсистеме ЮТФормированиеОтчета
// * logging - см. ПараметрыЛогирования
// * showReport - Булево - Признак необходмости отобразить отчет в 1с по окончании тестирования
// * showReport - Булево - Признак необходимости отобразить отчет в 1с по окончании тестирования
// * exitCode - Строка - Путь к файлу, в который будет записан коды выхода
// * projectPath - Строка - Путь к каталогу с файлами проекта тестирования, репозиторию
// * ПодключатьВнешниеКомпоненты - Булево - Выполнять установку и подключение внешних компонент при старте.
@ -218,6 +240,18 @@
КонецФункции
// Создает новое описание зависимости теста.
//
// Возвращаемое значение:
// Структура - Новое описание зависимости:
// * Идентификатор - Строка - Идентификатор зависимости
// * МетодРеализации - Строка - Метод, вызываемый для разрешения зависимости
// * Параметры - Массив из Произвольный - Параметры зависимости, будут проброшены в метод
// * Ключ - Неопределено - Уникальный ключ зависимости, рассчитывается движком
// * Асинхронный - Булево - Признак, что зависимость асинхронная. Асинхронность реализуется за счет передачи ОписанияОповещения в метод реализации
// * ОбработкаНаСервере - Булево - Признак обработки зависимости на сервере
// * ДоступностьНаКлиенте - Булево - Признак доступности зависимости на клиенте
// * ДоступностьНаСервере - Булево - Признак доступности зависимости на сервере
Функция НовоеОписаниеЗависимости() Экспорт
Описание = Новый Структура;
@ -226,6 +260,9 @@
Описание.Вставить("Параметры", Новый Массив);
Описание.Вставить("Ключ", Неопределено);
Описание.Вставить("Асинхронный", Ложь);
Описание.Вставить("ОбработкаНаСервере", Ложь);
Описание.Вставить("ДоступностьНаКлиенте", Истина);
Описание.Вставить("ДоступностьНаСервере", Истина);
Возврат Описание;

View File

@ -429,7 +429,7 @@
// Структура - Описание проверяемого значения:
// * Значение - Произвольный
// * Представление - Строка - Представление объекта
// - Неопределено - Если не указано тогда используется платформенное предсталение (`Строка(Значение)`)
// - Неопределено - Если не указано тогда используется платформенное представление (`Строка(Значение)`)
// * ИмяСвойства - Строка, Число, Неопределено - Имя проверяемого реквизита, индекса
Функция ОписаниеПроверяемогоЗначения(ПроверяемоеЗначение) Экспорт
@ -473,6 +473,8 @@
Результат.Вставить("СохраняемыйКонтекст", Неопределено);
Результат.Вставить("СохраняемыйКонтекстКлиент", Неопределено);
Результат.Вставить("СохраняемыйКонтекстСервер", Неопределено);
Результат.Вставить("ДоступностьНаКлиенте", Истина);
Результат.Вставить("ДоступностьНаСервере", Истина);
Возврат Результат;
@ -673,7 +675,7 @@
// Структура - Описание формата отчета:
// * Идентификатор - Строка - Уникальный идентификатор формата отчета
// * Представление - Строка - Пользовательское представление отчета, выводится в форму настроек тестирования
// * ЗаписьВКаталог - Булево - Отчет записывается в каталог, в этом случае должен быть установлен призак `СамостоятельнаяЗаписьОтчета`
// * ЗаписьВКаталог - Булево - Отчет записывается в каталог, в этом случае должен быть установлен признак `СамостоятельнаяЗаписьОтчета`
// * ФильтрВыбораФайла - Строка - Фильтр выбора, используется в форме настроек тестирования
// * ИмяФайлаПоУмолчанию - Строка - Для отчетов, записываемых в файл, имя файла если в параметрах указан каталог
// * СамостоятельнаяЗаписьОтчета - Булево - Способ записи отчета в файлы.

View File

@ -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>

View File

@ -194,7 +194,12 @@
КонецЕсли;
СтекОбъектов = Новый Массив();
ТипОбъекта = Фабрика.Тип(ПространствоИмен, ИмяТипаОбъекта);
Если ТипОбъекта = Неопределено Тогда
ВызватьИсключение СтрШаблон("Неизвестный тип `%1`; пространство имен: `%2`", ИмяТипаОбъекта, ПространствоИмен);
КонецЕсли;
ДобавитьНовыйОбъектВСтек(ТипОбъекта);
КонецПроцедуры
@ -239,15 +244,18 @@
Функция СлучайноеЗначениеСвойства(Свойство, Уровень = 0)
ТипСвойства = Свойство.Тип;
Если ТипЗнч(ТипСвойства) = Тип("ТипЗначенияXDTO") Тогда
Возврат СлучайноеЗначениеПримитипа(Свойство);
Возврат СлучайноеЗначениеПримитива(Свойство);
ИначеЕсли Уровень < 3 Тогда
Возврат СлучайноеЗначениеОбъекта(Свойство, Уровень + 1);
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
Функция СлучайноеЗначениеПримитипа(Свойство)
Функция СлучайноеЗначениеПримитива(Свойство)
Тип = Свойство.Тип;

117
fixtures/junit/JUnit.xsd Normal file
View File

@ -0,0 +1,117 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Source: https://svn.jenkins-ci.org/trunk/hudson/dtkit/dtkit-format/dtkit-junit-model/src/main/resources/com/thalesgroup/dtkit/junit/model/xsd/junit-4.xsd
This file available under the terms of the MIT License as follows:
*******************************************************************************
* Copyright (c) 2010 Thales Corporate Services SAS *
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy *
* of this software and associated documentation files (the "Software"), to deal*
* in the Software without restriction, including without limitation the rights *
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell *
* copies of the Software, and to permit persons to whom the Software is *
* furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included in *
* all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE *
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,*
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN *
* THE SOFTWARE. *
********************************************************************************
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://junit.org/schema">
<xs:complexType name="failure">
<xs:complexType mixed="true">
<xs:attribute name="type" type="xs:string" use="optional"/>
<xs:attribute name="message" type="xs:string" use="optional"/>
</xs:complexType>
</xs:complexType>
<xs:complexType name="error">
<xs:complexType mixed="true">
<xs:attribute name="type" type="xs:string" use="optional"/>
<xs:attribute name="message" type="xs:string" use="optional"/>
</xs:complexType>
</xs:complexType>
<xs:complexType name="properties">
<xs:complexType>
<xs:sequence>
<xs:element ref="property" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:complexType>
<xs:complexType name="property">
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="value" type="xs:string" use="required"/>
</xs:complexType>
</xs:complexType>
<xs:simpleType name="skipped" type="xs:string"/>
<xs:simpleType name="system-err" type="xs:string"/>
<xs:simpleType name="system-out" type="xs:string"/>
<xs:complexType name="testcase">
<xs:complexType>
<xs:sequence>
<xs:element ref="skipped" minOccurs="0" maxOccurs="1"/>
<xs:element ref="error" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="failure" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="system-out" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="system-err" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="assertions" type="xs:string" use="optional"/>
<xs:attribute name="time" type="xs:string" use="optional"/>
<xs:attribute name="classname" type="xs:string" use="optional"/>
<xs:attribute name="status" type="xs:string" use="optional"/>
</xs:complexType>
</xs:complexType>
<xs:complexType name="testsuite">
<xs:sequence>
<xs:element name="properties" type="property" minOccurs="0" maxOccurs="1"/>
<xs:element name="testcase" type="testcase" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="system-out" type="system-out" minOccurs="0" maxOccurs="1"/>
<xs:element name="system-err" type="system-err" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="tests" type="xs:string" use="required"/>
<xs:attribute name="failures" type="xs:string" use="optional"/>
<xs:attribute name="errors" type="xs:string" use="optional"/>
<xs:attribute name="time" type="xs:string" use="optional"/>
<xs:attribute name="disabled" type="xs:string" use="optional"/>
<xs:attribute name="skipped" type="xs:string" use="optional"/>
<xs:attribute name="timestamp" type="xs:string" use="optional"/>
<xs:attribute name="hostname" type="xs:string" use="optional"/>
<xs:attribute name="id" type="xs:string" use="optional"/>
<xs:attribute name="package" type="xs:string" use="optional"/>
</xs:complexType>
<xs:complexType name="testsuites">
<xs:complexType>
<xs:sequence>
<xs:element ref="testsuite" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="optional"/>
<xs:attribute name="time" type="xs:string" use="optional"/>
<xs:attribute name="tests" type="xs:string" use="optional"/>
<xs:attribute name="failures" type="xs:string" use="optional"/>
<xs:attribute name="disabled" type="xs:string" use="optional"/>
<xs:attribute name="errors" type="xs:string" use="optional"/>
</xs:complexType>
</xs:complexType>
</xs:schema>

View File

@ -25,6 +25,7 @@
.ДобавитьТест("ДанныеЗависимости").ЗависитОт().ФайлыПроекта(".gitignore")
.ДобавитьТест("ДанныеЗависимости_Каталог").ЗависитОт().ФайлыПроекта(".github")
.ДобавитьТест("ДанныеЗависимости_НеизвестныйФайл").ЗависитОт().ФайлыПроекта("НеизвестныйФайл")
.ДобавитьСерверныйТест("ФабрикаJUnit").ЗависитОт().ФабрикаXDTO("fixtures/junit")
;
КонецПроцедуры
@ -50,6 +51,7 @@
ЮТест.ОжидаетЧто(Зависимость4, "Зависимость с параметром")
.ИмеетТип("ФиксированнаяСтруктура")
.Равно(Зависимость5)
;
КонецПроцедуры
@ -87,6 +89,23 @@
КонецПроцедуры
Процедура ФабрикаJUnit() Экспорт
Фабрика = ЮТест.Зависимость(ЮТЗависимости.ФабрикаXDTO("fixtures/junit")).Фабрика;
ТестовыйНабор = ЮТест.Данные().КонструкторОбъектаXDTO("testsuite", "http://junit.org/schema", Фабрика)
.ФикцияНезаполненных()
.ДанныеОбъекта();
ЮТест.ОжидаетЧто(ТестовыйНабор)
.ИмеетТип(Тип("ОбъектXDTO"))
.Существует()
.ИмеетСвойство("properties")
.ИмеетСвойство("testcase")
.ИмеетСвойство("failures");
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции