
Функция Конт(Конт) Возврат Конт; КонецФункции
Функция Сам() Возврат Конт(Контекст); КонецФункции
//______________________________________________________________________________
//
Функция _Объект(__стр ="МенеджерСобытий")
	_о =СоздатьОбъект(__стр);
	Возврат _о;
КонецФункции
//______________________________________________________________________________
//
Функция _Обработчик(__стр ="ДелегатОбработчик")
	_о =СоздатьОбъект(__стр);
	Возврат _о;
КонецФункции
//______________________________________________________________________________
//
Процедура тестСоздатьОбъект() Экспорт
	Сам =Сам();

	_о =_Объект("МенеджерСобытий");
	Сам.ПроверитьРавенство(ТипЗначенияСтр(_о), "EventManager");
//	Сам.ПроверитьРавенство(ТипЗначенияСтр(_о), "МенеджерСобытий");
	_о =0;
	
	_о =_Объект("EventManager");
	Сам.ПроверитьРавенство(ТипЗначенияСтр(_о), "EventManager");
//	Сам.ПроверитьРавенство(ТипЗначенияСтр(_о), "МенеджерСобытий");
	_о =0;
КонецПроцедуры
//______________________________________________________________________________
//

Процедура тестПустой() Экспорт
	Сам =Сам();
	
	_о =_Объект();

	Сам.ПроверитьРавенство(_о.Пустой(), 1);
КонецПроцедуры
//______________________________________________________________________________
//
Процедура тестПроверкаОбработчика() Экспорт
	Сам =Сам();
	
	_обр =_Обработчик();
	
	Сам.ПроверитьРавенство(_обр.функПроизведение(2,3,4), 24);
	
	_знач =15;
	_обр.процИнкремент(_знач);
	Сам.ПроверитьРавенство(_знач, 16);

	_обр.процКвадрат(_знач);
	Сам.ПроверитьРавенство(_знач, 256);
КонецПроцедуры
//______________________________________________________________________________
//
Процедура тестДобавитьУдалить() Экспорт
	Сам =Сам();
	
	_о =_Объект();
	_обр =_Обработчик();
	
	_о.УстановитьКоличествоПараметров(3);

	_о.ДобавитьОбработчикСобытия(_обр, "функСумма");
	_о.ДобавитьОбработчикСобытия(_обр, "функПроизведение");
	_о.УдалитьОбработчикСобытия(_обр, "функПроизведение");
	_о.УдалитьОбработчикСобытия(_обр, "функСумма");

	Сам.ПроверитьРавенство(_о.Пустой(), 1);
	
	_о.ДобавитьОбработчикСобытия(_обр, "функСумма");
	_о.ДобавитьОбработчикСобытия(_обр, "функПроизведение");
	_о.Очистить();

	Сам.ПроверитьРавенство(_о.Пустой(), 1);
КонецПроцедуры
//______________________________________________________________________________
//
Процедура тестДобавитьПовторно() Экспорт
	Сам =Сам();
	
	_о =_Объект();
	_обр =_Обработчик();

	_о.УстановитьКоличествоПараметров(3);

	_знач =	_о.ДобавитьОбработчикСобытия(_обр, "функROL");
	Сам.ПроверитьРавенство(_знач, 1);

	_знач =	_о.ДобавитьОбработчикСобытия(_обр, "функROL");
	Сам.ПроверитьРавенство(_знач, 1);
КонецПроцедуры
//______________________________________________________________________________
//
Процедура тестУдалитьПовторно() Экспорт
	Сам =Сам();
	
	_о =_Объект();
	_обр =_Обработчик();

	_о.УстановитьКоличествоПараметров(3);

	// добавляем по 2
	_о.ДобавитьОбработчикСобытия(_обр, "функROL");
	_о.ДобавитьОбработчикСобытия(_обр, "функROL");
	_о.ДобавитьОбработчикСобытия(_обр, "функСумма");
	_о.ДобавитьОбработчикСобытия(_обр, "функСумма");
	
	// удаляем 1й раз
	_знач =_о.УдалитьОбработчикСобытия(_обр, "функROL");
	_знач =_о.УдалитьОбработчикСобытия(_обр, "функСумма");
	Сам.ПроверитьРавенство(_знач, 1);

	// все удалены
	Сам.ПроверитьРавенство(_о.Пустой(), 1);

	// нечего удалять
	_знач =_о.УдалитьОбработчикСобытия(_обр, "функСумма");
	Сам.ПроверитьРавенство(_знач, 0);
КонецПроцедуры
//______________________________________________________________________________
//
Процедура _ДобавитьНесуществующийМетод(__стр) Экспорт
	_о =_Объект();
	_обр =_Обработчик();

	_о.УстановитьКоличествоПараметров(3);
	_о.ДобавитьОбработчикСобытия(_обр, "НетТакого__!__метода");
КонецПроцедуры
//______________________________________________________________________________
//
Процедура тестДобавитьНесуществующийМетод() Экспорт
	Сам =Сам();
	
	Сам.ПроверитьИсключение(Сам, "_ДобавитьНесуществующийМетод", "");
КонецПроцедуры
//______________________________________________________________________________
//
Процедура _ДобавитьМетодНеагрегатногоОбъекта(__стр) Экспорт
	_о =_Объект();
	_неагр = "";

	_о.УстановитьКоличествоПараметров(3);
	_о.ДобавитьОбработчикСобытия(_неагр, "НетТакого__!__метода");
