Перем 
		ОбъектТестирования,
		ИмяКласса,
		Журнал
		;
		
Функция Конт(Конт) Возврат Конт; КонецФункции
Функция Сам() Возврат Конт(Контекст); КонецФункции

Функция ОбъектТестирования()
	Возврат СоздатьОбъект(ИмяКласса);
КонецФункции
        
Процедура Конструктор()                                   
	ИмяКласса = "АктивИкс";
	ОбъектТестирования = ОбъектТестирования();
КонецПроцедуры // Конструктор

Функция ОткрытьФормуЭлементаУправления(Параметры = "")
	Возврат Сам().ОткрытьФорму("Отчет", Параметры, КаталогИБ()+ "ExtForms\ОбработкаАктивИкс.ert");
КонецФункции

Функция ЭлементУправления()
	Возврат СоздатьОбъект("КлассПотомокАктивИкс");
КонецФункции

Функция СоздатьЭУ(ОбъектАктивИкс)
	// возможно, нужна следующая тормозная проверка, хотя IE, как правило, стоит на любой машине!
	//Объект = СоздатьОбъект("InternetExplorer.Application");

	Возврат ОбъектАктивИкс.СоздатьЭУ("Shell.Explorer.2");
КонецФункции	// СоздатьЭУ

Функция СоздатьЭУ_Из_Класса(Конт, Журнал)
	Фабрика = СоздатьОбъект("ФабрикаОбъектов");
	Возврат Фабрика.Новый("КлассПотомокАктивИкс", "КонструкторУстановитьАтрибут", 
		Конт, "ИДОбъектаАктивИкс", Журнал);
КонецФункции

Процедура ЗакрытьФорму(КонтФормы)
	Система = СоздатьОбъект("Система");
	Система.ЗакрытьФорму(КонтФормы);
КонецПроцедуры	// 

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

Процедура Тест_СоздатьОбъектВФорме() Экспорт
	Сам = Сам();
	
	Конт = ОткрытьФормуЭлементаУправления("СоздатьОбъект");

	Журнал = Конт.Форма.Параметр; // TurboBL
	Сам.ПроверитьРавенство(ТипЗначенияСтр(Журнал), "ЖурналВызоваМетодов");
	
	СтрокаЖурнала = "Форма.УстановитьФорму, Форма::ФормаПриСоздании, Форма::ОбъектАктивИкс=АктивИкс";
	Сам.ПроверитьРавенство(Журнал.стрЖурнал, СтрокаЖурнала);

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

Процедура Тест_УстановитьАтрибут() Экспорт
	Сам = Сам();
	
	Конт = ОткрытьФормуЭлементаУправления("НеВыполнятьУстановитьФорму");

	Журнал = Конт.Форма.Параметр; // TurboBL
	Сам.ПроверитьРавенство(ТипЗначенияСтр(Журнал), "ЖурналВызоваМетодов");

	ОбъектАктивИкс = СоздатьОбъект("АктивИкс");
	ОбъектАктивИкс.УстановитьАтрибут(Конт.Форма, "ИДОбъектаАктивИкс");
	Журнал.ДобавитьЗапись("ОбъектАктивИкс::УстановитьАтрибут");
	
	СтрокаЖурнала = "ОбъектАктивИкс::УстановитьАтрибут";
//Сообщить("Журнал.стрЖурнал = <"+Журнал.стрЖурнал+">");	
	Сам.ПроверитьРавенство(Журнал.стрЖурнал, СтрокаЖурнала);

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

Процедура Тест_УстановитьАтрибут_Ошибка() Экспорт
	Сам = Сам();
	Конт = ОткрытьФормуЭлементаУправления("НеВыполнятьУстановитьФорму");

	ОбъектАктивИкс = СоздатьОбъект("АктивИкс");
	
	Сам.ПроверитьИсключениеДляЛюбогоМетода(ОбъектАктивИкс, "УстановитьАтрибут", Конт, "ИДОбъектаАктивИкс");
	Сам.ПроверитьИсключениеДляЛюбогоМетода(ОбъектАктивИкс, "УстановитьАтрибут", Конт.Форма, "НесуществующийИД");
КонецПроцедуры	// 

Процедура Тест_УстановитьАтрибутВФорме() Экспорт
	Сам = Сам();
	
	Конт = ОткрытьФормуЭлементаУправления("УстановитьАтрибут");

	Журнал = Конт.Форма.Параметр; // TurboBL
	Сам.ПроверитьРавенство(ТипЗначенияСтр(Журнал), "ЖурналВызоваМетодов");
	
	СтрокаЖурнала = "Форма.УстановитьФорму, Форма::ФормаПриСоздании, Форма::ОбъектАктивИкс::УстановитьАтрибут";
