Skip to content

Commit

Permalink
Merge pull request #34 from oscript-library/develop
Browse files Browse the repository at this point in the history
Sync
  • Loading branch information
nixel2007 authored Mar 28, 2024
2 parents 99db9c3 + 535335a commit c04da98
Show file tree
Hide file tree
Showing 8 changed files with 141 additions and 60 deletions.
19 changes: 11 additions & 8 deletions .github/workflows/qa.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@ name: Контроль качества
on: [push, pull_request]
jobs:
build:
if: github.repository == 'khorevaa/configor'
if: github.repository == 'oscript-library/configor'
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
oscript_version: ['1.8.3', 'stable']
oscript_version: ['1.8.3']

steps:
# Загрузка проекта
Expand Down Expand Up @@ -54,25 +54,28 @@ jobs:
id: extract_version

- name: Установка Sonar-scanner
uses: warchant/setup-sonar-scanner@v1
uses: warchant/setup-sonar-scanner@v3

# Анализ проекта в SonarQube (ветка)
- name: Анализ в SonarQube (branch)
if: github.event_name == 'push'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
run: sonar-scanner
-Dsonar.login=${{ secrets.SONARQUBE_TOKEN }}
-Dsonar.host.url=${{ secrets.SONARQUBE_HOST }}
-Dsonar.host.url=https://sonar.openbsl.ru
-Dsonar.branch.name=${{ steps.extract_branch.outputs.branch }}
-Dsonar.projectVersion=${{ steps.extract_version.outputs.version }}

# Анализ проекта в SonarQube (PR)
# https://docs.sonarqube.org/latest/analysis/pull-request/
- name: Анализ в SonarQube (pull-request)
if: github.event_name == 'pull_request'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
run: sonar-scanner
-Dsonar.login=${{ secrets.SONARQUBE_TOKEN }}
-Dsonar.host.url=${{ secrets.SONARQUBE_HOST }}
-Dsonar.branch.name=${{ steps.extract_branch.outputs.branch }}
-Dsonar.host.url=https://sonar.openbsl.ru
-Dsonar.pullrequest.key=${{ github.event.pull_request.number }}
-Dsonar.pullrequest.branch=${{ github.event.pull_request.head.ref }}
-Dsonar.pullrequest.base=${{ github.event.pull_request.base.ref }}
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ name: Подготовка релиза и публикация в хабе
# Только события создания и изменения релиза
on:
release:
types: [published, edited]
types: [published]

jobs:
build:
Expand Down Expand Up @@ -54,6 +54,6 @@ jobs:

- name: Публикация в hub.oscript.io
shell: bash
run: opm push -f ./${{ matrix.package_mask }} --token ${{ env.TOKEN }} -c stable
run: opm push -f ./${{ matrix.package_mask }} --token ${{ env.PUSH_TOKEN }} -c stable
env:
TOKEN: ${{ secrets.ACCESS_TOKEN }}
PUSH_TOKEN: ${{ secrets.PUSH_TOKEN }}
5 changes: 4 additions & 1 deletion packagedef
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
//

Описание.Имя("configor")
.Версия("0.8.0")
.Версия("0.8.2")
.Автор("Khorev Aleksey")
.АдресАвтора("[email protected]")
.Описание("Библиотека для работы с конфигурационными файлами в формате json, yaml")
Expand All @@ -20,6 +20,9 @@
.ЗависитОт("notify", "0.2.0")
.ЗависитОт("tempfiles")
.ЗависитОт("reflector", "0.3.1")
.РазработкаЗависитОт("coverage", "0.6.1")
.РазработкаЗависитОт("1testrunner", "1.8.0")
.РазработкаЗависитОт("1bdd", "1.14.0")
.ОпределяетКласс("МенеджерПараметров", "src/Классы/МенеджерПараметров.os")
.ОпределяетКласс("КонструкторПараметров", "src/Классы/КонструкторПараметров.os")
;
Original file line number Diff line number Diff line change
Expand Up @@ -50,27 +50,39 @@
Лог.Отладка("Выполняю чтение параметров переменных среды для префикса <%1>", Префикс);

ПеременныеСреды = ПеременныеСреды();

Если ПустаяСтрока(Префикс) Тогда
Возврат ПеременныеСреды;
КонецЕсли;

ПрочитанныеПараметры = Новый Соответствие;

Для каждого ПеременнаяСреды Из ПеременныеСреды Цикл

Если СтрНачинаетсяС(ПеременнаяСреды.Ключ, Префикс) Тогда
ПрочитанныеПараметры.Вставить(
СтрЗаменить(СтрЗаменить(ПеременнаяСреды.Ключ, "_", "."), "..", "_"),
ПеременнаяСреды.Значение
);

ПрочитанныеПараметры.Вставить(
Прав(ПеременнаяСреды.Ключ, СтрДлина(ПеременнаяСреды.Ключ) - СтрДлина(Префикс)),
ПеременнаяСреды.Значение
);
КонецЦикла;

КонецЕсли;
Результат = Новый Соответствие;

КонецЦикла;
Если ПустаяСтрока(Префикс) Тогда
Результат = ПрочитанныеПараметры;
Иначе

