Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Сокращение сообщения об ошибке #186

Merged
merged 2 commits into from
Oct 2, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions exts/yaxunit/src/CommonModules/ЮТКонтекст/Module.bsl
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,20 @@

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

// КонтекстОшибки
// Возвращает служебный контекст, содержит дополнительные детали ошибки теста
// Параметры:
// ПолучитьССервера - Булево - Получить значение из серверного контекста
//
// Возвращаемое значение:
// Неопределено, Массив из Строка- Детали ошибки
Функция КонтекстДеталиОшибки(ПолучитьССервера = Ложь) Экспорт

//@skip-check constructor-function-return-section
Возврат ЗначениеКонтекста(ИмяКонтекстаДеталиОшибки(), ПолучитьССервера);

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

Функция ОписаниеКонтекста() Экспорт

Описание = Новый Структура;
Expand Down Expand Up @@ -293,6 +307,12 @@

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

Процедура УстановитьКонтекстДеталиОшибки(Знач ДанныеКонтекста) Экспорт

УстановитьЗначениеКонтекста(ИмяКонтекстаДеталиОшибки(), ДанныеКонтекста);

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

Процедура УдалитьКонтекст() Экспорт

#Если Клиент Тогда
Expand Down Expand Up @@ -354,4 +374,10 @@

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

Функция ИмяКонтекстаДеталиОшибки()

Возврат "ДеталиОшибки";

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

#КонецОбласти
Original file line number Diff line number Diff line change
Expand Up @@ -137,8 +137,8 @@

Исключение

Ошибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
ВызватьИсключение СтрШаблон("Ошибка загрузки настроек из файла: '%1'", Ошибка);
ЮТРегистрацияОшибок.ДобавитьПояснениеОшибки("Ошибка загрузки настроек из файла");
ВызватьИсключение;

КонецПопытки;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,11 @@
// ИмяСобытия - Строка
// ОписаниеСобытия - см. ЮТФабрика.ОписаниеСобытияИсполненияТестов
// Ошибка - ИнформацияОбОшибке
// - Строка
Процедура ЗарегистрироватьОшибкуСобытияИсполнения(ИмяСобытия, ОписаниеСобытия, Ошибка) Экспорт

ТипОшибки = ЮТФабрика.ТипыОшибок().ОшибкаОбработкиСобытия;
Пояснение = СтрШаблон("%1 '%2': %3", ТипОшибки, ИмяСобытия, Ошибка.Описание);
Пояснение = ЮТСообщенияСлужебный.СообщениеОбОшибкеСобытия(ИмяСобытия, Ошибка);
ДанныеОшибки = ДанныеОшибки(Ошибка, Пояснение, ТипОшибки);

Если ОписаниеСобытия.Тест <> Неопределено Тогда
Expand Down Expand Up @@ -70,7 +71,7 @@
ИначеЕсли ТипОшибки = ЮТФабрика.ТипыОшибок().Пропущен Тогда
ДанныеОшибки = ДанныеОшибкиПропуска(Ошибка);
Иначе
ДанныеОшибки = ДанныеОшибки(Ошибка, Ошибка.Описание, ТипОшибки);
ДанныеОшибки = ДанныеОшибки(Ошибка, ЮТСообщенияСлужебный.КраткоеСообщениеОшибки(Ошибка), ТипОшибки);
КонецЕсли;

Тест.Ошибки.Добавить(ДанныеОшибки);
Expand Down Expand Up @@ -131,7 +132,7 @@
ОбъектПроверки = "проверяемое значение") Экспорт

УстановитьДанныеОшибкиСравнения(ПроверяемоеЗначение, ОжидаемоеЗначение);
ТекстСообщения = ФорматированныйТекстОшибкиУтверждения(ОписаниеПроверки, Сообщение, ОбъектПроверки);
ТекстСообщения = ЮТСообщенияСлужебный.ФорматированныйТекстОшибкиУтверждения(ОписаниеПроверки, Сообщение, ОбъектПроверки);
ВызватьОшибкуПроверки(ТекстСообщения, ОписаниеПроверки);

КонецПроцедуры
Expand All @@ -147,7 +148,7 @@
Процедура СгенерироватьОшибкуУтверждения(ОписаниеПроверки, Сообщение, ПроверяемоеЗначение, ОбъектПроверки = "проверяемое значение") Экспорт

УстановитьДанныеОшибкиУтверждения(ПроверяемоеЗначение);
ТекстСообщения = ФорматированныйТекстОшибкиУтверждения(ОписаниеПроверки, Сообщение, ОбъектПроверки);
ТекстСообщения = ЮТСообщенияСлужебный.ФорматированныйТекстОшибкиУтверждения(ОписаниеПроверки, Сообщение, ОбъектПроверки);
ВызватьОшибкуПроверки(ТекстСообщения, ОписаниеПроверки);

