diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/ibcmdrunner.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/ibcmdrunner.os" index 03fc5f3..9b6537b 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/ibcmdrunner.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/ibcmdrunner.os" @@ -6,6 +6,7 @@ #Использовать asserts #Использовать 1commands #Область ОписаниеПеременных + Перем Лог; Перем ПутьКПриложению; // Строка - путь к приложению ibcmd Перем ЭтоWindows; // Булево - Это ОС Windows @@ -1020,6 +1021,64 @@ КонецФункции +// ОписанияРасширений +// Возвращает список расширений информационной базы в виде массива соответствий. +// +// Возвращаемое значение: +// Массив - см. НовыйОписаниеРасширения() +// +Функция ОписанияРасширений() Экспорт + + ОписанияРасширений = Новый Массив; + + СписокРасширений = СписокРасширений(); + + Если Не ЗначениеЗаполнено(СписокРасширений) Тогда + Возврат ОписанияРасширений; + КонецЕсли; + + ИндикаторБлока = "name :"; + + Для Каждого БлокТекста Из СтроковыеФункции.РазложитьСтрокуВМассивПодстрок(СписокРасширений, ИндикаторБлока, Истина, Истина) Цикл + + СтрокиБлока = СтрРазделить(БлокТекста, Символы.ПС); + Если Не ЗначениеЗаполнено(СтрокиБлока) Тогда + Продолжить; + КонецЕсли; + + СтрокаСИменем = СтрокиБлока[0]; + СтрокаСИменем = СтрЗаменить(СтрокаСИменем, """", ""); + СтрокаСИменем = СтрЗаменить(СтрокаСИменем, символы.ВК, ""); + + СтрокиБлока.Удалить(0); + + ОписаниеРасширения = НовыйОписаниеРасширения(); + + ОписаниеРасширения.Вставить("name", СтрокаСИменем); + + Для Каждого СтрокаСвойства Из СтрокиБлока Цикл + + ИмяЗначение = СтрРазделить(СтрокаСвойства, ":", Ложь); + + ИмяСвойства = СокрЛП(ИмяЗначение[0]); + ЗначениеСвойства = СтрЗаменить(СокрЛП(ИмяЗначение[1]), """", ""); + + Если ТипЗнч(ОписаниеРасширения.Получить(ИмяСвойства)) = Тип("Булево") Тогда + ЗначениеСвойства = СтрокаВБулево(ЗначениеСвойства); + КонецЕсли; + + ОписаниеРасширения.Вставить(ИмяСвойства, ЗначениеСвойства); + + КонецЦикла; + + ОписанияРасширений.Добавить(ОписаниеРасширения); + + КонецЦикла; + + Возврат ОписанияРасширений; + +КонецФункции + // #КонецОбласти #КонецОбласти @@ -1241,6 +1300,25 @@ Возврат Рез; КонецФункции +// Для строки yes или no возвращает Булево +// Параметры: +// Значение - Строка - значение +// Возвращаемое значение: +// Булево +// +Функция СтрокаВБулево(Значение) + Ожидаем.Что(Значение).ИмеетТип("Строка"); + Результат = Ложь; + Если Значение = "yes" Тогда + Результат = Истина; + ИначеЕсли Значение = "no" Тогда + Результат = Ложь; + Иначе + ВызватьИсключение "Значение для преобразования в тип Булево должно быть только 'yes' или 'no'"; + КонецЕсли; + Возврат Результат; +КонецФункции + // Проверяет, что переданная строка удовлетворяет требованиям для имен 1С // Параметры: // Стр - Строка - проверяемая строка @@ -1329,4 +1407,22 @@ Версия(); КонецПроцедуры +Функция НовыйОписаниеРасширения() + + ОписаниеРасширения = Новый Соответствие(); + + ОписаниеРасширения.Вставить("version", ""); + ОписаниеРасширения.Вставить("active", Ложь); + ОписаниеРасширения.Вставить("purpose", ""); + ОписаниеРасширения.Вставить("safe-mode", Ложь); + ОписаниеРасширения.Вставить("security-profile-name", ""); + ОписаниеРасширения.Вставить("unsafe-action-protection", Ложь); + ОписаниеРасширения.Вставить("used-in-distributed-infobase", Ложь); + ОписаниеРасширения.Вставить("scope", ""); + ОписаниеРасширения.Вставить("hash-sum", ""); + + Возврат ОписаниеРасширения; + +КонецФункции + #КонецОбласти diff --git a/tests/ibcmdrunner-test.os b/tests/ibcmdrunner-test.os index 22dc824..b6367e9 100644 --- a/tests/ibcmdrunner-test.os +++ b/tests/ibcmdrunner-test.os @@ -58,6 +58,7 @@ СписокТестов.Добавить("ТестДолжен_УдалитьРасширение"); СписокТестов.Добавить("ТестДолжен_ВыгрузитьРасширениеВФайл"); СписокТестов.Добавить("ТестДолжен_ЗагрузитьРасширениеИзФайла"); + СписокТестов.Добавить("ТестДолжен_ПолучитьОписанияРасширений"); КонецЕсли; @@ -598,6 +599,25 @@ КонецПроцедуры +Процедура ТестДолжен_ПолучитьОписанияРасширений() Экспорт + УстановитьПараметрыВременнойИБ(); + ПутьКФайлуВыгрузки = ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures", "8_3_21", "1Cv8.dt"); + УправлениеИБ.СоздатьИБИзФайлаВыгрузки(ПутьКФайлуВыгрузки); + УправлениеИБ.УстановитьПараметрыАвторизацииИБ("admin", "admin"); + + УправлениеИБ.СоздатьРасширение("СуперРасширение", "ср", "ru = ""Расширение для всего""", "add-on"); + + ОписанияРасширений = УправлениеИБ.ОписанияРасширений(); + Утверждения.ПроверитьТип(ОписанияРасширений, "Массив", "Метод должен вернуть массив"); + Утверждения.ПроверитьИстину(ОписанияРасширений.Количество() = 1, "Метод должен вернуть массив с одним элементом"); + ОписаниеРасширения = ОписанияРасширений[0]; + Утверждения.ПроверитьТип(ОписаниеРасширения, "Соответствие", "Описание расширения должно быть соответствием"); + Утверждения.ПроверитьИстину(ОписаниеРасширения.Получить("name") = "СуперРасширение", + "В описании расширения должно быть свойство name с именем расширения"); + + УдалитьФайлы(ВременныйКаталог); +КонецПроцедуры + Процедура ТестДолжен_СоздатьПустуюФайловуюБазу() Экспорт // Дано