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

Функция МетаИнфо() Возврат СоздатьОбъект("MetaInfoClasses"); КонецФункции // : MetaInfoClasses

Процедура ТестПолучитьИменаБазовыхКлассов1() Экспорт
	//СписокБазовыхКлассов =  // : СписокЗначений
	СписокБазовыхКлассов = МетаИнфо().ПолучитьИменаБазовыхКлассов("ООПТесты");
	Сам().ПроверитьРавенство(СписокБазовыхКлассов.РазмерСписка(), 1);
	
	Сам().ПроверитьРавенство(СписокБазовыхКлассов.ПолучитьЗначение(1), "ТестовыйСлучайФормы");  

КонецПроцедуры	// ТестПолучитьИменаБазовыхКлассов

Процедура ТестПолучитьИменаБазовыхКлассов() Экспорт
	//СписокБазовыхКлассов =  // : СписокЗначений
	СписокБазовыхКлассов = МетаИнфо().ПолучитьИменаБазовыхКлассов("ТестовыйСлучайФормы");
	Сам().ПроверитьРавенство(СписокБазовыхКлассов.РазмерСписка(), 2);
	
	Сам().ПроверитьРавенство(СписокБазовыхКлассов.ПолучитьЗначение(1), "ТестовыйСлучайСДанными");  
	Сам().ПроверитьРавенство(СписокБазовыхКлассов.ПолучитьЗначение(2), "ДелегатФормы");  

КонецПроцедуры	// ТестПолучитьИменаБазовыхКлассов

Процедура ТестЯвляетсяОбъектом() Экспорт
	МетаИнфо = МетаИнфо();
	//Объект = СоздатьОбъект("ООПТесты"); // множественное наследование
	
	//Сам().ПроверитьИсключение(МетаИнфо, "ЯвляетсяОбъектом", "ООПТесты", ""); //Сам().ПроверитьРавенство(МетаИнфо.ЯвляетсяОбъектом("ООПТесты", ""),0);  
	Сам().ПроверитьРавенство(МетаИнфо.ЯвляетсяОбъектом("ООПТесты", ""),0);
	Сам().ПроверитьРавенство(МетаИнфо.ЯвляетсяОбъектом("", "ООПТесты"),0);

	Сам().ПроверитьРавенство(МетаИнфо.ЯвляетсяОбъектом("ООПТесты", "ООПТесты"),1);

	Сам().ПроверитьРавенство(МетаИнфо.ЯвляетсяОбъектом("ООПТесты", "ооптЕСТЫ"),1);
	Сам().ПроверитьРавенство(МетаИнфо.ЯвляетсяОбъектом("ооптЕСТЫ", "ООПТесты"),1);

	Сам().ПроверитьРавенство(МетаИнфо.ЯвляетсяОбъектом("ООПТесты", "ТестовыйСлучайСДанными"),1);
	Сам().ПроверитьРавенство(МетаИнфо.ЯвляетсяОбъектом("ООПТесты", "ТестовыйСлучай"),1);
	Сам().ПроверитьРавенство(МетаИнфо.ЯвляетсяОбъектом("ООПТесты", "тЕСТОВЫЙсЛУЧАЙ"),1);

	Сам().ПроверитьРавенство(МетаИнфо.ЯвляетсяОбъектом("ООПТесты", "ВыполняемыйМодуль"),1);
	
	Сам().ПроверитьРавенство(МетаИнфо.ЯвляетсяОбъектом("ООПТесты", "ТестовыйСлучай1"),0);
КонецПроцедуры	// ТестЯвляетсяОбъектом


Процедура ТестЯвляетсяОбъектом2() Экспорт
	МетаИнфо = МетаИнфо();
	Объект = СоздатьОбъект("ТестовыйСлучайФормы"); // множественное наследование
	
	Сам().ПроверитьРавенство(МетаИнфо.ЯвляетсяОбъектом("ТестовыйСлучайФормы", "ТестовыйСлучай"),1);  

	Сам().ПроверитьРавенство(МетаИнфо.ЯвляетсяОбъектом("ТестовыйСлучайФормы", "ДелегатФормы"),1);

	Сам().ПроверитьРавенство(МетаИнфо.ЯвляетсяОбъектом("ТестовыйСлучайФормы", "ВыполняемыйМодуль"),1);
	
	Сам().ПроверитьРавенство(МетаИнфо.ЯвляетсяОбъектом("ТестовыйСлучайФормы", "ТестовыйСлучай1"),0);