КонецПроцедуры
Expand Down Expand Up @@ -186,7 +187,7 @@

Процедура ЗарегистрироватьОшибкуИнициализацииДвижка(Ошибка, Описание) Экспорт

Ошибка(Ошибка, Описание);
СообщитьОбОшибке(Ошибка, Описание);

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

Expand Down Expand Up @@ -324,42 +325,6 @@

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

// Форматированный текст ошибки утверждения.
//
// Параметры:
// ОписаниеПроверки - см. ЮТФабрика.ОписаниеПроверки
// ТекстОжидания - Строка - Описание ожидания
// ОбъектПроверки - Строка - Объект проверки
//
// Возвращаемое значение:
// Строка - Форматированный текст ошибки утверждения
Функция ФорматированныйТекстОшибкиУтверждения(Знач ОписаниеПроверки, ТекстОжидания, ОбъектПроверки) Экспорт

Если ЗначениеЗаполнено(ОписаниеПроверки.ОбъектПроверки.ИмяСвойства) Тогда
ВставкаСвойство = СтрШаблон(" содержит свойство `%1`, которое", ОписаниеПроверки.ОбъектПроверки.ИмяСвойства);
Иначе
ВставкаСвойство = "";
КонецЕсли;

Если ЗначениеЗаполнено(ОписаниеПроверки.ОбъектПроверки.Представление) Тогда
ПредставлениеЗначения = ОписаниеПроверки.ОбъектПроверки.Представление;
Иначе
ПредставлениеЗначения = СтрШаблон("`%1`", ОписаниеПроверки.ОбъектПроверки.Значение);
КонецЕсли;

// Заголовок сообщения
ТекстСообщения = "";
// Тело сообщения
ТекстСообщения = СтрШаблон("ожидали, что %1 %2%3 %4, но это не так.",
ОбъектПроверки,
ПредставлениеЗначения,
ВставкаСвойство,
ТекстОжидания);

Возврат ТекстСообщения;

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

Функция ДобавитьОписания(ТекстОшибки, ОписаниеПроверки = Неопределено) Экспорт

Если ОписаниеПроверки <> Неопределено Тогда
Expand Down Expand Up @@ -399,18 +364,60 @@

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

Процедура ДобавитьПояснениеОшибки(Пояснение) Экспорт

Детали = ЮТКонтекст.КонтекстДеталиОшибки();
Установить = Детали = Неопределено;

Если Установить Тогда
Детали = Новый Массив();
КонецЕсли;

Детали.Добавить(Пояснение);

Если Установить Тогда
ЮТКонтекст.УстановитьКонтекстДеталиОшибки(Детали);
КонецЕсли;

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

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

#Область КонструкторыОписанийОшибки

Функция ДанныеОшибки(Ошибка, Сообщение, ТипОшибки)
Функция ДанныеОшибки(Ошибка, Знач Сообщение, ТипОшибки)

#Если Сервер Тогда
Детали = ЮТКонтекст.КонтекстДеталиОшибки(Истина);
#Иначе
ДеталиСервер = ЮТКонтекст.КонтекстДеталиОшибки(Истина);
ДеталиКлиент = ЮТКонтекст.КонтекстДеталиОшибки();

Если ЗначениеЗаполнено(ДеталиКлиент) И ЗначениеЗаполнено(ДеталиСервер) Тогда
ЮТОбщий.ДополнитьМассив(ДеталиСервер, ДеталиКлиент);
Детали = ДеталиСервер;
ИначеЕсли ЗначениеЗаполнено(ДеталиКлиент) Тогда
Детали = ДеталиКлиент;
ИначеЕсли ЗначениеЗаполнено(ДеталиСервер) Тогда
Детали = ДеталиСервер;
Иначе
Детали = Неопределено;
КонецЕсли;
#КонецЕсли

Если ЗначениеЗаполнено(Детали) Тогда
ЮТКонтекст.УстановитьКонтекстДеталиОшибки(Новый Массив());

Детали.Добавить(Сообщение);
Сообщение = СтрСоединить(Детали, Символы.ПС);
КонецЕсли;

ДанныеОшибки = ЮТФабрика.ОписаниеВозникшейОшибки(ТипОшибки + ": " + Сообщение);

Если Ошибка <> Неопределено Тогда
ДанныеОшибки.Стек = ПодробноеПредставлениеОшибки(Ошибка);
ДанныеОшибки.Стек = СтекОшибки(Ошибка);
КонецЕсли;
ДанныеОшибки.ТипОшибки = ТипОшибки;
ДобавитьСообщенияПользователю(ДанныеОшибки);
Expand All @@ -419,13 +426,23 @@

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

Функция СтекОшибки(Ошибка)

Если ТипЗнч(Ошибка) = Тип("ИнформацияОбОшибке") Тогда
Возврат ПодробноеПредставлениеОшибки(Ошибка);
Иначе
Возврат Неопределено;
КонецЕсли;

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