//Сообщить("Журнал.стрЖурнал = <"+Журнал.стрЖурнал+">");	
	Сам.ПроверитьРавенство(Журнал.стрЖурнал, СтрокаЖурнала);

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

Процедура Тест_УстановитьАтрибутВФормеПриОткрытии() Экспорт
	Сам = Сам();
	
	фИсключения = 0;
	Попытка                   
	
		Конт = ОткрытьФормуЭлементаУправления("УстановитьАтрибутВФормеПриОткрытии");
	Исключение
		фИсключения = 1;
	КонецПопытки;
	
	Сам.ПроверитьРавенство(фИсключения, 1);

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

Процедура Тест_УстановитьАтрибутВФормеНеНаТекстовыйРеквизит() Экспорт
	Сам = Сам();
	
	Конт = ОткрытьФормуЭлементаУправления("НеВыполнятьУстановитьФорму");

	Журнал = Конт.Форма.Параметр; // TurboBL
	Сам.ПроверитьРавенство(ТипЗначенияСтр(Журнал), "ЖурналВызоваМетодов");

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

	ОбъектАктивИкс = СоздатьОбъект("АктивИкс");
	ОбъектАктивИкс.УстановитьАтрибут(Конт.Форма, "ИДОбъектаАктивИкс");
	
	ОбъектЭУ = 	СоздатьЭУ(ОбъектАктивИкс);
	Сам.ПроверитьРавенство(ТипЗначенияСтр(ОбъектЭУ), "OLE.IWebBrowser2");
	
КонецПроцедуры
    
Процедура Тест_СоздатьЭУ_НеверныйProgID() Экспорт
	Сам = Сам();
	
	Конт = ОткрытьФормуЭлементаУправления("НеВыполнятьУстановитьФорму");

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

	Конт = ОткрытьФормуЭлементаУправления("НеВыполнятьУстановитьФорму");

	ОбъектАктивИкс = СоздатьОбъект("АктивИкс");

	Сам.ПроверитьИсключениеДляЛюбогоМетода(ОбъектАктивИкс, "СоздатьЭУ", "Shell.Explorer.2"); //ОбъектЭУ = ОбъектАктивИкс.СоздатьЭУ("НеверныйProgID");
	//ОбъектЭУ = 	СоздатьЭУ(ОбъектАктивИкс);
	//Сам.ПроверитьРавенство(ТипЗначенияСтр(ОбъектЭУ), "OLE.IWebBrowser2");
	
КонецПроцедуры
    
Процедура Тест_Объект() Экспорт
	Сам = Сам();
	
	Конт = ОткрытьФормуЭлементаУправления();

	ОбъектАктивИкс = СоздатьОбъект("АктивИкс");
	ОбъектАктивИкс.УстановитьАтрибут(Конт.Форма, "ИДОбъектаАктивИкс");
	                                                         
	СоздатьЭУ(ОбъектАктивИкс);
	
	Сам.ПроверитьРавенство(ТипЗначенияСтр(ОбъектАктивИкс.Объект), "OLE.IWebBrowser2");

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

Процедура Тест_УничтожитьПустой() Экспорт
	Сам = Сам();
	
	Конт = ОткрытьФормуЭлементаУправления("НеВыполнятьУстановитьФорму");

	ОбъектАктивИкс = СоздатьОбъект("АктивИкс");
	//ОбъектАктивИкс.УстановитьАтрибут(Конт.Форма, "ИДОбъектаАктивИкс");
	ОбъектАктивИкс.Уничтожить();
	
КонецПроцедуры

Процедура Тест_УничтожитьПослеУстановитьАтрибут() Экспорт
	Сам = Сам();
	
	Конт = ОткрытьФормуЭлементаУправления("НеВыполнятьУстановитьФорму");

	ОбъектАктивИкс = СоздатьОбъект("АктивИкс");
	ОбъектАктивИкс.УстановитьАтрибут(Конт.Форма, "ИДОбъектаАктивИкс");
	ОбъектАктивИкс.Уничтожить();
КонецПроцедуры