КонецПроцедуры	// ТестЯвляетсяОбъектом
                     
//// баг 2215 http://cvs.alterplast.ru/bugs/show_bug.cgi?id=2215
//Процедура Тест_ПолучитьВерсию() Экспорт
//	Версия = МетаИнфо().ПолучитьВерсию();
//	
//	Сам().ПроверитьРавенство(СтрДлина(Версия), 4);
//	Сам().ПроверитьБольшеИлиРавно(Версия, 2010);
//КонецПроцедуры	// Тест_ПолучитьВерсию
//
//// баг 2215 http://cvs.alterplast.ru/bugs/show_bug.cgi?id=2215
//Процедура Тест_ПолучитьВерсию2() Экспорт
//	Строка1 = "";
//	Версия = МетаИнфо().ПолучитьВерсию(Строка1);
//	
//	Сам().ПроверитьРавенство(СтрДлина(Версия), 4);
//	Сам().ПроверитьБольшеИлиРавно(Версия, 2010);
//КонецПроцедуры	// Тест_ПолучитьВерсию

Процедура Тест_ПолучитьВерсиюФайла() Экспорт
	СтрВерсия = МетаИнфо().ПолучитьВерсиюФайла(, "FileVersion");
	Сам().ПроверитьНеравенство(СтрДлина(СтрВерсия), 0);

	СтрТолькоВерсия = СтрВерсия;
	СтрТолькоВерсия = СтрЗаменить(СтрВерсия, " ", "");
	нДлинаВерсии = СтрДлина("2, 0, 2, 0");
	СтрТолькоВерсия = Лев(СтрТолькоВерсия, нДлинаВерсии);
	Сам().ПроверитьНеравенство(Найти(СтрТолькоВерсия, ","), 0);
	//Сам().ПроверитьНеравенство(Найти(СтрТолькоВерсия, "."), 0);

	Версия = Число(СтрЗаменить(СтрЗаменить(СтрТолькоВерсия, ".", ""), ",", ""));
	
	Сам().ПроверитьРавенство(СтрДлина(Версия), 4);
	Сам().ПроверитьБольшеИлиРавно(Версия, 2020);
КонецПроцедуры	// Тест_ПолучитьВерсию

Процедура Тест_ПолучитьВерсиюФайла2() Экспорт
	СтрВерсия = МетаИнфо().ПолучитьВерсиюФайла();
	Сам().ПроверитьНеравенство(СтрДлина(СтрВерсия), 0);

	СтрТолькоВерсия = СтрВерсия;
	СтрТолькоВерсия = СтрЗаменить(СтрВерсия, " ", "");
	нДлинаВерсии = СтрДлина("2, 0, 2, 0");
	СтрТолькоВерсия = Лев(СтрТолькоВерсия, нДлинаВерсии);
	Сам().ПроверитьНеравенство(Найти(СтрТолькоВерсия, ","), 0);
	//Сам().ПроверитьНеравенство(Найти(СтрТолькоВерсия, "."), 0);

	Версия = Число(СтрЗаменить(СтрЗаменить(СтрТолькоВерсия, ".", ""), ",", ""));
	
	Сам().ПроверитьРавенство(СтрДлина(Версия), 4);
	Сам().ПроверитьБольшеИлиРавно(Версия, 2010);
КонецПроцедуры	// Тест_ПолучитьВерсию

Процедура Тест_ПолучитьВерсиюФайла_BkEnd_dll() Экспорт
	СтрВерсия = МетаИнфо().ПолучитьВерсиюФайла(КаталогПрограммы()+"BkEnd.dll");
	Сам().ПроверитьНеравенство(СтрДлина(СтрВерсия), 0);

	нДлинаВерсии = СтрДлина("7.70.0");
	Сам().ПроверитьРавенство(Найти(СтрВерсия, "7.70.0"), 1);
	СтрРелиз1С = Сред(СтрВерсия, нДлинаВерсии+1);

	Релиз1С = Число(СтрРелиз1С);
	
	Сам().ПроверитьРавенство(СтрДлина(Релиз1С), 2);
	Сам().ПроверитьБольшеИлиРавно(Релиз1С, 17);
КонецПроцедуры	// Тест_ПолучитьВерсию

