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

test #83

Closed
wants to merge 9 commits into from
44 changes: 44 additions & 0 deletions src/internal/Классы/_ПриемкаПриемка.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
Перем _Поделка;

Перем _ИнтерфейсПриемка;

Процедура ПриДобавленииОпределенияЖелудя(Знач ОпределениеЖелудя) Экспорт

ЭтоПриемка = ОпределениеЖелудя.Прозвища().Найти("Приемка") <> Неопределено;
Если НЕ ЭтоПриемка Тогда
Возврат;
КонецЕсли;

Если НЕ _ИнтерфейсПриемка.Реализован(ОпределениеЖелудя.Методы()) Тогда
ТекстСообщения = СтрШаблон(
"Определение желудя %1 не реализует методы интерфейса &Приемка",
ОпределениеЖелудя.Имя()
);
ВызватьИсключение ТекстСообщения;
КонецЕсли;

Приемка = _Поделка.НайтиЖелудь(ОпределениеЖелудя.Имя());

ВсеОпределенияЖелудей = _Поделка.ПолучитьОпределенияЖелудей();
Для Каждого КлючИЗначение Из ВсеОпределенияЖелудей Цикл

ИмяЖелудя = КлючИЗначение.Ключ;

Если ИмяЖелудя = ОпределениеЖелудя.Имя() Тогда
Продолжить;
КонецЕсли;

Приемка.ПриДобавленииОпределенияЖелудя(ОпределениеЖелудя);

КонецЦикла;

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

&Приемка("ПриемкаПриемка")
Процедура ПриСозданииОбъекта(&Пластилин Поделка)
_Поделка = Поделка;

_ИнтерфейсПриемка = Новый ИнтерфейсОбъекта()
.ПроцедураИнтерфейса("ПриДобавленииОпределенияЖелудя", 1);

КонецПроцедуры
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
&Аннотация("Заготовка")
&Прозвище("Заготовка")
&Спецификация("Инициализация")
Процедура ПриСозданииОбъекта(Значение = "")

Expand Down
6 changes: 6 additions & 0 deletions src/internal/Классы/АннотацияПриемка.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
&Аннотация("Приемка")
&Прозвище("Приемка")
&Характер("Компанейский")
&Спецификация("Инициализация")
Процедура ПриСозданииОбъекта(Значение = "")
КонецПроцедуры
48 changes: 37 additions & 11 deletions src/internal/Классы/Осенизатор.os
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
Перем УправляющийПрилепляемымиКоллекциями;
Перем Поделка;
Перем СистемныеНапильники;
Перем Приемки;
Перем ПросканированныеТипы;
Перем Рефлектор;

Expand All @@ -30,6 +31,12 @@

КонецЦикла;

Для Каждого Приемка Из Приемки Цикл
УдалитьОбработчик ФабрикаЖелудей.ПриДобавленииОпределенияЖелудя, Приемка.ПриДобавленииОпределенияЖелудя;
КонецЦикла;

Приемки.Очистить();

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

#КонецОбласти
Expand All @@ -50,7 +57,7 @@

Методы = Рефлектор.ПолучитьТаблицуМетодов(ТипЖелудя);

Если РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "Аннотация").Количество() > 0 Тогда
Если ЕстьМетодСАннотацией(Методы, "Аннотация") Тогда
ДобавитьАннотацию(ТипЖелудя);
ПросканированныеТипы.Добавить(ТипЖелудя);
КонецЕсли;
Expand All @@ -65,24 +72,26 @@

Методы = Рефлектор.ПолучитьТаблицуМетодов(ТипЖелудя);

Если РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "Аннотация").Количество() > 0 Тогда
Если ЕстьМетодСАннотацией(Методы, "Аннотация") Тогда
Продолжить;
КонецЕсли;

РазворачивательАннотаций.РазвернутьАннотацииСвойств(Методы, ТипЖелудя);

Если РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "Желудь").Количество() > 0 Тогда
Если ЕстьМетодСАннотацией(Методы, "Желудь") Тогда
ДобавитьЖелудь(ТипЖелудя);
ИначеЕсли РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "Дуб").Количество() > 0 Тогда
ИначеЕсли ЕстьМетодСАннотацией(Методы, "Дуб") Тогда
ДобавитьДуб(ТипЖелудя);
ИначеЕсли РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "Напильник").Количество() > 0 Тогда
ИначеЕсли ЕстьМетодСАннотацией(Методы, "Напильник") Тогда
ДобавитьНапильник(ТипЖелудя);
ИначеЕсли РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "Рогатка").Количество() > 0 Тогда
ИначеЕсли ЕстьМетодСАннотацией(Методы, "Рогатка") Тогда
ДобавитьРогатку(ТипЖелудя);
ИначеЕсли РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "Заготовка").Количество() > 0 Тогда
ИначеЕсли ЕстьМетодСАннотацией(Методы, "Заготовка") Тогда
ДобавитьЗаготовку(ТипЖелудя);
ИначеЕсли РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "ПрилепляемаяКоллекция").Количество() > 0 Тогда
ИначеЕсли ЕстьМетодСАннотацией(Методы, "ПрилепляемаяКоллекция") Тогда
ДобавитьПрилепляемуюКоллекцию(ТипЖелудя);
ИначеЕсли ЕстьМетодСАннотацией(Методы, "Приемка") Тогда
ДобавитьПриемку(ТипЖелудя);
Иначе // BSLLS:EmptyCodeBlock-off
// no-op
КонецЕсли;
Expand All @@ -94,7 +103,7 @@
КонецПроцедуры

