diff --git a/src/cmdline.os b/src/cmdline.os index ab864ca..4edbe5b 100644 --- a/src/cmdline.os +++ b/src/cmdline.os @@ -1,8 +1,11 @@ #Использовать logos +#Область ПеременныхМодуля + Перем Лог; Перем мПараметры; Перем мПозиционныеПараметры; +Перем мРезультатРазбора; Перем мКоманды; @@ -10,33 +13,37 @@ Перем мПозицияПозиционныхПараметров; Перем мМассивВходныхПараметров; +#КонецОбласти + +#Область ПрограммныйИнтерфейс + Функция ДобавитьПараметр(Знач ИмяПараметра, Знач Пояснение = "") Экспорт - Лог.Отладка("ДобавитьПараметр: ИмяПараметра <"+ИмяПараметра+">"); + Лог.Отладка("ДобавитьПараметр: ИмяПараметра <%1>", ИмяПараметра); - Возврат ДобавитьПараметрВТаблицу(мПозиционныеПараметры, ИмяПараметра, Пояснение, Ложь, Ложь); + Возврат ДобавитьПараметрВТаблицу(мПозиционныеПараметры, ИмяПараметра, Пояснение, Ложь, Ложь, Ложь); КонецФункции -Функция ДобавитьИменованныйПараметр(Знач ИмяПараметра, Знач Пояснение = "", Знач Глобальный = Ложь) Экспорт +Функция ДобавитьИменованныйПараметр(Знач ИмяПараметра, Знач Пояснение = "", Знач Глобальный = Ложь, Обязательный = Ложь) Экспорт - Лог.Отладка("ДобавитьИменованныйПараметр: ИмяПараметра <"+ИмяПараметра+">"); + Лог.Отладка("ДобавитьИменованныйПараметр: ИмяПараметра <%1>", ИмяПараметра); - Возврат ДобавитьПараметрВТаблицу(мПараметры, ИмяПараметра, Пояснение, Ложь, Глобальный); + Возврат ДобавитьПараметрВТаблицу(мПараметры, ИмяПараметра, Пояснение, Ложь, Глобальный, Обязательный); КонецФункции Функция ДобавитьПараметрФлаг(Знач ИмяПараметра, Знач Пояснение = "", Знач Глобальный = Ложь) Экспорт - Лог.Отладка("ДобавитьПараметрФлаг: ИмяПараметра <"+ИмяПараметра+">"); + Лог.Отладка("ДобавитьПараметрФлаг: ИмяПараметра <%1>", ИмяПараметра); - Возврат ДобавитьПараметрВТаблицу(мПараметры, ИмяПараметра, Пояснение, Истина, Глобальный); + Возврат ДобавитьПараметрВТаблицу(мПараметры, ИмяПараметра, Пояснение, Истина, Глобальный, Ложь); КонецФункции Функция ДобавитьПараметрКоллекция(Знач ИмяПараметра, Знач Пояснение = "") Экспорт - Лог.Отладка("ДобавитьПараметрКоллекция: ИмяПараметра <"+ИмяПараметра+">"); + Лог.Отладка("ДобавитьПараметрКоллекция: ИмяПараметра <%1>", ИмяПараметра); Возврат ДобавитьПараметрКоллекцияВТаблицу(мПозиционныеПараметры, ИмяПараметра, Пояснение); @@ -60,7 +67,7 @@ Если мКоманды.Получить(ИмяКоманды) <> Неопределено Тогда ВызватьИсключение СтрШаблон("Команда <%1> уже добавлена ранее, повторное добавление является ошибкой!", ИмяКоманды); КонецЕсли; - + мКоманды.Вставить(ИмяКоманды, ОписаниеКоманды); КонецПроцедуры @@ -72,27 +79,27 @@ КонецФункции Функция ДобавитьПозиционныйПараметрКоманды(Знач ОписаниеКоманды, Знач ИмяПараметра, Знач Пояснение = "") Экспорт - Лог.Отладка("Добавляю позиционный параметр "+ИмяПараметра); - Возврат ДобавитьПараметрВТаблицу(ОписаниеКоманды.ПозиционныеПараметры, ИмяПараметра, Пояснение, Ложь); + Лог.Отладка("Добавляю позиционный параметр %1", ИмяПараметра); + Возврат ДобавитьПараметрВТаблицу(ОписаниеКоманды.ПозиционныеПараметры, ИмяПараметра, Пояснение, Ложь, Ложь, Ложь); КонецФункции Функция ДобавитьИменованныйПараметрКоманды(Знач ОписаниеКоманды, Знач ИмяПараметра, Знач Пояснение = "") Экспорт - Лог.Отладка("Добавляю именованный параметр "+ИмяПараметра); - Возврат ДобавитьПараметрВТаблицу(ОписаниеКоманды.ИменованныеПараметры, ИмяПараметра, Пояснение, Ложь); + Лог.Отладка("Добавляю именованный параметр %1", ИмяПараметра); + Возврат ДобавитьПараметрВТаблицу(ОписаниеКоманды.ИменованныеПараметры, ИмяПараметра, Пояснение, Ложь, Ложь, Ложь); КонецФункции Функция ДобавитьПараметрФлагКоманды(Знач ОписаниеКоманды, Знач ИмяПараметра, Знач Пояснение = "") Экспорт - Лог.Отладка("Добавляю параметр-флаг "+ИмяПараметра); - Возврат ДобавитьПараметрВТаблицу(ОписаниеКоманды.ИменованныеПараметры, ИмяПараметра, Пояснение, Истина); + Лог.Отладка("Добавляю параметр-флаг %1", ИмяПараметра); + Возврат ДобавитьПараметрВТаблицу(ОписаниеКоманды.ИменованныеПараметры, ИмяПараметра, Пояснение, Истина, Ложь, Ложь); КонецФункции Функция ДобавитьПараметрКоллекцияКоманды(Знач ОписаниеКоманды, Знач ИмяПараметра, Знач Пояснение = "") Экспорт - Лог.Отладка("Добавляю параметр-коллекция "+ИмяПараметра); + Лог.Отладка("Добавляю параметр-коллекция %1", ИмяПараметра); Возврат ДобавитьПараметрКоллекцияВТаблицу(ОписаниеКоманды.ПозиционныеПараметры, ИмяПараметра, Пояснение); КонецФункции Функция ДобавитьИменованныйПараметрКоллекцияКоманды(Знач ОписаниеКоманды, Знач ИмяПараметра, Знач Пояснение = "") Экспорт - Лог.Отладка("Добавляю параметр-коллекция "+ИмяПараметра); + Лог.Отладка("Добавляю параметр-коллекция %1", ИмяПараметра); Возврат ДобавитьПараметрКоллекцияВТаблицу(ОписаниеКоманды.ИменованныеПараметры, ИмяПараметра, Пояснение); КонецФункции @@ -106,13 +113,13 @@ Если ОписаниеКоманды = Неопределено Тогда ВызватьИсключение "Неизвестная команда: " + МассивПараметров[0]; КонецЕсли; - Лог.Отладка("Разбор команды: " + ОписаниеКоманды.Команда); + Лог.Отладка("Разбор команды: %1", ОписаниеКоманды.Команда); ГлобальныеПараметры = мПараметры.НайтиСтроки(Новый Структура("ЭтоГлобальныйПараметр", Истина)); Для Каждого СтрГлобальныйПараметр Из ГлобальныеПараметры Цикл СтрСуществующий = ОписаниеКоманды.ИменованныеПараметры.Найти(СтрГлобальныйПараметр.Имя,"Имя"); Если СтрСуществующий = Неопределено Тогда - Лог.Отладка("Добавляю глобальный параметр: " + СтрГлобальныйПараметр.Имя); + Лог.Отладка("Добавляю глобальный параметр: %1", СтрГлобальныйПараметр.Имя); ЗаполнитьЗначенияСвойств(ОписаниеКоманды.ИменованныеПараметры.Добавить(), СтрГлобальныйПараметр,, "ЭтоГлобальныйПараметр"); КонецЕсли; КонецЦикла; @@ -156,12 +163,12 @@ мПозицияПозиционныхПараметров = 0; мПозицияВСпискеТокенов = 0; - РезультатРазбора = РазобратьАргументы(мПараметры, мПозиционныеПараметры); + мРезультатРазбора = РазобратьАргументы(мПараметры, мПозиционныеПараметры); Лог.Отладка("Трассировка РезультатКоманды.ЗначенияПараметров:"); - ВывестиРезультатРазбора(РезультатРазбора); + ВывестиРезультатРазбора(мРезультатРазбора); - Возврат РезультатРазбора; + Возврат мРезультатРазбора; КонецЕсли; КонецФункции @@ -172,7 +179,7 @@ Строка = Строка + Параметр + " "; КонецЦикла; Возврат Строка; -КонецФункции // СтрокаПараметров() +КонецФункции Функция СправкаПоПараметрам() Экспорт Возврат ТаблицаСправкаПоПараметрам(мПараметры, мПозиционныеПараметры, Ложь); @@ -222,7 +229,7 @@ Процедура ВывестиСправкуПоКомандам() Экспорт Сообщить("Возможные команды:"); - + ВозможныеКоманды = СправкаВозможныеКоманды(); МаксШирина = 0; @@ -233,23 +240,23 @@ МаксШирина = ТекШирина; КонецЕсли; КонецЦикла; - + Для Каждого Команда Из ВозможныеКоманды Цикл - Сообщить(" " + Лев(Команда.Команда + Поле, МаксШирина + 2) + "- " + Команда.Пояснение); + Сообщить(СтрШаблон(" %1 - %2" , Лев(Команда.Команда + Поле, МаксШирина + 2), Команда.Пояснение)); КонецЦикла; КонецПроцедуры Процедура ВывестиСправкуПоКоманде(Знач ИмяКоманды) Экспорт - + ВозможныеКоманды = СправкаВозможныеКоманды(); ОписаниеКоманды = ВозможныеКоманды.Найти(ИмяКоманды, "Команда"); Если ОписаниеКоманды = Неопределено Тогда - Сообщить("Команда отсуствует: " + ИмяКоманды); + Сообщить(СтрШаблон("Команда отсуствует: %1", ИмяКоманды)); Возврат; КонецЕсли; - - Сообщить("" + ОписаниеКоманды.Команда + " - " + ОписаниеКоманды.Пояснение); + + Сообщить(СтрШаблон("%1 - %2", ОписаниеКоманды.Команда , ОписаниеКоманды.Пояснение)); Сообщить("Параметры:"); Для Каждого СтрПараметр Из ОписаниеКоманды.Параметры Цикл Если Не СтрПараметр.ЭтоИменованныйПараметр Тогда @@ -261,6 +268,45 @@ КонецПроцедуры +// Проверяет наличие незаполненных обязательных параметров. +// Обязательными могут быть только именованные параметры. +// Обязательно именованного параметра определяется при добавлении +// +// Параметры: +// Объект - Произвольный - записываемый объект ссылочного типа. Например, СправочникОбъект. +// ВыводитьОшибки - Булево - Определяет выводить ли через Сообщить() ошибки в консоль, +// при этом параллельно записывает отладочную информацию в лог. +// Возвращаемое значение: +// Булево - Если заполнены все параметры, то возвращает Истина, в противном случае Ложь +// +Функция ОбязательныеПараметрыЗаполнены(ВыводитьОшибки = Ложь) Экспорт + + МассивНезаполненныхПараметров = мПараметры.НайтиСтроки(Новый Структура("Обязательный", Истина)); + + ВсеПараметрыЗаполнены = Истина; + + Для Каждого Строка Из МассивНезаполненныхПараметров Цикл + Если мРезультатРазбора[Строка.Имя] = Неопределено Тогда + + ВсеПараметрыЗаполнены = Ложь; + + Если ВыводитьОшибки И Лог.Уровень() > 0 Тогда + Сообщить(СтрШаблон("Не заполнен обязательный параметр %1", Строка.Имя)); + Иначе + Лог.Отладка("Не заполнен обязательный параметр %1", Строка.Имя); + КонецЕсли; + КонецЕсли; + + КонецЦикла; + + Возврат ВсеПараметрыЗаполнены; + +КонецФункции + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + Функция ТаблицаСправкаПоПараметрам(Знач ИменованныеПараметры, Знач ПозиционныеПараметры, Знач ДобавлятьГлобальныеПараметры) ТабРезультат = НоваяТаблицаПараметров(); @@ -277,7 +323,7 @@ ЗаполнитьЗначенияСвойств(СтрРезультат, Стр); СтрРезультат.ЭтоИменованныйПараметр = Истина; КонецЦикла; - + Если ДобавлятьГлобальныеПараметры Тогда ГлобальныеПараметры = мПараметры.НайтиСтроки(Новый Структура("ЭтоГлобальныйПараметр", Истина)); @@ -289,9 +335,9 @@ СтрРезультат.ЭтоИменованныйПараметр = Истина; КонецЕсли; КонецЦикла; - + КонецЕсли; - + Для Каждого Стр Из ПозиционныеПараметры.НайтиСтроки(Новый Структура("ЭтоКоллекция", Истина)) Цикл СтрРезультат = ТабРезультат.Добавить(); ЗаполнитьЗначенияСвойств(СтрРезультат, Стр); @@ -304,8 +350,8 @@ Процедура РазобратьИменованныйПараметр(Знач Токен, Значение, Знач ИменованныеПараметры, Знач РезультатРазбора) Перем ЗначениеТокена; - - Лог.Отладка("Это именованный параметр: " + Токен + " ?"); + + Лог.Отладка("Это именованный параметр: %1?", Токен); СтрПараметр = ИменованныеПараметры.Найти(Токен, "Имя"); //TODO: для параметров вида --param=value значение получаем сразу и передаем в процедуру, // а в случаи пустого получаем следующий параметр. @@ -321,8 +367,8 @@ Иначе РезультатРазбора[Токен] = ЗначениеТокена; КонецЕсли; - Лог.Отладка("Нашли значение именованного параметра: " + РезультатРазбора[Токен]); - + Лог.Отладка("Нашли значение именованного параметра: %1", РезультатРазбора[Токен]); + КонецПроцедуры Функция РазобратьАргументы(Знач ИменованныеПараметры, Знач ПозиционныеПараметры) @@ -331,20 +377,25 @@ РезультатРазбора = Новый Соответствие; Для Каждого СтрПараметр Из ИменованныеПараметры.НайтиСтроки(Новый Структура("ЭтоФлаг",Истина)) Цикл - Лог.Отладка("Сбрасываю параметр-флаг: " + СтрПараметр.Имя); + Лог.Отладка("Сбрасываю параметр-флаг: %1", СтрПараметр.Имя); РезультатРазбора[СтрПараметр.Имя] = Ложь; КонецЦикла; - + + Для Каждого СтрПараметр Из ИменованныеПараметры.НайтиСтроки(Новый Структура("Обязательный",Истина)) Цикл + Лог.Отладка("Создаю обязательный параметры: %1", СтрПараметр.Имя); + РезультатРазбора[СтрПараметр.Имя] = Неопределено; + КонецЦикла; + Если мМассивВходныхПараметров.Количество() = 0 Тогда Лог.Отладка("Параметров не передали."); Возврат РезультатРазбора; КонецЕсли; - + ТекущийПараметрКоллекция = Неопределено; Пока Истина Цикл Токен = СледующийТокен(); - Лог.Отладка("Выбран токен: " + Токен); + Лог.Отладка("Выбран токен: %1", Токен); Если Токен = Неопределено Тогда Лог.Отладка("Закончились токены"); @@ -362,9 +413,9 @@ Если ЭтоИменованныйПараметр(Токен, ИменованныеПараметры) Тогда РазобратьИменованныйПараметр(Токен, Неопределено, ИменованныеПараметры, РезультатРазбора); ИначеЕсли ЭтоПараметрФлаг(Токен, ИменованныеПараметры) Тогда - Лог.Отладка("Это параметр-флаг: " + Токен + " ?"); + Лог.Отладка("Это параметр-флаг: %1?",Токен); РезультатРазбора[Токен] = Истина; - Лог.Отладка("Нашли параметр-флаг: " + РезультатРазбора[Токен]); + Лог.Отладка("Нашли параметр-флаг: %1", РезультатРазбора[Токен]); ИначеЕсли СтрНайти(Токен, "=") > 0 И Лев(Токен, 2) = "--" Тогда Индекс = СтрНайти(Токен, "="); КлючТокена = Лев(Токен, Индекс-1); @@ -372,17 +423,17 @@ Если ЭтоИменованныйПараметр(СокрЛП(КлючТокена), ИменованныеПараметры) Тогда РазобратьИменованныйПараметр(КлючТокена, ЗначениеТокена, ИменованныеПараметры, РезультатРазбора); Иначе - ВызватьИсключение "Ожидается именованный параметр " + КлючТокена; + ВызватьИсключение СтрШаблон("Ожидается именованный параметр %1", КлючТокена); КонецЕсли; Иначе ОписаниеПараметра = СледующийПозиционныйПараметр(ПозиционныеПараметры); Если ОписаниеПараметра.ЭтоКоллекция Тогда - Лог.Отладка("Перехожу к чтению параметра-коллекции <"+ОписаниеПараметра.Имя+">"); + Лог.Отладка("Перехожу к чтению параметра-коллекции <%1>",ОписаниеПараметра.Имя); ТекущийПараметрКоллекция = Новый Массив; РезультатРазбора[ОписаниеПараметра.Имя] = ТекущийПараметрКоллекция; ТекущийПараметрКоллекция.Добавить(Токен); Иначе - Лог.Отладка("Установлено значение позиционного параметра <" + ОписаниеПараметра.Имя + " = " + Токен + ">"); + Лог.Отладка("Установлено значение позиционного параметра <%1=%2>", ОписаниеПараметра.Имя, Токен); РезультатРазбора[ОписаниеПараметра.Имя] = Токен; КонецЕсли; КонецЕсли; @@ -396,7 +447,7 @@ Процедура ВывестиРезультатРазбора(РезультатРазбора) Если Лог.Уровень() = УровниЛога.Отладка Тогда Для Каждого КлючЗначение Из РезультатРазбора Цикл - Лог.Отладка(" "+КлючЗначение.Ключ+":"+КлючЗначение.Значение); + Лог.Отладка(" %1:%2", КлючЗначение.Ключ, КлючЗначение.Значение); КонецЦикла; КонецЕсли; КонецПроцедуры @@ -415,19 +466,19 @@ Функция СледующийОбязательныйТокен(Знач ИскомыйПараметр) Токен = СледующийТокен(); Если Токен = Неопределено Тогда - ВызватьИсключение "Ожидается значение параметра " + ИскомыйПараметр; + ВызватьИсключение СтрШаблон("Ожидается значение параметра %1", ИскомыйПараметр); КонецЕсли; Возврат Токен; КонецФункции Функция ЭтоИменованныйПараметр(Знач Токен, Знач ИменованныеПараметры) - Лог.Отладка("Ищу именованный параметр "+Токен); + Лог.Отладка("Ищу именованный параметр %1", Токен); СтрПараметр = ИменованныеПараметры.Найти(Токен, "Имя"); Возврат СтрПараметр <> Неопределено и Не СтрПараметр.ЭтоФлаг; КонецФункции Функция ЭтоПараметрФлаг(Знач Токен, Знач ИменованныеПараметры) - Лог.Отладка("Ищу параметр-флаг "+Токен); + Лог.Отладка("Ищу параметр-флаг %1", Токен); СтрПараметр = ИменованныеПараметры.Найти(Токен, "Имя"); Возврат СтрПараметр <> Неопределено и СтрПараметр.ЭтоФлаг; КонецФункции @@ -462,30 +513,35 @@ Таблица.Колонки.Добавить("Пояснение"); Таблица.Колонки.Добавить("ЭтоГлобальныйПараметр"); Таблица.Колонки.Добавить("ЭтоКоллекция"); + Таблица.Колонки.Добавить("Обязательный"); Возврат Таблица; КонецФункции -Функция ДобавитьПараметрВТаблицу(Знач Таблица, Знач Имя, Знач Пояснение, Знач Флаг, Знач Глобальный = Ложь) +Функция ДобавитьПараметрВТаблицу(Знач Таблица, Имя, Пояснение, Флаг, Глобальный = Ложь, Обязательный = Ложь) + СтрПараметр = Таблица.Добавить(); - СтрПараметр.Имя = Строка(Имя); - СтрПараметр.ЭтоФлаг = Флаг; + + СтрПараметр.Имя = Строка(Имя); + СтрПараметр.ЭтоФлаг = Флаг; СтрПараметр.Пояснение = Пояснение; СтрПараметр.ЭтоГлобальныйПараметр = Глобальный; СтрПараметр.ЭтоКоллекция = Ложь; - - Возврат СтрПараметр; + СтрПараметр.Обязательный = Обязательный; + Возврат СтрПараметр; КонецФункции Функция ДобавитьПараметрКоллекцияВТаблицу(Знач Таблица, Знач Имя, Знач Пояснение) - - СтрПараметр = ДобавитьПараметрВТаблицу(Таблица, Имя, Пояснение, Ложь); + + СтрПараметр = ДобавитьПараметрВТаблицу(Таблица, Имя, Пояснение, Ложь, Ложь, Ложь); СтрПараметр.ЭтоКоллекция = Истина; - + Возврат СтрПараметр; - + КонецФункции +#КонецОбласти + Инит(); diff --git a/tests/cmdline-test.os b/tests/cmdline-test.os index 53f1614..4262a7a 100644 --- a/tests/cmdline-test.os +++ b/tests/cmdline-test.os @@ -39,6 +39,8 @@ СписокТестов.Добавить("ТестДолжен_ПрочитатьПараметрКоллекцияВКонце"); СписокТестов.Добавить("ТестДолжен_ПолучитьЗначениеПараметраЧерезРавно"); СписокТестов.Добавить("ТестДолжен_ПолучитьЗначениеПараметраЧерезРавноКомбинацияДругихПараметров"); + СписокТестов.Добавить("ТестДолжен_УспешноПроверитьУстановкуУстановленногоОбязательногоПараметра"); + СписокТестов.Добавить("ТестДолжен_ПодтвердитьНезаполненностьОбязательногоПараметра"); Возврат СписокТестов; @@ -47,30 +49,29 @@ Процедура ПередЗапускомТеста() Экспорт ПарсерКоманднойСтроки = Новый ПарсерАргументовКоманднойСтроки; - + Лог = Логирование.ПолучитьЛог("oscript.lib.cmdline"); Лог.УстановитьУровень(УровниЛога.Информация); КонецПроцедуры Процедура ПослеЗапускаТеста() Экспорт - ПарсерКоманднойСтроки = Неопределено; юТест.УдалитьВременныеФайлы(); Лог = Неопределено; КонецПроцедуры Процедура ТестДолжен_ПолучитьПараметрИЗначение() Экспорт - + // строка запуска - oscript test.os Параметр Значение или oscript test.os "Параметр" "Значение" ВходнойМассивПараметров = Новый Массив; ВходнойМассивПараметров.Добавить("Параметр"); ВходнойМассивПараметров.Добавить("Значение"); ПарсерКоманднойСтроки.ДобавитьИменованныйПараметр("Параметр"); - + Коллекция = ПарсерКоманднойСтроки.Разобрать(ВходнойМассивПараметров); - + Утверждения.ПроверитьРавенство(1, Коллекция.Количество()); Утверждения.ПроверитьРавенство("Значение", Коллекция.Получить("Параметр")); Утверждения.ПроверитьРавенство("Значение", Коллекция["Параметр"]); @@ -78,31 +79,31 @@ КонецПроцедуры Процедура ТестДолжен_ПроверитьМетод_ДобавитьПараметрФлаг() Экспорт - + // строка запуска - oscript test.os Параметр или oscript test.os "Параметр" ВходнойМассивПараметров = Новый Массив; ВходнойМассивПараметров.Добавить("Параметр"); ПарсерКоманднойСтроки.ДобавитьПараметрФлаг("Параметр"); - + Коллекция = ПарсерКоманднойСтроки.Разобрать(ВходнойМассивПараметров); - + Утверждения.ПроверитьРавенство(1, Коллекция.Количество()); Утверждения.ПроверитьРавенство(Истина, Коллекция.Получить("Параметр"), "Параметр"); КонецПроцедуры Процедура ТестДолжен_ПроверитьМетод_ДобавитьПараметрФлаг_КогдаПараметрФлагНеЗадан() Экспорт - + ВходнойМассивПараметров = Новый Массив; ВходнойМассивПараметров.Добавить("ДругойПараметр"); ВходнойМассивПараметров.Добавить("Значение"); ПарсерКоманднойСтроки.ДобавитьИменованныйПараметр("ДругойПараметр"); ПарсерКоманднойСтроки.ДобавитьПараметрФлаг("Параметр"); - + Коллекция = ПарсерКоманднойСтроки.Разобрать(ВходнойМассивПараметров); - + Утверждения.ПроверитьРавенство(2, Коллекция.Количество(), "Коллекция.Количество()"); Утверждения.ПроверитьРавенство(Ложь, Коллекция.Получить("Параметр"), "Параметр"); @@ -118,7 +119,7 @@ Аргументы = ПарсерКоманднойСтроки.Разобрать(ВходнойМассив); Флаг = Аргументы["flag"]; - + Ожидаем.Что(Флаг, "Значение Флаг").Равно(Ложь); КонецПроцедуры @@ -129,13 +130,13 @@ ПарсерКоманднойСтроки.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "flag"); ПарсерКоманднойСтроки.ДобавитьКоманду(ОписаниеКоманды); - + ВходнойМассив = Новый Массив; ВходнойМассив.Добавить("test"); Аргументы = ПарсерКоманднойСтроки.РазобратьКоманду(ВходнойМассив); Флаг = Аргументы.ЗначенияПараметров["flag"]; - + Ожидаем.Что(Флаг, "Значение Флаг").Равно(Ложь); КонецПроцедуры @@ -150,12 +151,11 @@ Для Каждого КлючЗначение Из НаборПараметров Цикл ВходнойМассивПараметров.Добавить(КлючЗначение.Ключ); ВходнойМассивПараметров.Добавить(КлючЗначение.Значение); - ПарсерКоманднойСтроки.ДобавитьИменованныйПараметр(КлючЗначение.Ключ); КонецЦикла; Коллекция = ПарсерКоманднойСтроки.Разобрать(ВходнойМассивПараметров); - + Утверждения.ПроверитьРавенство(НаборПараметров.Количество(), Коллекция.Количество()); Для Каждого КлючЗначение Из НаборПараметров Цикл Утверждения.ПроверитьРавенство(КлючЗначение.Значение, Коллекция.Получить(КлючЗначение.Ключ)); @@ -187,7 +187,7 @@ Утверждения.ПроверитьНеравенство(Неопределено, Результат, "Команда должна быть разобрана правильно"); Утверждения.ПроверитьРавенство("test", Результат.Команда, "Команда"); Утверждения.ПроверитьРавенство("testpath-value", Результат.ЗначенияПараметров["testpath"], "Значение позиционного параметра"); - + Утверждения.ПроверитьРавенство("1", Результат.ЗначенияПараметров["mode"], "Именованный ключ mode"); Утверждения.ПроверитьРавенство("2", Результат.ЗначенияПараметров["output"], "Именованный ключ output"); Утверждения.ПроверитьРавенство(Истина, Результат.ЗначенияПараметров["flag"], "Флаг flag"); @@ -204,7 +204,7 @@ ПарсерКоманднойСтроки.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "mode"); ПарсерКоманднойСтроки.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "verbose"); - + ПарсерКоманднойСтроки.ДобавитьКоманду(ОписаниеКоманды); ВходнойМассивПараметров = Новый Массив; @@ -221,11 +221,11 @@ Утверждения.ПроверитьРавенство("add", Результат.Команда, "Команда"); Утверждения.ПроверитьРавенство("testpath-value", Результат.ЗначенияПараметров["testpath"], "Значение позиционного параметра команды"); Утверждения.ПроверитьРавенство("dest-value", Результат.ЗначенияПараметров["dest"], "Значение позиционного параметра команды"); - + Утверждения.ПроверитьРавенство("on", Результат.ЗначенияПараметров["mode"], "Именованный ключ mode"); Утверждения.ПроверитьРавенство("2", Результат.ЗначенияПараметров["verbose"], "Именованный ключ verbose"); Утверждения.ПроверитьРавенство(4, Результат.ЗначенияПараметров.Количество()); - + КонецПроцедуры Процедура ТестДолжен_ПолучитьПараметрыКомандыИменованныйИлиПозиционныйПоВыбору() Экспорт @@ -281,7 +281,7 @@ Утверждения.ПроверитьНеравенство(Неопределено, Результат, "Команда должна быть разобрана правильно"); Утверждения.ПроверитьРавенство("test", Результат.Команда, "Команда"); Утверждения.ПроверитьРавенство("testpath-value", Результат.ЗначенияПараметров["testpath"], "Значение позиционного параметра"); - + Утверждения.ПроверитьРавенство("1", Результат.ЗначенияПараметров["mode"], "Именованный ключ mode"); Утверждения.ПроверитьРавенство("2", Результат.ЗначенияПараметров["output"], "Именованный ключ output"); Утверждения.ПроверитьРавенство(Истина, Результат.ЗначенияПараметров["flag"], "Флаг flag"); @@ -308,7 +308,7 @@ Утверждения.ПроверитьНеравенство(Неопределено, Результат, "Команда должна быть разобрана правильно"); Утверждения.ПроверитьРавенство("test", Результат.Команда, "Команда"); Утверждения.ПроверитьРавенство("path-value", Результат.ЗначенияПараметров["testpath"], "Значение позиционного параметра testpath"); - + Утверждения.ПроверитьРавенство(Истина, Результат.ЗначенияПараметров["flag"], "Глобальный параметр-флаг flag"); Утверждения.ПроверитьРавенство(2, Результат.ЗначенияПараметров.Количество()); @@ -318,7 +318,7 @@ ПарсерКоманднойСтроки.ДобавитьИменованныйПараметр("Параметр", "Это первый тестовый параметр"); ПарсерКоманднойСтроки.ДобавитьПараметр("Параметр1", "Это второй тестовый параметр"); - + СтрокиСправки = ПарсерКоманднойСтроки.СправкаПоПараметрам(); // позиционные параметры идут в справке сначала Утверждения.ПроверитьРавенство("Это второй тестовый параметр", СтрокиСправки[0].Пояснение); @@ -379,7 +379,7 @@ Утверждения.ПроверитьРавенство("пояснение" , Справка[1].Параметры[0].Пояснение); Утверждения.ПроверитьРавенство("описание общего" , Справка[1].Параметры[1].Пояснение); - // ПарсерКоманднойСтроки.ВывестиСправкуПоКоманде("ком1"); + ПарсерКоманднойСтроки.ВывестиСправкуПоКоманде("ком1"); КонецПроцедуры Процедура ТестДолжен_ОбработатьНеизвестныйТокен() Экспорт @@ -462,7 +462,6 @@ Утверждения.ПроверитьРавенство("2", Значения["-item"][1]); Утверждения.ПроверитьРавенство("3", Значения["-item"][2]); - КонецПроцедуры Процедура ТестДолжен_ПрочитатьПараметрКоллекцияВКонце() Экспорт @@ -487,57 +486,110 @@ Утверждения.ПроверитьРавенство("2", Значения["list"][1]); Утверждения.ПроверитьРавенство("3", Значения["list"][2]); - КонецПроцедуры Процедура ТестДолжен_ПолучитьЗначениеПараметраЧерезРавно() Экспорт - НаборПараметров = Новый Соответствие; - НаборПараметров.Вставить("--Команда", "Значение11"); - - ВходнойМассивПараметров = Новый Массив; - Для Каждого КлючЗначение Из НаборПараметров Цикл - ВходнойМассивПараметров.Добавить(КлючЗначение.Ключ+"="+КлючЗначение.Значение); - - ПарсерКоманднойСтроки.ДобавитьИменованныйПараметр(КлючЗначение.Ключ); - КонецЦикла; - - Коллекция = ПарсерКоманднойСтроки.Разобрать(ВходнойМассивПараметров); + НаборПараметров = Новый Соответствие; + НаборПараметров.Вставить("--Команда", "Значение11"); - Утверждения.ПроверитьРавенство(НаборПараметров.Количество(), Коллекция.Количество()); - Для Каждого КлючЗначение Из НаборПараметров Цикл - Утверждения.ПроверитьРавенство(КлючЗначение.Значение, Коллекция.Получить(КлючЗначение.Ключ)); - Утверждения.ПроверитьРавенство(КлючЗначение.Значение, Коллекция[КлючЗначение.Ключ]); - КонецЦикла; + ВходнойМассивПараметров = Новый Массив; + Для Каждого КлючЗначение Из НаборПараметров Цикл + ВходнойМассивПараметров.Добавить(КлючЗначение.Ключ+"="+КлючЗначение.Значение); + ПарсерКоманднойСтроки.ДобавитьИменованныйПараметр(КлючЗначение.Ключ); + КонецЦикла; + + Коллекция = ПарсерКоманднойСтроки.Разобрать(ВходнойМассивПараметров); + + Утверждения.ПроверитьРавенство(НаборПараметров.Количество(), Коллекция.Количество()); + Для Каждого КлючЗначение Из НаборПараметров Цикл + Утверждения.ПроверитьРавенство(КлючЗначение.Значение, Коллекция.Получить(КлючЗначение.Ключ)); + Утверждения.ПроверитьРавенство(КлючЗначение.Значение, Коллекция[КлючЗначение.Ключ]); + КонецЦикла; + КонецПроцедуры Процедура ТестДолжен_ПолучитьЗначениеПараметраЧерезРавноКомбинацияДругихПараметров() Экспорт - НаборПараметров = Новый Соответствие; - НаборПараметров.Вставить("--Команда", "Значение11"); - НаборПараметров.Вставить("Команда1", "--Значение11=вввв"); - НаборПараметров.Вставить("Команда2", "Значение11"); - НаборПараметров.Вставить("--Команда3", "Значение11=Значение3"); - НаборПараметров.Вставить("--Команда4", ""); - - ВходнойМассивПараметров = Новый Массив; - Для Каждого КлючЗначение Из НаборПараметров Цикл - Если Лев(КлючЗначение.Ключ, 2) = "--" Тогда - ВходнойМассивПараметров.Добавить(КлючЗначение.Ключ+"="+КлючЗначение.Значение); - Иначе - ВходнойМассивПараметров.Добавить(КлючЗначение.Ключ); - ВходнойМассивПараметров.Добавить(КлючЗначение.Значение); - КонецЕсли; - ПарсерКоманднойСтроки.ДобавитьИменованныйПараметр(КлючЗначение.Ключ); - КонецЦикла; - - Коллекция = ПарсерКоманднойСтроки.Разобрать(ВходнойМассивПараметров); + НаборПараметров = Новый Соответствие; + НаборПараметров.Вставить("--Команда", "Значение11"); + НаборПараметров.Вставить("Команда1", "--Значение11=вввв"); + НаборПараметров.Вставить("Команда2", "Значение11"); + НаборПараметров.Вставить("--Команда3", "Значение11=Значение3"); + НаборПараметров.Вставить("--Команда4", ""); + + ВходнойМассивПараметров = Новый Массив; + Для Каждого КлючЗначение Из НаборПараметров Цикл + Если Лев(КлючЗначение.Ключ, 2) = "--" Тогда + ВходнойМассивПараметров.Добавить(КлючЗначение.Ключ+"="+КлючЗначение.Значение); + Иначе + ВходнойМассивПараметров.Добавить(КлючЗначение.Ключ); + ВходнойМассивПараметров.Добавить(КлючЗначение.Значение); + КонецЕсли; + ПарсерКоманднойСтроки.ДобавитьИменованныйПараметр(КлючЗначение.Ключ); + КонецЦикла; + + Коллекция = ПарсерКоманднойСтроки.Разобрать(ВходнойМассивПараметров); + + Утверждения.ПроверитьРавенство(НаборПараметров.Количество(), Коллекция.Количество()); + Для Каждого КлючЗначение Из НаборПараметров Цикл + Утверждения.ПроверитьРавенство(КлючЗначение.Значение, Коллекция.Получить(КлючЗначение.Ключ)); + Утверждения.ПроверитьРавенство(КлючЗначение.Значение, Коллекция[КлючЗначение.Ключ]); + КонецЦикла; + +КонецПроцедуры + +Процедура ТестДолжен_УспешноПроверитьУстановкуУстановленногоОбязательногоПараметра() Экспорт + + ВходнойМассивПараметров = Новый Массив; + ВходнойМассивПараметров.Добавить("СтранныйКварк"); + ВходнойМассивПараметров.Добавить("111"); + ВходнойМассивПараметров.Добавить("ОчарованныйКварк"); + ВходнойМассивПараметров.Добавить("222"); + + ПарсерКоманднойСтроки.ДобавитьИменованныйПараметр( + "СтранныйКварк", + НСтр("ru='Описание обязательного параметра'"), + , + Ложь); + + ПарсерКоманднойСтроки.ДобавитьИменованныйПараметр( + "ОчарованныйКварк", + НСтр("ru='Описание обязательного параметра'"), + , + Истина); + + Коллекция = ПарсерКоманднойСтроки.Разобрать(ВходнойМассивПараметров); + + Утверждения.ПроверитьРавенство(Истина, ПарсерКоманднойСтроки.ОбязательныеПараметрыЗаполнены()); + Утверждения.ПроверитьРавенство(Истина, ПарсерКоманднойСтроки.ОбязательныеПараметрыЗаполнены(Истина)); + Утверждения.ПроверитьРавенство(Истина, ПарсерКоманднойСтроки.ОбязательныеПараметрыЗаполнены(Ложь)); - Утверждения.ПроверитьРавенство(НаборПараметров.Количество(), Коллекция.Количество()); - Для Каждого КлючЗначение Из НаборПараметров Цикл - Утверждения.ПроверитьРавенство(КлючЗначение.Значение, Коллекция.Получить(КлючЗначение.Ключ)); - Утверждения.ПроверитьРавенство(КлючЗначение.Значение, Коллекция[КлючЗначение.Ключ]); - КонецЦикла; - КонецПроцедуры + +Процедура ТестДолжен_ПодтвердитьНезаполненностьОбязательногоПараметра() Экспорт + + ВходнойМассивПараметров = Новый Массив; + ВходнойМассивПараметров.Добавить("ПрелестныйКварк"); + ВходнойМассивПараметров.Добавить("111"); + + ПарсерКоманднойСтроки.ДобавитьИменованныйПараметр( + "ПрелестныйКварк", + НСтр("ru='Описание обязательного параметра'"), + , + Ложь); + + ПарсерКоманднойСтроки.ДобавитьИменованныйПараметр( + "ОчарованныйКварк", + НСтр("ru='Описание обязательного параметра'"), + , + Истина); + + Коллекция = ПарсерКоманднойСтроки.Разобрать(ВходнойМассивПараметров); + + Утверждения.ПроверитьРавенство(Ложь, ПарсерКоманднойСтроки.ОбязательныеПараметрыЗаполнены()); + Утверждения.ПроверитьРавенство(Ложь, ПарсерКоманднойСтроки.ОбязательныеПараметрыЗаполнены(Истина)); + Утверждения.ПроверитьРавенство(Ложь, ПарсерКоманднойСтроки.ОбязательныеПараметрыЗаполнены(Ложь)); + +КонецПроцедуры \ No newline at end of file