// тесты проверки работы класса "Фабрика" в плане ООП

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

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

Процедура Тест_СоздатьФабрику() Экспорт
	Сам = Сам();

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

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

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

Процедура Тест_Новый_СтандартныйКонструктор() Экспорт
	СоздатьОбъект_КонструкторБезПараметров("Конструктор");
КонецПроцедуры

Процедура Тест_Новый_КонструкторБезПараметров() Экспорт
	СоздатьОбъект_КонструкторБезПараметров("КонструкторБезПараметров");
КонецПроцедуры

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

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

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

Процедура Тест_КонструкторCКоличествомПараметров1_НеверныйВызовБольше() Экспорт
	Сам = Сам();
	ИмяКласса = ИмяКлассаСКонструкторами();      
	ИмяКонструктора = "КонструкторCКоличествомПараметров1";
	
	Фабрика = Фабрика();
	Сам.ПропуститьТест(1, "1С падает при запуске с количеством аргументов, больше заданного");
	                                               
	// сейчас должно быть исключение, но вместо этого 1С падает
	об = Фабрика.Новый(ИмяКласса, ИмяКонструктора, 1, 2);
КонецПроцедуры

Процедура Тест_КонструкторCКоличествомПараметров1() Экспорт
	Сам = Сам();
	ИмяКласса = ИмяКлассаСКонструкторами();      
	ИмяКонструктора = "КонструкторCКоличествомПараметров1";
	
	Фабрика = Фабрика();
	об = Фабрика.Новый(ИмяКласса, ИмяКонструктора, 1);
	
	Сам.ПроверитьРавенство(ТипЗначенияСтр(Об), ИмяКласса);
	
	Журнал = ОБ.Журнал;
	ОБ = 0;
	
	Сам.ПроверитьРавенство(Журнал.стрЖурнал, "КонструкторCКоличествомПараметров1(1), Деструктор");
КонецПроцедуры

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

Процедура Тест_КонструкторCКоличествомПараметров2_НеверныйВызовБольше() Экспорт
	Сам = Сам();
	ИмяКласса = ИмяКлассаСКонструкторами();      
	ИмяКонструктора = "КонструкторCКоличествомПараметров2";
	
	Фабрика = Фабрика();
	Сам.ПропуститьТест(1, "1С падает при запуске с количеством аргументов, больше заданного");
	                                               
	// сейчас должно быть исключение, но вместо этого 1С падает
	об = Фабрика.Новый(ИмяКласса, ИмяКонструктора, 1, 2, 3);
КонецПроцедуры

Процедура Тест_КонструкторCКоличествомПараметров2() Экспорт
	Сам = Сам();
	ИмяКласса = ИмяКлассаСКонструкторами();      
	ИмяКонструктора = "КонструкторCКоличествомПараметров2";
	
	Фабрика = Фабрика();
	об = Фабрика.Новый(ИмяКласса, ИмяКонструктора, 1, 2);
	
	Сам.ПроверитьРавенство(ТипЗначенияСтр(Об), ИмяКласса);
	
	Журнал = ОБ.Журнал;
	ОБ = 0;
	
	Сам.ПроверитьРавенство(Журнал.стрЖурнал, "КонструкторCКоличествомПараметров2(1,2), Деструктор");
КонецПроцедуры

Процедура Тест_КонструкторCКоличествомПараметров5() Экспорт
	Сам = Сам();
	ИмяКласса = ИмяКлассаСКонструкторами();      
	ИмяКонструктора = "КонструкторCКоличествомПараметров5";
	
	Фабрика = Фабрика();
	об = Фабрика.Новый(ИмяКласса, ИмяКонструктора, 1, 2,3,4,5);
	
	Сам.ПроверитьРавенство(ТипЗначенияСтр(Об), ИмяКласса);
	
	Журнал = ОБ.Журнал;
	ОБ = 0;
	
	Сам.ПроверитьРавенство(Журнал.стрЖурнал, "КонструкторCКоличествомПараметров5(1,2,3,4,5), Деструктор");
КонецПроцедуры

Процедура Тест_КонструкторСЭкспортом() Экспорт
	Сам = Сам();
	ИмяКласса = ИмяКлассаСКонструкторами();      
	ИмяКонструктора = "КонструкторСЭкспортом";
	
	Фабрика = Фабрика();

	Сам.ПропуститьТест(1, "1С падает при выбросе исключения из класса фабрики");
	                                               
	// сейчас должно быть исключение, но вместо этого 1С падает
	об = Фабрика.Новый(ИмяКласса, ИмяКонструктора);
КонецПроцедуры

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

Процедура Тест_КонструкторИндексированнойТаблицы() Экспорт
	Сам = Сам();
	ИмяКласса = "ИндексированнаяТаблица";
	ИмяКонструктора = "Загрузить";
	                                               
	ДругаяТаб = СоздатьОбъект("ТаблицаЗначений");
	ДругаяТаб.НоваяСтрока();
	
	Фабрика = Фабрика();
	Таб = Фабрика.Новый(ИмяКласса, ИмяКонструктора, ДругаяТаб); // : ИндексированнаяТаблица
	
	Сам.ПроверитьРавенство(ТипЗначенияСтр(Таб), ИмяКласса);
	Сам.ПроверитьРавенство(Таб.КоличествоСтрок(), 1);
КонецПроцедуры
                
Процедура Тест_ФабрикаШрифт() Экспорт
	Сам = Сам();
	Фабрика = Фабрика();
	ИмяКласса = "Шрифт";
	
	Шрифт = Фабрика.Шрифт("Arial", 10, 1); // жирный
	
	Сам.ПроверитьРавенство(ТипЗначенияСтр(Шрифт), ИмяКласса);
	Сам.ПроверитьРавенство(Шрифт.Размер, 10);

КонецПроцедуры	// Тест_Фабрика