Функция ДанныеОшибкиУтверждений(Ошибка)

Описание = ИзвлечьТекстОшибки(Ошибка, ПрефиксОшибкиУтверждений());

ДанныеОшибки = ЮТФабрика.ОписаниеОшибкиСравнения(Описание);

ДанныеОшибки.Стек = ПодробноеПредставлениеОшибки(Ошибка);
ДанныеОшибки.Стек = СтекОшибки(Ошибка);
ДобавитьСообщенияПользователю(ДанныеОшибки);

СтруктураОшибки = ЮТКонтекст.КонтекстОшибки();
Expand Down Expand Up @@ -472,10 +489,9 @@

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

Процедура Ошибка(Ошибка, Описание)
Процедура СообщитьОбОшибке(Ошибка, Описание)

ТекстОшибки = ПредставлениеОшибки(Описание, Ошибка);
ЮТОбщий.СообщитьПользователю(ТекстОшибки);
ЮТОбщий.СообщитьПользователю(ПредставлениеОшибки(Описание, Ошибка));

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

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// Copyright 2021-2023 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`", ОписаниеПроверки.ОбъектПроверки.Значение);
КонецЕсли;

// Заголовок сообщения
ТекстСообщения = "";
// Тело сообщения
ТекстСообщения = СтрШаблон("ожидали, что %1 %2%3 %4, но это не так.",
ОбъектПроверки,
ПредставлениеЗначения,
ВставкаСвойство,
ТекстОжидания);

Возврат ТекстСообщения;

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

// Сообщение об ошибке события.
//
// Параметры:
// ИмяСобытия - Строка
// Ошибка - Строка - Текст ошибки
// - ИнформацияОбОшибке - ошибка выполнения
//
// Возвращаемое значение:
// Строка - Сообщение об ошибке события
Функция СообщениеОбОшибкеСобытия(ИмяСобытия, Ошибка) Экспорт

ТипОшибки = ЮТФабрика.ТипыОшибок().ОшибкаОбработкиСобытия;
Возврат СтрШаблон("%1 '%2': %3", ТипОшибки, ИмяСобытия, КраткоеСообщениеОшибки(Ошибка));

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

Функция КраткоеСообщениеОшибки(Ошибка) Экспорт

Если ЭтоИнформацияОбОшибке(Ошибка) Тогда
Возврат КраткоеПредставлениеОшибки(Ошибка);
Иначе
Возврат Ошибка;
КонецЕсли;

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

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

Функция ЭтоИнформацияОбОшибке(Ошибка) Экспорт

Возврат ТипЗнч(Ошибка) = Тип("ИнформацияОбОшибке");

КонецФункции
#КонецОбласти
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="12de2656-e7f8-42f9-b620-006310aa949e">
<name>ЮТСообщенияСлужебный</name>
<synonym>
<key>ru</key>
<value>Сообщения служебный</value>
</synonym>
<clientManagedApplication>true</clientManagedApplication>
<server>true</server>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>
Original file line number Diff line number Diff line change
Expand Up @@ -437,7 +437,9 @@
Попытка
Результат = РегулярныеВыражения.Совпадает(ПроверяемаяСтрока, РегулярноеВыражение);
Исключение
ВызватьИсключение РегулярныеВыражения.ОписаниеОшибки;
ЮТРегистрацияОшибок.ДобавитьПояснениеОшибки("Ошибка проверки строки по шаблону " + РегулярноеВыражение);
ЮТРегистрацияОшибок.ДобавитьПояснениеОшибки(РегулярныеВыражения.ОписаниеОшибки);
ВызватьИсключение;
КонецПопытки;

Возврат Результат;
Expand Down Expand Up @@ -636,7 +638,7 @@
ШаблонСообщения = ЮТПредикатыКлиентСервер.ШаблонВыражения(ПараметрыПроверки.ВидСравнения);
Сообщение = СтрШаблон(ШаблонСообщения, ПараметрыПроверки.ОжидаемоеЗначение);

ТекстОшибки = ЮТРегистрацияОшибок.ФорматированныйТекстОшибкиУтверждения(ПараметрыПроверки, Сообщение, ПараметрыПроверки.ТекстПроверяемоеЗначение);
ТекстОшибки = ЮТСообщенияСлужебный.ФорматированныйТекстОшибкиУтверждения(ПараметрыПроверки, Сообщение, ПараметрыПроверки.ТекстПроверяемоеЗначение);
ТекстОшибки = ЮТРегистрацияОшибок.ДобавитьОписания(ТекстОшибки, ПараметрыПроверки);

ЮТРегистрацияОшибок.ДобавитьОшибкуСравненияКРезультатуПроверки(РезультатПроверки,
Expand Down
Loading
Loading