Для каждого ПеременнаяСреды Из ПрочитанныеПараметры Цикл

Если СтрНачинаетсяС(ПеременнаяСреды.Ключ, Префикс) Тогда
Сообщить(Прав(ПеременнаяСреды.Ключ, СтрДлина(ПеременнаяСреды.Ключ) - СтрДлина(Префикс)));
Результат.Вставить(
Прав(ПеременнаяСреды.Ключ, СтрДлина(ПеременнаяСреды.Ключ) - СтрДлина(Префикс)),
ПеременнаяСреды.Значение
);

КонецЕсли;

КонецЦикла;

КонецЕсли;

Возврат ПрочитанныеПараметры;
Возврат Результат;

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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -202,9 +202,9 @@

Иначе

ФункцияОбработки = Новый ОписаниеОповещения("ОбработчикВыполненияЧтениеФайловогоПровайдера", ЭтотОбъект);
КоллекцияФайловПараметров.ДляКаждого(
"КаталогПоиска -> ВыполнитьЧтениеФайловогоПровайдера(КаталогПоиска.ИмяФайла());"
"КаталогПоиска -> ВыполнитьЧтениеФайловогоПровайдера(КаталогПоиска.ИмяФайла());",
ЭтотОбъект
);

КонецЕсли;
Expand Down
28 changes: 15 additions & 13 deletions tasks/coverage.os
Original file line number Diff line number Diff line change
Expand Up @@ -2,29 +2,31 @@
#Использовать 1commands
#Использовать fs

СистемнаяИнформация = Новый СистемнаяИнформация;
ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0;

ФС.ОбеспечитьПустойКаталог("coverage");
ПутьКСтат = "coverage/stat.json";

Команда = Новый Команда;
Команда.УстановитьКоманду("oscript");
Команда.ДобавитьПараметр("-encoding=utf-8");
Команда.ДобавитьПараметр(СтрШаблон("-codestat=%1", ПутьКСтат));
Если НЕ ЭтоWindows Тогда
Команда.ДобавитьПараметр("-encoding=utf-8");
КонецЕсли;
Команда.ДобавитьПараметр(СтрШаблон("-codestat=%1", ПутьКСтат));
Команда.ДобавитьПараметр("tasks/test.os");
Команда.ПоказыватьВыводНемедленно(Истина);

КодВозврата = Команда.Исполнить();

Файл_Стат = Новый Файл(ПутьКСтат);

ИмяПакета = "configor";

ПроцессорГенерации = Новый ГенераторОтчетаПокрытия();

ПроцессорГенерации.ОтносительныеПути()
.ФайлСтатистики(Файл_Стат.ПолноеИмя)
.GenericCoverage()
.Cobertura()
.Clover(ИмяПакета)
.Сформировать();

ЗавершитьРаботу(КодВозврата);
.РабочийКаталог("coverage")
.КаталогИсходников(ТекущийКаталог())
.ИмяФайлаСтатистики()
.GenericCoverage()
.Cobertura()
.Сформировать();

ЗавершитьРаботу(КодВозврата);
91 changes: 76 additions & 15 deletions tests/МенеджерЧтенияпараметров_test.os
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,9 @@
#Использовать tempfiles
#Использовать json

Перем юТест;
Перем Лог;

Функция ПолучитьСписокТестов(Знач Тестирование) Экспорт

юТест = Тестирование;

ИменаТестов = Новый Массив;

ИменаТестов.Добавить("ТестДолжен_ПроверитьПолучениеПараметровИзИндекса");
ИменаТестов.Добавить("ТестДолжен_ПроверитьВыгрузкуПараметровВКласс");
ИменаТестов.Добавить("ТестДолжен_ПроверитьПоискИЧтениеФайлаПараметров");

Возврат ИменаТестов;

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

&Тест
Процедура ТестДолжен_ПроверитьПолучениеПараметровИзИндекса() Экспорт

ТестовыеСлучаи = Новый Массив;
Expand Down Expand Up @@ -68,6 +54,7 @@

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

&Тест
Процедура ТестДолжен_ПроверитьВыгрузкуПараметровВКласс() Экспорт

МенеджерПараметров = Новый МенеджерПараметров();
Expand Down Expand Up @@ -106,6 +93,7 @@

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

&Тест
Процедура ТестДолжен_ПроверитьПоискИЧтениеФайлаПараметров() Экспорт

МенеджерПараметров = Новый МенеджерПараметров();
Expand Down Expand Up @@ -148,6 +136,79 @@

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

&Тест
Процедура ТестДолжен_ПроверитьПоискИЧтениеНесколькихФайловПараметров() Экспорт

ПарсерJSON = Новый ПарсерJSON;

МенеджерПараметров = Новый МенеджерПараметров();

ВременныйКаталог = ВременныеФайлы.СоздатьКаталог();