КонецПроцедуры
//______________________________________________________________________________
//
Процедура тестДобавитьМетодНеагрегатногоОбъекта() Экспорт
	Сам =Сам();
	
	Сам.ПроверитьИсключение(Сам, "_ДобавитьМетодНеагрегатногоОбъекта", "");
КонецПроцедуры
//______________________________________________________________________________
//
Процедура тестПослатьСобытие() Экспорт
	Сам =Сам();
	
	_о =_Объект();
	_обр =_Обработчик();

	_о.УстановитьКоличествоПараметров(3);
	_о.ДобавитьОбработчикСобытия(_обр, "функROL");
	
	_знач1 =5;
	_знач2 =132;
	_знач3 =-4;
	
	_знач =_о.ПослатьСобытие(Сам(), _знач2, _знач3);
	Сам.ПроверитьРавенство(_знач, 132);
КонецПроцедуры
//______________________________________________________________________________
//
Процедура тестПослатьМножествоСобытий() Экспорт
	Сам =Сам();
	
	_о =_Объект();
	_обр =_Обработчик();

	_о.УстановитьКоличествоПараметров(3);
	_о.ДобавитьОбработчикСобытия(_обр, "функROL");
	_о.ДобавитьОбработчикСобытия(_обр, "функROL");
	
	_знач1 =5;
	_знач2 =132;
	_знач3 =-4;
	
	_знач =_о.ПослатьСобытие(Сам(), _знач2, _знач3);
	Сам.ПроверитьРавенство(_знач, -4);
КонецПроцедуры
//______________________________________________________________________________
//
Процедура тестПрерывание() Экспорт
	Сам =Сам();
	
	_о =_Объект();
	_обр =_Обработчик();

	_о.УстановитьКоличествоПараметров(1);
	_о.ДобавитьОбработчикСобытия(_обр, "функПостИнкремент");
	_о.ДобавитьОбработчикСобытия(_обр, "функПостИнкремент");
	_о.ДобавитьОбработчикСобытия(_обр, "функПостИнкремент");
	_о.ДобавитьОбработчикСобытия(_обр, "функПостИнкремент");
	
	_нач =-2;
	_кон =_о.ПослатьСобытие(_нач);
	Сам.ПроверитьРавенство(_нач, 1);
КонецПроцедуры
//______________________________________________________________________________
//
Процедура тестРегистронезависимостьМетода() Экспорт
	Сам =Сам();
	
	_о =_Объект();
	_обр =_Обработчик();

	_о.УстановитьКоличествоПараметров(1);
	_о.ДобавитьОбработчикСобытия(_обр, "ФуНКПостИНКреМеНТ");
	
	_нач =100;
	_о.ПослатьСобытие(_нач);
	Сам.ПроверитьРавенство(_нач, 101);
КонецПроцедуры
//______________________________________________________________________________
//
Процедура тестУничтожениеОбработчика() Экспорт
	Сам =Сам();
	
	_о =_Объект();
	_обр =_Обработчик();

	_о.УстановитьКоличествоПараметров(1);
	_о.ДобавитьОбработчикСобытия(_обр, "функПостИнкремент");
	
	_обр =0;
	_обр ="нет тут ничего";
	
	_нач =100;
	_о.ПослатьСобытие(_нач);
	Сам.ПроверитьРавенство(_нач, 101);
КонецПроцедуры
//______________________________________________________________________________
//

Процедура _ПроверитьТаблицуОбработчиков(Таб, _обр)
	Сам =Сам();

	Сам.ПроверитьРавенство(ТипЗначенияСтр(Таб), "ТаблицаЗначений");
	Сам.ПроверитьРавенство(Таб.КоличествоСтрок(), 2);

	Таб.ПолучитьСтрокуПоНомеру(1);
	Сам.ПроверитьРавенство(ТипЗначенияСтр(Таб.Объект), ТипЗначенияСтр(_обр));
	Сам.ПроверитьРавенство(Таб.Объект, _обр);
	Сам.ПроверитьРавенство(Таб.НаименованиеКласса, ТипЗначенияСтр(_обр));
	Сам.ПроверитьРавенство(Таб.НаименованиеМетода, "функПостИнкремент");

	Таб.ПолучитьСтрокуПоНомеру(2);
	Сам.ПроверитьРавенство(ТипЗначенияСтр(Таб.Объект), ТипЗначенияСтр(_обр));
	Сам.ПроверитьРавенство(Таб.Объект, _обр);
	Сам.ПроверитьРавенство(Таб.НаименованиеКласса, ТипЗначенияСтр(_обр));
	Сам.ПроверитьРавенство(Таб.НаименованиеМетода, "функПостИнкремент");
КонецПроцедуры

Процедура тестПолучитьТаблицуОбработчиков() Экспорт
	Сам =Сам();
	
	_о =_Объект();
	_обр =_Обработчик();

	_о.УстановитьКоличествоПараметров(1);
	_о.ДобавитьОбработчикСобытия(_обр, "функПостИнкремент");
	_о.ДобавитьОбработчикСобытия(_обр, "функПостИнкремент");
	
	Таб = _о.ПолучитьТаблицуОбработчиков();
	// Таб // : ТаблицаЗначений 
	
	_ПроверитьТаблицуОбработчиков(Таб, _обр);
КонецПроцедуры