Skip to content

Commit

Permalink
Merged release/v0.9.4 into master
Browse files Browse the repository at this point in the history
  • Loading branch information
nixel2007 committed Mar 11, 2017
2 parents 1fa03a1 + 728f633 commit 016b4d9
Show file tree
Hide file tree
Showing 10 changed files with 184 additions and 18 deletions.
4 changes: 2 additions & 2 deletions .vscode/tasks.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@
"version": "0.1.0",
"windows": {
"command": "cmd",
"args": ["/c", "chcp 65001 >nul ; "]
"args": ["/c", "chcp 65001 ; "]
},
"linux": {
"command": "sh",
"args": ["-c"]
},
"isShellCommand": true,
"showOutput": "silent",
//"_runner": "terminal",
"_runner": "terminal",
"tasks": [
{
"taskName": "Testing project",
Expand Down
92 changes: 92 additions & 0 deletions features/step_definitions/Настройки.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd
#Использовать asserts

#Использовать "../../src"

Перем БДД; //контекст фреймворка 1bdd

// Метод выдает список шагов, реализованных в данном файле-шагов
Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт
БДД = КонтекстФреймворкаBDD;

ВсеШаги = Новый Массив;

ВсеШаги.Добавить("ЯЧитаюНастройкиИзФайла");
ВсеШаги.Добавить("ЗначениеНастройкиРавно");

Возврат ВсеШаги;
КонецФункции

// Реализация шагов

// Процедура выполняется перед запуском каждого сценария
Процедура ПередЗапускомСценария(Знач Узел) Экспорт

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

// Процедура выполняется после завершения каждого сценария
Процедура ПослеЗапускаСценария(Знач Узел) Экспорт

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

//я читаю настройки из файла "opm.cfg"
Процедура ЯЧитаюНастройкиИзФайла(Знач ПутьФайла) Экспорт
Файл = Новый Файл(ОбъединитьПути(ТекущийКаталог(), ПутьФайла));
Ожидаем.Что(Файл.Существует(), СтрШаблон("Ожидали, что файл <%1> существует, а это не так!", Файл.ПолноеИмя)).ЭтоИстина();

НастройкиПриложения.УстановитьФайлНастроек(Файл.ПолноеИмя);

Настройки = НастройкиПриложения.Получить();
БДД.СохранитьВКонтекст(КлючКонтекста(), Настройки);
КонецПроцедуры

//значение настройки "СоздаватьShСкриптЗапуска" равно "false"
Процедура ЗначениеНастройкиРавно(Знач КлючНастройки, Знач ЗначениеНастройки) Экспорт
Настройки = БДД.ПолучитьИзКонтекста(КлючКонтекста());

Ожидаем.Что(КлючНастройки, "Ключ настройки не заполнен").Заполнено();

Значение = ЗначениеНастройки(Настройки, КлючНастройки);

ЗначениеНастройки = КонвертироватьЗначениеПриНеобходимости(ЗначениеНастройки);

Ожидаем.Что(Значение, СтрШаблон("Не совпадает значение настройки с именем <%1>", КлючНастройки)).Равно(ЗначениеНастройки);
КонецПроцедуры

// учитываются простые (СоздаватьShСкриптЗапуска) и иерархические ключи (Прокси.ИспользоватьПрокси)
Функция ЗначениеНастройки(Знач Настройки, Знач КлючНастройки)
МассивИерархии = СтрРазделить(КлючНастройки, ".", Ложь);
ПутьКлюча = "";
ТекущиеНастройки = настройки;
Для Счетчик = 0 По МассивИерархии.ВГраница() Цикл
ТекущийКлюч = МассивИерархии[Счетчик];
Если ПустаяСтрока(ПутьКлюча) Тогда
ПутьКлюча = ТекущийКлюч;
Иначе
ПутьКлюча = СтрШаблон("%1.%2", ПутьКлюча, ТекущийКлюч);
КонецЕсли;

Значение = Неопределено;
ЕстьНастройка = ТекущиеНастройки.Свойство(ТекущийКлюч, Значение);
Ожидаем.Что(ЕстьНастройка, СтрШаблон("Не удалось получить настройку с именем <%1>", ПутьКлюча)).ЭтоИстина();
ТекущиеНастройки = Значение;
КонецЦикла;

Возврат Значение;
КонецФункции

Функция КонвертироватьЗначениеПриНеобходимости(Знач ЗначениеНастройки)
ЗначениеНастройки = НРег(ЗначениеНастройки);
Если ЗначениеНастройки = "false" или ЗначениеНастройки = "ложь" Тогда
ЗначениеНастройки = Ложь;
ИначеЕсли ЗначениеНастройки = "true" или ЗначениеНастройки = "истина" Тогда
ЗначениеНастройки = Истина;
ИначеЕсли ЗначениеНастройки = "неопределено" Тогда
ЗначениеНастройки = Неопределено;
КонецЕсли;
Возврат ЗначениеНастройки;
КонецФункции

Функция КлючКонтекста()
Возврат "ТестовыеНастройкиПриложенияОМП";
КонецФункции // КлючКонтекста()
39 changes: 39 additions & 0 deletions features/Настройки.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# language: ru

Функциональность: Настройки продукта

Как разработчик
Я хочу иметь возможность настраивать параметры продукта из внешнего файла
Чтобы управлять поведением продукта, например, если есть прокси

Контекст: файл настроек
Допустим Я создаю временный каталог и сохраняю его в контекст
И Я устанавливаю временный каталог как рабочий каталог

И Я установил рабочий каталог как текущий каталог

# И Я показываю рабочий каталог

Сценарий: Получение настроек
Допустим Я копирую файл "opm.cfg" из каталога "tests/fixtures" проекта в рабочий каталог
Когда я читаю настройки из файла "opm.cfg"
Тогда значение настройки "СоздаватьShСкриптЗапуска" равно "false"
И значение настройки "Прокси.ИспользоватьПрокси" равно "false"
И значение настройки "Прокси.ПроксиПоУмолчанию" равно "false"
И значение настройки "Прокси.Сервер" равно ""
И значение настройки "Прокси.Порт" равно ""
И значение настройки "Прокси.Пользователь" равно ""
И значение настройки "Прокси.Пароль" равно ""
И значение настройки "Прокси.ИспользоватьАутентификациюОС" равно "false"

Сценарий: Получение значения по умолчанию, если настройка не задана в файле настроек
Допустим Я копирую файл "opm-incomplete.cfg" из каталога "tests/fixtures" проекта в рабочий каталог
Когда я читаю настройки из файла "opm-incomplete.cfg"
Тогда значение настройки "СоздаватьShСкриптЗапуска" равно "false"
И значение настройки "Прокси.ИспользоватьПрокси" равно "false"
И значение настройки "Прокси.ПроксиПоУмолчанию" равно "Истина"
И значение настройки "Прокси.Сервер" равно "Неопределено"
И значение настройки "Прокси.Порт" равно "Неопределено"
И значение настройки "Прокси.Пользователь" равно "Неопределено"
И значение настройки "Прокси.Пароль" равно "Неопределено"
И значение настройки "Прокси.ИспользоватьАутентификациюОС" равно "false"
9 changes: 5 additions & 4 deletions packagedef
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@

Константы_ЛокальнаяВерсия = ЗагрузитьСценарий("src/Модули/Константы.os");

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

Описание.Имя("opm")
.Версия(Константы_ЛокальнаяВерсия.ВерсияПродукта)
Expand All @@ -8,5 +9,5 @@
.ЗависитОт("cmdline")
.ЗависитОт("tempfiles")
.ВключитьФайл("src")
.ВключитьФайл("tests")
.ИсполняемыйФайл("src/opm.os");
.ОпределяетКласс("ОписаниеПакета", "src/Классы/ОписаниеПакета.os")
.ИсполняемыйФайл("src/opm.os");
2 changes: 2 additions & 0 deletions src/Классы/СборщикПакета.os
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,8 @@
ДобавитьФайлыПакета(Архив, Манифест);

Архив.Записать();

Лог.Информация("Создана сборка %1", ФайлАрхива.ПолноеИмя);

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

Expand Down
12 changes: 7 additions & 5 deletions src/Классы/УстановкаПакета.os
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
Перем Лог;
Перем мВременныйКаталогУстановки;
Перем мЗависимостиВРаботе;
Перем ЭтоWindows;
Перем мРежимУстановкиПакетов;

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

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

КонецЦикла;

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

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

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

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

Лог = Логирование.ПолучитьЛог("oscript.app.opm");
СИ = Новый СистемнаяИнформация();
ЭтоWindows = Найти(СИ.ВерсияОС, "Windows") > 0;
мРежимУстановкиПакетов = РежимУстановкиПакетов.Глобально;
2 changes: 1 addition & 1 deletion src/Модули/Константы.os
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@
ПутьВХранилище = "/download/";
ЛокальныйКаталогУстановкиПакетов = "oscript_modules";
ИмяЛога = "oscript.app.opm";
ВерсияПродукта = "0.9.3";
ВерсияПродукта = "0.9.4";
28 changes: 22 additions & 6 deletions src/Модули/НастройкиПриложения.os
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,7 @@

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

мНастройки = Настройки;

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

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

Процедура УстановитьНастройкиПоУмолчанию()
мНастройки = Новый Структура;
НастройкиПроксиПоУмолчанию = НастройкиПроксиПроксиПоУмолчанию();
мНастройки.Вставить("Прокси", НастройкиПроксиПоУмолчанию);
мНастройки.Вставить("СоздаватьShСкриптЗапуска", Ложь)
мНастройки = НастройкиПоУмолчанию();
КонецПроцедуры

Функция ЗаполнитьНесуществующиеНастройкиПоУмолчанию(Настройки)
НовыеНастройки = НастройкиПоУмолчанию();
Для каждого Настройка Из Настройки Цикл
Значение = Настройка.Значение;
Если ТипЗнч(Значение) = Тип("Структура") Тогда
Значение = ЗаполнитьНесуществующиеНастройкиПоУмолчанию(Значение);
КонецЕсли;
НовыеНастройки.Вставить(Настройка.Ключ, Значение);
КонецЦикла;
Возврат НовыеНастройки;
КонецФункции

Функция НастройкиПоУмолчанию()
Рез = Новый Структура;
НастройкиПроксиПоУмолчанию = НастройкиПроксиПроксиПоУмолчанию();
Рез.Вставить("Прокси", НастройкиПроксиПоУмолчанию);
Рез.Вставить("СоздаватьShСкриптЗапуска", Ложь);
Возврат Рез;
КонецФункции

Функция НастройкиПроксиПроксиПоУмолчанию()

СтруктураПрокси = Новый Структура();
Expand Down
2 changes: 2 additions & 0 deletions tests/fixtures/opm-incomplete.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
{
}
12 changes: 12 additions & 0 deletions tests/fixtures/opm.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"Прокси": {
"ИспользоватьПрокси": false,
"ПроксиПоУмолчанию": false,
"Сервер": "",
"Порт": "",
"Пользователь": "",
"Пароль": "",
"ИспользоватьАутентификациюОС": false
},
"СоздаватьShСкриптЗапуска": false
}

0 comments on commit 016b4d9

Please sign in to comment.