Skip to content

Commit

Permalink
Новый репортер ГенераторОтчетаJSON
Browse files Browse the repository at this point in the history
  • Loading branch information
artbear committed Jul 16, 2023
1 parent 71328c6 commit 08d1b5b
Show file tree
Hide file tree
Showing 5 changed files with 356 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4">
<ExternalDataProcessor uuid="11c5f751-bfaf-480a-92fe-7f30023f2e9a">
<InternalInfo>
<xr:ContainedObject>
<xr:ClassId>c3831ec8-d8d5-4f93-8a22-f9bfae07327f</xr:ClassId>
<xr:ObjectId>908d0aaf-e4ec-4668-8d14-3e8075d222fd</xr:ObjectId>
</xr:ContainedObject>
<xr:GeneratedType name="ExternalDataProcessorObject.ГенераторОтчетаJSON" category="Object">
<xr:TypeId>85629dd2-6be4-49c6-9a69-13411102aa57</xr:TypeId>
<xr:ValueId>3fdd55c8-e92e-4f99-8b28-3ba8957b50ab</xr:ValueId>
</xr:GeneratedType>
</InternalInfo>
<Properties>
<Name>ГенераторОтчетаJSON</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Генератор отчета JSON</v8:content>
</v8:item>
</Synonym>
<Comment/>
<DefaultForm>ExternalDataProcessor.ГенераторОтчетаJSON.Form.Форма</DefaultForm>
<AuxiliaryForm/>
</Properties>
<ChildObjects>
<Attribute uuid="72263b85-e321-40b2-b5dc-368b036f7aaa">
<Properties>
<Name>ТипыУзловДереваТестов</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Типы узлов дерева тестов</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type/>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
</Properties>
</Attribute>
<Attribute uuid="23dd7cb5-a648-4588-817a-d77a4106998e">
<Properties>
<Name>ИконкиУзловДереваТестов</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Иконки узлов дерева тестов</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type/>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
</Properties>
</Attribute>
<Attribute uuid="edb4e982-95f6-4760-818c-4bcd498a85aa">
<Properties>
<Name>СостоянияТестов</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Состояния тестов</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type/>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
</Properties>
</Attribute>
<Form>Форма</Form>
</ChildObjects>
</ExternalDataProcessor>
</MetaDataObject>
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@

// { Plugin interface
Функция ОписаниеПлагина(КонтекстЯдра, ВозможныеТипыПлагинов) Экспорт
Результат = Новый Структура;
Результат.Вставить("Тип", ВозможныеТипыПлагинов.ГенераторОтчета);
Результат.Вставить("Идентификатор", Метаданные().Имя);
Результат.Вставить("Представление", "Отчет о тестировании в формате JSON");
Результат.Вставить("ПотоковыйВывод", Ложь); // TODO Нужно или нет?
Результат.Вставить("ФормироватьСводныйФайл", Ложь); // TODO Нужно или нет?

Возврат Новый ФиксированнаяСтруктура(Результат);
КонецФункции

Процедура Инициализация(КонтекстЯдраПараметр) Экспорт
КонецПроцедуры
// } Plugin interface

// { Report generator interface
Функция СоздатьОтчет(КонтекстЯдра, РезультатыТестирования) Экспорт
ПостроительДереваТестов = КонтекстЯдра.Плагин("ПостроительДереваТестов");
ЭтотОбъект.ТипыУзловДереваТестов = ПостроительДереваТестов.ТипыУзловДереваТестов;
ЭтотОбъект.СостоянияТестов = КонтекстЯдра.СостоянияТестов;
Отчет = СоздатьОтчетНаСервере(РезультатыТестирования);

Возврат Отчет;
КонецФункции

Функция СоздатьОтчетНаСервере(РезультатыТестирования) Экспорт

ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, РезультатыТестирования, , "ПреобразоватьВJson", ЭтотОбъект);

СтрокаJSON = ЗаписьJSON.Закрыть();

