mirror of
https://github.com/alei1180/curlone.git
synced 2025-11-24 22:53:34 +02:00
feat(cli): Добавление исходников библиотеки cli
This commit is contained in:
16
lib/cli/tests/fixtures/КомандаСМассивами.os
vendored
Normal file
16
lib/cli/tests/fixtures/КомандаСМассивами.os
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
|
||||
|
||||
Перем МассивДат Экспорт;
|
||||
|
||||
Процедура ПриСозданииОбъекта()
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОписаниеКоманды(КомандаПриложения) Экспорт
|
||||
ТекКоманда = КомандаПриложения.Опция("a datearray",,"Массив дат");
|
||||
ТекКоманда.ТМассивДат("yyyy-MM-dd", ";");
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ВыполнитьКоманду(КомандаПриложения) Экспорт
|
||||
МассивДат = КомандаПриложения.ЗначениеОпции("a")
|
||||
КонецПроцедуры
|
||||
32
lib/cli/tests/fixtures/ТестовоеПриложение.os
vendored
Normal file
32
lib/cli/tests/fixtures/ТестовоеПриложение.os
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
#Использовать "../../src/core"
|
||||
|
||||
Процедура ВыполнитьПриложение()
|
||||
|
||||
Приложение = Новый КонсольноеПриложение( "my-tests",
|
||||
"Мое описание");
|
||||
Приложение.Версия("v version", "0.1.0");
|
||||
|
||||
// Приложение.ДобавитьКоманду(
|
||||
// "m make", "",
|
||||
// Новый );
|
||||
|
||||
// Приложение.УстановитьОсновноеДействие(ЭтотОбъект);
|
||||
Приложение.Запустить(АргументыКоманднойСтроки);
|
||||
|
||||
КонецПроцедуры // ВыполнениеКоманды()
|
||||
|
||||
// Процедура ВыполнитьКоманду(Знач КомандаПриложения) Экспорт
|
||||
// КомандаПриложения.ВывестиСправку();
|
||||
// КонецПроцедуры
|
||||
|
||||
Попытка
|
||||
|
||||
ВыполнитьПриложение();
|
||||
ЗавершитьРаботу(0);
|
||||
|
||||
Исключение
|
||||
|
||||
Сообщить(ОписаниеОшибки());
|
||||
ЗавершитьРаботу(1);
|
||||
|
||||
КонецПопытки;
|
||||
133
lib/cli/tests/АргументыПарсера_test.os
Normal file
133
lib/cli/tests/АргументыПарсера_test.os
Normal file
@@ -0,0 +1,133 @@
|
||||
#использовать "../src/core"
|
||||
#Использовать asserts
|
||||
#Использовать logos
|
||||
|
||||
Перем юТест;
|
||||
Перем Лог;
|
||||
|
||||
Функция ПолучитьСписокТестов(Знач Тестирование) Экспорт
|
||||
|
||||
юТест = Тестирование;
|
||||
|
||||
ИменаТестов = Новый Массив;
|
||||
|
||||
ИменаТестов.Добавить("ТестДолжен_ПроверитьПарсингАргументов");
|
||||
ИменаТестов.Добавить("ТестДолжен_ПроверитьПарсингАргументовПослеСбросаОпций");
|
||||
|
||||
Возврат ИменаТестов;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ТестДолжен_ПроверитьПарсингАргументов() Экспорт
|
||||
|
||||
ARG = Аргумент("ARG", Ложь).Флаг();
|
||||
SRC = Аргумент("SRC", "").ТСтрока();
|
||||
INT = Аргумент("INT", "").ТЧисло();
|
||||
DATE = Аргумент("DATE", "").ТДата();
|
||||
|
||||
ИндексАргументов = Новый Соответствие;
|
||||
ИндексАргументов.Вставить("ARG", ARG);
|
||||
ИндексАргументов.Вставить("SRC", SRC);
|
||||
ИндексАргументов.Вставить("INT", INT);
|
||||
ИндексАргументов.Вставить("DATE", DATE);
|
||||
|
||||
ТестовыеСлучаи = Новый Массив;
|
||||
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-f x", "-f", Неопределено));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("a", "", "a"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("", "", Неопределено));
|
||||
|
||||
Для каждого Тест Из ТестовыеСлучаи Цикл
|
||||
НачальноеКоличество = Тест.Аргументы.Количество();
|
||||
|
||||
Лог.Отладка("Проверяю тестовый случай: %1", СтрСоединить(Тест.Аргументы, " "));
|
||||
|
||||
|
||||
Для каждого КлючЗначение Из ИндексАргументов Цикл
|
||||
|
||||
Парсер_Аргумента = Новый АргументыПарсера(КлючЗначение.Значение);
|
||||
Утверждения.ПроверитьРавенство(КлючЗначение.Ключ, Парсер_Аргумента.ВСтроку(), "Парсер аргументов должен быть равен "+ КлючЗначение.Ключ);
|
||||
|
||||
Контекст = Новый КонтекстПарсеров();
|
||||
Результат = Парсер_Аргумента.Поиск(Тест.Аргументы, Контекст);
|
||||
|
||||
Утверждения.ПроверитьРавенство(НачальноеКоличество, Тест.Аргументы.Количество(), "Количество аргументов не должно измениться");
|
||||
|
||||
Если Тест.ЗначениеОпции = Неопределено Тогда
|
||||
Утверждения.ПроверитьЛожь(Результат.РезультатПоиска, "Аргумент не должен быть найден");
|
||||
Иначе
|
||||
Утверждения.ПроверитьИстину(Результат.РезультатПоиска, "Аргумент должен быть найден");
|
||||
Утверждения.ПроверитьРавенство(1, Контекст.Аргументы[Парсер_Аргумента.Аргумент].Количество(), "Количество результатов должно быть 1");
|
||||
Утверждения.ПроверитьРавенство(Контекст.Аргументы[Парсер_Аргумента.Аргумент][0], Тест.ЗначениеОпции, "Ожидаемые результаты должны быть равны");
|
||||
Утверждения.ПроверитьРавенство(СтрСоединить(Результат.Аргументы, " "), СтрСоединить(Тест.АргументыВыхода, " "), "Аргументы выходные должны быть равны");
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ТестовыйСлучай(Знач Аргументы, Знач АргументыВыхода, Знач ЗначениеОпции)
|
||||
|
||||
Тест = Новый Структура;
|
||||
Тест.Вставить("Аргументы", СтрРазделить(Аргументы," "));
|
||||
Тест.Вставить("АргументыВыхода", СтрРазделить(АргументыВыхода," "));
|
||||
Тест.Вставить("ЗначениеОпции", ЗначениеОпции);
|
||||
|
||||
Возврат Тест;
|
||||
КонецФункции
|
||||
|
||||
Процедура ТестДолжен_ПроверитьПарсингАргументовПослеСбросаОпций() Экспорт
|
||||
|
||||
ARG = Аргумент("ARG", Ложь).Флаг();
|
||||
SRC = Аргумент("SRC", "").ТСтрока();
|
||||
INT = Аргумент("INT", "").ТЧисло();
|
||||
DATE = Аргумент("DATE", "").ТДата();
|
||||
|
||||
ИндексАргументов = Новый Соответствие;
|
||||
ИндексАргументов.Вставить("ARG", ARG);
|
||||
ИндексАргументов.Вставить("SRC", SRC);
|
||||
ИндексАргументов.Вставить("INT", INT);
|
||||
ИндексАргументов.Вставить("DATE", DATE);
|
||||
|
||||
ТестовыеСлучаи = Новый Массив;
|
||||
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-f -x", "-x", "-f"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-a", "", "-a"));
|
||||
|
||||
Для каждого Тест Из ТестовыеСлучаи Цикл
|
||||
НачальноеКоличество = Тест.Аргументы.Количество();
|
||||
|
||||
Лог.Отладка("Проверяю тестовый случай: %1", СтрСоединить(Тест.Аргументы, " "));
|
||||
|
||||
|
||||
Для каждого КлючЗначение Из ИндексАргументов Цикл
|
||||
|
||||
Парсер_Аргумента = Новый АргументыПарсера(КлючЗначение.Значение);
|
||||
Утверждения.ПроверитьРавенство(КлючЗначение.Ключ, Парсер_Аргумента.ВСтроку(), "Парсер аргументов должен быть равен "+ КлючЗначение.Ключ);
|
||||
|
||||
Контекст = Новый КонтекстПарсеров();
|
||||
Контекст.СбросОпций = Истина;
|
||||
Результат = Парсер_Аргумента.Поиск(Тест.Аргументы, Контекст);
|
||||
|
||||
Утверждения.ПроверитьРавенство(НачальноеКоличество, Тест.Аргументы.Количество(), "Количество аргументов не должно измениться");
|
||||
|
||||
Утверждения.ПроверитьИстину(Результат.РезультатПоиска, "Аргумент должен быть найден");
|
||||
Утверждения.ПроверитьРавенство(1, Контекст.Аргументы[Парсер_Аргумента.Аргумент].Количество(), "Количество результатов должно быть 1");
|
||||
Утверждения.ПроверитьРавенство(Контекст.Аргументы[Парсер_Аргумента.Аргумент][0], Тест.ЗначениеОпции, "Ожидаемые результаты должны быть равны");
|
||||
Утверждения.ПроверитьРавенство(СтрСоединить(Результат.Аргументы, " "), СтрСоединить(Тест.АргументыВыхода, " "), "Аргументы выходные должны быть равны");
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецЦикла;
|
||||
КонецПроцедуры
|
||||
|
||||
Функция Аргумент(Наименование, ЗначениеПоУмолчанию)
|
||||
Возврат Новый ПараметрКоманды("Аргумент", Наименование, ЗначениеПоУмолчанию, "Тестовый параметр f")
|
||||
КонецФункции
|
||||
|
||||
Лог = Логирование.ПолучитьЛог("oscript.lib.cli_class_arg");
|
||||
//Лог.УстановитьУровень(УровниЛога.Отладка);
|
||||
212
lib/cli/tests/ВсеОпцииПарсера_test.os
Normal file
212
lib/cli/tests/ВсеОпцииПарсера_test.os
Normal file
@@ -0,0 +1,212 @@
|
||||
#использовать "../src/core"
|
||||
#Использовать asserts
|
||||
#Использовать logos
|
||||
|
||||
Перем юТест;
|
||||
Перем Лог;
|
||||
|
||||
Функция ПолучитьСписокТестов(Знач Тестирование) Экспорт
|
||||
|
||||
юТест = Тестирование;
|
||||
|
||||
ИменаТестов = Новый Массив;
|
||||
|
||||
ИменаТестов.Добавить("ТестДолжен_ПроверитьПарсингВсеОпции");
|
||||
ИменаТестов.Добавить("ТестДолжен_ПроверитьПарсингМассивовВсеОпции");
|
||||
|
||||
Возврат ИменаТестов;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ТестовыйСлучай(Знач Аргументы, Знач АргументыВыхода, Знач ЗначениеОпции)
|
||||
|
||||
Тест = Новый Структура;
|
||||
Тест.Вставить("Аргументы", СтрРазделить(Аргументы," "));
|
||||
Тест.Вставить("АргументыВыхода", СтрРазделить(АргументыВыхода," "));
|
||||
Тест.Вставить("ЗначениеОпции", СтрРазделить(ЗначениеОпции," "));
|
||||
|
||||
Возврат Тест;
|
||||
КонецФункции
|
||||
|
||||
Процедура ТестДолжен_ПроверитьПарсингВсеОпции() Экспорт
|
||||
|
||||
НаименованияОпции = Новый Массив;
|
||||
НаименованияОпции.Добавить("-f");
|
||||
НаименованияОпции.Добавить("-F");
|
||||
НаименованияОпции.Добавить("--force");
|
||||
НаименованияОпции.Добавить("-o");
|
||||
НаименованияОпции.Добавить("--other");
|
||||
|
||||
МассивОпций = Новый Массив;
|
||||
МассивОпций.Добавить(Опция("o other", "").ТСтрока());
|
||||
МассивОпций.Добавить(Опция("o other", "").ТДата());
|
||||
МассивОпций.Добавить(Опция("o other", "").ТЧисло());
|
||||
ОпцияForce = Опция("f F force", Ложь).Флаг();
|
||||
|
||||
ТестовыеСлучаи = Новый Массив;
|
||||
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-f x", "x", "Истина null"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-f=false y", "y", "Ложь null"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("--force x", "x", "Истина null"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("--force=true y", "y", "истина null"));
|
||||
|
||||
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-o x", "", "null x"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-o=x y", "y", "null x"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-ox y", "y", "null x"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("--other x", "", "null x"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("--other=x y", "y", "null x"));
|
||||
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-f -o x y", "y", "истина x"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-o x -f y", "y", "истина x"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-fo x y", "y", "истина x"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-foxxx y", "y", "истина xxx"));
|
||||
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-Foxxx y", "y", "истина xxx"));
|
||||
|
||||
|
||||
Для каждого Тест Из ТестовыеСлучаи Цикл
|
||||
|
||||
|
||||
Для каждого ОпцияТеста Из МассивОпций Цикл
|
||||
НачальноеКоличество = Тест.Аргументы.Количество();
|
||||
Лог.Отладка("Проверяю тестовый случай: %1", СтрСоединить(Тест.Аргументы, " "));
|
||||
Лог.Отладка("-> тип опции: %1", ОпцияForce.ТипОпции);
|
||||
|
||||
ИндексОпций = Новый Соответствие;
|
||||
ИндексОпций.Вставить("-f", ОпцияForce);
|
||||
ИндексОпций.Вставить("-F", ОпцияForce);
|
||||
ИндексОпций.Вставить("--force", ОпцияForce);
|
||||
ИндексОпций.Вставить("-o", ОпцияТеста);
|
||||
ИндексОпций.Вставить("--other", ОпцияТеста);
|
||||
|
||||
Опции = Новый Соответствие;
|
||||
Опции.Вставить(ОпцияТеста, ОпцияТеста);
|
||||
Опции.Вставить(ОпцияForce, ОпцияForce);
|
||||
|
||||
АргументыТеста = Тест.Аргументы;
|
||||
О_Парсера = Новый ВсеОпцииПарсера(Опции, ИндексОпций);
|
||||
Утверждения.ПроверитьРавенство("-of", О_Парсера.ВСтроку(), "Парсер опции должен быть равен -of");
|
||||
|
||||
Контекст = Новый КонтекстПарсеров();
|
||||
Результат = О_Парсера.Поиск(АргументыТеста, Контекст);
|
||||
Утверждения.ПроверитьИстину(Результат.РезультатПоиска, "Опции должны быть найдены");
|
||||
Утверждения.ПроверитьРавенство(НачальноеКоличество, Тест.Аргументы.Количество(), "Количество аргументов не должно измениться");
|
||||
|
||||
Утверждения.ПроверитьРавенство(СтрСоединить(Результат.Аргументы, " "), СтрСоединить(Тест.АргументыВыхода, " "), "Аргументы выходные должны быть равны");
|
||||
Если Не Контекст.Опции[ОпцияForce] = Неопределено Тогда
|
||||
Утверждения.ПроверитьРавенство(Булево(Контекст.Опции[ОпцияForce][0]),Булево(Тест.ЗначениеОпции[0]), "Ожидаемые результаты опции --force должны быть равны");
|
||||
КонецЕсли;
|
||||
Если Не Контекст.Опции[ОпцияТеста] = Неопределено Тогда
|
||||
Утверждения.ПроверитьРавенство(Контекст.Опции[ОпцияТеста][0], Тест.ЗначениеОпции[1], "Ожидаемые результаты опции теста должны быть равны");
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
КонтекстСброса = Новый КонтекстПарсеров();
|
||||
КонтекстСброса.СбросОпций = Истина;
|
||||
Результат = О_Парсера.Поиск(АргументыТеста, КонтекстСброса);
|
||||
Утверждения.ПроверитьЛожь(Результат.РезультатПоиска, "Любые опции не должны быть найдены");
|
||||
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестДолжен_ПроверитьПарсингМассивовВсеОпции() Экспорт
|
||||
|
||||
НаименованияОпции = Новый Массив;
|
||||
НаименованияОпции.Добавить("-f");
|
||||
НаименованияОпции.Добавить("--force");
|
||||
НаименованияОпции.Добавить("-o");
|
||||
НаименованияОпции.Добавить("--other");
|
||||
|
||||
МассивОпций = Новый Массив;
|
||||
МассивОпций.Добавить(Опция("o other", "").ТМассивСтрок());
|
||||
МассивОпций.Добавить(Опция("o other", "").ТМассивДат());
|
||||
МассивОпций.Добавить(Опция("o other", "").ТМассивЧисел());
|
||||
ОпцияForce = Опция("f force", Ложь).Флаг();
|
||||
|
||||
ТестовыеСлучаи = Новый Массив;
|
||||
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-f x", "x", "Истина null"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-f=false y", "y", "Ложь null"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("--force x", "x", "Истина null"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("--force=true y", "y", "истина null"));
|
||||
|
||||
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-o x -o x2", "", "null x x2"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-o=x -o=x2 y", "y", "null x x2"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-o=x -o=x2 -y z", "-y z", "null x x2"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-ox -ox2 y", "y", "null x x2"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("--other x --other x2", "", "null x x2"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("--other=x --other=x2 -y", "-y", "null x x2"));
|
||||
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-f -o x -o x2 y", "y", "истина x x2"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-o x -f -o x2 y", "y", "истина x x2"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-o x -o x2 -f y", "y", "истина x x2"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-fo x -o=x2 y", "y", "истина x x2"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-foxxx -oxxx2 -y z", "-y z", "истина xxx xxx2"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-foxxx -oxxx2 z", "z", "истина xxx xxx2"));
|
||||
|
||||
Для каждого Тест Из ТестовыеСлучаи Цикл
|
||||
|
||||
|
||||
Для каждого ОпцияТеста Из МассивОпций Цикл
|
||||
НачальноеКоличество = Тест.Аргументы.Количество();
|
||||
Лог.Отладка("Проверяю тестовый случай: %1", СтрСоединить(Тест.Аргументы, " "));
|
||||
Лог.Отладка("-> тип опции: %1", ОпцияForce.ТипОпции);
|
||||
|
||||
ИндексОпций = Новый Соответствие;
|
||||
ИндексОпций.Вставить("-f", ОпцияForce);
|
||||
ИндексОпций.Вставить("--force", ОпцияForce);
|
||||
ИндексОпций.Вставить("-o", ОпцияТеста);
|
||||
ИндексОпций.Вставить("--other", ОпцияТеста);
|
||||
|
||||
Опции = Новый Соответствие;
|
||||
Опции.Вставить(ОпцияТеста, ОпцияТеста);
|
||||
Опции.Вставить(ОпцияForce, ОпцияForce);
|
||||
|
||||
АргументыТеста = Тест.Аргументы;
|
||||
О_Парсера = Новый ВсеОпцииПарсера(Опции, ИндексОпций);
|
||||
Утверждения.ПроверитьРавенство("-of", О_Парсера.ВСтроку(), "Парсер опции должен быть равен -of");
|
||||
|
||||
Контекст = Новый КонтекстПарсеров();
|
||||
Результат = О_Парсера.Поиск(АргументыТеста, Контекст);
|
||||
Утверждения.ПроверитьИстину(Результат.РезультатПоиска, "Опции должны быть найдены");
|
||||
Утверждения.ПроверитьРавенство(НачальноеКоличество, Тест.Аргументы.Количество(), "Количество аргументов не должно измениться");
|
||||
|
||||
Результат = О_Парсера.Поиск(АргументыТеста, Контекст);
|
||||
Утверждения.ПроверитьИстину(Результат.РезультатПоиска, "Опции должны быть найдены");
|
||||
Утверждения.ПроверитьРавенство(НачальноеКоличество, Тест.Аргументы.Количество(), "Количество аргументов не должно измениться");
|
||||
|
||||
Утверждения.ПроверитьРавенство(СтрСоединить(Результат.Аргументы, " "), СтрСоединить(Тест.АргументыВыхода, " "), "Аргументы выходные должны быть равны");
|
||||
|
||||
Если Не Контекст.Опции[ОпцияForce] = Неопределено Тогда
|
||||
Утверждения.ПроверитьРавенство(Булево(Контекст.Опции[ОпцияForce][0]),Булево(Тест.ЗначениеОпции[0]), "Ожидаемые результаты опции --force должны быть равны");
|
||||
КонецЕсли;
|
||||
|
||||
Если Не Контекст.Опции[ОпцияТеста] = Неопределено Тогда
|
||||
Утверждения.ПроверитьРавенство(Контекст.Опции[ОпцияТеста][0], Тест.ЗначениеОпции[1], "Ожидаемые результаты опции теста должны быть равны");
|
||||
Утверждения.ПроверитьРавенство(Контекст.Опции[ОпцияТеста][1], Тест.ЗначениеОпции[2], "Ожидаемые результаты опции теста должны быть равны");
|
||||
КонецЕсли;
|
||||
|
||||
КонтекстСброса = Новый КонтекстПарсеров();
|
||||
КонтекстСброса.СбросОпций = Истина;
|
||||
Результат = О_Парсера.Поиск(АргументыТеста, КонтекстСброса);
|
||||
Утверждения.ПроверитьЛожь(Результат.РезультатПоиска, "Любые опции не должны быть найдены");
|
||||
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция Опция(Наименование, ЗначениеПоУмолчанию)
|
||||
Возврат Новый ПараметрКоманды("опция", Наименование, ЗначениеПоУмолчанию, "Тестовый параметр f")
|
||||
КонецФункции
|
||||
|
||||
Лог = Логирование.ПолучитьЛог("oscript.lib.cli_class_options");
|
||||
//Лог.УстановитьУровень(УровниЛога.Отладка);
|
||||
559
lib/cli/tests/КомандаПриложения_test.os
Normal file
559
lib/cli/tests/КомандаПриложения_test.os
Normal file
@@ -0,0 +1,559 @@
|
||||
#использовать "../src/core"
|
||||
#Использовать asserts
|
||||
#Использовать logos
|
||||
#Использовать delegate
|
||||
|
||||
Перем юТест;
|
||||
Перем Лог;
|
||||
|
||||
Функция ПолучитьСписокТестов(Знач Тестирование) Экспорт
|
||||
|
||||
юТест = Тестирование;
|
||||
|
||||
ИменаТестов = Новый Массив;
|
||||
|
||||
// Скорость выполнения команды
|
||||
ИменаТестов.Добавить("ТестДолжен_ПроверитьСкоростьРаботуКомандыПриложения");
|
||||
|
||||
// Работа с опциями и аргументами
|
||||
// ИменаТестов.Добавить("ТестДолжен_ПроверитьПолучениеЗначенияАргументаПоИмени");
|
||||
// ИменаТестов.Добавить("ТестДолжен_ПроверитьПолучениеЗначенияОпцииПоИмени");
|
||||
|
||||
ИменаТестов.Добавить("ТестДолжен_ПроверитьУстановкуЗначенийОпций");
|
||||
// ИменаТестов.Добавить("ТестДолжен_ПроверитьУстановкуМножественныхЗначенийОпций");
|
||||
// ИменаТестов.Добавить("ТестДолжен_ПроверитьУстановкуЗначенийАргументов");
|
||||
// ИменаТестов.Добавить("ТестДолжен_ПроверитьУстановкуМножественныхАргументовОпций");
|
||||
|
||||
// ИменаТестов.Добавить("ТестДолжен_ПроверитьГруппировкуОпций");
|
||||
|
||||
// ИменаТестов.Добавить("ТестДолжен_ПроверитьНеобязательностьОпций");
|
||||
// ИменаТестов.Добавить("ТестДолжен_ПроверитьНеобязательностьАргументов");
|
||||
|
||||
// ИменаТестов.Добавить("ТестДолжен_ПроверитьВзаимоисключающиеОпции");
|
||||
// ИменаТестов.Добавить("ТестДолжен_ПроверитьПовторяемыеВзаимоисключающиеОпции");
|
||||
|
||||
// ИменаТестов.Добавить("ТестДолжен_ПроверитьРаботуСОднимТиреВАргументах");
|
||||
ИменаТестов.Добавить("ТестДолжен_ПроверитьСбросОпцийПередАргументами");
|
||||
// ИменаТестов.Добавить("ТестДолжен_ПроверитьСбросМножественныхОпций");
|
||||
|
||||
ИменаТестов.Добавить("ТестДолжен_СтандартнуюСтрокуИспользования");
|
||||
ИменаТестов.Добавить("ТестДолжен_СтандартнуюСтрокуИспользования_МассивАргументов");
|
||||
ИменаТестов.Добавить("ТестДолжен_СтандартнуюСтрокуИспользования_МассивАргументовНесколькоАргументов");
|
||||
ИменаТестов.Добавить("ТестДолжен_СтандартнуюСтрокуИспользования_ОбязательнаяОпция");
|
||||
// ИменаТестов.Добавить("ТестДолжен_СложныеСлучаиФормированияСтрокиИспользования");
|
||||
|
||||
ИменаТестов.Добавить("ТестДолжен_ПроверитьВыводСправки");
|
||||
// ИменаТестов.Добавить("ТестДолжен_ПроверитьВыводВерсии");
|
||||
|
||||
// ИменаТестов.Добавить("ТестДолжен_ПроверитьВыполнениеОбработчикаПередВыполнениемКоманды");
|
||||
// ИменаТестов.Добавить("ТестДолжен_ПроверитьВыполнениеОбработчикаПослеВыполненияКоманды");
|
||||
|
||||
ИменаТестов.Добавить("ТестДолжен_ПроверитьЧтениеОпцийИАргументовРодителяКомандыБезВызоваПроцедуры");
|
||||
ИменаТестов.Добавить("ТестДолжен_ПроверитьЧтениеОпцийИАргументовРодителяКоманды");
|
||||
ИменаТестов.Добавить("ТестДолжен_ПроверитьЧтениеОпцийИАргументовРодителяКомандыПервогоУровня");
|
||||
|
||||
|
||||
Возврат ИменаТестов;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ВыполнитьКоманду(Знач ВыполняемаяКоманда) Экспорт
|
||||
Лог.Отладка("Полезная работа команды: %1", ВыполняемаяКоманда.ПолучитьИмяКоманды());
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестДолжен_ПроверитьСкоростьРаботуКомандыПриложения() Экспорт
|
||||
|
||||
Спек = "[--login] [--realm] [--note] [--no-copy] [--gen [--length] [--min-length] [--max-length] [--no-upper] [--no-lower] [--no-digit] [--no-symbol] [--no-similar] [--min-upper] [--max-upper] [--min-lower] [--max-lower] [--min-digit] [--max-digit] [--min-symbol] [--max-symbol] [--exclude]]";
|
||||
ИмяПроцедурыОбъекта = "КомандаСкоростьРаботуКомандыПриложения";
|
||||
|
||||
ТестовыеСлучаи = Новый Массив;
|
||||
|
||||
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("", Спек, Истина));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("--gen", Спек, Истина));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("--gen --length 42", Спек, Истина));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("--length 42 --gen", Спек, Истина));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("--min-length 10 --length 42 --gen", Спек, Истина));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("--min-length 10 --no-symbol --no-lower --length 42 --gen", Спек, Истина));
|
||||
|
||||
Для каждого Тест Из ТестовыеСлучаи Цикл
|
||||
|
||||
РезультатВыполнения = ВыполненаКомандаПриложения(Тест.Спек, ИмяПроцедурыОбъекта, Тест.Аргументы);
|
||||
|
||||
Утверждения.ПроверитьРавенство(РезультатВыполнения, Тест.Результат, "Команда должна выполниться успешно! Входящие аргументы" + СтрСоединить(Тест.Аргументы));
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
|
||||
Процедура ТестДолжен_ПроверитьЧтениеОпцийИАргументовРодителяКомандыБезВызоваПроцедуры () Экспорт
|
||||
|
||||
Команда = ПодготовитьТестовуюКоманду();
|
||||
|
||||
ОпцияМассив = Команда.Опция("e env", Новый Массив, "Тестовый массив опций").ТМассивСтрок();
|
||||
АргументСтрока = Команда.Аргумент("ARG", "", "Тестовый простой необязательный аргумент").Обязательный(Ложь);
|
||||
|
||||
ВложеннаяКоманда = Команда.ДобавитьПодкоманду("sub s", "", ЭтотОбъект);
|
||||
ОпцияМассив = ВложеннаяКоманда.Опция("e env", Новый Массив, "Тестовый массив опций").ТМассивСтрок();
|
||||
|
||||
Аргументы = Новый Массив;
|
||||
|
||||
Аргументы.Добавить("-e=Знач1");
|
||||
Аргументы.Добавить("-e=Знач2");
|
||||
Аргументы.Добавить("-e=Знач3");
|
||||
Аргументы.Добавить("ЗначениеАргумента");
|
||||
|
||||
Аргументы.Добавить("sub");
|
||||
|
||||
РезультатВыполнения = ВыполнитьКомандуПриложения(Команда, Аргументы);
|
||||
|
||||
Утверждения.ПроверитьИстину(РезультатВыполнения, "Команда должна выполниться");
|
||||
|
||||
Утверждения.ПроверитьРавенство(ВложеннаяКоманда.ЗначениеОпцииКомандыРодителя("e").Количество(), 3 , "Результат <ОпцияМассив> должны совпадать");
|
||||
Утверждения.ПроверитьРавенство(ВложеннаяКоманда.ЗначениеОпции("e").Количество(), 0 , "Результат <ОпцияМассив> должны совпадать");
|
||||
Утверждения.ПроверитьРавенство(ВложеннаяКоманда.ЗначениеАргумента("ARG"), "ЗначениеАргумента" , "Результат <АргументСтрока> должны совпадать");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестДолжен_ПроверитьЧтениеОпцийИАргументовРодителяКоманды() Экспорт
|
||||
|
||||
Команда = ПодготовитьТестовуюКоманду();
|
||||
|
||||
ОпцияМассив =Команда.Опция("e env", Новый Массив, "Тестовый массив опций").ТМассивСтрок();
|
||||
АргументСтрока = Команда.Аргумент("ARG", "", "Тестовый простой необязательный аргумент").Обязательный(Ложь);
|
||||
|
||||
ВложеннаяКоманда = Команда.ДобавитьПодкоманду("sub s", "", ЭтотОбъект);
|
||||
|
||||
Аргументы = Новый Массив;
|
||||
|
||||
Аргументы.Добавить("-e=Знач1");
|
||||
Аргументы.Добавить("-e=Знач2");
|
||||
Аргументы.Добавить("-e=Знач3");
|
||||
Аргументы.Добавить("ЗначениеАргумента");
|
||||
|
||||
Аргументы.Добавить("sub");
|
||||
|
||||
РезультатВыполнения = ВыполнитьКомандуПриложения(Команда, Аргументы);
|
||||
|
||||
Утверждения.ПроверитьИстину(РезультатВыполнения, "Команда должна выполниться");
|
||||
|
||||
Утверждения.ПроверитьРавенство(ВложеннаяКоманда.ЗначениеОпцииКомандыРодителя("e").Количество(), 3 , "Результат <ОпцияМассив> должны совпадать");
|
||||
Утверждения.ПроверитьРавенство(ВложеннаяКоманда.ЗначениеАргументаКомандыРодителя("ARG"), "ЗначениеАргумента" , "Результат <АргументСтрока> должны совпадать");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестДолжен_ПроверитьЧтениеОпцийИАргументовРодителяКомандыПервогоУровня() Экспорт
|
||||
|
||||
Команда = ПодготовитьТестовуюКоманду();
|
||||
|
||||
ОпцияМассив =Команда.Опция("e env", Новый Массив, "Тестовый массив опций").ТМассивСтрок();
|
||||
АргументСтрока = Команда.Аргумент("ARG", "", "Тестовый простой необязательный аргумент").Обязательный(Ложь);
|
||||
|
||||
ВложеннаяКоманда = Команда.ДобавитьПодкоманду("sub s", "", ЭтотОбъект);
|
||||
ВложеннаяКоманда2 = ВложеннаяКоманда.ДобавитьПодкоманду("subsub ss", "", ЭтотОбъект);
|
||||
|
||||
Аргументы = Новый Массив;
|
||||
|
||||
Аргументы.Добавить("-e=Знач1");
|
||||
Аргументы.Добавить("-e=Знач2");
|
||||
Аргументы.Добавить("-e=Знач3");
|
||||
Аргументы.Добавить("ЗначениеАргумента");
|
||||
|
||||
Аргументы.Добавить("sub");
|
||||
|
||||
Аргументы.Добавить("subsub");
|
||||
|
||||
РезультатВыполнения = ВыполнитьКомандуПриложения(Команда, Аргументы);
|
||||
|
||||
Утверждения.ПроверитьИстину(РезультатВыполнения, "Команда должна выполниться");
|
||||
|
||||
Утверждения.ПроверитьРавенство(ВложеннаяКоманда2.ЗначениеОпцииКомандыРодителя("e").Количество(), 3 , "Результат <ОпцияМассив> должны совпадать");
|
||||
Утверждения.ПроверитьРавенство(ВложеннаяКоманда2.ЗначениеАргументаКомандыРодителя("ARG"), "ЗначениеАргумента" , "Результат <АргументСтрока> должны совпадать");
|
||||
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестДолжен_ПроверитьУстановкуЗначенийОпций() Экспорт
|
||||
|
||||
Спек = "";
|
||||
ИмяПроцедурыОбъекта = "КомандаПростыеОпции";
|
||||
|
||||
ТестовыеСлучаи = Новый Массив;
|
||||
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("--bool", Спек, "Истина;;0"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("--string Строка", Спек, "Ложь;Строка;0"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("--int 42", Спек, "Ложь;;42"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("--string Строка --bool", Спек, "Истина;Строка;0"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("--int 42 --bool", Спек, "Истина;;42"));
|
||||
|
||||
Для каждого Тест Из ТестовыеСлучаи Цикл
|
||||
|
||||
Команда = ВыполнитьКомандаПриложения(Тест.Спек, ИмяПроцедурыОбъекта, Тест.Аргументы);
|
||||
|
||||
ЗначениеБулева = Команда.ЗначениеОпции("bool");
|
||||
ЗначениеСтрока = Команда.ЗначениеОпции("string");
|
||||
ЗначениеЧисло = Команда.ЗначениеОпции("int");
|
||||
|
||||
МассивРезультата = СтрРазделить(Тест.Результат, ";", Истина);
|
||||
|
||||
Утверждения.ПроверитьРавенство(ЗначениеБулева, Булево(МассивРезультата[0]), "Результаты должны совпадать" + СтрСоединить(Тест.Аргументы));
|
||||
Утверждения.ПроверитьРавенство(ЗначениеСтрока, Строка(МассивРезультата[1]), "Результаты должны совпадать" + СтрСоединить(Тест.Аргументы));
|
||||
Утверждения.ПроверитьРавенство(ЗначениеЧисло, Число(МассивРезультата[2]), "Результаты должны совпадать" + СтрСоединить(Тест.Аргументы));
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестДолжен_СтандартнуюСтрокуИспользования() Экспорт
|
||||
|
||||
Спек = "";
|
||||
ИмяПроцедурыОбъекта = "КомандаПростыеОпции";
|
||||
|
||||
Команда = ПодготовитьТестовуюКоманду(Спек);
|
||||
|
||||
ОпцияМассив =Команда.Опция("e env", Новый Массив, "Тестовый массив опций").ТМассивСтрок();
|
||||
АргументСтрока = Команда.Аргумент("ARG", "", "Тестовый простой необязательный аргумент").Обязательный(Ложь);
|
||||
|
||||
Аргументы = Новый Массив;
|
||||
|
||||
Аргументы.Добавить("-e=Знач1");
|
||||
Аргументы.Добавить("-e=Знач2");
|
||||
Аргументы.Добавить("-e=Знач3");
|
||||
Аргументы.Добавить("ЗначениеАргумента");
|
||||
|
||||
РезультатВыполнения = ВыполнитьКомандуПриложения(Команда, Аргументы);
|
||||
|
||||
Утверждения.ПроверитьИстину(РезультатВыполнения, "Команда должна выполниться");
|
||||
|
||||
Утверждения.ПроверитьРавенство(ОпцияМассив.Значение.Количество(), 3 , "Результат <ОпцияМассив> должны совпадать");
|
||||
Утверждения.ПроверитьРавенство(АргументСтрока.Значение, "ЗначениеАргумента" , "Результат <АргументСтрока> должны совпадать");
|
||||
|
||||
Команда = ПодготовитьТестовуюКоманду(Спек);
|
||||
|
||||
ОпцияМассив =Команда.Опция("e env", Новый Массив, "Тестовый массив опций").ТМассивСтрок();
|
||||
АргументСтрока = Команда.Аргумент("ARG", "", "Тестовый простой необязательный аргумент").Обязательный(Ложь);
|
||||
|
||||
Аргументы = Новый Массив;
|
||||
|
||||
Аргументы.Добавить("-e=Знач1");
|
||||
Аргументы.Добавить("-e=Знач2");
|
||||
Аргументы.Добавить("-e=Знач3");
|
||||
//Аргументы.Добавить("ЗначениеАргумента");
|
||||
|
||||
РезультатВыполнения = ВыполнитьКомандуПриложения(Команда, Аргументы);
|
||||
|
||||
Утверждения.ПроверитьИстину(РезультатВыполнения, "Команда должна выполниться");
|
||||
|
||||
Утверждения.ПроверитьРавенство(ОпцияМассив.Значение.Количество(), 3 , "Результат <ОпцияМассив> должны совпадать");
|
||||
Утверждения.ПроверитьРавенство(АргументСтрока.Значение, "" , "Результат <АргументСтрока> должны совпадать");
|
||||
|
||||
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестДолжен_СтандартнуюСтрокуИспользования_МассивАргументов() Экспорт
|
||||
|
||||
Спек = "";
|
||||
ИмяПроцедурыОбъекта = "КомандаПростыеОпции";
|
||||
|
||||
Команда = ПодготовитьТестовуюКоманду(Спек);
|
||||
|
||||
ОпцияМассив =Команда.Опция("e env", Новый Массив, "Тестовый массив опций").ТМассивСтрок();
|
||||
АргументСтрока = Команда.Аргумент("ARG", "", "Тестовый простой необязательный аргумент").ТМассивСтрок().Обязательный(Ложь);
|
||||
|
||||
Аргументы = Новый Массив;
|
||||
|
||||
Аргументы.Добавить("-e=Знач1");
|
||||
Аргументы.Добавить("-e=Знач2");
|
||||
Аргументы.Добавить("-e=Знач3");
|
||||
Аргументы.Добавить("ЗначениеАргумента");
|
||||
Аргументы.Добавить("ЗначениеАргумента");
|
||||
|
||||
РезультатВыполнения = ВыполнитьКомандуПриложения(Команда, Аргументы);
|
||||
|
||||
Утверждения.ПроверитьИстину(РезультатВыполнения, "Команда должна выполниться");
|
||||
|
||||
Утверждения.ПроверитьРавенство(ОпцияМассив.Значение.Количество(), 3, "Результат <ОпцияМассив> должны совпадать");
|
||||
Утверждения.ПроверитьРавенство(АргументСтрока.Значение.Количество(), 2, "Результат <АргументСтрока> должны совпадать");
|
||||
|
||||
// Необязательный массив
|
||||
// Аргументы не переданы
|
||||
|
||||
Команда = ПодготовитьТестовуюКоманду(Спек);
|
||||
|
||||
ОпцияМассив =Команда.Опция("e env", Новый Массив, "Тестовый массив опций").ТМассивСтрок();
|
||||
АргументСтрока = Команда.Аргумент("ARG", "", "Тестовый простой необязательный аргумент").ТМассивСтрок().Обязательный(Ложь);
|
||||
|
||||
Аргументы = Новый Массив;
|
||||
|
||||
Аргументы.Добавить("-e=Знач1");
|
||||
Аргументы.Добавить("-e=Знач2");
|
||||
Аргументы.Добавить("-e=Знач3");
|
||||
|
||||
РезультатВыполнения = ВыполнитьКомандуПриложения(Команда, Аргументы);
|
||||
|
||||
Утверждения.ПроверитьИстину(РезультатВыполнения, "Команда должна выполниться");
|
||||
|
||||
Утверждения.ПроверитьРавенство(ОпцияМассив.Значение.Количество(), 3, "Результат <ОпцияМассив> должны совпадать");
|
||||
Утверждения.ПроверитьРавенство(АргументСтрока.Значение.Количество(), 0, "Результат <АргументСтрока> должны совпадать");
|
||||
|
||||
|
||||
// Просто массив
|
||||
Команда = ПодготовитьТестовуюКоманду(Спек);
|
||||
|
||||
ОпцияМассив =Команда.Опция("e env", Новый Массив, "Тестовый массив опций").ТМассивСтрок();
|
||||
АргументСтрока = Команда.Аргумент("ARG", "", "Тестовый простой необязательный аргумент").ТМассивСтрок();
|
||||
|
||||
Аргументы = Новый Массив;
|
||||
|
||||
Аргументы.Добавить("-e=Знач1");
|
||||
Аргументы.Добавить("-e=Знач2");
|
||||
Аргументы.Добавить("-e=Знач3");
|
||||
Аргументы.Добавить("ЗначениеАргумента");
|
||||
Аргументы.Добавить("ЗначениеАргумента");
|
||||
|
||||
РезультатВыполнения = ВыполнитьКомандуПриложения(Команда, Аргументы);
|
||||
|
||||
Утверждения.ПроверитьИстину(РезультатВыполнения, "Команда должна выполниться");
|
||||
|
||||
Утверждения.ПроверитьРавенство(ОпцияМассив.Значение.Количество(), 3, "Результат <ОпцияМассив> должны совпадать");
|
||||
Утверждения.ПроверитьРавенство(АргументСтрока.Значение.Количество(), 2, "Результат <АргументСтрока> должны совпадать");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестДолжен_СтандартнуюСтрокуИспользования_МассивАргументовНесколькоАргументов() Экспорт
|
||||
|
||||
Спек = "";
|
||||
ИмяПроцедурыОбъекта = "КомандаПростыеОпции";
|
||||
|
||||
Команда = ПодготовитьТестовуюКоманду(Спек);
|
||||
|
||||
ОпцияМассив =Команда.Опция("e env", Новый Массив, "Тестовый массив опций").ТМассивСтрок();
|
||||
АргументСтрока = Команда.Аргумент("ARG", "", "Тестовый простой необязательный аргумент").ТМассивСтрок().Обязательный(Ложь);
|
||||
АргументСтрока2 = Команда.Аргумент("ARG2", "", "Тестовый простой необязательный аргумент").Обязательный();
|
||||
|
||||
|
||||
Аргументы = Новый Массив;
|
||||
|
||||
Аргументы.Добавить("-e=Знач1");
|
||||
Аргументы.Добавить("-e=Знач2");
|
||||
Аргументы.Добавить("-e=Знач3");
|
||||
Аргументы.Добавить("ЗначениеАргумента");
|
||||
Аргументы.Добавить("ЗначениеАргумента2");
|
||||
|
||||
РезультатВыполнения = ВыполнитьКомандуПриложения(Команда, Аргументы);
|
||||
|
||||
Утверждения.ПроверитьИстину(РезультатВыполнения, "Команда должна выполниться");
|
||||
|
||||
Утверждения.ПроверитьРавенство(ОпцияМассив.Значение.Количество(), 3, "Результат <ОпцияМассив> должны совпадать");
|
||||
Утверждения.ПроверитьРавенство(АргументСтрока.Значение.Количество(), 1, "Результат <АргументСтрока> должны совпадать");
|
||||
Утверждения.ПроверитьРавенство(АргументСтрока2.Значение, "ЗначениеАргумента2", "Результат <АргументСтрока2> должны совпадать");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестДолжен_СтандартнуюСтрокуИспользования_ОбязательнаяОпция() Экспорт
|
||||
|
||||
Команда = ПодготовитьТестовуюКоманду();
|
||||
|
||||
ОбычныйОпция = Команда.Опция("z", , "Необязательная опция").ТСтрока();
|
||||
ОпцияМассив = Команда.Опция("e env", Новый Массив, "Тестовый необязательный массив опций").ТМассивСтрок();
|
||||
ARG2 = Команда.Аргумент("ARG2", "", "Тестовый простой необязательный аргумент").ТМассивСтрок();
|
||||
|
||||
СтрокаИспользования = СокрЛП(Команда.ПолучитьСтрокуИспользования());
|
||||
Утверждения.ПроверитьРавенство(СтрокаИспользования, "[ОПЦИИ] -- ARG2...", "Результат <СтрокаИспользования> должны совпадать");
|
||||
|
||||
|
||||
Команда = ПодготовитьТестовуюКоманду();
|
||||
|
||||
ОбычныйОпция = Команда.Опция("z", , "Необязательная опция").ТСтрока();
|
||||
ОпцияМассив = Команда.Опция("e env", Новый Массив, "Тестовый обязательный массив опций").ТМассивСтрок().Обязательный(Истина);
|
||||
ARG2 = Команда.Аргумент("ARG2", "", "Тестовый простой необязательный аргумент").ТМассивСтрок();
|
||||
|
||||
СтрокаИспользования = СокрЛП(Команда.ПолучитьСтрокуИспользования());
|
||||
Утверждения.ПроверитьРавенство(СтрокаИспользования, "[-z] -e... -- ARG2...", "Результат <СтрокаИспользования> должны совпадать");
|
||||
|
||||
|
||||
Команда = ПодготовитьТестовуюКоманду();
|
||||
|
||||
ARG2 = Команда.Аргумент("ARG2", "", "Тестовый простой необязательный аргумент").ТМассивСтрок();
|
||||
|
||||
СтрокаИспользования = СокрЛП(Команда.ПолучитьСтрокуИспользования());
|
||||
Утверждения.ПроверитьРавенство(СтрокаИспользования, "-- ARG2...", "Результат <СтрокаИспользования> должны совпадать");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестДолжен_ПроверитьВыводСправки() Экспорт
|
||||
|
||||
Спек = "";
|
||||
Команда = ПодготовитьТестовуюКоманду(Спек);
|
||||
ОпцияМассив = Команда.Опция("env", Новый Массив, "Тестовый массив опций").ТМассивСтрок();
|
||||
АргументСтрока2 = Команда.Аргумент("ARG2", "", "Тестовый простой необязательный аргумент").Обязательный();
|
||||
АргументСтрока = Команда.Аргумент("ARG", "", "Тестовый простой необязательный аргумент").ТМассивСтрок().Обязательный(Ложь);
|
||||
ОпцияПеречисление = Команда.Опция("enum e em", "yellow", "Опция перечисление").ТПеречисление()
|
||||
.Перечисление("yellow", "yellow", "Это желтый цвет")
|
||||
.Перечисление("red", "red" , "Это красный цвет")
|
||||
.Перечисление("blue", "blue", "Это синий цвет")
|
||||
;
|
||||
|
||||
Команда.ВывестиСправку();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестДолжен_ПроверитьСбросОпцийПередАргументами() Экспорт
|
||||
|
||||
Команда = ПодготовитьТестовуюКоманду();
|
||||
|
||||
ОпцияМассив =Команда.Опция("e env", Новый Массив, "Тестовый массив опций").ТМассивСтрок();
|
||||
ARG2 = Команда.Аргумент("ARG2", "", "Тестовый простой необязательный аргумент").ТМассивСтрок().Обязательный(Ложь);
|
||||
|
||||
Аргументы = Новый Массив;
|
||||
|
||||
Аргументы.Добавить("-e=Знач1");
|
||||
Аргументы.Добавить("-e=Знач2");
|
||||
Аргументы.Добавить("-e=Знач3");
|
||||
Аргументы.Добавить("--");
|
||||
Аргументы.Добавить("-v");
|
||||
Аргументы.Добавить("ARG2");
|
||||
Аргументы.Добавить("run");
|
||||
|
||||
РезультатВыполнения = ВыполнитьКомандуПриложения(Команда, Аргументы);
|
||||
|
||||
Утверждения.ПроверитьИстину(РезультатВыполнения, "Команда должна выполниться");
|
||||
Утверждения.ПроверитьРавенство(ОпцияМассив.Значение.Количество(), 3, "Результат <ОпцияМассив> должны совпадать");
|
||||
Утверждения.ПроверитьРавенство(ARG2.Значение.Количество(), 3, "Результат <ARG1> должны совпадать");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ПодготовитьТестовуюКоманду(Спек = "")
|
||||
|
||||
Команда = Новый КомандаПриложения("testapp", "Тестовое приложения", ЭтотОбъект);
|
||||
|
||||
Если ЗначениеЗаполнено(Спек) Тогда
|
||||
Команда.Спек = Спек;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Команда;
|
||||
|
||||
КонецФункции
|
||||
|
||||
|
||||
Функция АргументыИзСтроки(СтрокаАргументов)
|
||||
|
||||
Возврат СтрРазделить(СтрокаАргументов, " ");
|
||||
|
||||
КонецФункции
|
||||
|
||||
|
||||
Функция ТестовыйСлучай(Знач Аргументы, Знач Спек, Знач Результат)
|
||||
|
||||
Тест = Новый Структура;
|
||||
Тест.Вставить("Аргументы", СтрРазделить(Аргументы," "));
|
||||
Тест.Вставить("Спек", Спек);
|
||||
Тест.Вставить("Результат", Результат);
|
||||
|
||||
Возврат Тест;
|
||||
КонецФункции
|
||||
|
||||
Функция ВыполнитьКомандуПриложения(Команда, Аргументы)
|
||||
|
||||
Команда.НачалоЗапуска();
|
||||
Попытка
|
||||
Команда.Запуск(Аргументы);
|
||||
Исключение
|
||||
Сообщить(ОписаниеОшибки());
|
||||
Возврат Ложь;
|
||||
КонецПопытки;
|
||||
|
||||
Возврат Истина;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ВыполненаКомандаПриложения(Спек, ИмяПроцедурыОбъекта, Аргументы)
|
||||
|
||||
Команда = Новый КомандаПриложения("test", "Тестовая команда", ЭтотОбъект);
|
||||
|
||||
ПараметрыВыполнения = Новый Массив;
|
||||
ПараметрыВыполнения.Добавить(Команда);
|
||||
|
||||
ОписаниеКоманды = Делегаты.Создать(ЭтотОбъект, ИмяПроцедурыОбъекта);
|
||||
ОписаниеКоманды.Исполнить(ПараметрыВыполнения);
|
||||
|
||||
Команда.Спек = Спек;
|
||||
|
||||
Команда.НачалоЗапуска();
|
||||
Попытка
|
||||
Команда.Запуск(Аргументы);
|
||||
Исключение
|
||||
Сообщить(ОписаниеОшибки());
|
||||
Возврат Ложь;
|
||||
КонецПопытки;
|
||||
|
||||
Возврат Истина;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ВыполнитьКомандаПриложения(Спек, ИмяПроцедурыОбъекта, Аргументы)
|
||||
|
||||
Команда = Новый КомандаПриложения("test", "Тестовая команда", ЭтотОбъект);
|
||||
|
||||
ПараметрыВыполнения = Новый Массив;
|
||||
ПараметрыВыполнения.Добавить(Команда);
|
||||
|
||||
ОписаниеКоманды = Делегаты.Создать(ЭтотОбъект, ИмяПроцедурыОбъекта);
|
||||
ОписаниеКоманды.Исполнить(ПараметрыВыполнения);
|
||||
|
||||
Команда.Спек = Спек;
|
||||
|
||||
Команда.НачалоЗапуска();
|
||||
Попытка
|
||||
Команда.Запуск(Аргументы);
|
||||
Исключение
|
||||
Сообщить(ОписаниеОшибки());
|
||||
Возврат Команда;
|
||||
КонецПопытки;
|
||||
|
||||
Возврат Команда;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура КомандаСкоростьРаботуКомандыПриложения(Знач ВыполняемаяКоманда) Экспорт
|
||||
|
||||
login = ВыполняемаяКоманда.Опция("login", "", "Login for credential, e.g. username or email.").ТСтрока();
|
||||
realm = ВыполняемаяКоманда.Опция("realm", "", "Realm for credential, e.g. website or WiFi AP name.").ТСтрока();
|
||||
note = ВыполняемаяКоманда.Опция("note", "", "Note for credential.").ТСтрока();
|
||||
noCopy = ВыполняемаяКоманда.Опция("no-copy", false, "Do not copy generated password to the clipboard.").Флаг();
|
||||
gen = ВыполняемаяКоманда.Опция("gen", false, "Generate a password.").Флаг();
|
||||
length = ВыполняемаяКоманда.Опция("length", 0, "Password length.").Тчисло();
|
||||
minLength = ВыполняемаяКоманда.Опция("min-length", 30, "Minimum length password.").Тчисло();
|
||||
maxL = ВыполняемаяКоманда.Опция("max-length", 40, "Maximum length password.").Тчисло();
|
||||
noUpper = ВыполняемаяКоманда.Опция("no-upper", false, "Exclude uppercase characters in password.").Флаг();
|
||||
noLow = ВыполняемаяКоманда.Опция("no-lower", false, "Exclude lowercase characters in password.").Флаг();
|
||||
noDigit = ВыполняемаяКоманда.Опция("no-digit", false, "Exclude digit characters in password.").Флаг();
|
||||
noSymbol = ВыполняемаяКоманда.Опция("no-symbol", false, "Exclude symbol characters in password.").Флаг();
|
||||
noSimilar = ВыполняемаяКоманда.Опция("no-similar", false, "Exclude similar characters in password.").Флаг();
|
||||
minUpper = ВыполняемаяКоманда.Опция("min-upper", 0, "Minimum number of uppercase characters in password.").Тчисло();
|
||||
maxUpper = ВыполняемаяКоманда.Опция("max-upper", -1, "Maximum number of uppercase characters in password.").Тчисло();
|
||||
minLow = ВыполняемаяКоманда.Опция("min-lower", 0, "Minimum number of lowercase characters in password.").Тчисло();
|
||||
maxLow = ВыполняемаяКоманда.Опция("max-lower", -1, "Maximum number of lowercase characters in password.").Тчисло();
|
||||
minDigit = ВыполняемаяКоманда.Опция("min-digit", 0, "Minimum number of digit characters in password.").Тчисло();
|
||||
maxDigit = ВыполняемаяКоманда.Опция("max-digit", -1, "Maximum number of digit characters in password.").Тчисло();
|
||||
minSym = ВыполняемаяКоманда.Опция("min-symbol", 0, "Minimum number of symbol characters in password.").Тчисло();
|
||||
maxSym = ВыполняемаяКоманда.Опция("max-symbol", -1, "Maximum number of symbol characters in password.").Тчисло();
|
||||
ex = ВыполняемаяКоманда.Опция("exclude", "", "Exclude specific characters from password.").ТСтрока();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура КомандаПростыеОпции(Знач ВыполняемаяКоманда) Экспорт
|
||||
|
||||
ВыполняемаяКоманда.Опция("bool", Ложь, "Login for credential, e.g. username or email.");
|
||||
ВыполняемаяКоманда.Опция("string", "", "Realm for credential, e.g. website or WiFi AP name.");
|
||||
ВыполняемаяКоманда.Опция("int", 0, "Note for credential.");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
|
||||
Лог = Логирование.ПолучитьЛог("oscript.lib.cli_command");
|
||||
//Лог.УстановитьУровень(УровниЛога.Отладка);
|
||||
120
lib/cli/tests/КонсольноеПриложение_test.os
Normal file
120
lib/cli/tests/КонсольноеПриложение_test.os
Normal file
@@ -0,0 +1,120 @@
|
||||
#использовать "../src/core"
|
||||
#Использовать asserts
|
||||
Перем V, B, S, ARG, SRC;
|
||||
Перем юТест;
|
||||
|
||||
Функция ПолучитьСписокТестов(Знач Тестирование) Экспорт
|
||||
|
||||
юТест = Тестирование;
|
||||
|
||||
ИменаТестов = Новый Массив;
|
||||
|
||||
ИменаТестов.Добавить("ТестДолжен_ТолькоАргументы");
|
||||
//ИменаТестов.Добавить("ТестДолжен_ТолькоОпции");
|
||||
//ИменаТестов.Добавить("ТестДолжен_ПроверитьПриложения");
|
||||
ИменаТестов.Добавить("ТестДолжен_ПараметрыПеречисленияОпции");
|
||||
ИменаТестов.Добавить("ТестДолжен_ПараметрыПеречисленияОпцииВыводHelp");
|
||||
ИменаТестов.Добавить("ТестДолжен_ПроверитьВыводВерсииПриложения");
|
||||
|
||||
Возврат ИменаТестов;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ТестДолжен_ТолькоАргументы() Экспорт
|
||||
|
||||
Приложение = Новый КонсольноеПриложение("cp", "");
|
||||
|
||||
DST = Приложение.Аргумент("DST", "", "Тест");
|
||||
SRC = Приложение.Аргумент("SRC", "", "Тест").ТМассивСтрок();;
|
||||
|
||||
Приложение.УстановитьСпек("SRC... DST");
|
||||
Приложение.УстановитьОсновноеДействие(ЭтотОбъект);
|
||||
|
||||
МассивSRC = Новый Массив;
|
||||
МассивSRC.Добавить("src1");
|
||||
МассивSRC.Добавить("src2");
|
||||
|
||||
ВходящиеАргументы = Новый Массив;
|
||||
ВходящиеАргументы.Добавить("src1");
|
||||
ВходящиеАргументы.Добавить("src2");
|
||||
ВходящиеАргументы.Добавить("dst");
|
||||
|
||||
Приложение.Запустить(ВходящиеАргументы);
|
||||
|
||||
Утверждения.ПроверитьРавенство(DST.Значение, "dst", "Аргумент DST не равен ожидаемому");
|
||||
Утверждения.ПроверитьРавенство(SRC.Значение.Количество(), МассивSRC.Количество(), "Аргумент SRC не равен ожидаемому");
|
||||
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестДолжен_ПроверитьВыводВерсииПриложения() Экспорт
|
||||
|
||||
Приложение = Новый КонсольноеПриложение("cp", "");
|
||||
Приложение.Версия("v version", "1.0");
|
||||
ВходящиеАргументы = Новый Массив;
|
||||
ВходящиеАргументы.Добавить("-v");
|
||||
|
||||
// TODO: При выполнении этого теста происходить завершение тестирования
|
||||
// Переписать после написания нормального флоу
|
||||
//Приложение.Запустить(ВходящиеАргументы);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестДолжен_ПараметрыПеречисленияОпции() Экспорт
|
||||
|
||||
Приложение = Новый КонсольноеПриложение("cp", "");
|
||||
|
||||
enum = Приложение.Опция("enum e", "yellow", "Опция перечисление").ТПеречисление()
|
||||
.Перечисление("yellow", "yellow", "Это желтый цвет")
|
||||
.Перечисление("red", "red" , "Это красный цвет")
|
||||
.Перечисление("blue", "blue", "Это синий цвет")
|
||||
;
|
||||
|
||||
Приложение.УстановитьОсновноеДействие(ЭтотОбъект);
|
||||
|
||||
ВходящиеАргументы = Новый Массив;
|
||||
ВходящиеАргументы.Добавить("-e");
|
||||
ВходящиеАргументы.Добавить("yellow");
|
||||
|
||||
Приложение.Запустить(ВходящиеАргументы);
|
||||
|
||||
Утверждения.ПроверитьРавенство(enum.Значение, "yellow", "Аргумент enum не равен ожидаемому");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестДолжен_ПараметрыПеречисленияОпцииВыводHelp() Экспорт
|
||||
|
||||
Приложение = Новый КонсольноеПриложение("cp", "");
|
||||
|
||||
enum = Приложение.Опция("enum e", "yellow", "Опция перечисление").ТПеречисление()
|
||||
.Перечисление("yellow", "yellow", "Это желтый цвет")
|
||||
.Перечисление("red", "rediiii" , "Это красный цвет")
|
||||
.Перечисление("blue", "blue", "Это синий цвет")
|
||||
;
|
||||
|
||||
Приложение.УстановитьОсновноеДействие(ЭтотОбъект);
|
||||
|
||||
ВходящиеАргументы = Новый Массив;
|
||||
// ВходящиеАргументы.Добавить("--help");
|
||||
|
||||
ВходящиеАргументы.Добавить("--enum");
|
||||
ВходящиеАргументы.Добавить("red");
|
||||
|
||||
Приложение.Запустить(ВходящиеАргументы);
|
||||
|
||||
Утверждения.ПроверитьРавенство(enum.Значение, "rediiii", "Аргумент enum не равен ожидаемому");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
|
||||
|
||||
Процедура ВыполнитьКоманду(Знач Команда) Экспорт
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ИмяФункции()
|
||||
|
||||
КонецФункции
|
||||
|
||||
Лог = Логирование.ПолучитьЛог("oscript.lib.cli_command");
|
||||
//Лог.УстановитьУровень(УровниЛога.Отладка);
|
||||
283
lib/cli/tests/Лексер_test.os
Normal file
283
lib/cli/tests/Лексер_test.os
Normal file
@@ -0,0 +1,283 @@
|
||||
#использовать "../src/core"
|
||||
#Использовать asserts
|
||||
#Использовать logos
|
||||
|
||||
Перем юТест;
|
||||
Перем Лог;
|
||||
|
||||
Функция ПолучитьСписокТестов(Знач Тестирование) Экспорт
|
||||
|
||||
юТест = Тестирование;
|
||||
|
||||
ИменаТестов = Новый Массив;
|
||||
|
||||
ИменаТестов.Добавить("ТестДолжен_ПроверитьЛексерНаРазборТокенов");
|
||||
|
||||
Возврат ИменаТестов;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ТестДолжен_ПроверитьЛексерНаРазборТокенов() Экспорт
|
||||
|
||||
ПроверочныеДанные = ТестовыеСлучаи();
|
||||
|
||||
Для каждого КлючЗначение Из ПроверочныеДанные Цикл
|
||||
|
||||
Лог.Отладка("Проверяю spec: %1", КлючЗначение.Ключ);
|
||||
|
||||
Лексер = Новый Лексер(КлючЗначение.Ключ).Прочитать();
|
||||
|
||||
Утверждения.ПроверитьЛожь(Лексер.ЕстьОшибка(), СтрШаблон("Лексер должен отработать успешно. Спек: %1 -- Ошибка: %2", КлючЗначение.Ключ, Лексер.ПолучитьИнформациюОбОшибке()));
|
||||
|
||||
СпекМассив = Лексер.ПолучитьТокены();
|
||||
|
||||
Утверждения.ПроверитьРавенство(СпекМассив.Количество(), КлючЗначение.Значение.Количество(), "Набор токенов должен быть одинаковым: "+ КлючЗначение.Ключ);
|
||||
|
||||
Утверждения.ПроверитьИстину(СверитьМассивыТокенов(СпекМассив, КлючЗначение.Значение),"Токены не равны " + КлючЗначение.Ключ);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция СверитьТокены(ПроверяемыйТокен, ИдеальныйТокен)
|
||||
|
||||
Для каждого КлючЗначение Из ИдеальныйТокен Цикл
|
||||
|
||||
Если Не КлючЗначение.Значение = ПроверяемыйТокен[КлючЗначение.Ключ] Тогда
|
||||
Лог.Отладка("Не равны ключи %1 = %2", КлючЗначение.Значение, ПроверяемыйТокен[КлючЗначение.Ключ]);
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Истина;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СверитьМассивыТокенов(ПроверяемыйМассив, ИдеальныйМассив)
|
||||
|
||||
Для ИндексТокена = 0 По ИдеальныйМассив.ВГраница() Цикл
|
||||
|
||||
ИдеальныйТокен = ИдеальныйМассив[ИндексТокена];
|
||||
ПроверяемыйТокен = ПроверяемыйМассив[ИндексТокена];
|
||||
ТокеныРавны = СверитьТокены(ПроверяемыйТокен, ИдеальныйТокен);
|
||||
|
||||
Если НЕ ТокеныРавны Тогда
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Истина;
|
||||
|
||||
КонецФункции
|
||||
|
||||
|
||||
Функция ПравильныйОтвет(Ответ1, Ответ2 = Неопределено, Ответ3 = Неопределено, Ответ4 = Неопределено, Ответ5 = Неопределено, Ответ6 = Неопределено, Ответ7 = Неопределено)
|
||||
|
||||
Массив = Новый Массив;
|
||||
|
||||
Массив.Добавить(Ответ1);
|
||||
|
||||
Если ЗначениеЗаполнено(Ответ2) Тогда
|
||||
Массив.Добавить(Ответ2);
|
||||
КонецЕсли;
|
||||
Если ЗначениеЗаполнено(Ответ3) Тогда
|
||||
Массив.Добавить(Ответ3);
|
||||
КонецЕсли;
|
||||
Если ЗначениеЗаполнено(Ответ4) Тогда
|
||||
Массив.Добавить(Ответ4);
|
||||
КонецЕсли;
|
||||
Если ЗначениеЗаполнено(Ответ5) Тогда
|
||||
Массив.Добавить(Ответ5);
|
||||
КонецЕсли;
|
||||
Если ЗначениеЗаполнено(Ответ6) Тогда
|
||||
Массив.Добавить(Ответ6);
|
||||
КонецЕсли;
|
||||
Если ЗначениеЗаполнено(Ответ7) Тогда
|
||||
Массив.Добавить(Ответ7);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Массив;
|
||||
|
||||
КонецФункции
|
||||
|
||||
|
||||
Функция ТестовыеСлучаи()
|
||||
|
||||
ПроверочныеДанные = Новый Соответствие;
|
||||
|
||||
ПроверочныеДанные.Вставить("XOPTIONS", ПравильныйОтвет(Токены.НовыйТокен(Токены.ТипыТокенов().TTArg, "XOPTIONS", 0)));
|
||||
ПроверочныеДанные.Вставить("OPTIONSX", ПравильныйОтвет(Токены.НовыйТокен(Токены.ТипыТокенов().TTArg, "OPTIONSX", 0)));
|
||||
ПроверочныеДанные.Вставить("ARG_EXTRA", ПравильныйОтвет(Токены.НовыйТокен(Токены.ТипыТокенов().TTArg, "ARG_EXTRA", 0)));
|
||||
ПроверочныеДанные.Вставить("OPTIONS", ПравильныйОтвет(Токены.НовыйТокен(Токены.ТипыТокенов().TTOptions, "OPTIONS", 0)));
|
||||
ПроверочныеДанные.Вставить("ОПЦИИ", ПравильныйОтвет(Токены.НовыйТокен(Токены.ТипыТокенов().TTOptions, "ОПЦИИ", 0)));
|
||||
ПроверочныеДанные.Вставить("[OPTIONS] ", ПравильныйОтвет(
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTOpenSq, "[", 0),
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTOptions, "OPTIONS", 1),
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTCloseSq, "]", 8)
|
||||
));
|
||||
|
||||
ПроверочныеДанные.Вставить("ARG1 ARG2", ПравильныйОтвет(Токены.НовыйТокен(Токены.ТипыТокенов().TTArg, "ARG1", 0),
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTArg, "ARG2", 5)));
|
||||
ПроверочныеДанные.Вставить("ARG1 ARG2", ПравильныйОтвет(Токены.НовыйТокен(Токены.ТипыТокенов().TTArg, "ARG1", 0),
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTArg, "ARG2", 6)));
|
||||
|
||||
ПроверочныеДанные.Вставить("(", ПравильныйОтвет(Токены.НовыйТокен(Токены.ТипыТокенов().TTOpenPar, "(", 0)));
|
||||
ПроверочныеДанные.Вставить(")", ПравильныйОтвет(Токены.НовыйТокен(Токены.ТипыТокенов().TTClosePar, ")", 0)));
|
||||
|
||||
ПроверочныеДанные.Вставить("...", ПравильныйОтвет(Токены.НовыйТокен(Токены.ТипыТокенов().TTRep, "...", 0)));
|
||||
ПроверочныеДанные.Вставить("ARG...", ПравильныйОтвет(Токены.НовыйТокен(Токены.ТипыТокенов().TTArg, "ARG", 0),
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTRep, "...", 3)));
|
||||
|
||||
ПроверочныеДанные.Вставить("-a...", ПравильныйОтвет(Токены.НовыйТокен(Токены.ТипыТокенов().TTShortOpt, "-a", 0),
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTRep, "...", 2)));
|
||||
|
||||
ПроверочныеДанные.Вставить("[-a...]", ПравильныйОтвет(
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTOpenSq, "[", 0),
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTShortOpt, "-a", 1),
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTRep, "...", 3),
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTCloseSq, "]", 6)
|
||||
)
|
||||
);
|
||||
|
||||
ПроверочныеДанные.Вставить("|", ПравильныйОтвет(Токены.НовыйТокен(Токены.ТипыТокенов().TTChoice, "|", 0)));
|
||||
ПроверочныеДанные.Вставить("ARG1 |ARG2", ПравильныйОтвет(
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTArg, "ARG1", 0),
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTChoice, "|", 5),
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTArg, "ARG2", 6)
|
||||
)
|
||||
);
|
||||
ПроверочныеДанные.Вставить("ARG1| ARG2", ПравильныйОтвет(
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTArg, "ARG1", 0),
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTChoice, "|", 4),
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTArg, "ARG2", 6)
|
||||
)
|
||||
);
|
||||
|
||||
ПроверочныеДанные.Вставить("ARG1|ARG2", ПравильныйОтвет(
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTArg, "ARG1", 0),
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTChoice, "|", 4),
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTArg, "ARG2", 5)
|
||||
)
|
||||
);
|
||||
|
||||
ПроверочныеДанные.Вставить("(ARG)", ПравильныйОтвет(
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTOpenPar, "(", 0),
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTArg, "ARG", 1),
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTClosePar, ")", 4)
|
||||
)
|
||||
);
|
||||
ПроверочныеДанные.Вставить("(-v|-s -b)", ПравильныйОтвет(
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTOpenPar, "(", 0),
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTShortOpt, "-v", 1),
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTChoice, "|", 3),
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTShortOpt, "-s", 4),
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTShortOpt, "-b", 7),
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTClosePar, ")", 9)
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
|
||||
ПроверочныеДанные.Вставить("( ARG )", ПравильныйОтвет(
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTOpenPar, "(", 0),
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTArg, "ARG", 2),
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTClosePar, ")", 6)
|
||||
)
|
||||
);
|
||||
|
||||
ПроверочныеДанные.Вставить("[ARG]", ПравильныйОтвет(
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTOpenSq, "[", 0),
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTArg, "ARG", 1),
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTCloseSq, "]", 4)
|
||||
)
|
||||
);
|
||||
|
||||
ПроверочныеДанные.Вставить("[ ARG ]", ПравильныйОтвет(
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTOpenSq, "[", 0),
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTArg, "ARG", 2),
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTCloseSq, "]", 6)
|
||||
)
|
||||
);
|
||||
|
||||
ПроверочныеДанные.Вставить("ARG [ARG2 ]", ПравильныйОтвет(
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTArg, "ARG", 0),
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTOpenSq, "[", 4),
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTArg, "ARG2", 5),
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTCloseSq, "]", 10)
|
||||
)
|
||||
);
|
||||
|
||||
ПроверочныеДанные.Вставить("ARG [ ARG2]", ПравильныйОтвет(
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTArg, "ARG", 0),
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTOpenSq, "[", 4),
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTArg, "ARG2", 6),
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTCloseSq, "]", 10)
|
||||
)
|
||||
);
|
||||
|
||||
ПроверочныеДанные.Вставить("-p", ПравильныйОтвет(
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTShortOpt, "-p", 0),
|
||||
)
|
||||
);
|
||||
ПроверочныеДанные.Вставить(" -x", ПравильныйОтвет(
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTShortOpt, "-x", 1),
|
||||
)
|
||||
);
|
||||
ПроверочныеДанные.Вставить("--force", ПравильныйОтвет(
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTLongOpt, "--force", 0),
|
||||
)
|
||||
);
|
||||
ПроверочныеДанные.Вставить("--sig-proxy", ПравильныйОтвет(
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTLongOpt, "--sig-proxy", 0),
|
||||
)
|
||||
);
|
||||
|
||||
ПроверочныеДанные.Вставить("-aBc", ПравильныйОтвет(
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTOptSeq, "-aBc", 0),
|
||||
)
|
||||
);
|
||||
ПроверочныеДанные.Вставить("--", ПравильныйОтвет(
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTDoubleDash, "--", 0),
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
ПроверочныеДанные.Вставить("=<bla>", ПравильныйОтвет(
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTOptValue, "=<bla>", 0),
|
||||
)
|
||||
);
|
||||
|
||||
ПроверочныеДанные.Вставить("=<bla>", ПравильныйОтвет(
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTOptValue, "=<bla>", 0),
|
||||
)
|
||||
);
|
||||
|
||||
ПроверочныеДанные.Вставить("=<bla-bla>", ПравильныйОтвет(
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTOptValue, "=<bla-bla>", 0),
|
||||
)
|
||||
);
|
||||
|
||||
ПроверочныеДанные.Вставить("=<bla--bla>", ПравильныйОтвет(
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTOptValue, "=<bla--bla>", 0),
|
||||
)
|
||||
);
|
||||
|
||||
ПроверочныеДанные.Вставить("-p=<file-path>", ПравильныйОтвет(
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTShortOpt, "-p", 0),
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTOptValue, "=<file-path>", 2),
|
||||
)
|
||||
);
|
||||
|
||||
ПроверочныеДанные.Вставить("--path=<file- path>", ПравильныйОтвет(
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTLongOpt, "--path", 0),
|
||||
Токены.НовыйТокен(Токены.ТипыТокенов().TTOptValue, "=<file- path>", 6),
|
||||
)
|
||||
);
|
||||
|
||||
Возврат ПроверочныеДанные
|
||||
|
||||
КонецФункции
|
||||
|
||||
Лог = Логирование.ПолучитьЛог("oscript.lib.cli_lexer");
|
||||
//Лог.УстановитьУровень(УровниЛога.Отладка);
|
||||
28
lib/cli/tests/МассивыПараметров.os
Normal file
28
lib/cli/tests/МассивыПараметров.os
Normal file
@@ -0,0 +1,28 @@
|
||||
#использовать "../src/core"
|
||||
#Использовать asserts
|
||||
|
||||
&Тест
|
||||
Процедура ПроверитьТМассивДат() Экспорт
|
||||
|
||||
// Дано
|
||||
Команда = ЗагрузитьСценарий("tests/fixtures/КомандаСМассивами.os");
|
||||
|
||||
Приложение = Новый КонсольноеПриложение("cp", "");
|
||||
Приложение.Версия("v version", "1.0");
|
||||
ПараметрыКоманды = Новый Массив();
|
||||
ПараметрыКоманды.Добавить("testingarray");
|
||||
ПараметрыКоманды.Добавить("-a");
|
||||
ПараметрыКоманды.Добавить("2023-04-13;2023-04-14");
|
||||
|
||||
Приложение.ДобавитьКоманду("testingarray", "Тестируем массив", Команда);
|
||||
|
||||
// Когда
|
||||
|
||||
Приложение.Запустить(ПараметрыКоманды);
|
||||
|
||||
// Тогда
|
||||
|
||||
Ожидаем.Что(Команда.МассивДат[0], "дата1").Равно(Дата("20230413000000"));
|
||||
Ожидаем.Что(Команда.МассивДат[1], "дата2").Равно(Дата("20230414000000"));
|
||||
|
||||
КонецПроцедуры
|
||||
289
lib/cli/tests/ОпцияПарсера_test.os
Normal file
289
lib/cli/tests/ОпцияПарсера_test.os
Normal file
@@ -0,0 +1,289 @@
|
||||
#использовать "../src/core"
|
||||
#Использовать asserts
|
||||
#Использовать logos
|
||||
|
||||
Перем юТест;
|
||||
Перем Лог;
|
||||
|
||||
Функция ПолучитьСписокТестов(Знач Тестирование) Экспорт
|
||||
|
||||
юТест = Тестирование;
|
||||
|
||||
ИменаТестов = Новый Массив;
|
||||
|
||||
ИменаТестов.Добавить("ТестДолжен_ПроверитьПарсингБулевоОпций");
|
||||
ИменаТестов.Добавить("ТестДолжен_ПроверитьПарсингМассивовБулевоОпций");
|
||||
ИменаТестов.Добавить("ТестДолжен_ПроверитьПарсингОпций");
|
||||
ИменаТестов.Добавить("ТестДолжен_ПроверитьПарсингМассивовОпций");
|
||||
|
||||
Возврат ИменаТестов;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ТестДолжен_ПроверитьПарсингБулевоОпций() Экспорт
|
||||
|
||||
|
||||
force = Опция("f force", Ложь).Флаг();
|
||||
g = Опция("g", Ложь).Флаг();
|
||||
x = Опция("x", Ложь).Флаг();
|
||||
y = Опция("y", Ложь).Флаг();
|
||||
|
||||
ИндексОпций = Новый Соответствие;
|
||||
ИндексОпций.Вставить("-f", force);
|
||||
ИндексОпций.Вставить("--force", force);
|
||||
ИндексОпций.Вставить("-g", g);
|
||||
ИндексОпций.Вставить("-x", x);
|
||||
ИндексОпций.Вставить("-y", y);
|
||||
|
||||
О_Парсера = Новый ОпцияПарсера(force, ИндексОпций);
|
||||
Утверждения.ПроверитьРавенство("-f", О_Парсера.ВСтроку(), "Парсер опции должен быть равен -f");
|
||||
|
||||
ТестовыеСлучаи = Новый Массив;
|
||||
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-f x", "x", "Истина"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-f=true x", "x", "Истина"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-f=false x", "x", "Ложь"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("--force x", "x", "Истина"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("--force=true x", "x", "Истина"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("--force=false x", "x", "Ложь"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-fgxy x", "-gxy x", "Истина"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-gfxy x", "-gxy x", "Истина"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-gxfy x", "-gxy x", "Истина"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-gxyf x", "-gxy x", "Истина"));
|
||||
|
||||
Для каждого Тест Из ТестовыеСлучаи Цикл
|
||||
НачальноеКоличество = Тест.Аргументы.Количество();
|
||||
|
||||
Лог.Отладка("Проверяю тестовый случай: %1", СтрСоединить(Тест.Аргументы, " "));
|
||||
Контекст = Новый КонтекстПарсеров();
|
||||
Результат = О_Парсера.Поиск(Тест.Аргументы, Контекст);
|
||||
Утверждения.ПроверитьИстину(Результат.РезультатПоиска, "Опция (-f) должен быть найдена");
|
||||
Утверждения.ПроверитьРавенство(НачальноеКоличество, Тест.Аргументы.Количество(), "Количество аргументов не должно измениться");
|
||||
|
||||
Утверждения.ПроверитьРавенство(СтрСоединить(Результат.Аргументы, " "), СтрСоединить(Тест.АргументыВыхода, " "), "Аргументы выходные должны быть равны");
|
||||
Утверждения.ПроверитьРавенство(1, Контекст.Опции[О_Парсера.Опция].Количество(), "Количество результатов должно быть 1");
|
||||
Утверждения.ПроверитьРавенство(Булево(Контекст.Опции[О_Парсера.Опция][0]), Булево(Тест.ЗначениеОпции[0]), "Ожидаемые результаты должны быть равны");
|
||||
|
||||
КонтекстСброса = Новый КонтекстПарсеров();
|
||||
КонтекстСброса.СбросОпций = Истина;
|
||||
Результат = О_Парсера.Поиск(Тест.Аргументы, КонтекстСброса);
|
||||
Утверждения.ПроверитьЛожь(Результат.РезультатПоиска, "Опция (-f) не должена быть найдена");
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестДолжен_ПроверитьПарсингМассивовБулевоОпций() Экспорт
|
||||
|
||||
force = Опция("f force", Ложь).ТМассивБулево();
|
||||
g = Опция("g", Ложь).Флаг();
|
||||
x = Опция("x", Ложь).Флаг();
|
||||
y = Опция("y", Ложь).Флаг();
|
||||
|
||||
ИндексОпций = Новый Соответствие;
|
||||
ИндексОпций.Вставить("-f", force);
|
||||
ИндексОпций.Вставить("--force", force);
|
||||
ИндексОпций.Вставить("-g", g);
|
||||
ИндексОпций.Вставить("-x", x);
|
||||
ИндексОпций.Вставить("-y", y);
|
||||
|
||||
О_Парсера = Новый ОпцияПарсера(force, ИндексОпций);
|
||||
Утверждения.ПроверитьРавенство("-f", О_Парсера.ВСтроку(), "Парсер опции должен быть равен -f");
|
||||
|
||||
ТестовыеСлучаи = Новый Массив;
|
||||
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-f -f x", "x", "Истина Истина"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-f=true -f=true x", "x", "Истина Истина"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-f=false -f=false x", "x", "Ложь Ложь"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-f=true -f=false x", "x", "Истина Ложь"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("--force --force x", "x", "Истина Истина"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("--force=true --force=true x", "x", "Истина Истина"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("--force=false --force=false x", "x", "Ложь Ложь"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("--force=true --force=false x", "x", "Истина Ложь"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-f -fgxy x", "-gxy x", "Истина Истина"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-f -gfxy x", "-gxy x", "Истина Истина"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-f -gxfy x", "-gxy x", "Истина Истина"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-f -gxyf x", "-gxy x", "Истина Истина"));
|
||||
|
||||
ТипМассивБулево = Новый ТипМассивБулево();
|
||||
|
||||
Для каждого Тест Из ТестовыеСлучаи Цикл
|
||||
НачальноеКоличество = Тест.Аргументы.Количество();
|
||||
|
||||
Лог.Отладка("Проверяю тестовый случай: %1", СтрСоединить(Тест.Аргументы, " "));
|
||||
Контекст = Новый КонтекстПарсеров();
|
||||
|
||||
Результат = О_Парсера.Поиск(Тест.Аргументы, Контекст);
|
||||
Утверждения.ПроверитьИстину(Результат.РезультатПоиска, "Опция (-f) должен быть найдена");
|
||||
Утверждения.ПроверитьРавенство(НачальноеКоличество, Тест.Аргументы.Количество(), "Количество аргументов не должно измениться");
|
||||
|
||||
Результат = О_Парсера.Поиск(Результат.Аргументы, Контекст);
|
||||
Утверждения.ПроверитьИстину(Результат.РезультатПоиска, "Опция (-f) должен быть найдена");
|
||||
Утверждения.ПроверитьРавенство(НачальноеКоличество, Тест.Аргументы.Количество(), "Количество аргументов не должно измениться");
|
||||
|
||||
МассивЗначений = Новый Массив;
|
||||
Для Каждого Значение Из Контекст.Опции[О_Парсера.Опция] Цикл
|
||||
ТипМассивБулево.УстановитьЗначение(Значение, МассивЗначений);
|
||||
КонецЦикла;
|
||||
|
||||
Утверждения.ПроверитьРавенство(СтрСоединить(Результат.Аргументы, " "), СтрСоединить(Тест.АргументыВыхода, " "), "Аргументы выходные должны быть равны");
|
||||
Утверждения.ПроверитьРавенство(ТипМассивБулево.ВСтроку(МассивЗначений), СтрСоединить(Тест.ЗначениеОпции, ", "), "Ожидаемые результаты должны быть равны");
|
||||
|
||||
КонтекстСброса = Новый КонтекстПарсеров();
|
||||
КонтекстСброса.СбросОпций = Истина;
|
||||
Результат = О_Парсера.Поиск(Тест.Аргументы, КонтекстСброса);
|
||||
Утверждения.ПроверитьЛожь(Результат.РезультатПоиска, "Опция (-f) не должена быть найдена");
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ТестовыйСлучай(Знач Аргументы, Знач АргументыВыхода, Знач ЗначениеОпции)
|
||||
|
||||
Тест = Новый Структура;
|
||||
Тест.Вставить("Аргументы", СтрРазделить(Аргументы," "));
|
||||
Тест.Вставить("АргументыВыхода", СтрРазделить(АргументыВыхода," "));
|
||||
Тест.Вставить("ЗначениеОпции", СтрРазделить(ЗначениеОпции," "));
|
||||
|
||||
Возврат Тест;
|
||||
КонецФункции
|
||||
|
||||
Процедура ТестДолжен_ПроверитьПарсингОпций() Экспорт
|
||||
|
||||
|
||||
НаименованияОпции = Новый Массив;
|
||||
НаименованияОпции.Добавить("-f");
|
||||
НаименованияОпции.Добавить("--force");
|
||||
|
||||
МассивОпций = Новый Массив;
|
||||
МассивОпций.Добавить(Опция("f force", "").ТСтрока());
|
||||
МассивОпций.Добавить(Опция("f force", "").ТЧисло());
|
||||
// TODO Написать отдельную проверку для дат
|
||||
МассивОпций.Добавить(Опция("f force", "").ТДата());
|
||||
|
||||
|
||||
ТестовыеСлучаи = Новый Массив;
|
||||
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-f x", "", "x"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-f=x y", "y", "x"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-fx y", "y", "x"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-afx y", "-a y", "x"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-af x y", "-a y", "x"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("--force x", "", "x"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("--force=x y", "y", "x"));
|
||||
|
||||
a = Новый ПараметрКоманды("опция", "a", Ложь, "Тестовый параметр a");
|
||||
|
||||
|
||||
Для каждого Тест Из ТестовыеСлучаи Цикл
|
||||
|
||||
|
||||
Для каждого ОпцияForce Из МассивОпций Цикл
|
||||
НачальноеКоличество = Тест.Аргументы.Количество();
|
||||
Лог.Отладка("Проверяю тестовый случай: %1", СтрСоединить(Тест.Аргументы, " "));
|
||||
Лог.Отладка("-> тип опции: %1", ОпцияForce.ТипОпции);
|
||||
|
||||
ИндексОпций = Новый Соответствие;
|
||||
ИндексОпций.Вставить("-f", ОпцияForce);
|
||||
ИндексОпций.Вставить("--force", ОпцияForce);
|
||||
ИндексОпций.Вставить("-a", a);
|
||||
АргументыТеста = Тест.Аргументы;
|
||||
О_Парсера = Новый ОпцияПарсера(ОпцияForce, ИндексОпций);
|
||||
Утверждения.ПроверитьРавенство("-f", О_Парсера.ВСтроку(), "Парсер опции должен быть равен -f");
|
||||
|
||||
Контекст = Новый КонтекстПарсеров();
|
||||
Результат = О_Парсера.Поиск(АргументыТеста, Контекст);
|
||||
Утверждения.ПроверитьИстину(Результат.РезультатПоиска, "Опция (-f) должна быть найдена");
|
||||
Утверждения.ПроверитьРавенство(НачальноеКоличество, Тест.Аргументы.Количество(), "Количество аргументов не должно измениться");
|
||||
|
||||
Утверждения.ПроверитьРавенство(СтрСоединить(Результат.Аргументы, " "), СтрСоединить(Тест.АргументыВыхода, " "), "Аргументы выходные должны быть равны");
|
||||
Утверждения.ПроверитьРавенство(1, Контекст.Опции[О_Парсера.Опция].Количество(), "Количество результатов должно быть 1");
|
||||
Утверждения.ПроверитьРавенство(Контекст.Опции[О_Парсера.Опция][0], Тест.ЗначениеОпции[0], "Ожидаемые результаты должны быть равны");
|
||||
|
||||
КонтекстСброса = Новый КонтекстПарсеров();
|
||||
КонтекстСброса.СбросОпций = Истина;
|
||||
Результат = О_Парсера.Поиск(АргументыТеста, КонтекстСброса);
|
||||
Утверждения.ПроверитьЛожь(Результат.РезультатПоиска, "Опция (-f) не должна быть найдена");
|
||||
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТестДолжен_ПроверитьПарсингМассивовОпций() Экспорт
|
||||
|
||||
|
||||
НаименованияОпции = Новый Массив;
|
||||
НаименованияОпции.Добавить("-f");
|
||||
НаименованияОпции.Добавить("--force");
|
||||
|
||||
МассивОпций = Новый Массив;
|
||||
МассивОпций.Добавить(Опция("f force", Новый Массив).ТМассивСтрок());
|
||||
МассивОпций.Добавить(Опция("f force", Новый Массив).ТМассивЧисел());
|
||||
// TODO Написать отдельную проверку для дат
|
||||
МассивОпций.Добавить(Опция("f force", Новый Массив).ТМассивДат());
|
||||
|
||||
|
||||
ТестовыеСлучаи = Новый Массив;
|
||||
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-f x -f z", "", "x z"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-f=x -f=z y", "y", "x z"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-fx -fz y", "y", "x z"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-afx -yfz", "-a -y", "x z"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-af x -yf z", "-a -y", "x z"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("--force x --force z", "", "x z"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("--force=x --force=z y", "y", "x z"));
|
||||
|
||||
a = Новый ПараметрКоманды("опция", "a", Ложь, "Тестовый параметр a");
|
||||
y = Новый ПараметрКоманды("опция", "y", Ложь, "Тестовый параметр a");
|
||||
|
||||
|
||||
Для каждого Тест Из ТестовыеСлучаи Цикл
|
||||
|
||||
|
||||
Для каждого ОпцияForce Из МассивОпций Цикл
|
||||
НачальноеКоличество = Тест.Аргументы.Количество();
|
||||
Лог.Отладка("Проверяю тестовый случай: %1", СтрСоединить(Тест.Аргументы, " "));
|
||||
Лог.Отладка("-> тип опции: %1", ОпцияForce.ТипОпции);
|
||||
|
||||
ИндексОпций = Новый Соответствие;
|
||||
ИндексОпций.Вставить("-f", ОпцияForce);
|
||||
ИндексОпций.Вставить("--force", ОпцияForce);
|
||||
ИндексОпций.Вставить("-a", a);
|
||||
ИндексОпций.Вставить("-y", y);
|
||||
АргументыТеста = Тест.Аргументы;
|
||||
О_Парсера = Новый ОпцияПарсера(ОпцияForce, ИндексОпций);
|
||||
Утверждения.ПроверитьРавенство("-f", О_Парсера.ВСтроку(), "Парсер опции должен быть равен -f");
|
||||
|
||||
Контекст = Новый КонтекстПарсеров();
|
||||
Результат = О_Парсера.Поиск(АргументыТеста, Контекст);
|
||||
Утверждения.ПроверитьИстину(Результат.РезультатПоиска, "Опция (-f) должна быть найдена");
|
||||
Утверждения.ПроверитьРавенство(НачальноеКоличество, Тест.Аргументы.Количество(), "Количество аргументов не должно измениться");
|
||||
|
||||
Результат = О_Парсера.Поиск(Результат.Аргументы, Контекст);
|
||||
Утверждения.ПроверитьИстину(Результат.РезультатПоиска, "Опция (-f) должна быть найдена");
|
||||
Утверждения.ПроверитьРавенство(НачальноеКоличество, Тест.Аргументы.Количество(), "Количество аргументов не должно измениться");
|
||||
|
||||
|
||||
Утверждения.ПроверитьРавенство(СтрСоединить(Результат.Аргументы, " "), СтрСоединить(Тест.АргументыВыхода, " "), "Аргументы выходные должны быть равны");
|
||||
Утверждения.ПроверитьРавенство(СтрСоединить(Контекст.Опции[О_Парсера.Опция], " "), СтрСоединить(Тест.ЗначениеОпции, " "), "Ожидаемые результаты должны быть равны");
|
||||
|
||||
КонтекстСброса = Новый КонтекстПарсеров();
|
||||
КонтекстСброса.СбросОпций = Истина;
|
||||
Результат = О_Парсера.Поиск(АргументыТеста, КонтекстСброса);
|
||||
Утверждения.ПроверитьЛожь(Результат.РезультатПоиска, "Опция (-f) не должна быть найдена");
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция Опция(Наименование, ЗначениеПоУмолчанию)
|
||||
Возврат Новый ПараметрКоманды("опция", Наименование, ЗначениеПоУмолчанию, "Тестовый параметр f");
|
||||
КонецФункции
|
||||
|
||||
Лог = Логирование.ПолучитьЛог("oscript.lib.cli_class_opt");
|
||||
//Лог.УстановитьУровень(УровниЛога.Отладка);
|
||||
132
lib/cli/tests/Парсер_test.os
Normal file
132
lib/cli/tests/Парсер_test.os
Normal file
@@ -0,0 +1,132 @@
|
||||
#использовать "../src/core"
|
||||
#Использовать asserts
|
||||
#Использовать logos
|
||||
|
||||
Перем юТест;
|
||||
Перем Лог;
|
||||
|
||||
Функция ПолучитьСписокТестов(Знач Тестирование) Экспорт
|
||||
|
||||
юТест = Тестирование;
|
||||
|
||||
ИменаТестов = Новый Массив;
|
||||
|
||||
ИменаТестов.Добавить("ТестДолжен_ПроверитьПарсинг");
|
||||
// ИменаТестов.Добавить("ТестДолжен_ПроверитьПарсингОпций");
|
||||
// ИменаТестов.Добавить("ТестДолжен_ПроверитьПарсингМассивовОпций");
|
||||
|
||||
Возврат ИменаТестов;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ТестДолжен_ПроверитьПарсинг() Экспорт
|
||||
|
||||
опция_a = Опция("a all", "");
|
||||
опция_b = Опция("b ball", "");
|
||||
|
||||
ИндексОпций = Новый Соответствие;
|
||||
ИндексОпций.Вставить("-a", опция_a);
|
||||
ИндексОпций.Вставить("--all", опция_a);
|
||||
ИндексОпций.Вставить("-b", опция_b);
|
||||
ИндексОпций.Вставить("--ball", опция_b);
|
||||
|
||||
Опции = Новый Соответствие;
|
||||
Опции.Вставить(опция_a, опция_a);
|
||||
Опции.Вставить(опция_b, опция_b);
|
||||
|
||||
|
||||
аргумент_ARG = Аргумент("ARG", "");
|
||||
|
||||
Аргументы = Новый Соответствие;
|
||||
Аргументы.Вставить(аргумент_ARG, аргумент_ARG);
|
||||
|
||||
ИндексАргументов = Новый Соответствие;
|
||||
ИндексАргументов.Вставить("ARG", аргумент_ARG);
|
||||
|
||||
ТестовыеСлучаи = Новый Массив;
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("", ""));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-a", "S1 -a (S2)"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("--all", "S1 -a (S2)"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-a -b", "S1 -a S2
|
||||
|S2 -b (S3)"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-a -b", "S1 -a S2
|
||||
|S2 -b (S3)"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-a | -b", "S1 -a (S2)
|
||||
|S1 -b (S3)"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-a...", "S1 -a (S2)
|
||||
|(S2) -a (S2)"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("[-a...]", "(S1) -a (S2)
|
||||
|(S2) -a (S2)"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("[-a]...", "(S1) -a (S2)
|
||||
|(S2) -a (S2)"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-a -b | ARG", "S1 -a S2
|
||||
|S2 -b (S3)
|
||||
|S2 ARG (S4)"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-a (-b | ARG)", "S1 -a S2
|
||||
|S2 -b (S3)
|
||||
|S2 ARG (S4)"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("(-a -b) | ARG...", "S1 -a S2
|
||||
|S1 ARG (S4)
|
||||
|S2 -b (S3)
|
||||
|(S4) ARG (S4)"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-ab", "S1 -ab (S2)"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("-a -- ARG", "S1 -a S2
|
||||
|S2 -- S3
|
||||
|S3 ARG (S4)"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("[OPTIONS]", "(S1) -ab (S2)"));
|
||||
ТестовыеСлучаи.Добавить(ТестовыйСлучай("[ОПЦИИ]", "(S1) -ab (S2)"));
|
||||
|
||||
|
||||
Для каждого Тест Из ТестовыеСлучаи Цикл
|
||||
fsm = Новый ВыборСовпадений();
|
||||
Лог.Отладка("Проверяю тестовый случай: %1", Тест.Спек);
|
||||
Лог.Отладка("Строка состояния: %1", Тест.Соединения);
|
||||
|
||||
Лексер = Новый Лексер(Тест.Спек).Прочитать();
|
||||
|
||||
Утверждения.ПроверитьЛожь(Лексер.ЕстьОшибка(), "Лексер должен отработать успешно. Ошибка: " + Лексер.ПолучитьИнформациюОбОшибке());
|
||||
|
||||
ТокеныПарсера = Лексер.ПолучитьТокены();
|
||||
|
||||
ПараметрыПарсера = Новый Структура;
|
||||
ПараметрыПарсера.Вставить("Спек", Тест.Спек);
|
||||
ПараметрыПарсера.Вставить("Опции", Опции);
|
||||
ПараметрыПарсера.Вставить("Аргументы", Аргументы);
|
||||
ПараметрыПарсера.Вставить("ОпцииИндекс", ИндексОпций);
|
||||
ПараметрыПарсера.Вставить("АргументыИндекс", ИндексАргументов);
|
||||
|
||||
парсер = Новый Парсер(ТокеныПарсера, ПараметрыПарсера);
|
||||
НачальноеСостояние = парсер.Прочитать();
|
||||
|
||||
СтрокаПути = fsm.СгенеритьСтрокуПути(НачальноеСостояние);
|
||||
|
||||
МассивОжиданийСтрок = СтрРазделить(Тест.Соединения, Символы.ПС);
|
||||
Для каждого ОжидаемаяСтрока Из МассивОжиданийСтрок Цикл
|
||||
|
||||
Утверждения.ПроверитьВхождение(СтрокаПути, ОжидаемаяСтрока, "Ожидали, что все строки будут найдены. Тестовый спек: " + Тест.Спек);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция Опция(Наименование, ЗначениеПоУмолчанию)
|
||||
Возврат Новый ПараметрКоманды("опция", Наименование, ЗначениеПоУмолчанию, "Тестовый параметр f");
|
||||
КонецФункции
|
||||
|
||||
Функция Аргумент(Наименование, ЗначениеПоУмолчанию)
|
||||
Возврат Новый ПараметрКоманды("Аргумент", Наименование, ЗначениеПоУмолчанию, "Тестовый параметр f");
|
||||
КонецФункции
|
||||
|
||||
Функция ТестовыйСлучай(Знач Спек, Знач Соединения)
|
||||
|
||||
Тест = Новый Структура;
|
||||
Тест.Вставить("Спек",Спек);
|
||||
Тест.Вставить("Соединения",Соединения);
|
||||
|
||||
Возврат Тест;
|
||||
КонецФункции
|
||||
|
||||
Лог = Логирование.ПолучитьЛог("oscript.lib.spec_parse");
|
||||
//Лог.УстановитьУровень(УровниЛога.Отладка);
|
||||
Reference in New Issue
Block a user