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

Процедура ТестКоманднаяСтрока() Экспорт
// ENTERPRISE /M /D"G:\1C++\Testing 1C++\" /N /U"G:\1C++\Testing 1C++\" /T"g:\" /Lrus  /Обработка:ЗагрузчикЮнитТестов /Команда:Тестировать /Close 

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

Процедура ТестКоманднаяСтрока1() Экспорт

	Сам = Сам();
	ОбАнализаКоманднойСтроки = СоздатьОбъект("Общие.АнализКоманднойСтроки1С");
	Параметр = ОбАнализаКоманднойСтроки.ПолучитьПараметр( "/D" );
	
	Сам().ПроверитьНеравенство(Параметр, "");
КонецПроцедуры

Процедура ТестКоманднаяСтрокаКоличествоПараметров() Экспорт

	Сам = Сам();
	ОбАнализаКоманднойСтроки = СоздатьОбъект("Общие.АнализКоманднойСтроки1С");
	КолПараметров = ОбАнализаКоманднойСтроки.ПолучитьКоличествоПараметров();
	Сам.ПроверитьБольшеИлиРавно(КолПараметров, 1);
КонецПроцедуры

Процедура ТестПутьПриложения1С() Экспорт
// C:\Program Files\1Cv77\Bin25\1CV7.exe

	Сам = Сам();
	Система = СоздатьОбъект("Система");
	ПутьПриложения1С = Система.ПутьПриложения1С();
	
	Сам.ПроверитьНеравенство(ПутьПриложения1С, "");
	
	Сам.ПроверитьБольше(Найти(Врег(ПутьПриложения1С), ".EXE"), 0);
	Сам.ПроверитьБольше(Найти(Врег(ПутьПриложения1С), "1CV"), 0);
КонецПроцедуры

Функция ОткрытьФормуСПроверкой(РежимОткрытия)
	Сам = Сам();
	
	спПараметры=СоздатьОбъект("СписокЗначений");
	Конт=спПараметры;
	фФормаОткрыта=ОткрытьФорму("Отчет", Конт, КаталогИБ()+"ExtForms\ОтчетНовый1.ert");
	
	Сам.ПроверитьРавенство(фФормаОткрыта, 1);
	Сам.ПроверитьРавенство(ТипЗначенияСтр(Конт), "ГрупповойКонтекст");
	Сам.ПроверитьРавенство(спПараметры.Получить("РежимОткрытия"), РежимОткрытия);
	Возврат Конт;
КонецФункции

Процедура ТестЗакрытияФормы() Экспорт
	Сам = Сам();
	
	Конт1=ОткрытьФормуСПроверкой("Первое открытие");
	Сам.ПроверитьРавенство(Конт1.ПолеВвода, "");
	
	Конт1.ПолеВвода="Строковое значение";
	Конт2=ОткрытьФормуСПроверкой("Повторное открытие");
	Сам.ПроверитьРавенство(Конт1, Конт2);
	Сам.ПроверитьРавенство(Конт2.ПолеВвода, "Строковое значение");

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

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

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

Процедура ТестЗакрытияФормы_ПроверкаКонтекстФорма_СохраняюВПеременной() Экспорт
	//Перем лФорма, лАтрибут;
	
	Сам = Сам();
	
	Конт = ОткрытьФормуСПроверкой("Первое открытие");
	
	// проверю форму и реквизит контекста после удаления, 
	// 1С раньше падала при использовании после закрытия формы
	лФорма = Конт.Форма;
	Сам.ПроверитьРавенство(ТипЗначения(лФорма), 100);
	Сам.ПроверитьРавенство(ТипЗначенияСтр(лФорма.Заголовок()), "Строка");

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

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

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

	Сам.ПроверитьРавенство(ТипЗначения(лФорма), 0);

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

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

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

// вызывается также в тестах класса "АктивИкс", 
// потому что могут передать сохранненую где-то ссылку на уже закрытую физически форму
//
Процедура ТестЗакрытияФормы_ПередатьЗакрытуюФормуВМетодКлассаАктивИкс() Экспорт
	
	Сам = Сам();
	
	Конт = Сам().ОткрытьФорму("Отчет", , КаталогИБ()+ "ExtForms\ОбработкаАктивИкс.ert");
	
	// проверю форму и реквизит контекста после удаления, 
	// 1С раньше падала при использовании после закрытия формы
	лФорма = Конт.Форма;
	Сам.ПроверитьРавенство(ТипЗначения(лФорма), 100);
	Сам.ПроверитьРавенство(ТипЗначенияСтр(лФорма.Заголовок()), "Строка");
              
	Система=СоздатьОбъект("Система");
	Система.ЗакрытьФорму(Конт);
	Сам.ПроверитьРавенство(ТипЗначения(Конт), 0);

	Сам.ПроверитьРавенство(ТипЗначения(лФорма), 0);

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

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

Процедура Тест_Уснуть() Экспорт
	Время=_GetPerformanceCounter();
	
	Система=СоздатьОбъект("Система");
	Система.Уснуть(210);
		
	Сам().ПроверитьБольшеИлиРавно(_GetPerformanceCounter()-Время, 200);
КонецПроцедуры