ЗаписьЖурналаРегистрации("VanessaAdd.ГенераторОтчетаJSON", УровеньЖурналаРегистрации.Предупреждение,,, СтрокаJSON);

Результат = Новый ТекстовыйДокумент;
Результат.ДобавитьСтроку(СтрокаJSON);

Возврат Результат;
КонецФункции

#Если ТолстыйКлиентОбычноеПриложение Тогда
Процедура Показать(Отчет) Экспорт
Отчет.Показать();
КонецПроцедуры
#КонецЕсли

Процедура Экспортировать(Отчет, ПолныйПутьФайла) Экспорт
Отчет.Записать(ПолныйПутьФайла);
КонецПроцедуры

// Процедура ЗаписатьРезультатТестаНаСервере(Знач РезультатТеста, Знач ПолныйПутьФайла) Экспорт
Функция ПолучитьРезультатТестаНаСервере(Знач РезультатТеста) Экспорт

ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, РезультатТеста, , "ПреобразоватьВJson", ЭтотОбъект);

СтрокаJSON = ЗаписьJSON.Закрыть();
ЗаписьЖурналаРегистрации("VanessaAdd.ГенераторОтчетаJSON", УровеньЖурналаРегистрации.Предупреждение,,, СтрокаJSON);

Результат = Новый ТекстовыйДокумент;
Результат.ДобавитьСтроку(СтрокаJSON);

Возврат Результат;

КонецФункции
// } Report generator interface

// { Helpers
Функция ПреобразоватьВJson(Свойство, Значение, ДополнительныеПараметры, Отказ) Экспорт
Если ТипЗнч(Значение) = Тип("УникальныйИдентификатор") Тогда
Возврат Строка(Значение);
ИначеЕсли Свойство = "Родитель" Тогда
Отказ = Истина;
Возврат Неопределено;
КонецЕсли;
КонецФункции

// } Helpers
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4">
<Form uuid="4e8e1a4a-a947-419b-95c8-58a411e3ffa4">
<Properties>
<Name>Форма</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Форма</v8:content>
</v8:item>
</Synonym>
<Comment/>
<FormType>Managed</FormType>
<IncludeHelpInContents>false</IncludeHelpInContents>
<UsePurposes>
<v8:Value xsi:type="app:ApplicationUsePurpose">PersonalComputer</v8:Value>
<v8:Value xsi:type="app:ApplicationUsePurpose">MobileDevice</v8:Value>
</UsePurposes>
<ExtendedPresentation/>
</Properties>
</Form>
</MetaDataObject>
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<Form xmlns="http://v8.1c.ru/8.3/xcf/logform" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xmlns:dcsset="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4">
<VerticalScroll>useIfNecessary</VerticalScroll>
<AutoCommandBar name="ФормаКоманднаяПанель" id="-1"/>
<Attributes>
<Attribute name="Объект" id="1">
<Type>
<v8:Type>cfg:ExternalDataProcessorObject.ГенераторОтчетаJSON</v8:Type>
</Type>
<MainAttribute>true</MainAttribute>
</Attribute>
</Attributes>
</Form>
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
&НаКлиенте
Перем КонтекстЯдра;

// { Plugin interface

&НаКлиенте
Процедура Инициализация(КонтекстЯдраПараметр) Экспорт
КонтекстЯдра = КонтекстЯдраПараметр;
КонецПроцедуры

&НаКлиенте
Функция ОписаниеПлагина(КонтекстЯдра, ВозможныеТипыПлагинов) Экспорт
Возврат ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов);
КонецФункции

&НаСервере
Функция ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов)
КонтекстЯдраНаСервере = ВнешниеОбработки.Создать("xddTestRunner");
Возврат ЭтотОбъектНаСервере().ОписаниеПлагина(КонтекстЯдраНаСервере, ВозможныеТипыПлагинов);
КонецФункции
// } Plugin interface

