Skip to content

Latest commit

 

History

History
49 lines (47 loc) · 4.17 KB

File metadata and controls

49 lines (47 loc) · 4.17 KB

АннотацияИзолированный

ПриСозданииОбъекта

// Аннотация выполняет тест или весь тестовый набор в изоляции: так, как будто
// набор прогнали только с этим тестом - в свежей поделке или в отдельном процессе.
// Снаружи это обычный тест: его статус, сообщение и вывод попадают в общий план.
//
// Нужна для тестов, которые иначе отравляют общий прогон: проверяют ошибки
// обнаружения, конфликты желудей, падающие импорты, либо требуют собственной
// поделки с отдельной конфигурацией.
//
// Вешается на тест или на конструктор `&ТестовыйНабор`. На наборе изолируется весь
// набор одним контекстом, на тесте - каждый такой тест своим. При изоляции и набора,
// и теста выигрывает набор.
//
// Параметры:
//  Уровень - Строка - Уровень изоляции, см. УровниИзоляции:
//    "Поделка" (по умолчанию) - тот же процесс, но свежая поделка;
//    "Процесс" - отдельный дочерний процесс.
//  Импорты - Строка - Только для уровня "Процесс": пути импортов через запятую,
//    подключаемые в изолированном процессе перед файлом набора. Позволяет проверять
//    импорты, которые отравляют текущий процесс уже при подключении. На уровне
//    "Поделка" запрещены - импорт глобален для процесса и поделкой не изолируется.
//  Совет - Строка - [Лямбда-выражение](https://github.com/oscript-library/lambdas)
//    без параметров, должно вернуть [СоветДругогоМастера](https://github.com/autumn-library/autumn)
//    для создания изолированной поделки. Лямбда захватывает объект тестового набора:
//    ей доступны поля объекта и его экспортные методы. На уровне "Процесс" лямбда
//    исполняется в дочернем процессе, поэтому значения деталек совета не ограничены
//    сериализуемостью; экземпляр набора для захвата поднимается там напрямую
//    через Новый - если конструктор набора требует параметров, лямбда исполняется
//    без захвата (модули, импортированные файлом набора, доступны в любом случае).
//
// Пример:
//  1.
//  // Набор целиком выполняется в свежей поделке, сконфигурированной советом
//  &ТестовыйНабор
//  &Изолированный(Совет = "() -> ГенераторДанных.СоветСОднимКоннектором()")
//  Процедура ПриСозданииОбъекта(&Пластилин Поделка) Экспорт
//
//  2.
//  // Тест выполняется в отдельном процессе с ядовитым импортом
//  &Тест
//  &Изолированный(Уровень = "Процесс", Импорты = "../ОшибочныеКлассы/ДваЖелудяСОднимИменем")
//  Процедура ДваЖелудяСОднимИменемКонфликтуют() Экспорт
//
Процедура ПриСозданииОбъекта(Уровень = "Поделка", Импорты = "", Совет = "")