Процедура Тест_ПолучитьВерсиюФайла_НеверноеПоле() Экспорт
	СтрВерсия = МетаИнфо().ПолучитьВерсиюФайла(КаталогПрограммы()+"BkEnd.dll", "НеизвестноеПоле");
	Сам().ПроверитьРавенство(СтрДлина(СтрВерсия), 0);
КонецПроцедуры	// Тест_ПолучитьВерсию

Процедура Тест_ПолучитьВерсиюФайла_НеверныйФайл() Экспорт
	Сам().ПроверитьИсключение(МетаИнфо(), "ПолучитьВерсиюФайла", "___НесуществующийФайл____598", "НеизвестноеПоле"); //СтрВерсия = МетаИнфо().ПолучитьВерсиюФайла("___НесуществующийФайл____598", "НеизвестноеПоле");
КонецПроцедуры	// Тест_ПолучитьВерсию

Процедура Тест_ПолучитьВерсиюФайла_PrivateBuild() Экспорт
	СтрВерсия = МетаИнфо().ПолучитьВерсиюФайла(, "PrivateBuild");
	Сам().ПроверитьРавенство(СтрДлина(СтрВерсия), 0);

КонецПроцедуры	// Тест_ПолучитьВерсию

// на ночной сборке поле "SpecialBuild" не пусто !!
//Процедура Тест_ПолучитьВерсиюФайла_SpecialBuild() Экспорт
//	СтрВерсия = МетаИнфо().ПолучитьВерсиюФайла(, "SpecialBuild");
//	Сам().ПроверитьРавенство(СтрДлина(СтрВерсия), 0);
//
//КонецПроцедуры	// Тест_ПолучитьВерсию

Функция ПолучитьИмяНовогоКласса()
	Математика = СоздатьОбъект("Математика");
	СлучайноеЧисло = Математика.RAND();
	
	// использую случайное имя класса, чтобы можно было добавлять, 
	// 	иначе будет ошибка повторного определения класса
	ИмяНовогоКласса = "НовыйКласс_"+Строка(СлучайноеЧисло);
	Возврат ИмяНовогоКласса;
КонецФункции

Функция ПолучитьИмяФайлаКласса(НаименованиеНовогоКласса, КаталогФайла = "")
	Если КаталогФайла = "" Тогда
		ИмяФайлаКласса = СтрЗаменить(Сам().ПолучитьПуть(), "MetaInfoClassesТесты.txt", НаименованиеНовогоКласса+".txt");
	Иначе                                                                  
		Если Прав(КаталогФайла, 1) = "\" Тогда
			ИмяФайлаКласса = КаталогФайла + НаименованиеНовогоКласса+".txt";
		Иначе
			ИмяФайлаКласса = КаталогФайла + "\"+НаименованиеНовогоКласса+".txt";
		КонецЕсли;
	КонецЕсли;
//Сообщить("ИмяФайлаКласса = <"+ИмяФайлаКласса+">");

	Возврат ИмяФайлаКласса;
КонецФункции

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

	Возврат ИмяФайлаКласса;
КонецФункции

Функция ПолучитьОписаниеНовогоКласса(НаименованиеНовогоКласса)
	Возврат "class "+НаименованиеНовогоКласса+" = "+НаименованиеНовогоКласса+".txt
		|{
		|}";
КонецФункции

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

	Возврат ИмяФайлаОписанияКласса;
КонецФункции

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

	ОбПроверкаОбразов = СоздатьОбъект("ВыполняемыйМодуль_ОбразыКлассов");
	
	табМетодовИсходная = ОбПроверкаОбразов.ТаблицаМетодов_Создать(); 
	//ОбПроверкаОбразов.ТаблицаМетодов_ДобавитьСтроку(табМетодовИсходная, 0, "", "Функция_"+НаименованиеМетодов, 1, 0);
	//ОбПроверкаОбразов.ТаблицаМетодов_ДобавитьСтроку(табМетодовИсходная, 1, "", "Процедура_"+НаименованиеМетодов, 0, 0);
	ОбПроверкаОбразов.ТаблицаМетодов_ДобавитьСтроку(табМетодовИсходная, 0, "Функция_"+НаименованиеМетодов, "", 1, 0);
	ОбПроверкаОбразов.ТаблицаМетодов_ДобавитьСтроку(табМетодовИсходная, 1, "Процедура_"+НаименованиеМетодов, "", 0, 0);
	
	ТабСвойствИсходная = ОбПроверкаОбразов.ТаблицаСвойств_Создать();          
	
	// сначала список реквизитов, затем список переменных модуля
	ОбПроверкаОбразов.ТаблицаСвойств_ДобавитьСтроку(ТабСвойствИсходная, 0, "Перем_"+НаименованиеМетодов, "Перем_"+НаименованиеМетодов, 1, 1);
	
	ОбПроверкаОбразов.СверитьМетодыИСвойстваОбъектаБезБазовыхМетодовИСвойств(Контекст, Объект, табМетодовИсходная, ТабСвойствИсходная);
