
Функция Конт(Конт) Возврат Конт; КонецФункции
Функция Сам() Возврат Конт(Контекст); КонецФункции

Процедура Тест_ПерехватГрупповогоКонтекста() Экспорт
	Сам = Сам();
	//Сам().ПропуститьТест(0);

	//ПутьКФорме = КаталогИБ()+"ExtForms\ФормаПроверкиГрупповогоКонтекста.ert"; 	
	ПутьКФорме = КаталогИБ()+"ExtForms\UnitTests\КлассПерехватчикГК.ert"; 	
	Конт = Сам.ОткрытьФорму("Отчет", , ПутьКФорме);

	Журнал = Конт.Форма.Параметр; // TurboBL
	
	КлассПерехватчикГК = СоздатьОбъект("КлассПерехватчикГК");
	КлассПерехватчикГК.Инициализация(Конт, Журнал);
	
	Перехватчик = СоздатьОбъект("Перехватчик");
	Перехватчик.ПерехватитьСобытияГК(Конт, КлассПерехватчикГК);
                           
	// иначе деструктор сработает позже, после завершения процедуры
	// а нужно, чтобы он сработал сразу же после закрытия формы
	// одна копия объекта класса хранится внутри перехватчика
	КлассПерехватчикГК = 0;
	
	Сам.ЗакрытьФорму();
	
	//Сообщить("Журнал.стрЖурнал = <"+Журнал.стрЖурнал+">");
	Сам.ПроверитьРавенство(Журнал.стрЖурнал, "Форма::ПриОткрытии, КОП::Инициализация, КОП::ПриЗакрытии, Форма::ПриЗакрытии, КОП::ПриЗакрытии (конец), КОП::Деструктор");

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

Процедура Тест_ПерехватГрупповогоКонтекста_Событие() Экспорт
	Сам = Сам();
	//Сам().ПропуститьТест(0);

	//ПутьКФорме = КаталогИБ()+"ExtForms\ФормаПроверкиГрупповогоКонтекста.ert"; 	
	ПутьКФорме = КаталогИБ()+"ExtForms\UnitTests\КлассПерехватчикГК_События.ert"; 	
	Конт = Сам.ОткрытьФорму("Отчет", , ПутьКФорме);

	Журнал = Конт.Форма.Параметр; // TurboBL
	
	КлассПерехватчикГК = СоздатьОбъект("КлассПерехватчикГК_События");
	КлассПерехватчикГК.Инициализация(Конт, Журнал);
	
	Перехватчик = СоздатьОбъект("Перехватчик");
	Перехватчик.ПерехватитьСобытияГК(Конт, КлассПерехватчикГК);
                           
	// иначе деструктор сработает позже, после завершения процедуры
	// а нужно, чтобы он сработал сразу же после закрытия формы
	// одна копия объекта класса хранится внутри перехватчика
	КлассПерехватчикГК = 0;
	
	Сам.ЗакрытьФорму();
	
	//Сообщить("Журнал.стрЖурнал = <"+Журнал.стрЖурнал+">");
	Сам.ПроверитьРавенство(Журнал.стрЖурнал, "Форма::ПриОткрытии, КОП::Инициализация, КОП::Событие_ПриЗакрытии, Форма::ПриЗакрытии, КОП::Деструктор");

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

Процедура Тест_ПерехватГрупповогоКонтекста_Снять() Экспорт
	Сам = Сам();
	//Сам().ПропуститьТест(0);

	ПутьКФорме = КаталогИБ()+"ExtForms\UnitTests\КлассПерехватчикГК.ert"; 	
	Конт = Сам.ОткрытьФорму("Отчет", , ПутьКФорме);

	Журнал = Конт.Форма.Параметр; // TurboBL
	
	КлассПерехватчикГК = СоздатьОбъект("КлассПерехватчикГК");
	КлассПерехватчикГК.Инициализация(Конт, Журнал);
	
	Перехватчик = СоздатьОбъект("Перехватчик");
	Перехватчик.ПерехватитьСобытияГК(Конт, КлассПерехватчикГК);
                           
	// иначе деструктор сработает позже, после завершения процедуры
	// а нужно, чтобы он сработал сразу же, т.е. перед закрытием формы
	// одна копия объекта класса хранится внутри перехватчика
	КлассПерехватчикГК = 0;
	
	Перехватчик.СнятьПерехватСобытийГK(Конт); // сейчас сработает деструктор
	
	Сам.ЗакрытьФорму();
	
	//Сообщить("Журнал.стрЖурнал = <"+Журнал.стрЖурнал+">");
	Сам.ПроверитьРавенство(Журнал.стрЖурнал, "Форма::ПриОткрытии, КОП::Инициализация, КОП::Деструктор, Форма::ПриЗакрытии");

