diff --git a/features/cmd/plugins-path.feature b/features/cmd/plugins-path.feature new file mode 100644 index 00000000..4d167247 --- /dev/null +++ b/features/cmd/plugins-path.feature @@ -0,0 +1,51 @@ +# language: ru + +Функционал: Передача полного пути к платформе 1С + Как Пользователь + Я хочу иметь возможность указать каталог плагинов приложения + Чтобы иметь возможность запускать синхронизацию с указанием каталога плагинов + +Контекст: Тестовый контекст + Когда Я очищаю параметры команды "gitsync" в контексте + И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке + И Я создаю временный каталог и сохраняю его в переменной "РабочийКаталог" + И Я устанавливаю рабочей каталог из переменной "РабочийКаталог" + +Сценарий: Переменные среды + Допустим Я собираю тестовый плагин и сохраняю в контекст "ПутьКФайлуПлагина" + И Я создаю временный каталог и сохраняю его в переменной "КаталогПлагинов" + И Я устанавливаю переменную окружения "GITSYNC_PLUGINS_PATH" из переменной "КаталогПлагинов" + И Я добавляю параметр "plugins" для команды "gitsync" + И Я добавляю параметр "install" для команды "gitsync" + И Я добавляю параметр "-f" для команды "gitsync" из переменной "ПутьКФайлуПлагина" + Когда Я выполняю команду "gitsync" + И Я очищаю параметры команды "gitsync" в контексте + И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке + И Я добавляю параметр "plugins" для команды "gitsync" + И Я добавляю параметр "enable" для команды "gitsync" + И Я добавляю параметр "test_plugin" для команды "gitsync" + Когда Я выполняю команду "gitsync" + Тогда Вывод команды "gitsync" не содержит "Внешнее исключение" + И Код возврата команды "gitsync" равен 0 + И В каталоге "КаталогПлагинов" есть файлы плагинов + И Я очищаю значение переменных окружения + |GITSYNC_PLUGINS_PATH| + +Сценарий: Каталог приложения + Допустим Я собираю тестовый плагин и сохраняю в контекст "ПутьКФайлуПлагина" + И Я создаю каталог приложения в рабочем каталоге + И Я добавляю параметр "plugins" для команды "gitsync" + И Я добавляю параметр "install" для команды "gitsync" + И Я добавляю параметр "-f" для команды "gitsync" из переменной "ПутьКФайлуПлагина" + Когда Я выполняю команду "gitsync" + И Я очищаю параметры команды "gitsync" в контексте + И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке + И Я добавляю параметр "plugins" для команды "gitsync" + И Я добавляю параметр "enable" для команды "gitsync" + И Я добавляю параметр "test_plugin" для команды "gitsync" + Когда Я выполняю команду "gitsync" + Тогда Вывод команды "gitsync" не содержит "Внешнее исключение" + И Код возврата команды "gitsync" равен 0 + И В каталоге "КаталогПлагинов" есть файлы плагинов + + \ No newline at end of file diff --git a/features/cmd/step_definitions/plugins-path.os b/features/cmd/step_definitions/plugins-path.os new file mode 100644 index 00000000..a7b3a828 --- /dev/null +++ b/features/cmd/step_definitions/plugins-path.os @@ -0,0 +1,75 @@ +// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd +#Использовать fs + +Перем БДД; //контекст фреймворка 1bdd + +// Метод выдает список шагов, реализованных в данном файле-шагов +Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт + БДД = КонтекстФреймворкаBDD; + + ВсеШаги = Новый Массив; + + ВсеШаги.Добавить("ВКаталогеЕстьФайлыПлагинов"); + ВсеШаги.Добавить("ЯСоздаюКаталогПриложенияВРабочемКаталоге"); + + Возврат ВсеШаги; +КонецФункции + +// Реализация шагов + +// Процедура выполняется перед запуском каждого сценария +Процедура ПередЗапускомСценария(Знач Узел) Экспорт + +КонецПроцедуры + +// Процедура выполняется после завершения каждого сценария +Процедура ПослеЗапускаСценария(Знач Узел) Экспорт + +КонецПроцедуры + + +//В каталоге "КаталогПлагинов" есть файлы плагинов +Процедура ВКаталогеЕстьФайлыПлагинов(Знач ИмяКаталогПлагинов) Экспорт + + КаталогПлагинов = БДД.ПолучитьИзКонтекста(ИмяКаталогПлагинов); + + ФайлТестовогоПлагина= ОбъединитьПути(КаталогПлагинов, "test_plugin"); + + МассивФайлов = НайтиФайлы(КаталогПлагинов, ПолучитьМаскуВсеФайлы()); + + Если МассивФайлов.Количество() = 0 Тогда + ВызватьИсключение "Файлы в каталоге плагинов не найдены"; + КонецЕсли; + + СообщитьСписокФайловВКаталоге(КаталогПлагинов); + + Если НЕ ФС.КаталогСуществует(ФайлТестовогоПлагина) Тогда + ВызватьИсключение "Каталог тестового плагина не найден"; + КонецЕсли; + + Если НЕ ФС.ФайлСуществует(ОбъединитьПути(КаталогПлагинов, "gitsync-plugins.json")) Тогда + ВызватьИсключение "Файл настройки плагинов не найден"; + КонецЕсли; + + +КонецПроцедуры + +//Я создаю каталог приложения в рабочем каталоге +Процедура ЯСоздаюКаталогПриложенияВРабочемКаталоге() Экспорт + + РабочийКаталог = ТекущийКаталог(); + + ФС.ОбеспечитьПустойКаталог(".gitsync"); + +КонецПроцедуры + + +Процедура СообщитьСписокФайловВКаталоге(ПутьККаталогу) + + МассивФайлов = НайтиФайлы(ПутьККаталогу, ПолучитьМаскуВсеФайлы()); + + Для каждого Файл Из МассивФайлов Цикл + Сообщить(Файл.ПолноеИмя); + КонецЦикла; + +КонецПроцедуры diff --git "a/src/cmd/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" "b/src/cmd/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" index f59868ee..13b3880f 100644 --- "a/src/cmd/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" +++ "b/src/cmd/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217.os" @@ -1,21 +1,32 @@ #Использовать logos #Использовать tempfiles +#Использовать fs Перем ЛогПриложения; Перем ОбщиеПараметры; Перем ОбщийКаталогДанныхПриложения; Перем СохрКаталогПриложения; Перем ЭтоПриложениеEXE; +Перем КаталогПлагинов; +Перем ИмяКаталогаПлагинов; +Перем ИмяКаталогаПриложения; +Перем ИмяФайлаНастройкиПриложения; Процедура Инициализация() + ОбщиеПараметры = Новый Структура(); - ОбщиеПараметры.Вставить("Плагины", Новый Массив); ОбщиеПараметры.Вставить("ВерсияПлатформы", "8.3"); ОбщиеПараметры.Вставить("ПутьКПлатформе", ""); ОбщиеПараметры.Вставить("ДоменПочты", "localhost"); ОбщиеПараметры.Вставить("ПутьКГит", ""); + ИмяКаталогаПлагинов = "plugins"; + ИмяКаталогаПриложения = ".gitsync"; + ИмяФайлаНастройкиПриложения = "config.json"; + + ОпределитьКаталогПлагинов(); + КонецПроцедуры Функция ЭтоСборкаEXE() Экспорт @@ -79,12 +90,94 @@ КонецФункции -Функция КаталогПлагинов() Экспорт +Функция КаталогПлагиновПоУмолчанию() Возврат ОбъединитьПути(ПолучитьЛокальныйКаталогДанныхПриложения(), "plugins"); КонецФункции +Функция КаталогПлагинов() Экспорт + Возврат КаталогПлагинов; +КонецФункции + +Процедура ОпределитьКаталогПлагинов() + + КаталогПлагинов = ""; + + Если УстановитьКаталогИзПеременныхСреды() Тогда + + Возврат; + + ИначеЕсли ПроверитьТекущийКаталог() Тогда + + Возврат ; + + Иначе + + КаталогПлагинов = КаталогПлагиновПоУмолчанию(); + + КонецЕсли; + +КонецПроцедуры + +Функция УстановитьКаталогИзПеременныхСреды() + + МассивИменПеременныхСреды = "GITSYNC_PLUGINS_PATH GITSYNC_PLUGINS_DIR GITSYNC_PL_DIR"; + + МассивПеременныхСреды = СтрРазделить(МассивИменПеременныхСреды, " ", Ложь); + + Для каждого ПеременнаяСреды Из МассивПеременныхСреды Цикл + + КаталогПлагинов = ПолучитьПеременнуюСреды(ПеременнаяСреды); + + Если ЗначениеЗаполнено(КаталогПлагинов) Тогда + Возврат Истина; + КонецЕсли; + + КонецЦикла; + + Возврат Ложь; + +КонецФункции + +Функция ПроверитьТекущийКаталог() Экспорт + + РабочийКаталог = ТекущийКаталог(); + + ПутьККаталогуПриложения = ОбъединитьПути(РабочийКаталог, ИмяКаталогаПриложения); + + Если НЕ ФС.КаталогСуществует(ПутьККаталогуПриложения) Тогда + Возврат Ложь; + КонецЕсли; + + ПутьКФайлуНастройки = ОбъединитьПути(ПутьККаталогуПриложения, ИмяФайлаНастройкиПриложения); + + Если НЕ ФС.ФайлСуществует(ПутьКФайлуНастройки) Тогда + + ПрочитатьНастройкиПриложенияИзФайла(ПутьКФайлуНастройки); + + Если ЗначениеЗаполнено(КаталогПлагинов) Тогда + + Возврат Истина; // Подумать если не задано что делать + + КонецЕсли; + + КонецЕсли; + + КаталогПлагинов = ОбъединитьПути(ПутьККаталогуПриложения, ИмяКаталогаПлагинов); + + Если ФС.КаталогСуществует(КаталогПлагинов) Тогда + ФС.ОбеспечитьКаталог(КаталогПлагинов); + КонецЕсли; + + Возврат Истина; + +КонецФункции + +Процедура ПрочитатьНастройкиПриложенияИзФайла(ПутьКФайлуНастройки) + // TODO Сделать чтение настройки из файла +КонецПроцедуры + Функция ФайлВключенныхПлагинов() Экспорт - Возврат ОбъединитьПути(ПолучитьЛокальныйКаталогДанныхПриложения(), "gitsync-plugins.json"); + Возврат ОбъединитьПути(КаталогПлагинов(), "gitsync-plugins.json"); КонецФункции Функция ИмяФайлаНастройкиПакетнойСинхронизации() Экспорт @@ -123,6 +216,11 @@ ВременныеФайлы.БазовыйКаталог = ФайлБазовыйКаталог.ПолноеИмя; + // Это специально для 1С + УстановитьПеременнуюСреды("TEMP", Каталог); + УстановитьПеременнуюСреды("Temp", Каталог); + УстановитьПеременнуюСреды("Tmp", Каталог); + КонецЕсли; КонецПроцедуры