Skip to content

Commit e4c44f5

Browse files
committed
Merged feature/settings-58 into develop
2 parents 65258a1 + 23bded4 commit e4c44f5

File tree

6 files changed

+169
-8
lines changed

6 files changed

+169
-8
lines changed

.vscode/tasks.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22
"version": "0.1.0",
33
"windows": {
44
"command": "cmd",
5-
"args": ["/c", "chcp 65001 >nul ; "]
5+
"args": ["/c", "chcp 65001 ; "]
66
},
77
"linux": {
88
"command": "sh",
99
"args": ["-c"]
1010
},
1111
"isShellCommand": true,
1212
"showOutput": "silent",
13-
//"_runner": "terminal",
13+
"_runner": "terminal",
1414
"tasks": [
1515
{
1616
"taskName": "Testing project",
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd
2+
#Использовать asserts
3+
4+
#Использовать "../../src"
5+
6+
Перем БДД; //контекст фреймворка 1bdd
7+
8+
// Метод выдает список шагов, реализованных в данном файле-шагов
9+
Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт
10+
БДД = КонтекстФреймворкаBDD;
11+
12+
ВсеШаги = Новый Массив;
13+
14+
ВсеШаги.Добавить("ЯЧитаюНастройкиИзФайла");
15+
ВсеШаги.Добавить("ЗначениеНастройкиРавно");
16+
17+
Возврат ВсеШаги;
18+
КонецФункции
19+
20+
// Реализация шагов
21+
22+
// Процедура выполняется перед запуском каждого сценария
23+
Процедура ПередЗапускомСценария(Знач Узел) Экспорт
24+
25+
КонецПроцедуры
26+
27+
// Процедура выполняется после завершения каждого сценария
28+
Процедура ПослеЗапускаСценария(Знач Узел) Экспорт
29+
30+
КонецПроцедуры
31+
32+
//я читаю настройки из файла "opm.cfg"
33+
Процедура ЯЧитаюНастройкиИзФайла(Знач ПутьФайла) Экспорт
34+
Файл = Новый Файл(ОбъединитьПути(ТекущийКаталог(), ПутьФайла));
35+
Ожидаем.Что(Файл.Существует(), СтрШаблон("Ожидали, что файл <%1> существует, а это не так!", Файл.ПолноеИмя)).ЭтоИстина();
36+
37+
НастройкиПриложения.УстановитьФайлНастроек(Файл.ПолноеИмя);
38+
39+
Настройки = НастройкиПриложения.Получить();
40+
БДД.СохранитьВКонтекст(КлючКонтекста(), Настройки);
41+
КонецПроцедуры
42+
43+
//значение настройки "СоздаватьShСкриптЗапуска" равно "false"
44+
Процедура ЗначениеНастройкиРавно(Знач КлючНастройки, Знач ЗначениеНастройки) Экспорт
45+
Настройки = БДД.ПолучитьИзКонтекста(КлючКонтекста());
46+
47+
Ожидаем.Что(КлючНастройки, "Ключ настройки не заполнен").Заполнено();
48+
49+
Значение = ЗначениеНастройки(Настройки, КлючНастройки);
50+
51+
ЗначениеНастройки = КонвертироватьЗначениеПриНеобходимости(ЗначениеНастройки);
52+
53+
Ожидаем.Что(Значение, СтрШаблон("Не совпадает значение настройки с именем <%1>", КлючНастройки)).Равно(ЗначениеНастройки);
54+
КонецПроцедуры
55+
56+
// учитываются простые (СоздаватьShСкриптЗапуска) и иерархические ключи (Прокси.ИспользоватьПрокси)
57+
Функция ЗначениеНастройки(Знач Настройки, Знач КлючНастройки)
58+
МассивИерархии = СтрРазделить(КлючНастройки, ".", Ложь);
59+
ПутьКлюча = "";
60+
ТекущиеНастройки = настройки;
61+
Для Счетчик = 0 По МассивИерархии.ВГраница() Цикл
62+
ТекущийКлюч = МассивИерархии[Счетчик];
63+
Если ПустаяСтрока(ПутьКлюча) Тогда
64+
ПутьКлюча = ТекущийКлюч;
65+
Иначе
66+
ПутьКлюча = СтрШаблон("%1.%2", ПутьКлюча, ТекущийКлюч);
67+
КонецЕсли;
68+
69+
Значение = Неопределено;
70+
ЕстьНастройка = ТекущиеНастройки.Свойство(ТекущийКлюч, Значение);
71+
Ожидаем.Что(ЕстьНастройка, СтрШаблон("Не удалось получить настройку с именем <%1>", ПутьКлюча)).ЭтоИстина();
72+
ТекущиеНастройки = Значение;
73+
КонецЦикла;
74+
75+
Возврат Значение;
76+
КонецФункции
77+
78+
Функция КонвертироватьЗначениеПриНеобходимости(Знач ЗначениеНастройки)
79+
ЗначениеНастройки = НРег(ЗначениеНастройки);
80+
Если ЗначениеНастройки = "false" или ЗначениеНастройки = "ложь" Тогда
81+
ЗначениеНастройки = Ложь;
82+
ИначеЕсли ЗначениеНастройки = "true" или ЗначениеНастройки = "истина" Тогда
83+
ЗначениеНастройки = Истина;
84+
ИначеЕсли ЗначениеНастройки = "неопределено" Тогда
85+
ЗначениеНастройки = Неопределено;
86+
КонецЕсли;
87+
Возврат ЗначениеНастройки;
88+
КонецФункции
89+
90+
Функция КлючКонтекста()
91+
Возврат "ТестовыеНастройкиПриложенияОМП";
92+
КонецФункции // КлючКонтекста()
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# language: ru
2+
3+
Функциональность: Настройки продукта
4+
5+
Как разработчик
6+
Я хочу иметь возможность настраивать параметры продукта из внешнего файла
7+
Чтобы управлять поведением продукта, например, если есть прокси
8+
9+
Контекст: файл настроек
10+
Допустим Я создаю временный каталог и сохраняю его в контекст
11+
И Я устанавливаю временный каталог как рабочий каталог
12+
13+
И Я установил рабочий каталог как текущий каталог
14+
15+
# И Я показываю рабочий каталог
16+
17+
Сценарий: Получение настроек
18+
Допустим Я копирую файл "opm.cfg" из каталога "tests/fixtures" проекта в рабочий каталог
19+
Когда я читаю настройки из файла "opm.cfg"
20+
Тогда значение настройки "СоздаватьShСкриптЗапуска" равно "false"
21+
И значение настройки "Прокси.ИспользоватьПрокси" равно "false"
22+
И значение настройки "Прокси.ПроксиПоУмолчанию" равно "false"
23+
И значение настройки "Прокси.Сервер" равно ""
24+
И значение настройки "Прокси.Порт" равно ""
25+
И значение настройки "Прокси.Пользователь" равно ""
26+
И значение настройки "Прокси.Пароль" равно ""
27+
И значение настройки "Прокси.ИспользоватьАутентификациюОС" равно "false"
28+
29+
Сценарий: Получение значения по умолчанию, если настройка не задана в файле настроек
30+
Допустим Я копирую файл "opm-incomplete.cfg" из каталога "tests/fixtures" проекта в рабочий каталог
31+
Когда я читаю настройки из файла "opm-incomplete.cfg"
32+
Тогда значение настройки "СоздаватьShСкриптЗапуска" равно "false"
33+
И значение настройки "Прокси.ИспользоватьПрокси" равно "false"
34+
И значение настройки "Прокси.ПроксиПоУмолчанию" равно "Истина"
35+
И значение настройки "Прокси.Сервер" равно "Неопределено"
36+
И значение настройки "Прокси.Порт" равно "Неопределено"
37+
И значение настройки "Прокси.Пользователь" равно "Неопределено"
38+
И значение настройки "Прокси.Пароль" равно "Неопределено"
39+
И значение настройки "Прокси.ИспользоватьАутентификациюОС" равно "false"

src/Модули/НастройкиПриложения.os

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,7 @@
4242

4343
// TODO сделать конвертацию терминов json в русские свойства настроек
4444

45-
мНастройки = Настройки;
46-
45+
мНастройки = ЗаполнитьНесуществующиеНастройкиПоУмолчанию(Настройки);
4746
КонецПроцедуры
4847

4948
Функция ПрочитатьФайл(Знач Путь)
@@ -65,12 +64,29 @@
6564
КонецПроцедуры
6665

6766
Процедура УстановитьНастройкиПоУмолчанию()
68-
мНастройки = Новый Структура;
69-
НастройкиПроксиПоУмолчанию = НастройкиПроксиПроксиПоУмолчанию();
70-
мНастройки.Вставить("Прокси", НастройкиПроксиПоУмолчанию);
71-
мНастройки.Вставить("СоздаватьShСкриптЗапуска", Ложь)
67+
мНастройки = НастройкиПоУмолчанию();
7268
КонецПроцедуры
7369

70+
Функция ЗаполнитьНесуществующиеНастройкиПоУмолчанию(Настройки)
71+
НовыеНастройки = НастройкиПоУмолчанию();
72+
Для каждого Настройка Из Настройки Цикл
73+
Значение = Настройка.Значение;
74+
Если ТипЗнч(Значение) = Тип("Структура") Тогда
75+
Значение = ЗаполнитьНесуществующиеНастройкиПоУмолчанию(Значение);
76+
КонецЕсли;
77+
НовыеНастройки.Вставить(Настройка.Ключ, Значение);
78+
КонецЦикла;
79+
Возврат НовыеНастройки;
80+
КонецФункции
81+
82+
Функция НастройкиПоУмолчанию()
83+
Рез = Новый Структура;
84+
НастройкиПроксиПоУмолчанию = НастройкиПроксиПроксиПоУмолчанию();
85+
Рез.Вставить("Прокси", НастройкиПроксиПоУмолчанию);
86+
Рез.Вставить("СоздаватьShСкриптЗапуска", Ложь);
87+
Возврат Рез;
88+
КонецФункции
89+
7490
Функция НастройкиПроксиПроксиПоУмолчанию()
7591

7692
СтруктураПрокси = Новый Структура();

tests/fixtures/opm-incomplete.cfg

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
{
2+
}

tests/fixtures/opm.cfg

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"Прокси": {
3+
"ИспользоватьПрокси": false,
4+
"ПроксиПоУмолчанию": false,
5+
"Сервер": "",
6+
"Порт": "",
7+
"Пользователь": "",
8+
"Пароль": "",
9+
"ИспользоватьАутентификациюОС": false
10+
},
11+
"СоздаватьShСкриптЗапуска": false
12+
}

0 commit comments

Comments
 (0)