КонецПроцедуры
   
Функция СоздатьДок()
	Док = СоздатьОбъект("Документ.Новый1");
	Док.Новый();
	Док.ДатаДок = РабочаяДата();
	Док.Записать();
	//ДОк.Провести();
	
	Возврат ДОк;
КонецФункции

Процедура Тест_ПерехватСобытийПроведенияДокумента() Экспорт
	Сам = Сам();
	
	Сам.ПропуститьТест(0, "Пока не реализовано");

	Журнал=СоздатьОбъект("ЖурналВызоваМетодов");
                        
	Док = СоздатьДок();
	
	КлассПерехватчикГК = СоздатьОбъект("КлассПерехватчикГК");
	КлассПерехватчикГК.Инициализация(Док, Журнал);
	               
	//Информатор = СоздатьОбъект("Информатор");
	//Таб = Информатор.ПолучитьТаблицуМетодов(Док);
//Таб.ВыбратьСтроку("");
	Перехватчик = СоздатьОбъект("Перехватчик");
	Перехватчик.ПерехватитьСобытияПроведенияДокумента(Док, КлассПерехватчикГК);
                           
	// иначе деструктор сработает позже, после завершения процедуры
	// а нужно, чтобы он сработал сразу же
	// одна копия объекта класса хранится внутри перехватчика
	КлассПерехватчикГК = 0;

	ДОк.Провести();
	ДОк = 0;
	
	Сообщить("Журнал.стрЖурнал = <"+Журнал.стрЖурнал+">");
	Сам.ПроверитьРавенство(Журнал.стрЖурнал, "КОП::Инициализация, КОП::ОбработкаПроведения, КОП::Деструктор");

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

Процедура Тест_ПерехватСобытийПроведенияДокумента2() Экспорт
	Сам = Сам();
	
	Сам.ПропуститьТест(0, "Пока не реализовано");

	Журнал=СоздатьОбъект("ЖурналВызоваМетодов");
                        
	Док = СоздатьДок();
	
	КлассПерехватчикГК = СоздатьОбъект("КлассПерехватчикГК");
	КлассПерехватчикГК.Инициализация(Док, Журнал);
	               
	//Информатор = СоздатьОбъект("Информатор");
	//Таб = Информатор.ПолучитьТаблицуМетодов(Док);
//Таб.ВыбратьСтроку("");
	Перехватчик = СоздатьОбъект("Перехватчик");
	Перехватчик.ПерехватитьСобытияПроведенияДокумента(Док, КлассПерехватчикГК);
                           
	// иначе деструктор сработает позже, после завершения процедуры
	// а нужно, чтобы он сработал сразу же
	// одна копия объекта класса хранится внутри перехватчика
	КлассПерехватчикГК = 0;

	ДОк.Провести(); 
Сообщить("============  СделатьНеПроведенным ====================== = ");	
	ДОк.СделатьНеПроведенным();
Сообщить("============  СделатьНеПроведенным end ====================== = ");	
	ДОк = 0;
	
	Сообщить("Журнал.стрЖурнал = <"+Журнал.стрЖурнал+">");
	Сам.ПроверитьРавенство(Журнал.стрЖурнал, "КОП::Инициализация, КОП::ОбработкаПроведения, КОП::Деструктор");

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

Процедура Тест_ПерехватСобытийПроведенияДокумента_УдалитьПерехваченныйДок() Экспорт
	Сам = Сам();
	
	Сам.ПропуститьТест(0, "Пока не реализовано");

	Журнал=СоздатьОбъект("ЖурналВызоваМетодов");
                        
	Док = СоздатьДок();
	
	КлассПерехватчикГК = СоздатьОбъект("КлассПерехватчикГК");
	КлассПерехватчикГК.Инициализация(Док, Журнал);
	               
	Перехватчик = СоздатьОбъект("Перехватчик");
	Перехватчик.ПерехватитьСобытияПроведенияДокумента(Док, КлассПерехватчикГК);
                           
	// иначе деструктор сработает позже, после завершения процедуры
	// а нужно, чтобы он сработал сразу же
	// одна копия объекта класса хранится внутри перехватчика
	КлассПерехватчикГК = 0;

	// чтобы убедиться, что после удаления документа перехват также отключается
	ДОк = 0;
	Док = СоздатьДок();
	
	ДОк.Провести();
	
	Сообщить("Журнал.стрЖурнал = <"+Журнал.стрЖурнал+">");
	//Сам.ПроверитьРавенство(Журнал.стрЖурнал, "КОП::Инициализация, КОП::ОбработкаПроведения, КОП::Деструктор");
	Сам.ПроверитьРавенство(Журнал.стрЖурнал, "КОП::Инициализация, КОП::Деструктор");

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