Skip to content

Commit 016b4d9

Browse files
committed
Merged release/v0.9.4 into master
2 parents 1fa03a1 + 728f633 commit 016b4d9

File tree

10 files changed

+184
-18
lines changed

10 files changed

+184
-18
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"

packagedef

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-

2-
Константы_ЛокальнаяВерсия = ЗагрузитьСценарий("src/Модули/Константы.os");
1+
2+
ПутьКСценариюКонстант = ОбъединитьПути(ТекущийСценарий().Каталог, "src", "Модули", "Константы.os");
3+
Константы_ЛокальнаяВерсия = ЗагрузитьСценарий(ПутьКСценариюКонстант);
34

45
Описание.Имя("opm")
56
.Версия(Константы_ЛокальнаяВерсия.ВерсияПродукта)
@@ -8,5 +9,5 @@
89
.ЗависитОт("cmdline")
910
.ЗависитОт("tempfiles")
1011
.ВключитьФайл("src")
11-
.ВключитьФайл("tests")
12-
.ИсполняемыйФайл("src/opm.os");
12+
.ОпределяетКласс("ОписаниеПакета", "src/Классы/ОписаниеПакета.os")
13+
.ИсполняемыйФайл("src/opm.os");

src/Классы/СборщикПакета.os

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@
9292
ДобавитьФайлыПакета(Архив, Манифест);
9393

9494
Архив.Записать();
95+
96+
Лог.Информация("Создана сборка %1", ФайлАрхива.ПолноеИмя);
9597

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

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

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
Перем Лог;
66
Перем мВременныйКаталогУстановки;
77
Перем мЗависимостиВРаботе;
8+
Перем ЭтоWindows;
89
Перем мРежимУстановкиПакетов;
910

1011
Процедура УстановитьПакетИзАрхива(Знач ФайлАрхива) Экспорт
@@ -383,21 +384,20 @@
383384
ФС.ОбеспечитьКаталог(КаталогУстановкиСкриптовЗапускаПриложений);
384385
КаталогУстановкиСкриптовЗапускаПриложений = Новый Файл(КаталогУстановкиСкриптовЗапускаПриложений).ПолноеИмя;
385386
ИначеЕсли мРежимУстановкиПакетов = РежимУстановкиПакетов.Глобально Тогда
386-
КаталогУстановкиСкриптовЗапускаПриложений = КаталогПрограммы();
387+
КаталогУстановкиСкриптовЗапускаПриложений = ?(ЭтоWindows, КаталогПрограммы(), "/usr/bin");
387388
Иначе
388389
ВызватьИсключение "Неизвестный режим установки пакетов <" + мРежимУстановкиПакетов + ">";
389390
КонецЕсли;
390391

391392
СоздатьСкриптЗапуска(ИмяСкриптаЗапуска, ОбъектФайл.ПолноеИмя, КаталогУстановкиСкриптовЗапускаПриложений);
393+
392394
КонецЦикла;
393395

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

396398
Процедура СоздатьСкриптЗапуска(Знач ИмяСкриптаЗапуска, Знач ПутьФайлаПриложения, Знач Каталог) Экспорт
397399

398-
СИ = Новый СистемнаяИнформация();
399-
ЭтоWindows = Найти(СИ.ВерсияОС, "Windows") > 0;
400-
Если ЭтоWindows > 0 Тогда
400+
Если ЭтоWindows Тогда
401401
ФайлЗапуска = Новый ЗаписьТекста(ОбъединитьПути(Каталог, ИмяСкриптаЗапуска + ".bat"), "cp866");
402402
ФайлЗапуска.ЗаписатьСтроку("@oscript.exe """ + ПутьФайлаПриложения + """ %*");
403403
ФайлЗапуска.ЗаписатьСтроку("@exit /b %ERRORLEVEL%");
@@ -406,7 +406,7 @@
406406

407407
Если (ЭтоWindows И НастройкиПриложения.Получить().СоздаватьShСкриптЗапуска) ИЛИ НЕ ЭтоWindows Тогда
408408
ПолныйПутьКСкриптуЗапуска = ОбъединитьПути(Каталог, ИмяСкриптаЗапуска);
409-
ФайлЗапуска = Новый ЗаписьТекста(ПолныйПутьКСкриптуЗапуска, КодировкаТекста.UTF8NoBOM);
409+
ФайлЗапуска = Новый ЗаписьТекста(ПолныйПутьКСкриптуЗапуска, КодировкаТекста.UTF8NoBOM,,, Символы.ПС);
410410
ФайлЗапуска.ЗаписатьСтроку("#!/bin/bash");
411411
СтрокаЗапуска = "oscript";
412412
Если ЭтоWindows Тогда
@@ -470,4 +470,6 @@
470470
КонецФункции
471471

472472
Лог = Логирование.ПолучитьЛог("oscript.app.opm");
473+
СИ = Новый СистемнаяИнформация();
474+
ЭтоWindows = Найти(СИ.ВерсияОС, "Windows") > 0;
473475
мРежимУстановкиПакетов = РежимУстановкиПакетов.Глобально;

src/Модули/Константы.os

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,4 @@
1919
ПутьВХранилище = "/download/";
2020
ЛокальныйКаталогУстановкиПакетов = "oscript_modules";
2121
ИмяЛога = "oscript.app.opm";
22-
ВерсияПродукта = "0.9.3";
22+
ВерсияПродукта = "0.9.4";

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)