From e991d5e0de99af0ef3be2f9c83fb5edc330a48dc Mon Sep 17 00:00:00 2001 From: Potoyalo Date: Sat, 29 Jul 2023 23:45:16 +0700 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=BE=D0=BF=D1=80?= =?UTF-8?q?=D0=B5=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BD=D1=82=D0=B5=D0=BA=D1=81=D1=82=D0=B0=20=D0=B2=D1=81=D1=82?= =?UTF-8?q?=D1=80=D0=BE=D0=B5=D0=BD=D0=BE=20=D0=B2=20=D0=B4=D0=B2=D0=B8?= =?UTF-8?q?=D0=B6=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- documentation/docs/user-api/context.md | 38 ++++------ .../ЮТНастройкиВыполнения/Module.bsl | 31 ++++++++- .../ЮТПереопределениеКонтекста/Module.bsl | 69 ------------------- .../ЮТПереопределениеКонтекста.mdo | 11 --- .../src/CommonModules/ЮТСобытия/Module.bsl | 50 +++++++++++--- .../src/CommonModules/ЮТТесты/Module.bsl | 30 ++++++++ .../src/CommonModules/ЮТФабрика/Module.bsl | 6 +- .../src/Configuration/Configuration.mdo | 1 - .../Subsystems/ЮТОбработчикиСобытий/ЮТОбработчикиСобытий.mdo | 1 - tests/src/CommonModules/ОМ_ЮТест/Module.bsl | 51 ++++++++++++-- 10 files changed, 169 insertions(+), 119 deletions(-) delete mode 100644 exts/yaxunit/src/CommonModules/ЮТПереопределениеКонтекста/Module.bsl delete mode 100644 exts/yaxunit/src/CommonModules/ЮТПереопределениеКонтекста/ЮТПереопределениеКонтекста.mdo diff --git a/documentation/docs/user-api/context.md b/documentation/docs/user-api/context.md index 259ea235..46a2e8a0 100644 --- a/documentation/docs/user-api/context.md +++ b/documentation/docs/user-api/context.md @@ -4,21 +4,25 @@ tags: [Начало, Контекст] # Контекст +## Механизм контекстов + Одним из важнейших блоков работы тестового движка является механизм контекстов. Он позволяет: -1. Хранить промежуточные данные и обеспечивать работу механизма текучих выражений -2. Передавать между тестами необходимые данные -3. Удалять тестовые данные +1. Хранить промежуточные данные и обеспечивать работу механизма текучих выражений. +2. Передавать между тестами необходимые данные. +3. Удалять тестовые данные. И имеет несколько ограничений: -1. Не синхронизируется между клиентом и сервером -2. Тестовые контексты имеют ограниченное время жизни, например, контекст теста "живет" только в рамках теста и событиях "ПередКаждымТестом", "ПослеКаждогоТеста". +1. Не синхронизируется между клиентом и сервером. +2. Тестовые контексты имеют ограниченное время жизни. Например, контекст теста "живет" только в рамках теста и событиях "ПередКаждымТестом", "ПослеКаждогоТеста". Для различных механизмов движка существуют различные контексты, такие как контекст утверждений, контекст теста и тд. +## Контексты тестового модуля + Разработчику тестов будут интересны следующие контексты: * Контекст теста (`ЮТест.КонтекстТеста`) - живет в рамках одного теста. Доступен в каждом тесте и в обработчиках событий @@ -37,24 +41,12 @@ tags: [Начало, Контекст] * `ПередКаждымТестом` * `ПослеКаждогоТеста` -Для тестовых наборов есть возможность определить отдельный контекст, доступный в конкретном наборе. Для этого надо переопределить события тестового набора через настройки "ПередТестовымНабором" и "ПослеТестовогоНабора" соответственно. В текущей реализации такой отдельный контекст набора не заменяет общий, а дополняет его. Пример: +На каждом уровне исполнения есть возможность переопределить обработчики событий соответствующего контекста исполнения при помощи методов `Перед()` и `После()`. Настроенный обработчик события будет вызван _вместо_ основного. Пример: ```bsl -Процедура ИсполняемыеСценарии() Экспорт - ЮТТесты - .ДобавитьТестовыйНабор("Набор1") - .ДобавитьТест("Тест1") - .ДобавитьТестовыйНабор("Набор2") - .НастройкаИсполнения("ПередТестовымНабором", "ПередТестовымНабором_Набор2") - .НастройкаИсполнения("ПослеТестовогоНабора", "ПослеТестовогоНабора_Набор2") - .ДобавитьТест("Тест2"); -КонецПроцедуры - -Процедура ПередТестовымНабором() Экспорт - ЮТест.Контекст().УстановитьЗначение("...", ...); // Будет доступен в тестах каждого набора -КонецПроцедуры - -Процедура ПередТестовымНабором_Набор2() Экспорт - ЮТест.Контекст().УстановитьЗначение("...", ...); // Будет доступен только в тестах второго набора -КонецПроцедуры +ЮТТесты + .ДобавитьТестовыйНабор("Набор1") // Будет вызван основной обработчик ПередТестовымНабором() + .ДобавитьТест("Тест1") + .ДобавитьТестовыйНабор("Набор2").Перед("Перед_Набор2") // Будет вызван обработчик Перед_Набор2() + .ДобавитьТест("Тест2"); ``` diff --git a/exts/yaxunit/src/CommonModules/ЮТНастройкиВыполнения/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТНастройкиВыполнения/Module.bsl index 6a84a3be..9aa7fa33 100644 --- a/exts/yaxunit/src/CommonModules/ЮТНастройкиВыполнения/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТНастройкиВыполнения/Module.bsl @@ -34,23 +34,52 @@ КонецФункции -Функция ЗначениеНастройкиТеста(ИмяНастройки, ЗначениеПоУмолчанию) Экспорт +Функция Перед() Экспорт + + ИмяПараметра = ЮТФабрика.ПараметрыИсполненияТеста().Перед; + + Возврат ЗначениеНастройкиТеста(ИмяПараметра, "", Истина); + +КонецФункции + +Функция После() Экспорт + + ИмяПараметра = ЮТФабрика.ПараметрыИсполненияТеста().После; + + Возврат ЗначениеНастройкиТеста(ИмяПараметра, "", Истина); + +КонецФункции + +Функция ЗначениеНастройкиТеста(ИмяНастройки, ЗначениеПоУмолчанию, СтрогийУровеньИсполнения = Ложь) Экспорт Значение = ЗначениеПоУмолчанию; + Уровни = ЮТФабрика.УровниИсполнения(); КонтекстИсполнения = ЮТКонтекст.КонтекстИсполнения(); Если КонтекстИсполнения.Тест <> Неопределено И КонтекстИсполнения.Тест.НастройкиВыполнения.Свойство(ИмяНастройки) Тогда Значение = КонтекстИсполнения.Тест.НастройкиВыполнения[ИмяНастройки]; + Если СтрогийУровеньИсполнения И КонтекстИсполнения.Уровень = Уровни.Тест Тогда + Возврат Значение; + КонецЕсли; + ИначеЕсли КонтекстИсполнения.Набор <> Неопределено И КонтекстИсполнения.Набор.НастройкиВыполнения.Свойство(ИмяНастройки) Тогда Значение = КонтекстИсполнения.Набор.НастройкиВыполнения[ИмяНастройки]; + Если СтрогийУровеньИсполнения И КонтекстИсполнения.Уровень = Уровни.НаборТестов Тогда + Возврат Значение; + КонецЕсли; + ИначеЕсли КонтекстИсполнения.Модуль <> Неопределено И КонтекстИсполнения.Модуль.НастройкиВыполнения.Свойство(ИмяНастройки) Тогда Значение = КонтекстИсполнения.Модуль.НастройкиВыполнения[ИмяНастройки]; + Если СтрогийУровеньИсполнения И КонтекстИсполнения.Уровень = Уровни.Модуль Тогда + Возврат Значение; + КонецЕсли; + Иначе ГлобальныеНастройки = ЮТКонтекст.ГлобальныеНастройкиВыполнения(); diff --git a/exts/yaxunit/src/CommonModules/ЮТПереопределениеКонтекста/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТПереопределениеКонтекста/Module.bsl deleted file mode 100644 index 6fab9c2c..00000000 --- a/exts/yaxunit/src/CommonModules/ЮТПереопределениеКонтекста/Module.bsl +++ /dev/null @@ -1,69 +0,0 @@ -//©///////////////////////////////////////////////////////////////////////////©// -// -// 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. -// -//©///////////////////////////////////////////////////////////////////////////©// - -// @strict-types - -#Область СлужебныйПрограммныйИнтерфейс - -#Область ОбработчикиСобытий - -// Обработчик события "ПередТестовымНабором" -// -// Параметры: -// ОписаниеСобытия - См. ЮТФабрика.ОписаниеСобытияИсполненияТестов -// -Процедура ПередТестовымНабором(ОписаниеСобытия) Экспорт - - ВызватьОбработчик(ОписаниеСобытия, "ПередТестовымНабором"); - -КонецПроцедуры - -// Обработчик события "ПослеТестовогоНабора" -// -// Параметры: -// ОписаниеСобытия - См. ЮТФабрика.ОписаниеСобытияИсполненияТестов -// -Процедура ПослеТестовогоНабора(ОписаниеСобытия) Экспорт - - ВызватьОбработчик(ОписаниеСобытия, "ПослеТестовогоНабора"); - -КонецПроцедуры - -#КонецОбласти - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -// Вызывает настроенный обработчик события -// -// Параметры: -// ОписаниеСобытия - См. ЮТФабрика.ОписаниеСобытияИсполненияТестов -// ИмяНастройки - Строка -// -Процедура ВызватьОбработчик(ОписаниеСобытия, ИмяНастройки) - - ИмяМодуля = ОписаниеСобытия.Модуль.МетаданныеМодуля.Имя; - ИмяМетода = ЮТНастройкиВыполнения.ЗначениеНастройкиТеста(ИмяНастройки, ""); - Если ЗначениеЗаполнено(ИмяМетода) Тогда - ЮТОбщий.ВыполнитьМетод(СтрШаблон("%1.%2", ИмяМодуля, ИмяМетода)); - КонецЕсли; - -КонецПроцедуры - -#КонецОбласти diff --git a/exts/yaxunit/src/CommonModules/ЮТПереопределениеКонтекста/ЮТПереопределениеКонтекста.mdo b/exts/yaxunit/src/CommonModules/ЮТПереопределениеКонтекста/ЮТПереопределениеКонтекста.mdo deleted file mode 100644 index 42925372..00000000 --- a/exts/yaxunit/src/CommonModules/ЮТПереопределениеКонтекста/ЮТПереопределениеКонтекста.mdo +++ /dev/null @@ -1,11 +0,0 @@ - - - ЮТПереопределениеКонтекста - - ru - Переопределение контекста - - true - true - true - diff --git a/exts/yaxunit/src/CommonModules/ЮТСобытия/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТСобытия/Module.bsl index de447c8b..a7378a9d 100644 --- a/exts/yaxunit/src/CommonModules/ЮТСобытия/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТСобытия/Module.bsl @@ -90,8 +90,7 @@ КонецЕсли; #КонецЕсли - ВызватьОбработкуСобытия("ПередКаждымТестом", ОписаниеСобытия); - ВызватьОбработкуСобытия("ПередТестом", ОписаниеСобытия); + ВызватьОбработкуСобытий(ЮТОбщий.ЗначениеВМассиве("ПередКаждымТестом", "ПередТестом"), ОписаниеСобытия); КонецПроцедуры @@ -105,8 +104,7 @@ ОписаниеСобытия = ЮТФабрика.ОписаниеСобытияИсполненияТестов(ТестовыйМодуль, Набор, Тест); - ВызватьОбработкуСобытия("ПослеТеста", ОписаниеСобытия); - ВызватьОбработкуСобытия("ПослеКаждогоТеста", ОписаниеСобытия); + ВызватьОбработкуСобытий(ЮТОбщий.ЗначениеВМассиве("ПослеТеста", "ПослеКаждогоТеста"), ОписаниеСобытия); #Если Сервер ИЛИ ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда Если ЮТНастройкиВыполнения.ВТранзакции() Тогда @@ -218,13 +216,22 @@ #Область СлужебныеПроцедурыИФункции -Процедура ВызватьОбработкуСобытия(ИмяСобытия, ОписаниеСобытия) +Процедура ВызватьОбработкуСобытий(События, ОписаниеСобытия) - ЭтоСобытиеПеред = СтрНачинаетсяС(ИмяСобытия, "Перед"); + Для каждого ИмяСобытия Из События Цикл + ВызватьОбработкуСобытия(ИмяСобытия, ОписаниеСобытия); + Если ОбработчикСобытияПереопределен(ИмяСобытия) Тогда + Прервать; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Процедура ВызватьОбработкуСобытия(ИмяСобытия, ОписаниеСобытия) Параметры = ЮТОбщий.ЗначениеВМассиве(ОписаниеСобытия); - Если ЭтоСобытиеПеред Тогда + Если ЭтоСобытиеПеред(ИмяСобытия) Тогда Ошибки = ВызватьОбработчикРасширения(ИмяСобытия, Параметры); ВызватьОбработчикТестовогоМодуля(ИмяСобытия, ОписаниеСобытия); Иначе @@ -265,7 +272,12 @@ // ИмяСобытия - Строка - Имя вызываемого метода обработки события // ОписаниеСобытия - см. ЮТФабрика.ОписаниеСобытияИсполненияТестов // -Процедура ВызватьОбработчикТестовогоМодуля(ИмяСобытия, ОписаниеСобытия) +Процедура ВызватьОбработчикТестовогоМодуля(Знач ИмяСобытия, ОписаниеСобытия) + + НовоеИмяСобытия = ПереопределенноеИмяСобытия(ИмяСобытия); + Если ЗначениеЗаполнено(НовоеИмяСобытия) Тогда + ИмяСобытия = НовоеИмяСобытия; + КонецЕсли; ИмяМодуля = ОписаниеСобытия.Модуль.МетаданныеМодуля.Имя; Ошибка = Неопределено; @@ -282,4 +294,26 @@ КонецПроцедуры +Функция ОбработчикСобытияПереопределен(ИмяСобытия) + + Возврат ЗначениеЗаполнено(ПереопределенноеИмяСобытия(ИмяСобытия)); + +КонецФункции + +Функция ПереопределенноеИмяСобытия(ИмяСобытия) + + Если ЭтоСобытиеПеред(ИмяСобытия) Тогда + Возврат ЮТНастройкиВыполнения.Перед(); + Иначе + Возврат ЮТНастройкиВыполнения.После(); + КонецЕсли; + +КонецФункции + +Функция ЭтоСобытиеПеред(ИмяСобытия) + + Возврат СтрНачинаетсяС(ИмяСобытия, "Перед"); + +КонецФункции + #КонецОбласти diff --git a/exts/yaxunit/src/CommonModules/ЮТТесты/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТТесты/Module.bsl index a608db4e..66ce2a36 100644 --- a/exts/yaxunit/src/CommonModules/ЮТТесты/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТТесты/Module.bsl @@ -184,6 +184,36 @@ КонецФункции +// Устанавливает настройку переопределения обработчика события Перед... +// +// Параметры: +// ВыполнитьПеред - Строка - Имя обработчика события, который будет выполнен вместо основного +// +// Возвращаемое значение: +// ОбщийМодуль - Этот же модуль, для замыкания +Функция Перед(ВыполнитьПеред = "") Экспорт + + НастройкаИсполнения(ЮТФабрика.ПараметрыИсполненияТеста().Перед, ВыполнитьПеред); + + Возврат ЮТТесты; + +КонецФункции + +// Устанавливает настройку переопределения обработчика события После... +// +// Параметры: +// ВыполнитьПосле - Строка - Имя обработчика события, который будет выполнен вместо основного +// +// Возвращаемое значение: +// ОбщийМодуль - Этот же модуль, для замыкания +Функция После(ВыполнитьПосле = "") Экспорт + + НастройкаИсполнения(ЮТФабрика.ПараметрыИсполненияТеста().После, ВыполнитьПосле); + + Возврат ЮТТесты; + +КонецФункции + // Устанавливает параметры вызова теста. // // * Если метод вызывается первый раз, то он устанавливает параметры теста. diff --git a/exts/yaxunit/src/CommonModules/ЮТФабрика/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТФабрика/Module.bsl index 8b329393..c577469c 100644 --- a/exts/yaxunit/src/CommonModules/ЮТФабрика/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТФабрика/Module.bsl @@ -64,12 +64,16 @@ // Возвращаемое значение: // ФиксированнаяСтруктура - Параметры исполнения теста: // * ВТранзакции - Строка - Тест должен выполняться в транзакции -// * УдалениеТестовыхДанных - Строка - Тест должен удалить созданные тестовые данные +// * УдалениеТестовыхДанных - Строка - Тест должен удалить созданные тестовые данные +// * Перед - Строка - Перед тестом должен выполниться указанный обработчик события вместо основного +// * После - Строка - После теста должен выполниться указанный обработчик события вместо основного Функция ПараметрыИсполненияТеста() Экспорт Параметры = Новый Структура(); Параметры.Вставить("ВТранзакции", "ВТранзакции"); Параметры.Вставить("УдалениеТестовыхДанных", "УдалениеТестовыхДанных"); + Параметры.Вставить("Перед", "Перед"); + Параметры.Вставить("После", "После"); Возврат Новый ФиксированнаяСтруктура(Параметры); diff --git a/exts/yaxunit/src/Configuration/Configuration.mdo b/exts/yaxunit/src/Configuration/Configuration.mdo index 7d309b0c..69ee50da 100644 --- a/exts/yaxunit/src/Configuration/Configuration.mdo +++ b/exts/yaxunit/src/Configuration/Configuration.mdo @@ -73,7 +73,6 @@ CommonModule.ЮТОтчетJSON CommonModule.ЮТОтчетJUnit CommonModule.ЮТПараметрыЗапуска - CommonModule.ЮТПереопределениеКонтекста CommonModule.ЮТПовторногоИспользования CommonModule.ЮТПодражатель CommonModule.ЮТПодражатель_Банки diff --git a/exts/yaxunit/src/Subsystems/ЮТФункциональность/Subsystems/ЮТОбработчикиСобытий/ЮТОбработчикиСобытий.mdo b/exts/yaxunit/src/Subsystems/ЮТФункциональность/Subsystems/ЮТОбработчикиСобытий/ЮТОбработчикиСобытий.mdo index f25e67e1..0e0a76b6 100644 --- a/exts/yaxunit/src/Subsystems/ЮТФункциональность/Subsystems/ЮТОбработчикиСобытий/ЮТОбработчикиСобытий.mdo +++ b/exts/yaxunit/src/Subsystems/ЮТФункциональность/Subsystems/ЮТОбработчикиСобытий/ЮТОбработчикиСобытий.mdo @@ -11,6 +11,5 @@ CommonModule.ЮТЛогирование CommonModule.ЮТТестовыеДанныеСлужебный CommonModule.ЮТУтверждения - CommonModule.ЮТПереопределениеКонтекста Subsystem.ЮТФункциональность diff --git a/tests/src/CommonModules/ОМ_ЮТест/Module.bsl b/tests/src/CommonModules/ОМ_ЮТест/Module.bsl index 3b326cd4..205b96ba 100644 --- a/tests/src/CommonModules/ОМ_ЮТест/Module.bsl +++ b/tests/src/CommonModules/ОМ_ЮТест/Module.bsl @@ -21,8 +21,13 @@ Процедура ИсполняемыеСценарии() Экспорт ЮТТесты - .ДобавитьТест("Пропустить") - .ДобавитьТест("ПроверкаКонтекста") + .ДобавитьТестовыйНабор("ОсновнойНабор") + .ДобавитьТест("Пропустить") + .ДобавитьТест("ПроверкаКонтекста") + .ДобавитьТестовыйНабор("ПереопределенныйНабор").Перед("Перед_ПереопределенныйНабор") + .ДобавитьТест("ПроверкаПереопределенногоКонтекста").Перед("Перед_ПроверкаПереопределенногоКонтекста") + .ДобавитьТестовыйНабор("ПовторнаяПроверкаКонтекста") + .ДобавитьТест("ПроверкаКонтекста") ; КонецПроцедуры @@ -66,7 +71,7 @@ Процедура ПослеВсехТестов() Экспорт ЮТест.Контекст().Значение("Коллекция").Добавить("ПослеВсехТестов"); - ЮТест.ОжидаетЧто(ЮТест.Контекст().Значение("Коллекция")).ИмеетДлину(8); + ЮТест.ОжидаетЧто(ЮТест.Контекст().Значение("Коллекция")).ИмеетДлину(16); КонецПроцедуры @@ -88,8 +93,46 @@ .Содержит("ПередВсемиТестами") .Содержит("ПередТестовымНабором") .Содержит("ПередКаждымТестом"); + ЮТест.ОжидаетЧто(ЮТест.Контекст().Значение("КоллекцияПереопределенногоНабора")).Равно(Неопределено); + +КонецПроцедуры +Процедура Перед_ПереопределенныйНабор() Экспорт + + ЮТест.Контекст().УстановитьЗначение("Набор", -2); + ЮТест.Контекст().Значение("Коллекция").Добавить("Перед_ПереопределенныйНабор"); + ЮТест.Контекст().УстановитьЗначение("КоллекцияПереопределенногоНабора", Новый Массив()); + ЮТест.Контекст().Значение("КоллекцияПереопределенногоНабора").Добавить("Перед_ПереопределенныйНабор"); + +КонецПроцедуры + +Процедура Перед_ПроверкаПереопределенногоКонтекста() Экспорт + + ЮТест.Контекст().УстановитьЗначение("Тест", -3); + ЮТест.Контекст().УстановитьЗначение("Заменяемый", -3); + ЮТест.Контекст().Значение("Коллекция").Добавить("Перед_ПроверкаПереопределенногоКонтекста"); + ЮТест.Контекст().Значение("КоллекцияПереопределенногоНабора").Добавить("Перед_ПроверкаПереопределенногоКонтекста"); + +КонецПроцедуры + +Процедура ПроверкаПереопределенногоКонтекста() Экспорт + + ЮТест.ОжидаетЧто(ЮТест.Контекст().Значение("Глобальный"), "Значение глобального контекста").Равно(1); + ЮТест.ОжидаетЧто(ЮТест.Контекст().Значение("Набор"), "Значение контекста набора").Равно(-2); + ЮТест.ОжидаетЧто(ЮТест.Контекст().Значение("Тест"), "Значение контекста теста").Равно(-3); + ЮТест.ОжидаетЧто(ЮТест.Контекст().Значение("Заменяемый"), "Замененное значение контекста").Равно(-3); + ЮТест.ОжидаетЧто(ЮТест.Контекст().Значение("Коллекция")) + .ИмеетДлинуБольше(4) + .Содержит("ПередВсемиТестами") + .Содержит("ПередТестовымНабором") + .Содержит("Перед_ПереопределенныйНабор") + .Содержит("ПередКаждымТестом") + .Содержит("Перед_ПроверкаПереопределенногоКонтекста"); + ЮТест.ОжидаетЧто(ЮТест.Контекст().Значение("КоллекцияПереопределенногоНабора")) + .ИмеетДлинуБольше(1) + .Содержит("Перед_ПереопределенныйНабор") + .Содержит("Перед_ПроверкаПереопределенногоКонтекста"); + КонецПроцедуры #КонецОбласти -