Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -249,4 +249,13 @@

КонецФункции

// Устанавливает признак содержания произвольных полей конструктора параметров
//
// Возвращаемое значение:
// Объект.КонструкторПараметров - ссылка на текущий элемент класса <КонструкторПараметров>
//
Функция ПроизвольныеПоля() Экспорт
Возврат РодительКонструктор.ПроизвольныеПоля();
КонецФункции

#КонецОбласти
27 changes: 24 additions & 3 deletions src/Классы/КонструкторПараметров.os
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,15 @@

Перем Лог;

Перем Настройки; // Структура
Перем Настройки; // Соответствие
Перем НаименованиеПараметров; // Строка
Перем СинонимыПараметров; // Массив строка
Перем ИндексПолей; // Соответствие ключа и типа элемента массива
Перем ИндексСинонимовПолей; // Соответствие синонимов полей и наименования полей
Перем ИндексПараметров; // Соответствие текущий настроек
Перем КонструкторИспользован; // Булево, признак использования объекта при чтении из соответсвтия
Перем ИнтерфейсКонструктора; // Класс объект ИнтерфейсОбъекта
Перем МожетСодержатьПроизвольныеПоля; // Булево, признак возможность не указывать поля

#Область Работа_с_конструктором_параметров

Expand Down Expand Up @@ -124,6 +125,16 @@

КонецФункции

// Устанавливает признак содержания произвольных полей конструктора параметров
//
// Возвращаемое значение:
// Объект.КонструкторПараметров - ссылка на текущий элемент класса <КонструкторПараметров>
//
Функция ПроизвольныеПоля() Экспорт
МожетСодержатьПроизвольныеПоля = Истина;
Возврат ЭтотОбъект;
КонецФункции

#КонецОбласти

#Область Работа_с_текущем_полем_настройки
Expand Down Expand Up @@ -334,6 +345,10 @@

ИсходящаяСтруктура = Новый Структура;

Если МожетСодержатьПроизвольныеПоля Тогда
Возврат ВСоответствие();
КонецЕсли;

Для каждого КлючЗначение Из Настройки Цикл

Значение = КлючЗначение.Значение;
Expand Down Expand Up @@ -578,8 +593,13 @@
ПолеПараметров = НайтиПолеВИндексеПолей(ИмяКлюча);

Если ПолеПараметров = Неопределено Тогда
Лог.Отладка("Не найдено поле <%1> в индексе", ИмяКлюча);

Если МожетСодержатьПроизвольныеПоля Тогда
Настройки.Вставить(ИмяКлюча, Значение);
КонецЕсли;

Продолжить;

КонецЕсли;

ЗначениеПараметра = ПреобразоватьЗначение(Значение, ПолеПараметров);
Expand Down Expand Up @@ -724,7 +744,7 @@
Процедура ПриСозданииОбъекта(ВходящийИндексПараметров, Знач НовоеНаименованиеПараметров)

НаименованиеПараметров = НовоеНаименованиеПараметров;
Настройки = Новый Структура;
Настройки = Новый Соответствие;
ИндексПолей = Новый Соответствие;
ИндексСинонимовПолей = Новый Соответствие;
ИндексПараметров = ВходящийИндексПараметров;
Expand All @@ -738,6 +758,7 @@
КонецЕсли;

КонструкторИспользован = Ложь;
МожетСодержатьПроизвольныеПоля = Ложь;

ИнтерфейсКонструктора = Новый ИнтерфейсОбъекта;
ИнтерфейсКонструктора.ПроцедураИнтерфейса("ОписаниеПараметров", 1);
Expand Down
41 changes: 40 additions & 1 deletion tests/КонструкторНастройки_test.os
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

ИменаТестов.Добавить("ТестДолжен_ПроверитьЧтениеПараметровИзКонструктора");
ИменаТестов.Добавить("ТестДолжен_ПроверитьУдалениеПоляИзКонструктора");
// ИменаТестов.Добавить("ТестДолжен_ПроверитьПоискИЧтениеФайлаПараметров");
ИменаТестов.Добавить("ТестДолжен_ПроверитьЧтениеПроизвольныхПолейКонструтора");
// ИменаТестов.Добавить("ТестДолжен_ПроверитьПарсингОпций");
// ИменаТестов.Добавить("ТестДолжен_ПроверитьПарсингМассивовОпций");

Expand Down Expand Up @@ -121,6 +121,45 @@

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

Процедура ТестДолжен_ПроверитьЧтениеПроизвольныхПолейКонструтора() Экспорт

СтруктураПараметров = Новый Соответствие();
СтруктураПараметров.Вставить("--custom-feild", "ПроизвольноеПоле");
СтруктураПараметров.Вставить("Поле", "ЗаданноеПоле");

ПарсерJSON = Новый ПарсерJSON;
ТекстФайлаПроверки = ПарсерJSON.ЗаписатьJSON(СтруктураПараметров);

ТестовыйФайл = ПодготовитьТестовыйФайл(ТекстФайлаПроверки);

ТестовоеИмя = "config";
ТестовоеРасширение = ".json";

ПарсерJSON = Новый ПарсерJSON;
ТекстФайлаПроверки = ПарсерJSON.ЗаписатьJSON(СтруктураПараметров);

ТестовыйФайл = ПодготовитьТестовыйФайл(ТекстФайлаПроверки);

ВременныйКаталог = ВременныеФайлы.СоздатьКаталог();
КопироватьФайл(ТестовыйФайл, ОбъединитьПути(ВременныйКаталог, ТестовоеИмя + ТестовоеРасширение));

МенеджерПараметров = Новый МенеджерПараметров();
Конструктор = МенеджерПараметров.КонструкторПараметров();
Конструктор.ПолеСтрока("Поле")
.ПроизвольныеПоля();

МенеджерПараметров.АвтоНастройка(ТестовоеИмя);
НастройкаПоискаФайла = МенеджерПараметров.НастройкаПоискаФайла();
НастройкаПоискаФайла.ДобавитьКаталогПоиска(ВременныйКаталог);
МенеджерПараметров.Прочитать();

ПроверитьРезультат(СтруктураПараметров["--custom-feild"], МенеджерПараметров.Параметр("--custom-feild"));
ПроверитьРезультат(СтруктураПараметров["Поле"], МенеджерПараметров.Параметр("Поле"));

ВременныеФайлы.УдалитьФайл(ВременныйКаталог);

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

Процедура ПроверитьРезультат(Значение1, Значение2)
Утверждения.ПроверитьРавенство(Значение1, Значение2, "Результат должен совпадать с ожиданиями.");
КонецПроцедуры
Expand Down