Процедура Тест_УничтожитьПослеСоздатьЭУ() Экспорт
	Сам = Сам();
	
	Конт = ОткрытьФормуЭлементаУправления("НеВыполнятьУстановитьФорму");

	ОбъектАктивИкс = СоздатьОбъект("АктивИкс");
	ОбъектАктивИкс.УстановитьАтрибут(Конт.Форма, "ИДОбъектаАктивИкс");
	
	ОбъектЭУ = 	СоздатьЭУ(ОбъектАктивИкс);

	ОбъектАктивИкс.Уничтожить();
	Сам.ПроверитьРавенство(ТипЗначенияСтр(ОбъектЭУ), "OLE.IWebBrowser2");
	Сам.ПроверитьРавенство(ТипЗначения(ОбъектАктивИкс.Объект), 0);
	
КонецПроцедуры

Процедура Тест_УничтожитьПослеСоздатьЭУ2() Экспорт
	Сам = Сам();
	
	Конт = ОткрытьФормуЭлементаУправления("НеВыполнятьУстановитьФорму");

	ОбъектАктивИкс = СоздатьОбъект("АктивИкс");
	ОбъектАктивИкс.УстановитьАтрибут(Конт.Форма, "ИДОбъектаАктивИкс");
	
	СоздатьЭУ(ОбъектАктивИкс);

	ОбъектАктивИкс.Уничтожить();
	Сам.ПроверитьРавенство(ТипЗначения(ОбъектАктивИкс.Объект), 0);
	
КонецПроцедуры

Процедура Тест_СоздатьЭУВФорме() Экспорт
	Сам = Сам();
	
	Конт = ОткрытьФормуЭлементаУправления("СоздатьЭУВФорме");

	Журнал = Конт.Форма.Параметр; // TurboBL
	Сам.ПроверитьРавенство(ТипЗначенияСтр(Журнал), "ЖурналВызоваМетодов");

	СтрокаЖурнала = "Форма.УстановитьФорму, Форма::ФормаПриСоздании, Форма::ОбъектАктивИкс=OLE.IWebBrowser2, Форма::ОбъектАктивИкс=";
	Сам.ПроверитьРавенство(Журнал.стрЖурнал, СтрокаЖурнала);
	
КонецПроцедуры

Процедура Тест_ЭУВыполнитьМетодОбъектаВФорме() Экспорт
	Сам = Сам();
	
	Конт = ОткрытьФормуЭлементаУправления("ЭУВыполнитьМетодОбъекта");

	Журнал = Конт.Форма.Параметр; // TurboBL
	Сам.ПроверитьРавенство(ТипЗначенияСтр(Журнал), "ЖурналВызоваМетодов");

	СтрокаЖурнала = "Форма.УстановитьФорму, Форма::ФормаПриСоздании, Форма::Событие::ИДОбъектаАктивИкс_BeforeNavigate2, URL=http://www.1cpp.ru/, Форма::ОбъектАктивИкс::Navigate";
	Сам.ПроверитьРавенство(Журнал.стрЖурнал, СтрокаЖурнала);
	
КонецПроцедуры

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

	Журнал = Конт.Форма.Параметр; // TurboBL
	Сам.ПроверитьРавенство(ТипЗначенияСтр(Журнал), "ЖурналВызоваМетодов");

	СтрокаЖурнала = "Форма.УстановитьФорму, Форма::ФормаПриСоздании, Форма::Событие::ИДДругой_BeforeNavigate2, Форма::ОбъектАктивИкс::Navigate";
	Сам.ПроверитьРавенство(Журнал.стрЖурнал, СтрокаЖурнала);
	
КонецПроцедуры

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

	Журнал = Конт.Форма.Параметр; // TurboBL
	Сам.ПроверитьРавенство(ТипЗначенияСтр(Журнал), "ЖурналВызоваМетодов");

	СтрокаЖурнала = "Форма.УстановитьФорму, Форма::ФормаПриСоздании, Форма::ОбъектАктивИкс::Navigate неудача";
	Сам.ПроверитьРавенство(Журнал.стрЖурнал, СтрокаЖурнала);
	
КонецПроцедуры
         
// -----------------------------------------  ------------------------------------
//
// тесты для КОП-наследника АктивИкс
//
// -----------------------------------------  ------------------------------------

Процедура Тест_КОПНаследник_СоздатьЭУ() Экспорт
	Сам = Сам();
	
	Конт = ОткрытьФормуЭлементаУправления("НеВыполнятьУстановитьФорму");

	ОбъектАктивИкс = СоздатьЭУ_Из_Класса(Конт, СоздатьОбъект("ЖурналВызоваМетодов"));
	
	ОбъектЭУ = 	СоздатьЭУ(ОбъектАктивИкс);
	Сам.ПроверитьРавенство(ТипЗначенияСтр(ОбъектЭУ), "OLE.IWebBrowser2");

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

