1
0
mirror of https://github.com/Bellerage-IT/bellerage-ssl.git synced 2024-11-24 08:42:32 +02:00

feat: Добавлены тесты, изменена структура репозитория

This commit is contained in:
Dmitry Abramov 2023-01-13 15:54:15 +03:00
parent 23b3ea873b
commit 7b3498167f
199 changed files with 16436 additions and 2 deletions

35
.gitattributes vendored Normal file
View File

@ -0,0 +1,35 @@
# модули
* text=auto
*.bsl text eol=crlf
*.cai text eol=crlf
*.cmi text eol=crlf
*.dcs text eol=crlf
*.dcss text eol=crlf
*.dcssca text eol=crlf
*.form text eol=crlf
*.hpwa text eol=crlf
*.mdo text eol=crlf
*.mxlx text eol=crlf
*.pnrs text eol=crlf
*.rights text eol=crlf
*.schedule text eol=crlf
# картинки
*.bmp binary diff=exif
*.gif binary diff=exif
*.ico binary
*.jpeg binary diff=exif
*.jpg binary diff=exif
*.png binary diff=exif
*.svg text
# картинки
*.bin binary
*.1CD binary
# Binary file extensions that should not be modified.
*.bin binary
*.axdt binary
*.addin binary

35
.gitignore vendored Normal file
View File