// { Report generator interface
&НаКлиенте
Функция СоздатьОтчет(КонтекстЯдра, РезультатыТестирования) Экспорт
Объект.ТипыУзловДереваТестов = КонтекстЯдра.Плагин("ПостроительДереваТестов").Объект.ТипыУзловДереваТестов;
Объект.СостоянияТестов = КонтекстЯдра.Объект.СостоянияТестов;
Возврат СоздатьОтчетНаСервере(РезультатыТестирования);
КонецФункции

&НаСервере
Функция СоздатьОтчетНаСервере(РезультатыТестирования)
Возврат ЭтотОбъектНаСервере().СоздатьОтчетНаСервере(РезультатыТестирования);
КонецФункции

&НаКлиенте
Процедура Показать(Отчет) Экспорт
Отчет.Показать();
КонецПроцедуры

&НаКлиенте
Процедура Экспортировать(Отчет, ПолныйПутьФайла) Экспорт
Отчет.Записать(ПолныйПутьФайла);
КонецПроцедуры

&НаКлиенте
Процедура ЗаписатьРезультатТеста(Знач КонтекстЯдра, Знач РезультатТеста, Знач ПолныйПутьФайла) Экспорт
Объект.СостоянияТестов = КонтекстЯдра.Объект.СостоянияТестов;
// ЗаписатьРезультатТестаНаСервере(РезультатТеста, ПолныйПутьФайла);
Отчет = ПолучитьРезультатТестаНаСервере(РезультатТеста);
ИмяФайла = ПолучитьУникальноеИмяФайла(ПолныйПутьФайла);
Экспортировать(Отчет, ИмяФайла);
КонецПроцедуры

&НаСервере
Функция ПолучитьРезультатТестаНаСервере(Знач РезультатТеста) Экспорт
Возврат ЭтотОбъектНаСервере().ПолучитьРезультатТестаНаСервере(РезультатТеста);
КонецФункции

// } Report generator interface

&НаКлиенте
Процедура НачатьЭкспорт(ОбработкаОповещения, Отчет, ПолныйПутьФайла) Экспорт

Если ТребуетсяАсинхроннаяЗаписьДокумента() Тогда
Отчет.НачатьЗапись(ОбработкаОповещения, ПолныйПутьФайла);
Иначе
Отчет.Записать(ПолныйПутьФайла);
ВыполнитьОбработкуОповещения(ОбработкаОповещения);
КонецЕсли;

КонецПроцедуры

// До 8.3.9 не контролируется метод Записать, а в 8.3.6 вообще нет метода НачатьЗапись
//
&НаКлиенте
Функция ТребуетсяАсинхроннаяЗаписьДокумента()

СИ = Новый СистемнаяИнформация;
Версия = Сред(СИ.ВерсияПриложения,3); // сразу уберем 8.
Поз = Найти(Версия, ".");
Минор = Число(Лев(Версия, Поз-1));
Если Минор > 3 Тогда
Возврат Истина;
КонецЕсли;

Версия = Сред(Версия, Поз+1);
Релиз = Число(Лев(Версия, Найти(Версия, ".")-1));

Если Релиз > 8 Тогда
Возврат Истина;
КонецЕсли;

Возврат Ложь;

КонецФункции

// { Helpers
&НаСервере
Функция ЭтотОбъектНаСервере()
Возврат РеквизитФормыВЗначение("Объект");
КонецФункции

&НаКлиенте
Функция ПолучитьУникальноеИмяФайла(Знач ИмяФайла)
Файл = Новый Файл(ИмяФайла);
ГУИД = Новый УникальныйИдентификатор;
ИмяФайла = КонтекстЯдра.СтрШаблон_("%1-result.xml", ГУИД);
ИмяФайла = КонтекстЯдра.СтрШаблон_("%1/%2", Файл.Путь, ИмяФайла);
Возврат ИмяФайла;
КонецФункции

// } Helpers

0 comments on commit 08d1b5b

Please sign in to comment.