КонецПроцедуры	// ПроверитьКласс

Процедура Тест_ЗагрузитьОписаниеКлассов() Экспорт
	МетаИнфо = МетаИнфо();        
	ИмяНовогоКласса = ПолучитьИмяНовогоКласса();

	НаименованиеМетодов = "1";
	
	СоздатьФайлНовогоКласса(ИмяНовогоКласса, НаименованиеМетодов);
	ИмяФайлаОписанияКласса = СоздатьОписаниеНовогоКласса(ИмяНовогоКласса);
	
	МетаИнфо.ЗагрузитьОписаниеКлассов(ИмяФайлаОписанияКласса);
    
	ПроверитьКласс(ИмяНовогоКласса, НаименованиеМетодов);
КонецПроцедуры

Процедура Тест_ЗагрузитьОписаниеКлассов_КлассУжеСуществует() Экспорт
	МетаИнфо = МетаИнфо();        

	ИмяНовогоКласса = "ТестовыйСлучай";

	ИмяФайлаОписанияКласса = СоздатьОписаниеНовогоКласса(ИмяНовогоКласса);
	
	Сам().ПроверитьИсключение(МетаИнфо, "ЗагрузитьОписаниеКлассов", ИмяФайлаОписанияКласса);

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

Процедура Тест_ЗагрузитьОписаниеКлассов_ИзСтроки() Экспорт
	МетаИнфо = МетаИнфо();        
	ИмяНовогоКласса = ПолучитьИмяНовогоКласса();

	НаименованиеМетодов = "1";
	лКаталогКласса = КаталогИБ();
	
	СоздатьФайлНовогоКласса(ИмяНовогоКласса, НаименованиеМетодов, лКаталогКласса);
	СтрокаОписанияКласса = ПолучитьОписаниеНовогоКласса(ИмяНовогоКласса);
	
	МетаИнфо.ЗагрузитьОписаниеКлассов(СтрокаОписанияКласса);
	
	ПроверитьКласс(ИмяНовогоКласса, НаименованиеМетодов);
КонецПроцедуры

Процедура Тест_ЗагрузитьОписаниеКлассов_ИзСтроки_ПроизвольныйПуть() Экспорт
	МетаИнфо = МетаИнфо();        
	ИмяНовогоКласса = ПолучитьИмяНовогоКласса();

	НаименованиеМетодов = "1";
	лКаталогКласса = КаталогИБ()+"UnitTests\";
	
	СоздатьФайлНовогоКласса(ИмяНовогоКласса, НаименованиеМетодов, лКаталогКласса);
	СтрокаОписанияКласса = ПолучитьОписаниеНовогоКласса(ИмяНовогоКласса);
	
	МетаИнфо.ЗагрузитьОписаниеКлассов(СтрокаОписанияКласса, лКаталогКласса);
	
	ПроверитьКласс(ИмяНовогоКласса, НаименованиеМетодов);
КонецПроцедуры

Процедура Тест_ЗагрузитьОписаниеКлассов_ИзСтроки_ПроизвольныйПуть_БезСлешаВКонце() Экспорт
	МетаИнфо = МетаИнфо();        
	ИмяНовогоКласса = ПолучитьИмяНовогоКласса();

	НаименованиеМетодов = "1";
	лКаталогКласса = КаталогИБ()+"UnitTests";
	
	СоздатьФайлНовогоКласса(ИмяНовогоКласса, НаименованиеМетодов, лКаталогКласса);
	СтрокаОписанияКласса = ПолучитьОписаниеНовогоКласса(ИмяНовогоКласса);
	
	МетаИнфо.ЗагрузитьОписаниеКлассов(СтрокаОписанияКласса, лКаталогКласса);
	
	ПроверитьКласс(ИмяНовогоКласса, НаименованиеМетодов);
КонецПроцедуры