СтруктураПараметров = Новый Структура("version, ПараметрСтрока, ПараметрЧисло, ПараметрМассив, ПараметрСтруктура, ПараметрСоответствие",
"1.0",
"ПростоСтрока",
10,
ПолучитьНовыйМассив("Элемент1, Элемент2"),
Новый Структура("Строка, Число, Массив, Структура, Соответствие",
"ПростоСтрока",
10,
ПолучитьНовыйМассив("Элемент1, Элемент2"),
Новый Структура("Строка, Строка2", "ЗначениеСтруктуры", "ЗначениеСтруктуры2"),
ПолучитьСоответствие("КлючВнутри1, КлючВнутри2", "Значение1, Значение2")
),
ПолучитьСоответствие("Ключ1, Ключ2", "Значение1, Значение2")
);

ТекстФайлаПроверки = ПарсерJSON.ЗаписатьJSON(СтруктураПараметров);

ТестовыйФайл = ПодготовитьТестовыйФайл(ТекстФайлаПроверки);

ТестовоеИмя = "config";
ТестовоеРасширение = ".json";

КопироватьФайл(ТестовыйФайл, ОбъединитьПути(ВременныйКаталог, ТестовоеИмя + ТестовоеРасширение));

МенеджерПараметров.АвтоНастройка(ТестовоеИмя);

СтруктураПараметров = Новый Структура("version, ПараметрСтрока, ПараметрЧисло, ПараметрМассив, ПараметрСтруктура, ПараметрСоответствие",
"1.0",
"ПростоСтрока",
10,
ПолучитьНовыйМассив("Элемент3"),
Новый Структура("Строка, Число, Массив, Структура, Соответствие",
"ПростоСтрока",
10,
ПолучитьНовыйМассив("Элемент3"),
Новый Структура("Строка, Строка2", "ЗначениеСтруктуры", "ЗначениеСтруктуры2"),
ПолучитьСоответствие("КлючВнутри1, КлючВнутри2", "Значение1, Значение2")
),
ПолучитьСоответствие("Ключ1, Ключ2", "Значение1, Значение2")
);

ТекстФайлаПроверки = ПарсерJSON.ЗаписатьJSON(СтруктураПараметров);

ТестовыйФайл = ПодготовитьТестовыйФайл(ТекстФайлаПроверки);

ТестовоеИмя = "config2";
ТестовоеРасширение = ".json";

КопироватьФайл(ТестовыйФайл, ОбъединитьПути(ВременныйКаталог, ТестовоеИмя + ТестовоеРасширение));

МенеджерПараметров.АвтоНастройка(ТестовоеИмя);

НастройкаПоискаФайла = МенеджерПараметров.НастройкаПоискаФайла();
НастройкаПоискаФайла.ДобавитьКаталогПоиска(ВременныйКаталог);
МенеджерПараметров.Прочитать();

Утверждения.ПроверитьРавенство(СтруктураПараметров.ПараметрМассив[0], МенеджерПараметров.Параметр("ПараметрМассив.0"), "Результат должен совпадать с ожиданиями.");
Утверждения.ПроверитьРавенство(СтруктураПараметров.ПараметрСтруктура.Массив[0], МенеджерПараметров.Параметр("ПараметрСтруктура.Массив.0"), "Результат должен совпадать с ожиданиями.");
Утверждения.ПроверитьРавенство(СтруктураПараметров.ПараметрСтруктура.Соответствие["КлючВнутри1"], МенеджерПараметров.Параметр("ПараметрСтруктура.Соответствие.КлючВнутри1"), "Результат должен совпадать с ожиданиями.");

ВременныеФайлы.Удалить();

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

Функция ПолучитьНовыйМассив(ЗначенияМассив)

Массив = Новый Массив();
Expand Down
10 changes: 5 additions & 5 deletions tests/ПровайдерПараметровENV.os
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

// Дано

УстановитьПеременнуюСреды("TestConfigorEnv", "ТестЗначение", РасположениеПеременнойСреды.Процесс);
УстановитьПеременнуюСреды("Test__Configor_Env", "ТестЗначение", РасположениеПеременнойСреды.Процесс);

// Когда

Expand All @@ -18,7 +18,7 @@

// Тогда

Ожидаем.Что(МенеджерПараметров.Параметр("TestConfigorEnv")).Равно("ТестЗначение");
Ожидаем.Что(МенеджерПараметров.Параметр("Test_Configor.Env")).Равно("ТестЗначение");

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

Expand All @@ -27,18 +27,18 @@

// Дано

УстановитьПеременнуюСреды("Test_ConfigorEnv", "ТестЗначение", РасположениеПеременнойСреды.Процесс);
УстановитьПеременнуюСреды("Test_Configor__Env", "ТестЗначение", РасположениеПеременнойСреды.Процесс);

// Когда

МенеджерПараметров = Новый МенеджерПараметров();

МенеджерПараметров.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровENV("Test_"));
МенеджерПараметров.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровENV("Test."));

МенеджерПараметров.Прочитать();

// Тогда

Ожидаем.Что(МенеджерПараметров.Параметр("ConfigorEnv")).Равно("ТестЗначение");
Ожидаем.Что(МенеджерПараметров.Параметр("Configor_Env")).Равно("ТестЗначение");

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

0 comments on commit c04da98

Please sign in to comment.