Skip to content

Commit 1716f66

Browse files
authored
Merge pull request #12 from khorevaa/feature/custom-fields
fix #10 Чтение произвольных полей в конструкторе
2 parents fa6c0db + 8df87a1 commit 1716f66

File tree

3 files changed

+73
-4
lines changed

3 files changed

+73
-4
lines changed

src/Классы/internal/Классы/ПолеКонструктораПараметров.os

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,4 +249,13 @@
249249

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

252+
// Устанавливает признак содержания произвольных полей конструктора параметров
253+
//
254+
// Возвращаемое значение:
255+
// Объект.КонструкторПараметров - ссылка на текущий элемент класса <КонструкторПараметров>
256+
//
257+
Функция ПроизвольныеПоля() Экспорт
258+
Возврат РодительКонструктор.ПроизвольныеПоля();
259+
КонецФункции
260+
252261
#КонецОбласти

src/Классы/КонструкторПараметров.os

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@
44

55
Перем Лог;
66

7-
Перем Настройки; // Структура
7+
Перем Настройки; // Соответствие
88
Перем НаименованиеПараметров; // Строка
99
Перем СинонимыПараметров; // Массив строка
1010
Перем ИндексПолей; // Соответствие ключа и типа элемента массива
1111
Перем ИндексСинонимовПолей; // Соответствие синонимов полей и наименования полей
1212
Перем ИндексПараметров; // Соответствие текущий настроек
1313
Перем КонструкторИспользован; // Булево, признак использования объекта при чтении из соответсвтия
1414
Перем ИнтерфейсКонструктора; // Класс объект ИнтерфейсОбъекта
15+
Перем МожетСодержатьПроизвольныеПоля; // Булево, признак возможность не указывать поля
1516

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

@@ -124,6 +125,16 @@
124125

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

128+
// Устанавливает признак содержания произвольных полей конструктора параметров
129+
//
130+
// Возвращаемое значение:
131+
// Объект.КонструкторПараметров - ссылка на текущий элемент класса <КонструкторПараметров>
132+
//
133+
Функция ПроизвольныеПоля() Экспорт
134+
МожетСодержатьПроизвольныеПоля = Истина;
135+
Возврат ЭтотОбъект;
136+
КонецФункции
137+
127138
#КонецОбласти
128139

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

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

348+
Если МожетСодержатьПроизвольныеПоля Тогда
349+
Возврат ВСоответствие();
350+
КонецЕсли;
351+
337352
Для каждого КлючЗначение Из Настройки Цикл
338353

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

580595
Если ПолеПараметров = Неопределено Тогда
581-
Лог.Отладка("Не найдено поле <%1> в индексе", ИмяКлюча);
596+
597+
Если МожетСодержатьПроизвольныеПоля Тогда
598+
Настройки.Вставить(ИмяКлюча, Значение);
599+
КонецЕсли;
600+
582601
Продолжить;
602+
583603
КонецЕсли;
584604

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

726746
НаименованиеПараметров = НовоеНаименованиеПараметров;
727-
Настройки = Новый Структура;
747+
Настройки = Новый Соответствие;
728748
ИндексПолей = Новый Соответствие;
729749
ИндексСинонимовПолей = Новый Соответствие;
730750
ИндексПараметров = ВходящийИндексПараметров;
@@ -738,6 +758,7 @@
738758
КонецЕсли;
739759

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

742763
ИнтерфейсКонструктора = Новый ИнтерфейсОбъекта;
743764
ИнтерфейсКонструктора.ПроцедураИнтерфейса("ОписаниеПараметров", 1);

tests/КонструкторНастройки_test.os

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

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

@@ -121,6 +121,45 @@
121121

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

124+
Процедура ТестДолжен_ПроверитьЧтениеПроизвольныхПолейКонструтора() Экспорт
125+
126+
СтруктураПараметров = Новый Соответствие();
127+
СтруктураПараметров.Вставить("--custom-feild", "ПроизвольноеПоле");
128+
СтруктураПараметров.Вставить("Поле", "ЗаданноеПоле");
129+
130+
ПарсерJSON = Новый ПарсерJSON;
131+
ТекстФайлаПроверки = ПарсерJSON.ЗаписатьJSON(СтруктураПараметров);
132+
133+
ТестовыйФайл = ПодготовитьТестовыйФайл(ТекстФайлаПроверки);
134+
135+
ТестовоеИмя = "config";
136+
ТестовоеРасширение = ".json";
137+
138+
ПарсерJSON = Новый ПарсерJSON;
139+
ТекстФайлаПроверки = ПарсерJSON.ЗаписатьJSON(СтруктураПараметров);
140+
141+
ТестовыйФайл = ПодготовитьТестовыйФайл(ТекстФайлаПроверки);
142+
143+
ВременныйКаталог = ВременныеФайлы.СоздатьКаталог();
144+
КопироватьФайл(ТестовыйФайл, ОбъединитьПути(ВременныйКаталог, ТестовоеИмя + ТестовоеРасширение));
145+
146+
МенеджерПараметров = Новый МенеджерПараметров();
147+
Конструктор = МенеджерПараметров.КонструкторПараметров();
148+
Конструктор.ПолеСтрока("Поле")
149+
.ПроизвольныеПоля();
150+
151+
МенеджерПараметров.АвтоНастройка(ТестовоеИмя);
152+
НастройкаПоискаФайла = МенеджерПараметров.НастройкаПоискаФайла();
153+
НастройкаПоискаФайла.ДобавитьКаталогПоиска(ВременныйКаталог);
154+
МенеджерПараметров.Прочитать();
155+
156+
ПроверитьРезультат(СтруктураПараметров["--custom-feild"], МенеджерПараметров.Параметр("--custom-feild"));
157+
ПроверитьРезультат(СтруктураПараметров["Поле"], МенеджерПараметров.Параметр("Поле"));
158+
159+
ВременныеФайлы.УдалитьФайл(ВременныйКаталог);
160+
161+
КонецПроцедуры
162+
124163
Процедура ПроверитьРезультат(Значение1, Значение2)
125164
Утверждения.ПроверитьРавенство(Значение1, Значение2, "Результат должен совпадать с ожиданиями.");
126165
КонецПроцедуры

0 commit comments

Comments
 (0)