Skip to content
32 changes: 32 additions & 0 deletions features/dev-dependencies.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# language: ru

Функциональность: Установка зависимостей разработчика

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

Контекст: Подготовка тестового окружения
Допустим Я очищаю параметры команды "opm" в контексте
И Я устанавливаю путь выполнения команды "opm" к текущей библиотеке
И Я создаю временный каталог и сохраняю его в переменной "РабочийКаталог"
И Я создаю тестовый пакет с зависимостями разработчика в переменной "РабочийКаталог"

Сценарий: Установка только обычных зависимостей без флага --dev
Допустим Я установил рабочий каталог из переменной "РабочийКаталог"
И Я добавляю параметр "install" для команды "opm"
И Я добавляю параметр "--local" для команды "opm"
Когда Я выполняю команду "opm"
Тогда Код возврата команды "opm" равен 0
И В каталоге из переменной "РабочийКаталог" создается файл или каталог "oscript_modules"
И В каталоге из переменной "РабочийКаталог" НЕ создается файл или каталог "oscript_modules/asserts"
И В каталоге из переменной "РабочийКаталог" НЕ создается файл или каталог "oscript_modules/1bdd"

Сценарий: Установка зависимостей разработчика с флагом --dev
Допустим Я установил рабочий каталог из переменной "РабочийКаталог"
И Я добавляю параметр "install" для команды "opm"
И Я добавляю параметр "--local" для команды "opm"
И Я добавляю параметр "--dev" для команды "opm"
Когда Я выполняю команду "opm"
Тогда Код возврата команды "opm" равен 0
И В каталоге из переменной "РабочийКаталог" создается файл или каталог "oscript_modules"
46 changes: 46 additions & 0 deletions features/step_definitions/shared.os
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,13 @@

ВсеШаги.Добавить("ЯУстанавливаюПутьВыполненияКомандыКТекущейБиблиотеке");
ВсеШаги.Добавить("ВКаталогеИзПеременнойСоздаетсяФайлИлиКаталог");
ВсеШаги.Добавить("ВКаталогеИзПеременнойНЕСоздаетсяФайлИлиКаталог");
ВсеШаги.Добавить("ЯДобавляюПараметрыДляКоманды");
ВсеШаги.Добавить("ЯДобавляюОпциюДляКомандыИзПеременной");
ВсеШаги.Добавить("ЯДобавляюАргументДляКомандыИзПеременной");
ВсеШаги.Добавить("ЯУстанавливаюПеременнуюОкруженияИзПеременной");
ВсеШаги.Добавить("ЯСоздаюВременныйКаталогИСохраняюЕгоВПеременной");
ВсеШаги.Добавить("ЯСоздаюТестовыйПакетСЗависимостямиРазработчикаВПеременной");

Возврат ВсеШаги;
КонецФункции
Expand Down Expand Up @@ -126,3 +128,47 @@
Функция КаталогБиблиотеки()
Возврат ОбъединитьПути(ТекущийСценарий().Каталог, "..", "..");
КонецФункции

//В каталоге из переменной "РабочийКаталог" НЕ создается файл или каталог "oscript_modules/asserts"
Процедура ВКаталогеИзПеременнойНЕСоздаетсяФайлИлиКаталог(Знач ИмяПеременной, Знач ОтносительныйПуть) Экспорт

Каталог = БДД.ПолучитьИзКонтекста(ИмяПеременной);
ПолныйПуть = ОбъединитьПути(Каталог, ОтносительныйПуть);

ФайлИлиКаталог = Новый Файл(ПолныйПуть);
Если ФайлИлиКаталог.Существует() Тогда
ВызватьИсключение СтрШаблон("Файл или каталог <%1> не должен существовать, но он существует", ПолныйПуть);
КонецЕсли;

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

//Я создаю тестовый пакет с зависимостями разработчика в переменной "РабочийКаталог"
Процедура ЯСоздаюТестовыйПакетСЗависимостямиРазработчикаВПеременной(Знач ИмяПеременной) Экспорт

КаталогПакета = БДД.ПолучитьИзКонтекста(ИмяПеременной);

// Создаем packagedef с зависимостями разработчика
СодержимоеPackagedef =
"Описание.Имя(""test-dev-deps"")
| .Версия(""1.0.0"")
| .ВерсияСреды(""1.9.2"")
| .ЗависитОт(""strings"", ""0.5.0"")
| .РазработкаЗависитОт(""asserts"", ""1.4.0"")
| .РазработкаЗависитОт(""1bdd"", ""1.15.1"")
| .ВключитьФайл(""src"");";

ФайлPackagedef = ОбъединитьПути(КаталогПакета, "packagedef");
ЗаписьТекста = Новый ЗаписьТекста(ФайлPackagedef, КодировкаТекста.UTF8);
ЗаписьТекста.Записать(СодержимоеPackagedef);
ЗаписьТекста.Закрыть();

// Создаем каталог src с тестовым файлом
КаталогSrc = ОбъединитьПути(КаталогПакета, "src");
СоздатьКаталог(КаталогSrc);

ФайлТеста = ОбъединитьПути(КаталогSrc, "test.os");
ЗаписьТекста = Новый ЗаписьТекста(ФайлТеста, КодировкаТекста.UTF8);
ЗаписьТекста.Записать("Процедура ТестоваяПроцедура() Экспорт" + Символы.ПС + "КонецПроцедуры");
ЗаписьТекста.Закрыть();

КонецПроцедуры
Original file line number Diff line number Diff line change
Expand Up @@ -202,11 +202,24 @@
ВызватьИсключение "УровеньЗависимости не может быть меньше нуля";
КонецЕсли;

Зависимости = Манифест.Зависимости();
Если Зависимости.Количество() = 0 Тогда
ВсеЗависимости = Манифест.Зависимости();
Если ВсеЗависимости.Количество() = 0 Тогда
Возврат;
КонецЕсли;

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

Зависимости = ВсеЗависимости.НайтиСтроки(Отбор);

Для Каждого Зависимость Из Зависимости Цикл
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot лишний цикл

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removed the unnecessary debug logging loop. The code had redundant loops that were only logging included dependencies before the actual processing loop. Now each method has only one loop that does the actual work.

Commit: a8c01a2

Лог.Отладка("Включена зависимость: %1 (ДляРазработки: %2)", Зависимость.ИмяПакета, Зависимость.ДляРазработки);
КонецЦикла;

УстановленныеПакеты = ПолучитьУстановленныеПакеты();

Для Каждого Зависимость Из Зависимости Цикл
Expand All @@ -233,11 +246,24 @@

Процедура РазрешитьЗависимостиПакетаЛокально(Манифест, ПутьККаталогуЛокальныхЗависимостей, Знач УровеньЗависимости = 0)

Зависимости = Манифест.Зависимости();
Если Зависимости.Количество() = 0 Тогда
ВсеЗависимости = Манифест.Зависимости();
Если ВсеЗависимости.Количество() = 0 Тогда
Возврат;
КонецЕсли;

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

Зависимости = ВсеЗависимости.НайтиСтроки(Отбор);

Для Каждого Зависимость Из Зависимости Цикл
Лог.Отладка("Включена зависимость: %1 (ДляРазработки: %2)", Зависимость.ИмяПакета, Зависимость.ДляРазработки);
КонецЦикла;

УстановленныеПакеты = ПолучитьУстановленныеПакеты();

Для Каждого Зависимость Из Зависимости Цикл
Expand Down
Loading
Loading