From eb41b71f4021085452fd9694c5114fdbbcc0a3c0 Mon Sep 17 00:00:00 2001 From: sfaqer Date: Fri, 23 Feb 2024 13:32:08 +1000 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D1=82=D0=B5=D1=81=D1=82=D1=8B=20=D0=BD=D0=B0=20?= =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82=D1=8C=D0=97=D0=B0?= =?UTF-8?q?=D0=B2=D1=8F=D0=B7=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packagedef | 1 + ...20\273\321\203\320\264\320\265\320\271.os" | 8 +- ...20\264\320\265\320\273\320\272\320\260.os" | 150 ++++++++++++++++++ 3 files changed, 156 insertions(+), 3 deletions(-) diff --git a/packagedef b/packagedef index c7880bf..8f951d7 100644 --- a/packagedef +++ b/packagedef @@ -29,6 +29,7 @@ .РазработкаЗависитОт("asserts") .РазработкаЗависитОт("coverage") .РазработкаЗависитОт("fs") + .РазработкаЗависитОт("decorator", "1.7.1") .ОпределяетКласс("Поделка", "src/Классы/Поделка.os") .ОпределяетКласс("Завязь", "src/Классы/Завязь.os") diff --git "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\226\320\265\320\273\321\203\320\264\320\265\320\271.os" "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\226\320\265\320\273\321\203\320\264\320\265\320\271.os" index d5ec3af..7d73e9f 100644 --- "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\226\320\265\320\273\321\203\320\264\320\265\320\271.os" +++ "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\226\320\265\320\273\321\203\320\264\320\265\320\271.os" @@ -33,6 +33,9 @@ // Массив из ОпределениеЖелудя - Список инициализируемых в данный момент напильников. Перем ИнициализируемыеНапильники; +// Рефлектор - кеш инстанса рефлектора +Перем Рефлектор; + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -141,8 +144,6 @@ Объект = Выражение.ВОбъект(); - Рефлектор = Новый Рефлектор(); - Методы = Рефлектор.ПолучитьТаблицуМетодов(Объект); Завязи = РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "Завязь"); @@ -245,7 +246,6 @@ Если Завязь.ЭтоКонструктор() Тогда Желудь = Действие.Выполнить(ОпределениеЖелудя.ТипЖелудя(), ПередаваемыеПрилепляемыеЧастицы); ИначеЕсли Не ЗначениеЗаполнено(Завязь.Родитель()) Тогда - Рефлектор = Новый Рефлектор(); Желудь = Рефлектор.ВызватьМетод(Действие, "Выполнить", ПередаваемыеПрилепляемыеЧастицы); Иначе Желудь = Действие.Выполнить(Поделка, Завязь.Родитель(), Завязь.ИмяМетода(), ПередаваемыеПрилепляемыеЧастицы); @@ -630,6 +630,8 @@ Процедура ПриСозданииОбъекта(пПоделка, пРазворачивательАннотаций, пПрилепляторЧастиц) + Рефлектор = Новый Рефлектор(); + Поделка = пПоделка; РазворачивательАннотаций = пРазворачивательАннотаций; ПрилепляторЧастиц = пПрилепляторЧастиц; diff --git "a/tests/\320\237\320\276\320\264\320\265\320\273\320\272\320\260.os" "b/tests/\320\237\320\276\320\264\320\265\320\273\320\272\320\260.os" index 53da288..ae7d886 100644 --- "a/tests/\320\237\320\276\320\264\320\265\320\273\320\272\320\260.os" +++ "b/tests/\320\237\320\276\320\264\320\265\320\273\320\272\320\260.os" @@ -1,6 +1,7 @@ #Использовать ".." #Использовать asserts +#Использовать decorator #Использовать "./ТестКлассы" #Использовать "./ОдноименныеЖелуди" @@ -879,3 +880,152 @@ .ВыбрасываетИсключение("Неизвестная прилепляемая коллекция Нечто"); КонецПроцедуры + +&Тест +Процедура ДобавитьЗавязьБезТипа() Экспорт + + // Дано + Поделка = Новый Поделка(); + + // Когда + ПараметрыМетода = Новый Массив(); + ПараметрыМетода.Добавить("&Завязь ()-> Возврат 1;"); + + // Тогда + Ожидаем.Что(Поделка) + .Метод("ДобавитьЗавязь", ПараметрыМетода) + .ВыбрасываетИсключение("Тип желудя в Завязи Вызвать не известен"); + +КонецПроцедуры + +&Тест +Процедура ДобавитьЗавязьБезЗавязи() Экспорт + + // Дано + Поделка = Новый Поделка(); + + // Когда + ПараметрыМетода = Новый Массив(); + ПараметрыМетода.Добавить("&НеЗавязь ()-> Возврат 1;"); + + // Тогда + Ожидаем.Что(Поделка) + .Метод("ДобавитьЗавязь", ПараметрыМетода) + .ВыбрасываетИсключение("Лямбда выражения не содержит завязи"); + +КонецПроцедуры + +&Тест +Процедура ДобавитьЗавязьПримитивногоТипа() Экспорт + + // Дано + Поделка = Новый Поделка(); + + // Когда + Поделка.ДобавитьЗавязь( + "&Завязь(""МоёЧисло"", Тип = ""Число"") () -> Возврат 42;" + ); + + Поделка.ЗапуститьПриложение(); + + // Тогда + Ожидаем.Что(Поделка.НайтиЖелудь("МоёЧисло")) + .Равно(42); + +КонецПроцедуры + +&Тест +Процедура ДобавитьЗавязьСложногоТипа() Экспорт + + // Дано + Поделка = Новый Поделка(); + + // Когда + Поделка.ДобавитьЗавязь( + "&Завязь(""Множество"", Тип = ""МножествоСоответствие"") () -> { + | Результат = Новый МножествоСоответствие(); + | Результат.Добавить(42); + | Возврат Результат; + |}" + ); + + Поделка.ЗапуститьПриложение(); + + // Тогда + Ожидаем.Что(Поделка.НайтиЖелудь("Множество")) + .ИмеетТип("МножествоСоответствие") + .ИмеетДлину(1); + +КонецПроцедуры + +&Тест +Процедура ДобавитьЗавязьСКонтекстом() Экспорт + + // Дано + + Поделка = Новый Поделка(); + + // Когда + Поделка.ДобавитьЗавязь( + "&Завязь(""ДобавитьКЧислу"", Тип = ""Число"") (&Блестяшка Число) -> Возврат Число + ЧислоВнутреннее;", + Новый Структура("ЧислоВнутреннее", 21) + ); + + Поделка.ЗапуститьПриложение(); + + // Тогда + + Ожидаем.Что(Поделка.НайтиЖелудь("ДобавитьКЧислу", Список.ИзЭлементов(21).ВМассив())) + .Равно(42); + +КонецПроцедуры + +&Тест +Процедура ДобавитьЗавязьСЗахватом() Экспорт + + // Дано + + Поделка = Новый Поделка(); + + Объект = Новый ПостроительДекоратора + .Поле(Новый Поле("ЧислоВнутреннее").ЗначениеПоУмолчанию(10)) + .Метод(Новый Метод("ЧислоВнутреннее").ТелоМетода("Возврат 11;").Публичный()) + .Построить(); + + // Когда + Поделка.ДобавитьЗавязь( + "&Завязь(""ДобавитьКЧислу"", Тип = ""Число"") (&Блестяшка Число) -> Возврат Число + ЧислоВнутреннее + ЧислоВнутреннее();", + Объект + ); + + Поделка.ЗапуститьПриложение(); + + // Тогда + + Ожидаем.Что(Поделка.НайтиЖелудь("ДобавитьКЧислу", Список.ИзЭлементов(21).ВМассив())) + .Равно(42); + +КонецПроцедуры + +&Тест +Процедура ЗавязьПластилинитДругуюЗавязь() Экспорт + + // Дано + Поделка = Новый Поделка(); + + // Когда + + Поделка.ДобавитьЗавязь("&Завязь(""Запластилиниваемая"", Тип = ""Строка"") () -> Возврат ""Привет"""); + Поделка.ДобавитьЗавязь(" + | &Завязь(""Припластилинивающая"", Тип = ""Строка"") (&Пластилин Запластилиниваемая) -> + | Возврат Запластилиниваемая + "" мир""" + ); + + Поделка.ЗапуститьПриложение(); + + // Тогда + + Ожидаем.Что(Поделка.НайтиЖелудь("Припластилинивающая")) + .Равно("Привет мир"); + +КонецПроцедуры