@ -0,0 +1,35 @@
*.cfu
src/.project
*.cfl
*.lgd
*.orig
/src/Configuration/ConfigDumpInfo.xml
/allure-reports
/autotest-bia
/ci4onec
/spec/build/ib
/tys
autotest.json
VBParams.json
/allure-report/*
/buildstatus.log
/*_pid*.log
*.*.bak
# IDE
*/.settings/com._1c.g5.v8.dt.platform.services.core.prefs
*/.settings/EnvLaunchModeIndex.prefs
# Binary
*/bin/*
#wsdl
/fixtures/wsdl

4
sonarlint.json Normal file
View File

@ -0,0 +1,4 @@
{
"serverId": "sonar",
"projectKey": "yaxunit:develop"
}

View File

@ -40,7 +40,7 @@
<dataLockControlMode>Managed</dataLockControlMode>
<objectAutonumerationMode>NotAutoFree</objectAutonumerationMode>
<modalityUseMode>DontUse</modalityUseMode>
<synchronousPlatformExtensionAndAddInCallUseMode>DontUse</synchronousPlatformExtensionAndAddInCallUseMode>
<synchronousPlatformExtensionAndAddInCallUseMode>UseWithWarnings</synchronousPlatformExtensionAndAddInCallUseMode>
<compatibilityMode>8.3.20</compatibilityMode>
<languages uuid="463fa4e2-0433-4cd5-8179-7be01d8079bb">
<name>Русский</name>

View File

@ -155,7 +155,7 @@
// Конвейерный метод.
//
// Параметры:
// ФункцияРазворачивания - Строка, бф_ПроцессорыКоллекций.НовыйОписаниеОповещения - функция разворачивания.
// ФункцияРазворачивания - Строка - бф_ПроцессорыКоллекций.НовыйОписаниеОповещения - функция разворачивания.
// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные
// "Результат", "ДополнительныеПараметры", "Элемент".
// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра

18
src/cfe/yaxunit/.project Normal file
View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>yaxunit</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
<nature>com._1c.g5.v8.dt.core.V8ExtensionNature</nature>
</natures>
</projectDescription>

View File

@ -0,0 +1,8 @@
{
"version": 1,
"settings": {
"common-module-type": {
"enabled": false
}
}
}

View File

@ -0,0 +1,11 @@
CLIENT=false
EXTERNAL_CONN=false
MNG_CLIENT=true
MOBILE_AUTONOMOUS_SERVER=false
MOBILE_CLIENT=false
MOBILE_SERVER=false
MOBILE_THIN_CLIENT=false
SERVER=true
THIN_CLIENT=true
WEB_CLIENT=true
eclipse.preferences.version=1

View File

@ -0,0 +1,17 @@
alwaysEndWithSemicolon=true
autowrapBinary=indent_on_wrap
autowrapInvocation=alignment_on_wrap
autowrapMethodParameters=alignment_on_wrap
creatorEmptyBrackets=never brackets
defaultValuesInitialized=true
eclipse.preferences.version=1
formattingOn=true
indentMethodInternal=true
invocationEmptyParamsDelimited=true
keywordStandard=CamelCase
noindent_preprocessor=true
projectSpecificSettingsInited=true
showWhitespaceCharacters=true
softFormatassignmentStatement=true
spacesForTabs=false
whitespaceMethodParamsDelimited=true

View File

@ -0,0 +1,2 @@
eclipse.preferences.version=1
yaxunit={"templates"\:[]}

View File

@ -0,0 +1,9 @@
eclipse.preferences.version=1
subordinate/commands=true
subordinate/forms=true
subordinate/methods=true
subordinate/operations=true
subordinate/tabularSections=true
subordinate/templates=true
subordinate/urlTemplates=true
topObjects=true

View File

@ -0,0 +1,3 @@
addModuleStrictTypesAnnotation=true
createModuleStructure=true
eclipse.preferences.version=1

View File

@ -0,0 +1,3 @@
commonChecks=true
eclipse.preferences.version=1
standardChecks=true

View File

@ -0,0 +1,2 @@
eclipse.preferences.version=1
encoding/<project>=UTF-8

View File

@ -0,0 +1,62 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// Copyright 2021-2022 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, 2, 3);
;
КонецПроцедуры
#Область События
Процедура ПередВсемиТестами() Экспорт
КонецПроцедуры
Процедура ПередКаждымТестом() Экспорт
КонецПроцедуры
Процедура ПослеКаждогоТеста() Экспорт
КонецПроцедуры
Процедура ПослеВсехТестов() Экспорт
КонецПроцедуры
#КонецОбласти
Процедура ТестовыйМетод() Экспорт
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#КонецОбласти

View File

@ -0,0 +1,3 @@
Manifest-Version: 1.0
Runtime-Version: 8.3.10
Base-Project: СтандартныеПодсистемыБеллераж

View File

@ -0,0 +1,181 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// Copyright 2021-2022 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.
//
//©///////////////////////////////////////////////////////////////////////////©//
///////////////////////////////////////////////////////////////////
// ПрограммныйИнтерфейс
// Экспортные процедуры и функции для прикладного использования
///////////////////////////////////////////////////////////////////
#Область ПрограммныйИнтерфейс
// Обучение.
// Начинает обучение мокито для регистрации правил подмены вызовов методов
//
// Параметры:
// Объект - Произвольный - Объект, методы которого хотим подменить
//
// Возвращаемое значение:
// ОбщийМодуль
// Пример:
// Для работы Мокито необходимо добавить обрабатываемые методы в расширение по следующей схеме
//
// &Вместо("ВыполнитьЗапрос")
// Функция ЮТВыполнитьЗапрос(ПараметрыПодключения, Ресурс, HTTPМетод, Параметры, ОписаниеТела, Заголовки) Экспорт
//
// ПараметрыМетода = Мокито.МассивПараметров(ПараметрыПодключения, Ресурс, HTTPМетод, Параметры, ОписаниеТела, Заголовки);
//
// ПрерватьВыполнение = Ложь;
// Результат = Мокито.АнализВызова(РаботаСHTTP, "ВыполнитьЗапрос", ПараметрыМетода, ПрерватьВыполнение);
//
// Если НЕ ПрерватьВыполнение Тогда
// Возврат ПродолжитьВызов(ПараметрыПодключения, Ресурс, HTTPМетод, Параметры, ОписаниеТела, Заголовки);
// Иначе
// Возврат Результат;
// КонецЕсли;
//
// КонецФункции
Функция Обучение(Объект) Экспорт
Режимы = МокитоСлужебный.РежимыРаботы();
МокитоСлужебный.УстановитьРежим(Режимы.Обучение);
Возврат МокитоОбучение.Обучение(Объект);
КонецФункции
// Прогон
// Переводит мокито в режим прогона тестов
// Вызов этого метода обязателен перед выполнением тестового прогона метода
Процедура Прогон() Экспорт
Режимы = МокитоСлужебный.РежимыРаботы();
МокитоСлужебный.УстановитьРежим(Режимы.Тестирование);
КонецПроцедуры
// Проверить.
// Переводит мокито в режим проверки вызовов
// Параметры:
// Объект - Произвольный - Устанавливает проверяемый объект, вызовы методов которого будем проверять
//
// Возвращаемое значение:
// ОбщийМодуль
Функция Проверить(Объект) Экспорт
Режимы = МокитоСлужебный.РежимыРаботы();
МокитоСлужебный.УстановитьРежим(Режимы.Проверка);
Возврат МокитоПроверки.Проверить(Объект);
КонецФункции
// Сбросить
// Сбрасывает настройки, переинициализирует мокито
Процедура Сбросить() Экспорт
МокитоСлужебный.СброситьПараметры();
КонецПроцедуры
#Область КонструкторыПараметров
// Любой параметр.
// Возвращает маску параметра. Используется при обучении и проверках для фильтрации входных параметров метода
// Указывает, что в метод может передаваться любой параметр
// Возвращаемое значение:
// см. МокитоСлужебный.ОписаниеМаскиПараметра
Функция ЛюбойПараметр() Экспорт
МаскаПараметра = МокитоСлужебный.ОписаниеМаскиПараметра(МокитоСлужебный.ТипыУсловийПараметров().Любой, 0);
Возврат МаскаПараметра;
КонецФункции
// Числовой параметр.
// Возвращает маску параметра. Используется при обучении и проверках для фильтрации входных параметров метода
// Указывает, что в метод может передаваться числовой параметр
// Возвращаемое значение:
// см. Мокито.ТипизированныйПараметр
Функция ЧисловойПараметр() Экспорт
Возврат ТипизированныйПараметр(Тип("Число"));
КонецФункции
// Строковый параметр.
// Возвращает маску параметра. Используется при обучении и проверках для фильтрации входных параметров метода
// Указывает, что в метод может передаваться строковый параметр
// Возвращаемое значение:
// см. Мокито.ТипизированныйПараметр
Функция СтроковыйПараметр() Экспорт
Возврат ТипизированныйПараметр(Тип("Строка"));
КонецФункции
// Типизированный параметр.
// Возвращает маску параметра. Используется при обучении и проверках для фильтрации входных параметров метода
// Указывает, что в метод может передаваться параметр указанного типа
//
// Параметры:
// Тип - Тип - Ограничение типа параметра
//
// Возвращаемое значение:
// см. МокитоСлужебный.ОписаниеМаскиПараметра
Функция ТипизированныйПараметр(Тип) Экспорт
МаскаПараметра = МокитоСлужебный.ОписаниеМаскиПараметра(МокитоСлужебный.ТипыУсловийПараметров().Тип, 1);
МаскаПараметра.Вставить("Тип", Тип);
Возврат МаскаПараметра;
КонецФункции
Функция МассивПараметров(Параметр1 = "_!%*",
Параметр2 = "_!%*",
Параметр3 = "_!%*",
Параметр4 = "_!%*",
Параметр5 = "_!%*",
Параметр6 = "_!%*",
Параметр7 = "_!%*",
Параметр8 = "_!%*",
Параметр9 = "_!%*",
Параметр10 = "_!%*") Экспорт
Возврат ЮТОбщий.ЗначениеВМассиве(Параметр1,
Параметр2,
Параметр3,
Параметр4,
Параметр5,
Параметр6,
Параметр7,
Параметр8,
Параметр9,
Параметр10);
КонецФункции
#КонецОбласти
Функция АнализВызова(Объект, ИмяМетода, ПараметрыМетода, ПрерватьВыполнение) Экспорт
Возврат МокитоСлужебный.АнализВызова(Объект, ИмяМетода, ПараметрыМетода, ПрерватьВыполнение);
КонецФункции
#КонецОбласти

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="b5c40903-c446-420c-824e-07c58f5b7021">
<name>Мокито</name>
<synonym>
<key>ru</key>
<value>Мокито</value>
</synonym>
<clientManagedApplication>true</clientManagedApplication>
<server>true</server>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

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

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="e25ecfb4-02ca-4764-84e7-dfc8cdaa02dc">
<name>МокитоОбучение</name>
<synonym>
<key>ru</key>
<value>Мокито обучение</value>
</synonym>
<clientManagedApplication>true</clientManagedApplication>
<server>true</server>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@ -0,0 +1,272 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// Copyright 2021-2022 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.
//
//©///////////////////////////////////////////////////////////////////////////©//
///////////////////////////////////////////////////////////////////
// ПрограммныйИнтерфейс
// Экспортные процедуры и функции для прикладного использования
///////////////////////////////////////////////////////////////////
#Область ПрограммныйИнтерфейс
// Проверить.
// Переводит мокито в режим проверки вызовов
// Параметры:
// Объект - Произвольный - Устанавливает проверяемый объект, вызовы методов которого будем проверять
//
// Возвращаемое значение:
// ОбщийМодуль
Функция Проверить(Объект) Экспорт
УстановитьПараметрыПроверки(Объект);
Возврат МокитоПроверки;
КонецФункции
// Количество вызовов.
// Считает вызовы метода по переданным параметрам
// Параметры:
// ИмяМетода - Строка - Имя метода проверяемого объекта
// - Произвольный - Вызов метода проверяемого объекта
// ПараметрыВызова - Массив из Произвольный - Параметры вызова метода проверяемого объекта, необходим при указании имени метода
// Возвращаемое значение:
// ОбщийМодуль
Функция КоличествоВызовов(ИмяМетода = Неопределено, ПараметрыВызова = Неопределено) Экспорт
Параметры = ПараметрыПроверки();
Если МокитоСлужебный.ЭтоСтруктураВызоваМетода(ИмяМетода) Тогда
СтруктураВызоваМетода = ИмяМетода;
Иначе
СтруктураВызоваМетода = МокитоСлужебный.СтруктураВызоваМетода(Параметры.ПроверяемыйОбъект, ИмяМетода, ПараметрыВызова);
КонецЕсли;
Если СтруктураВызоваМетода.Объект <> Параметры.ПроверяемыйОбъект Тогда
ВызватьИсключение "Установлен другой проверяемый объект";
КонецЕсли;
Параметры.СтруктураВызоваМетода = СтруктураВызоваМетода;
Возврат МокитоПроверки;
КонецФункции
// Равно.
// Проверяет подобранные вызовы. Их количество должно быть равно переданному значение, иначе вызывается исключение
// Параметры:
// Количество - Число - Ожидаемое количество вызовов
// Описание - Строка - Описание проверки, необходимо для идентификации упавшей проверки
//
// Возвращаемое значение:
// ОбщийМодуль
Функция Равно(Количество, Знач Описание = Неопределено) Экспорт
Статистика = СтатистикаВызовов();
ЮТУтверждения
.Что(Статистика, Описание)
.ИмеющееПредставление(ОписаниеПроверяемогоОбъекта())
.ИмеетДлину(Количество);
Возврат МокитоПроверки;
КонецФункции
// Больше.
// Проверяет подобранные вызовы. Их количество должно быть больше переданного значения, иначе вызывается исключение
// Параметры:
// Количество - Число
// Описание - Строка - Описание проверки, необходимо для идентификации упавшей проверки
//
// Возвращаемое значение:
// ОбщийМодуль
Функция Больше(Количество, Знач Описание = Неопределено) Экспорт
Статистика = СтатистикаВызовов();
ЮТУтверждения
.Что(Статистика, Описание)
.ИмеющееПредставление(ОписаниеПроверяемогоОбъекта())
.ИмеетДлинуБольше(Количество);
Возврат МокитоПроверки;
КонецФункции
// Меньше.
// Проверяет подобранные вызовы. Их количество должно быть меньше переданного значения, иначе вызывается исключение
// Параметры:
// Количество - Число
// Описание - Строка - Описание проверки, необходимо для идентификации упавшей проверки
//
// Возвращаемое значение:
// ОбщийМодуль
Функция Меньше(Количество, Знач Описание = Неопределено) Экспорт
Статистика = СтатистикаВызовов();
ЮТУтверждения
.Что(Статистика, Описание)
.ИмеющееПредставление(ОписаниеПроверяемогоОбъекта())
.ИмеетДлинуМеньше(Количество);
Возврат МокитоПроверки;
КонецФункции
// Заполнено.
// Проверяет, что есть вызовы метода, соответствующие условию
// Параметры:
// Описание - Строка - Описание проверки, необходимо для идентификации упавшей проверки
//
// Возвращаемое значение:
// ОбщийМодуль
Функция Заполнено(Знач Описание = Неопределено) Экспорт
Статистика = СтатистикаВызовов(Истина);
ЮТУтверждения
.Что(Статистика, Описание)
.ИмеющееПредставление(ОписаниеПроверяемогоОбъекта())
.Заполнено();
Возврат МокитоПроверки;
КонецФункции
// Пусто.
// Проверяет, что нет вызовов метода, соответствующих условию
// Параметры:
// Описание - Строка - Описание проверки, необходимо для идентификации упавшей проверки
//
// Возвращаемое значение:
// ОбщийМодуль
Функция Пусто(Знач Описание = Неопределено) Экспорт
Статистика = СтатистикаВызовов(Истина);
ЮТУтверждения
.Что(Статистика, Описание)
.ИмеющееПредставление(ОписаниеПроверяемогоОбъекта())
.НеЗаполнено();
Возврат МокитоПроверки;
КонецФункции
#КонецОбласти
/////////////////////////////////////////////////////////////////////////////////
// Экспортные процедуры и функции для служебного использования внутри подсистемы
/////////////////////////////////////////////////////////////////////////////////
#Область СлужебныйПрограммныйИнтерфейс
#КонецОбласти
/////////////////////////////////////////////////////////////////////////////////
// Процедуры и функции, составляющие внутреннюю реализацию модуля
/////////////////////////////////////////////////////////////////////////////////
#Область СлужебныеПроцедурыИФункции
#Область Параметры
// Параметры проверки.
//
// Возвращаемое значение:
// Структура:
// * ПроверяемыйОбъект - Произвольный
// * СтруктураВызоваМетода - см. МокитоСлужебный.СтруктураВызоваМетода
Функция ПараметрыПроверки()
Параметры = МокитоСлужебный.Настройки().ПараметрыПроверки;
Возврат Параметры;
КонецФункции
Процедура УстановитьПараметрыПроверки(Объект = Неопределено, СтруктураВызоваМетода = Неопределено)
ПараметрыОбучения = Новый Структура("ПроверяемыйОбъект, СтруктураВызоваМетода", Объект, СтруктураВызоваМетода);
МокитоСлужебный.Настройки().ПараметрыПроверки = ПараметрыОбучения;
КонецПроцедуры
#КонецОбласти
Функция СтатистикаВызовов(Первый = Ложь)
Параметры = ПараметрыПроверки();
СтруктураВызоваМетода = Параметры.СтруктураВызоваМетода;
ВызовыМетода = МокитоСлужебный.СтатистикаВызовов(СтруктураВызоваМетода.Объект, СтруктураВызоваМетода.ИмяМетода);
Если ВызовыМетода = Неопределено Тогда
Возврат Новый Массив();
КонецЕсли;
Если ЗначениеЗаполнено(СтруктураВызоваМетода.Параметры) Тогда
Результат = Новый Массив();
Для Каждого ВызовМетода Из ВызовыМетода Цикл
Если ВызовМетода.Параметры.Количество() < СтруктураВызоваМетода.Параметры.Количество() Тогда
ВызватьИсключение "Сигнатура метода содержит меньше параметров";
КонецЕсли;
КоличествоПараметров = СтруктураВызоваМетода.Параметры.Количество();
Успешно = Истина;
Для Инд = 0 По КоличествоПараметров - 1 Цикл
Параметр = ВызовМетода.Параметры[Инд];
Условие = СтруктураВызоваМетода.Параметры[Инд];
Если МокитоСлужебный.ЭтоМаскаПарамера(Условие) Тогда
Успешно = МокитоСлужебный.ПроверитьПараметр(Параметр, Условие);
Иначе
Успешно = Параметр = Условие;
КонецЕсли;
Если НЕ Успешно Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если Успешно Тогда
Результат.Добавить(ВызовМетода);
Если Первый Тогда
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ВызовыМетода = Результат;
КонецЕсли;
Возврат ВызовыМетода;
КонецФункции
Функция ОписаниеПроверяемогоОбъекта()
СтруктураВызоваМетода = ПараметрыПроверки().СтруктураВызоваМетода;
Объект = СтруктураВызоваМетода.Объект;
ПредставлениеТипа = ЮТОбщий.ПредставлениеТипа(ТипЗнч(Объект));
Возврат СтрШаблон(" - вызовы метода `%1(%2).%3`,", Объект, ПредставлениеТипа, СтруктураВызоваМетода.ИмяМетода);
КонецФункции
#КонецОбласти

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="015f5fd3-8e18-4bb8-9c69-63c1569592ac">
<name>МокитоПроверки</name>
<synonym>
<key>ru</key>
<value>Мокито проверки</value>
</synonym>
<clientManagedApplication>true</clientManagedApplication>
<server>true</server>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@ -0,0 +1,512 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// Copyright 2021-2022 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Менеджер.%2", ПолноеИмя[0], ПолноеИмя[1]));
ПараметрыПерехватаОбъекта = ПараметрыПерехвата[Менеджер];
КонецЕсли;
КонецЕсли;
Возврат ПараметрыПерехватаОбъекта;
КонецФункции
Процедура ЗарегистрироватьПерехватОбъекта(Знач Объект) Экспорт
Если ЭтоОбъект(Объект) Тогда
Объект = Объект.Ссылка;
КонецЕсли;
ПараметрыПерехвата = ПараметрыПерехвата();
ПараметрыПерехвата.Вставить(Объект, ОписаниеПараметровПерехватаОбъекта(Объект));
КонецПроцедуры
Функция ОписаниеПараметровПерехватаОбъекта(Объект) Экспорт
Возврат Новый Структура("Объект, Методы", Объект, Новый Структура);
КонецФункции
#КонецОбласти
Функция СтатистикаВызовов(Знач Объект, ИмяМетода) Экспорт
Если ЭтоОбъект(Объект) Тогда
Объект = Объект.Ссылка;
КонецЕсли;
Статистика = Настройки().Статистика.Вызовы[Объект];
Если Статистика = Неопределено ИЛИ НЕ Статистика.Свойство(ИмяМетода) Тогда
Возврат Неопределено;
КонецЕсли;
Возврат Статистика[ИмяМетода];
КонецФункции
#Область ОбработчикиСобытий
Процедура ПередКаждымТестом(ОписаниеСобытия) Экспорт
ИнициализироватьНастройки();
КонецПроцедуры
Процедура ПослеКаждогоТеста(ОписаниеСобытия) Экспорт
ОчиститьНастройки();
КонецПроцедуры
#КонецОбласти
#КонецОбласти
/////////////////////////////////////////////////////////////////////////////////
// Процедуры и функции, составляющие внутреннюю реализацию модуля
/////////////////////////////////////////////////////////////////////////////////
#Область СлужебныеПроцедурыИФункции
#Область ОбработкаВызовов
// Зарегистрировать вызов метода.
//
// Параметры:
// Настройки - см. ИнициализироватьНастройки
// ПараметрыПерехвата - см. ДанныеПерехвата
// СтруктураВызоваМетода - см. СтруктураВызоваМетода
Процедура ЗарегистрироватьВызовМетода(Настройки, ПараметрыПерехвата, СтруктураВызоваМетода)
Объект = ПараметрыПерехвата.Объект;
ИмяМетода = СтруктураВызоваМетода.ИмяМетода;
Статистика = Настройки.Статистика.Вызовы[Объект];
Если Статистика = Неопределено Тогда
Статистика = Новый Структура;
Настройки.Статистика.Вызовы.Вставить(Объект, Статистика);
КонецЕсли;
Если НЕ Статистика.Свойство(ИмяМетода) Тогда
Статистика.Вставить(ИмяМетода, Новый Массив);
КонецЕсли;
Статистика[ИмяМетода].Добавить(СтруктураВызоваМетода);
КонецПроцедуры
Функция ПерехватитьВызовМетода(ПараметрыПерехвата, СтруктураВызоваМетода, ПрерватьВыполнение)
Если НЕ ПараметрыПерехвата.Методы.Свойство(СтруктураВызоваМетода.ИмяМетода) Тогда
Возврат Неопределено;
КонецЕсли;
ПараметрыПерехватаМетода = ПараметрыПерехвата.Методы[СтруктураВызоваМетода.ИмяМетода];
Реакция = НайтиРеакцию(ПараметрыПерехватаМетода, СтруктураВызоваМетода);
Если Реакция = Неопределено ИЛИ Реакция.Действие = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
ПрерватьВыполнение = Истина;
ТипыДействий = ТипыДействийРеакций();
Если Реакция.Действие.ТипДействия = ТипыДействий.ВернутьРезультат Тогда
Реакция.Действие.Обработано = Истина;
Возврат Реакция.Действие.Результат;
ИначеЕсли Реакция.Действие.ТипДействия = ТипыДействий.ВыброситьИсключение Тогда
Реакция.Действие.Обработано = Истина;
ВызватьИсключение Реакция.Действие.Ошибка;
ИначеЕсли Реакция.Действие.ТипДействия = ТипыДействий.Пропустить Тогда
Реакция.Действие.Обработано = Истина;
Возврат Неопределено;
ИначеЕсли Реакция.Действие.ТипДействия = ТипыДействий.ВызватьОсновнойМетод Тогда
Реакция.Действие.Обработано = Истина;
ПрерватьВыполнение = Ложь;
Иначе
ВызватьИсключение "Неизвестный тип действия реакции";
КонецЕсли;
КонецФункции
#КонецОбласти
Функция НайтиРеакцию(ПараметрыПерехватаМетода, СтруктураВызоваМетода)
Реакция = Неопределено;
Приоритет = 0;
ПараметрыВызова = СтруктураВызоваМетода.Параметры;
Для Каждого ВозможнаяРеакция Из ПараметрыПерехватаМетода.Реакции Цикл
ПриоритетВозможнойРеакции = ПроверитьРеакцию(ВозможнаяРеакция, ПараметрыВызова);
Если ПриоритетВозможнойРеакции > Приоритет Тогда
Реакция = ВозможнаяРеакция;
Приоритет = ПриоритетВозможнойРеакции;
КонецЕсли;
КонецЦикла;
Возврат Реакция;
КонецФункции
Функция ПроверитьРеакцию(Реакция, ПараметрыМетода)
Приоритет = 1;
Если Реакция.УсловиеРеакции = Неопределено Тогда
Возврат Приоритет;
КонецЕсли;
Для Инд = 0 По Реакция.УсловиеРеакции.ВГраница() Цикл
Если НЕ ПроверитьПараметр(ПараметрыМетода[Инд], Реакция.УсловиеРеакции[Инд]) Тогда
Возврат 0;
КонецЕсли;
Приоритет = Приоритет + Реакция.УсловиеРеакции[Инд].Приоритет;
КонецЦикла;
Возврат Приоритет;
КонецФункции
#Область Настройки
Процедура ИнициализироватьНастройки() Экспорт
Настройки = Новый Структура;
Настройки.Вставить("Метод");
Настройки.Вставить("Реакция");
Настройки.Вставить("Настройки");
Настройки.Вставить("Перехват", Новый Соответствие);
Настройки.Вставить("Режим", "НеУстановлен");
Настройки.Вставить("Статистика", Новый Структура("Вызовы", Новый Соответствие));
Настройки.Вставить("ПараметрыОбучения", Неопределено);
Настройки.Вставить("ПараметрыПроверки", Неопределено);
ЮТКонтекст.УстановитьЗначениеКонтекста(КлючНастроек(), Настройки);
КонецПроцедуры
Процедура ОчиститьНастройки() Экспорт
ЮТКонтекст.УстановитьЗначениеКонтекста(КлючНастроек(), Неопределено);
КонецПроцедуры
Процедура СброситьПараметры() Экспорт
ИнициализироватьНастройки();
КонецПроцедуры
Функция КлючНастроек()
Возврат "Mockito";
КонецФункции
Процедура ОчиститьСлужебныеПараметры()
Настройки = Настройки();
Настройки.ПараметрыОбучения = Неопределено;
Настройки.ПараметрыПроверки = Неопределено;
КонецПроцедуры
#КонецОбласти
Функция ЭтоСсылка(Значение) Экспорт
Если Значение <> Неопределено Тогда
ТипыСсылок = ЮТОбщий.ОписаниеТиповЛюбаяСсылка();
Результат = ТипыСсылок.СодержитТип(ТипЗнч(Значение));
Иначе
Результат = Ложь;
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ЭтоОбъект(Значение) Экспорт
Если Значение <> Неопределено И ЮТОбщий.ПеременнаяСодержитСвойство(Значение, "Ссылка") Тогда
Возврат ЭтоСсылка(Значение.Ссылка);
Иначе
Результат = Ложь;
КонецЕсли;
Возврат Результат;
КонецФункции
#КонецОбласти

Some files were not shown because too many files have changed in this diff Show More