Процедура Тест_КОПНаследник_Объект() Экспорт
	Сам = Сам();
	
	Конт = ОткрытьФормуЭлементаУправления("НеВыполнятьУстановитьФорму");

	ОбъектАктивИкс = СоздатьЭУ_Из_Класса(Конт, СоздатьОбъект("ЖурналВызоваМетодов"));
	
	СоздатьЭУ(ОбъектАктивИкс);
	Сам.ПроверитьРавенство(ТипЗначенияСтр(ОбъектАктивИкс.Объект), "OLE.IWebBrowser2");

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

Процедура Тест_КОПНаследник_Уничтожить() Экспорт
	Сам = Сам();
	
	Конт = ОткрытьФормуЭлементаУправления("НеВыполнятьУстановитьФорму");
    
	ОбъектАктивИкс = СоздатьЭУ_Из_Класса(Конт, СоздатьОбъект("ЖурналВызоваМетодов"));
	
	СоздатьЭУ(ОбъектАктивИкс);

	ОбъектАктивИкс.Уничтожить();
	Сам.ПроверитьРавенство(ТипЗначения(ОбъектАктивИкс.Объект), 0);

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

Процедура ИДОбъектаАктивИкс_BeforeNavigate2(объект,урл,флаги,фрейм,пост,заголовки,отмена) Экспорт
	Журнал.ДобавитьЗапись("Тест::Событие::ИДОбъектаАктивИкс_BeforeNavigate2");
	Журнал.ДобавитьЗапись("URL="+урл);

	отмена=-1; // не выводить в форму - так быстрее
КонецПроцедуры

Процедура Тест_КОПНаследник_СоздатьЭУ_БезФормаУстановитьФорму() Экспорт
	Сам = Сам();
	
	Конт = ОткрытьФормуЭлементаУправления("НеВыполнятьУстановитьФорму");

	Журнал = Конт.Форма.Параметр; // TurboBL
	Сам.ПроверитьРавенство(ТипЗначенияСтр(Журнал), "ЖурналВызоваМетодов");

	ОбъектАктивИкс = СоздатьЭУ_Из_Класса(Конт, Журнал);

	ОбъектЭУ = 	СоздатьЭУ(ОбъектАктивИкс);
	
	ОбъектАктивИкс.СоздатьЭУ("Shell.Explorer.2");

	ОбъектАктивИкс.Объект.Navigate("http://www.1cpp.ru");
	Журнал.ДобавитьЗапись("ОбъектАктивИкс::Navigate");
	
	Сам.ПроверитьРавенство(ТипЗначенияСтр(ОбъектЭУ), "OLE.IWebBrowser2");

	СтрокаЖурнала = "Форма::Событие::ИДОбъектаАктивИкс_BeforeNavigate2, URL=http://www.1cpp.ru/, ОбъектАктивИкс::Navigate";
	Сам.ПроверитьРавенство(Журнал.стрЖурнал, СтрокаЖурнала);

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

Процедура Тест_КОПНаследник_ФормаУстановитьФорму_СоздатьЭУ() Экспорт
	Сам = Сам();
	
	Конт = ОткрытьФормуЭлементаУправления("НеВыполнятьУстановитьФорму");

	Журнал = Конт.Форма.Параметр; // TurboBL
	Сам.ПроверитьРавенство(ТипЗначенияСтр(Журнал), "ЖурналВызоваМетодов");

	оФорма = СоздатьОбъект("Форма");
	оФорма.УстановитьФорму(Конт.Форма);
	
	ОбъектАктивИкс = СоздатьОбъект("КлассПотомокАктивИкс");
	ОбъектАктивИкс.Инит(Журнал);
	
	оФорма.СоздатьЭлементУправления(ОбъектАктивИкс, "ИДОбъектаАктивИкс");

	ОбъектЭУ = 	СоздатьЭУ(ОбъектАктивИкс);
	Сам.ПроверитьРавенство(ТипЗначенияСтр(ОбъектАктивИкс.Объект), "OLE.IWebBrowser2");
	
	ОбъектАктивИкс.Объект.Navigate("http://www.1cpp.ru");
	Журнал.ДобавитьЗапись("ОбъектАктивИкс::Navigate");
	
	Сам.ПроверитьРавенство(ТипЗначенияСтр(ОбъектЭУ), "OLE.IWebBrowser2");

	//СтрокаЖурнала = "Форма.УстановитьФорму, Форма::ФормаПриСоздании, КОП::Событие::ИДОбъектаАктивИкс_BeforeNavigate2, URL=http://www.1cpp.ru/, Форма::ОбъектАктивИкс::Navigate";
	СтрокаЖурнала = "КОП::Событие::BeforeNavigate2, URL=http://www.1cpp.ru/, ОбъектАктивИкс::Navigate";
	Сам.ПроверитьРавенство(Журнал.стрЖурнал, СтрокаЖурнала);

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