Процедура ДобавитьЖелудь(Тип, Имя = "")
ФабрикаЖелудей.ДобавитьЖелудь(Тип, Имя);
ФабрикаЖелудей.ДобавитьЖителяЛеса(Тип, Имя, "Желудь");
КонецПроцедуры

Процедура ДобавитьДуб(Тип)
Expand All @@ -113,15 +122,15 @@

Процедура ДобавитьЗаготовку(Тип)

ОпределениеЗаготовки = ФабрикаЖелудей.ДобавитьЗаготовку(Тип);
ОпределениеЗаготовки = ФабрикаЖелудей.ДобавитьЖителяЛеса(Тип, "", "Заготовка");

Заготовка = Поделка.НайтиЖелудь(ОпределениеЗаготовки.Имя());
Заготовка.ПриИнициализацииПоделки(Поделка);

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

Процедура ДобавитьРогатку(Тип)
ФабрикаЖелудей.ДобавитьРогатку(Тип);
ФабрикаЖелудей.ДобавитьЖителяЛеса(Тип, "", "Рогатка");
КонецПроцедуры

Процедура ДобавитьАннотацию(Тип)
Expand All @@ -132,6 +141,21 @@
УправляющийПрилепляемымиКоллекциями.ДобавитьПрилепляемуюКоллекцию(Тип);
КонецПроцедуры

Процедура ДобавитьПриемку(Тип)

ОпределениеПриемки = ФабрикаЖелудей.ДобавитьЖителяЛеса(Тип, "", "Приемка");

Приемка = Поделка.НайтиЖелудь(ОпределениеПриемки.Имя());
ДобавитьОбработчик ФабрикаЖелудей.ПриДобавленииОпределенияЖелудя, Приемка.ПриДобавленииОпределенияЖелудя;

Приемки.Добавить(Приемка);

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

Функция ЕстьМетодСАннотацией(Методы, ИмяАннотации)
Возврат РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, ИмяАннотации).Количество() > 0;
КонецФункции

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

Процедура ПриСозданииОбъекта(пПоделка, пФабрикаЖелудей, пКонтейнерАннотаций, пУправляющийПрилепляемымиКоллекциями)
Expand All @@ -147,6 +171,8 @@
СистемныеНапильники.Добавить(Тип("ОбработкаНапильникомПластилинаНаПолях"));
СистемныеНапильники.Добавить(Тип("ОбработкаНапильникомФинальныйШтрих"));

Приемки = Новый Массив;

ПросканированныеТипы = Новый МножествоСоответствие();

Рефлектор = Новый Рефлектор;
Expand Down
24 changes: 24 additions & 0 deletions src/internal/Классы/ПриемкаЗаготовка.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#Использовать reflector

Процедура ПриДобавленииОпределенияЖелудя(Знач ОпределениеЖелудя) Экспорт

ЭтоЗаготовка = ОпределениеЖелудя.Прозвища().Найти("Заготовка") <> Неопределено;
Если НЕ ЭтоЗаготовка Тогда
Возврат;
КонецЕсли;

РефлекторОбъекта = Новый РефлекторОбъекта(ОпределениеЖелудя.ТипЖелудя());

Ожидаем
.Что(
РефлекторОбъекта.ЕстьПроцедура("ПриИнициализацииПоделки", 1),
"Заготовка должна иметь процедуру ПриИнициализацииПоделки(Поделка)"
)
.ЭтоИстина();

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

&Приемка
Процедура ПриСозданииОбъекта()

КонецПроцедуры
24 changes: 24 additions & 0 deletions src/internal/Классы/ПриемкаРогатка.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#Использовать reflector

Процедура ПриДобавленииОпределенияЖелудя(Знач ОпределениеЖелудя) Экспорт

ЭтоРогатка = ОпределениеЖелудя.Прозвища().Найти("Рогатка") <> Неопределено;
Если НЕ ЭтоРогатка Тогда
Возврат;
КонецЕсли;

РефлекторОбъекта = Новый РефлекторОбъекта(ОпределениеЖелудя.ТипЖелудя());

Ожидаем
.Что(
РефлекторОбъекта.ЕстьПроцедура("ПриЗапускеПриложения", 0),
"Рогатка должна иметь процедуру ПриЗапускеПриложения()"
)
.ЭтоИстина();

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

&Приемка
Процедура ПриСозданииОбъекта()

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