diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\320\273\320\265\320\232\320\276\320\275\321\201\321\202\321\200\321\203\320\272\321\202\320\276\321\200\320\260\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\320\273\320\265\320\232\320\276\320\275\321\201\321\202\321\200\321\203\320\272\321\202\320\276\321\200\320\260\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" index 7504943..1ef1fbe 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\320\273\320\265\320\232\320\276\320\275\321\201\321\202\321\200\321\203\320\272\321\202\320\276\321\200\320\260\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\320\273\320\265\320\232\320\276\320\275\321\201\321\202\321\200\321\203\320\272\321\202\320\276\321\200\320\260\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" @@ -249,4 +249,13 @@ КонецФункции +// Устанавливает признак содержания произвольных полей конструктора параметров +// +// Возвращаемое значение: +// Объект.КонструкторПараметров - ссылка на текущий элемент класса <КонструкторПараметров> +// +Функция ПроизвольныеПоля() Экспорт + Возврат РодительКонструктор.ПроизвольныеПоля(); +КонецФункции + #КонецОбласти \ No newline at end of file diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\201\321\202\321\200\321\203\320\272\321\202\320\276\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\201\321\202\321\200\321\203\320\272\321\202\320\276\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" index 883ed86..67a6be8 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\201\321\202\321\200\321\203\320\272\321\202\320\276\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\201\321\202\321\200\321\203\320\272\321\202\320\276\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" @@ -4,7 +4,7 @@ Перем Лог; -Перем Настройки; // Структура +Перем Настройки; // Соответствие Перем НаименованиеПараметров; // Строка Перем СинонимыПараметров; // Массив строка Перем ИндексПолей; // Соответствие ключа и типа элемента массива @@ -12,6 +12,7 @@ Перем ИндексПараметров; // Соответствие текущий настроек Перем КонструкторИспользован; // Булево, признак использования объекта при чтении из соответсвтия Перем ИнтерфейсКонструктора; // Класс объект ИнтерфейсОбъекта +Перем МожетСодержатьПроизвольныеПоля; // Булево, признак возможность не указывать поля #Область Работа_с_конструктором_параметров @@ -124,6 +125,16 @@ КонецФункции +// Устанавливает признак содержания произвольных полей конструктора параметров +// +// Возвращаемое значение: +// Объект.КонструкторПараметров - ссылка на текущий элемент класса <КонструкторПараметров> +// +Функция ПроизвольныеПоля() Экспорт + МожетСодержатьПроизвольныеПоля = Истина; + Возврат ЭтотОбъект; +КонецФункции + #КонецОбласти #Область Работа_с_текущем_полем_настройки @@ -334,6 +345,10 @@ ИсходящаяСтруктура = Новый Структура; + Если МожетСодержатьПроизвольныеПоля Тогда + Возврат ВСоответствие(); + КонецЕсли; + Для каждого КлючЗначение Из Настройки Цикл Значение = КлючЗначение.Значение; @@ -578,8 +593,13 @@ ПолеПараметров = НайтиПолеВИндексеПолей(ИмяКлюча); Если ПолеПараметров = Неопределено Тогда - Лог.Отладка("Не найдено поле <%1> в индексе", ИмяКлюча); + + Если МожетСодержатьПроизвольныеПоля Тогда + Настройки.Вставить(ИмяКлюча, Значение); + КонецЕсли; + Продолжить; + КонецЕсли; ЗначениеПараметра = ПреобразоватьЗначение(Значение, ПолеПараметров); @@ -724,7 +744,7 @@ Процедура ПриСозданииОбъекта(ВходящийИндексПараметров, Знач НовоеНаименованиеПараметров) НаименованиеПараметров = НовоеНаименованиеПараметров; - Настройки = Новый Структура; + Настройки = Новый Соответствие; ИндексПолей = Новый Соответствие; ИндексСинонимовПолей = Новый Соответствие; ИндексПараметров = ВходящийИндексПараметров; @@ -738,6 +758,7 @@ КонецЕсли; КонструкторИспользован = Ложь; + МожетСодержатьПроизвольныеПоля = Ложь; ИнтерфейсКонструктора = Новый ИнтерфейсОбъекта; ИнтерфейсКонструктора.ПроцедураИнтерфейса("ОписаниеПараметров", 1); diff --git "a/tests/\320\232\320\276\320\275\321\201\321\202\321\200\321\203\320\272\321\202\320\276\321\200\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270_test.os" "b/tests/\320\232\320\276\320\275\321\201\321\202\321\200\321\203\320\272\321\202\320\276\321\200\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270_test.os" index 527fdce..687d291 100644 --- "a/tests/\320\232\320\276\320\275\321\201\321\202\321\200\321\203\320\272\321\202\320\276\321\200\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270_test.os" +++ "b/tests/\320\232\320\276\320\275\321\201\321\202\321\200\321\203\320\272\321\202\320\276\321\200\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270_test.os" @@ -15,7 +15,7 @@ ИменаТестов.Добавить("ТестДолжен_ПроверитьЧтениеПараметровИзКонструктора"); ИменаТестов.Добавить("ТестДолжен_ПроверитьУдалениеПоляИзКонструктора"); - // ИменаТестов.Добавить("ТестДолжен_ПроверитьПоискИЧтениеФайлаПараметров"); + ИменаТестов.Добавить("ТестДолжен_ПроверитьЧтениеПроизвольныхПолейКонструтора"); // ИменаТестов.Добавить("ТестДолжен_ПроверитьПарсингОпций"); // ИменаТестов.Добавить("ТестДолжен_ПроверитьПарсингМассивовОпций"); @@ -121,6 +121,45 @@ КонецПроцедуры +Процедура ТестДолжен_ПроверитьЧтениеПроизвольныхПолейКонструтора() Экспорт + + СтруктураПараметров = Новый Соответствие(); + СтруктураПараметров.Вставить("--custom-feild", "ПроизвольноеПоле"); + СтруктураПараметров.Вставить("Поле", "ЗаданноеПоле"); + + ПарсерJSON = Новый ПарсерJSON; + ТекстФайлаПроверки = ПарсерJSON.ЗаписатьJSON(СтруктураПараметров); + + ТестовыйФайл = ПодготовитьТестовыйФайл(ТекстФайлаПроверки); + + ТестовоеИмя = "config"; + ТестовоеРасширение = ".json"; + + ПарсерJSON = Новый ПарсерJSON; + ТекстФайлаПроверки = ПарсерJSON.ЗаписатьJSON(СтруктураПараметров); + + ТестовыйФайл = ПодготовитьТестовыйФайл(ТекстФайлаПроверки); + + ВременныйКаталог = ВременныеФайлы.СоздатьКаталог(); + КопироватьФайл(ТестовыйФайл, ОбъединитьПути(ВременныйКаталог, ТестовоеИмя + ТестовоеРасширение)); + + МенеджерПараметров = Новый МенеджерПараметров(); + Конструктор = МенеджерПараметров.КонструкторПараметров(); + Конструктор.ПолеСтрока("Поле") + .ПроизвольныеПоля(); + + МенеджерПараметров.АвтоНастройка(ТестовоеИмя); + НастройкаПоискаФайла = МенеджерПараметров.НастройкаПоискаФайла(); + НастройкаПоискаФайла.ДобавитьКаталогПоиска(ВременныйКаталог); + МенеджерПараметров.Прочитать(); + + ПроверитьРезультат(СтруктураПараметров["--custom-feild"], МенеджерПараметров.Параметр("--custom-feild")); + ПроверитьРезультат(СтруктураПараметров["Поле"], МенеджерПараметров.Параметр("Поле")); + + ВременныеФайлы.УдалитьФайл(ВременныйКаталог); + +КонецПроцедуры + Процедура ПроверитьРезультат(Значение1, Значение2) Утверждения.ПроверитьРавенство(Значение1, Значение2, "Результат должен совпадать с ожиданиями."); КонецПроцедуры