Процедура Тест_КОПНаследник_СоздатьЭУ_СобытиеСНевернымКоличествомПараметров() Экспорт
	Сам = Сам();
	
	Сам.ПропуститьТест(, "Нужно найти другое событие, а не занятое BeforeNavigate2, и на нем попробовать");
	
	Конт = ОткрытьФормуЭлементаУправления("НеВыполнятьУстановитьФорму");

	Журнал = Конт.Форма.Параметр; // TurboBL
	Сам.ПроверитьРавенство(ТипЗначенияСтр(Журнал), "ЖурналВызоваМетодов");

	оФорма = СоздатьОбъект("Форма");
	оФорма.УстановитьФорму(Конт.Форма);
	
	ОбъектАктивИкс = СоздатьОбъект("КлассПотомокАктивИкс");
	ОбъектАктивИкс.Инит(Журнал);
	
	оФорма.СоздатьЭлементУправления(ОбъектАктивИкс, "ИДДругой");

	ОбъектЭУ = 	СоздатьЭУ(ОбъектАктивИкс);
	Сам.ПроверитьРавенство(ТипЗначенияСтр(ОбъектАктивИкс.Объект), "OLE.IWebBrowser2");
	
	ОбъектАктивИкс.Объект.Navigate("http://www.1cpp.ru");
	Журнал.ДобавитьЗапись("ОбъектАктивИкс::Navigate");
	
	Сам.ПроверитьРавенство(ТипЗначенияСтр(ОбъектЭУ), "OLE.IWebBrowser2");

	СтрокаЖурнала = "КОП::Событие::BeforeNavigate2, ОбъектАктивИкс::Navigate";
	Сам.ПроверитьРавенство(Журнал.стрЖурнал, СтрокаЖурнала);

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

// потому что могут передать сохранненую где-то ссылку на уже закрытую физически форму
//
Процедура Тест_УстановитьАтрибутНаЗакрытойФорме() Экспорт
	Тест = СоздатьОбъект("СистемаТесты");
	Тест.ТестЗакрытияФормы_ПередатьЗакрытуюФормуВМетодКлассаАктивИкс();
КонецПроцедуры

Процедура Тест_МетодАктивИкс_ПриЗакрытойФорме() Экспорт
	
	Сам = Сам();
	
	Конт = ОткрытьФормуЭлементаУправления("ВернутьЭУИзФормы");

	ОбъектАктивИкс = Конт.Форма.Параметр; // TurboBL
	Сам.ПроверитьРавенство(ТипЗначенияСтр(ОбъектАктивИкс), "АктивИкс");

	ОбъектЭУ = ОбъектАктивИкс.СоздатьЭУ("Shell.Explorer.2");

	лОлеОбъект = ОбъектАктивИкс.Объект;
	//ОбъектЭУ = лОлеОбъект;
	
	Сам.ПроверитьРавенство(ТипЗначенияСтр(ОбъектАктивИкс.Объект), "OLE.IWebBrowser2");
	Сам.ПроверитьРавенство(ТипЗначенияСтр(лОлеОбъект), "OLE.IWebBrowser2");
	Сам.ПроверитьРавенство(ТипЗначенияСтр(ОбъектЭУ), "OLE.IWebBrowser2");
              
	Система=СоздатьОбъект("Система");
	Система.ЗакрытьФорму(Конт);
	Сам.ПроверитьРавенство(ТипЗначения(Конт), 0);

	Сам.ПроверитьРавенство(ТипЗначенияСтр(ОбъектАктивИкс.Объект), "");
	Сам.ПроверитьРавенство(ТипЗначенияСтр(лОлеОбъект), "OLE.IWebBrowser2");
	Сам.ПроверитьРавенство(ТипЗначенияСтр(ОбъектЭУ), "OLE.IWebBrowser2");
	
	Сам.ПроверитьИсключениеДляЛюбогоМетода(ОбъектЭУ, "Navigate", "http://www.1cpp.ru");	//ОбъектЭУ.Navigate("http://www.1cpp.ru");
	Сам.ПроверитьИсключениеДляЛюбогоМетода(лОлеОбъект, "Navigate", "http://www.1cpp.ru");	//лОлеОбъект.Navigate("http://www.1cpp.ru");

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