mirror of
https://github.com/alei1180/curlone.git
synced 2025-11-24 22:53:34 +02:00
Merge pull request #177 from Stivo182/fix/176-empty-value
Исправление парсинга аргументов команды с пустым значением
This commit is contained in:
@@ -49,11 +49,6 @@
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если ПустаяСтрока(Аргументы[0]) Тогда
|
||||
Результат.Ошибка = ОшибкиПарсера.ОшибкаОжидаетсяАргумент(Аргумент.Имя);
|
||||
Возврат Результат;
|
||||
КонецЕсли;
|
||||
|
||||
Если НЕ КонтекстПоиска.СбросОпций И СтрНачинаетсяС(Аргументы[0], "-") И НЕ Аргументы[0] = "-" Тогда
|
||||
Результат.Ошибка = ОшибкиПарсера.ОшибкаОжидаетсяАргументВместоОпции(Аргумент.Имя, Аргументы[0]);
|
||||
Возврат Результат;
|
||||
|
||||
@@ -1534,8 +1534,18 @@
|
||||
|
||||
Если ОписаниеЗапроса.АдресаРесурсов.Количество() = 0 Тогда
|
||||
ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка("Не указан URL"));
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
ПорядковыйНомер = 0;
|
||||
Для Каждого ОписаниеРесурса Из ОписаниеЗапроса.АдресаРесурсов Цикл
|
||||
ПорядковыйНомер = ПорядковыйНомер + 1;
|
||||
Если Не ЗначениеЗаполнено(ОписаниеРесурса.URL) Тогда
|
||||
ТекстОшибки = СтрШаблон("Не указан URL #%1", ПорядковыйНомер);
|
||||
ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки));
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПроверитьПоддержкуПротокола(ОписаниеЗапроса, ПоддерживаемыеПротоколы)
|
||||
|
||||
@@ -81,27 +81,29 @@
|
||||
Если НачатьНовуюКоманду Тогда
|
||||
Если Не Токен = Неопределено И Токен.ТипТокена() = "ОператорСвязыванияКоманд" Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
ДобавитьАргумент();
|
||||
ДобавитьНовуюКоманду();
|
||||
КонецЕсли;
|
||||
|
||||
Если Не Токен = Неопределено И Не ОткрытаКавычка() И ЭтоРазделительАргументов(Токен) Тогда
|
||||
НеобходимоПропуститьПробельныеСимволы = Не Токен = Неопределено
|
||||
И Не ОткрытаКавычка()
|
||||
И ЭтоРазделительАргументов(Токен);
|
||||
|
||||
Если НеобходимоПропуститьПробельныеСимволы Тогда
|
||||
ДобавитьАргумент();
|
||||
Токен = ПропуститьПробелыИПереносСтроки();
|
||||
КонецЕсли;
|
||||
|
||||
Если Не Токен = Неопределено
|
||||
И (Не НачатьНовуюКоманду Или Не Токен.ТипТокена() = "ОператорСвязыванияКоманд")
|
||||
И Не Токен.ТипТокена() = "ПереносСтроки" Тогда
|
||||
ДополнитьНакопительнуюСтроку(Токен.Значение());
|
||||
ДополнитьНакопительнуюСтроку(Токен.Значение());
|
||||
ПромотатьЗначениеПараметра();
|
||||
КонецЕсли;
|
||||
|
||||
Аргумент = ПолучитьНакопительнуюСтроку();
|
||||
|
||||
Если СтрДлина(Аргумент) > 0 Тогда
|
||||
ДобавитьАргумент(Аргумент);
|
||||
КонецЕсли;
|
||||
|
||||
ДобавитьАргумент();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ПромотатьЗначениеПараметра()
|
||||
@@ -127,6 +129,9 @@
|
||||
Пока Токенайзер.ЕстьЕщеТокены() Цикл
|
||||
|
||||
Токен = ПолучитьСледующийТокен();
|
||||
Если Токен = Неопределено Тогда
|
||||
Возврат Токен;
|
||||
КонецЕсли;
|
||||
|
||||
Если КавычкаБылаОткрыта <> ОткрытаКавычка()
|
||||
Или КавычкаБылаОткрыта
|
||||
@@ -166,10 +171,16 @@
|
||||
Пока Токенайзер.ЕстьЕщеТокены() Цикл
|
||||
|
||||
Токен = ПолучитьСледующийТокен();
|
||||
Если Токен = Неопределено Тогда
|
||||
Возврат Токен;
|
||||
КонецЕсли;
|
||||
|
||||
Если Не Токен.ТипТокена() = "ПробельныйСимвол" Тогда
|
||||
Возврат Токен;
|
||||
КонецЕсли;
|
||||
|
||||
ДобавитьАргумент();
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецФункции
|
||||
@@ -217,29 +228,21 @@
|
||||
|
||||
Если Токен.ТипТокена() = "КавычкаБезПоддержкиИнтерполяции" И Не ОткрытаКавычкаСПоддержкойИнтерполяции Тогда
|
||||
Если Не ЭкранироватьСимвол Тогда
|
||||
ОткрытаКавычкаБезПоддержкиИнтерполяции = Не ОткрытаКавычкаБезПоддержкиИнтерполяции;
|
||||
ОткрытаКавычкаДоПолученияТокена = ОткрытаКавычкаБезПоддержкиИнтерполяции;
|
||||
|
||||
Токен = ПолучитьСледующийТокен();
|
||||
Если ОткрытаКавычкаДоПолученияТокена И Не ОткрытаКавычкаБезПоддержкиИнтерполяции Тогда
|
||||
ДобавитьАргумент("");
|
||||
Если ОткрытаКавычкаБезПоддержкиИнтерполяции Тогда
|
||||
ДополнитьНакопительнуюСтроку("");
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Токен;
|
||||
ОткрытаКавычкаБезПоддержкиИнтерполяции = Не ОткрытаКавычкаБезПоддержкиИнтерполяции;
|
||||
Возврат ПолучитьСледующийТокен();
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
Если Токен.ТипТокена() = "КавычкаСПоддержкойИнтерполяции" И Не ОткрытаКавычкаБезПоддержкиИнтерполяции Тогда
|
||||
Если Не ЭкранироватьСимвол Тогда
|
||||
ОткрытаКавычкаСПоддержкойИнтерполяции = Не ОткрытаКавычкаСПоддержкойИнтерполяции;
|
||||
ОткрытаКавычкаДоПолученияТокена = ОткрытаКавычкаСПоддержкойИнтерполяции;
|
||||
|
||||
Токен = ПолучитьСледующийТокен();
|
||||
Если ОткрытаКавычкаДоПолученияТокена И Не ОткрытаКавычкаСПоддержкойИнтерполяции Тогда
|
||||
ДобавитьАргумент("");
|
||||
Если ОткрытаКавычкаСПоддержкойИнтерполяции Тогда
|
||||
ДополнитьНакопительнуюСтроку("");
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Токен;
|
||||
ОткрытаКавычкаСПоддержкойИнтерполяции = Не ОткрытаКавычкаСПоддержкойИнтерполяции;
|
||||
Возврат ПолучитьСледующийТокен();
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
@@ -261,14 +264,30 @@
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ДополнитьНакопительнуюСтроку(Значение)
|
||||
|
||||
Если НакопленнаяСтрока = Неопределено Тогда
|
||||
НакопленнаяСтрока = "";
|
||||
КонецЕсли;
|
||||
|
||||
НакопленнаяСтрока = НакопленнаяСтрока + Значение;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ДобавитьАргумент(Значение)
|
||||
Процедура ДобавитьАргумент()
|
||||
|
||||
Значение = НакопленнаяСтрока;
|
||||
Если Значение = Неопределено Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Если АргументыКоманд.Количество() = 0 Тогда
|
||||
ДобавитьНовуюКоманду();
|
||||
КонецЕсли;
|
||||
|
||||
АргументыКоманд[АргументыКоманд.ВГраница()].Добавить(Значение);
|
||||
|
||||
ОчиститьНакопительнуюСтроку();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ДобавитьНовуюКоманду()
|
||||
@@ -285,16 +304,9 @@
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОчиститьНакопительнуюСтроку()
|
||||
НакопленнаяСтрока = "";
|
||||
НакопленнаяСтрока = Неопределено;
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ПолучитьНакопительнуюСтроку()
|
||||
Результат = НакопленнаяСтрока;
|
||||
ОчиститьНакопительнуюСтроку();
|
||||
|
||||
Возврат Результат;
|
||||
КонецФункции
|
||||
|
||||
Функция ОткрытаКавычка()
|
||||
Возврат ОткрытаКавычкаБезПоддержкиИнтерполяции Или ОткрытаКавычкаСПоддержкойИнтерполяции;
|
||||
КонецФункции
|
||||
|
||||
@@ -95,6 +95,22 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&Тест
|
||||
Процедура ТестДолжен_ПроверитьОшибкуНеУказанОдинИзURL() Экспорт
|
||||
|
||||
КонсольнаяКоманда = "curl example1.com '' example2.com";
|
||||
|
||||
Ошибки = Неопределено;
|
||||
|
||||
Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда,, Ошибки);
|
||||
|
||||
Ожидаем.Что(Результат).Не_().Заполнено();
|
||||
Ожидаем.Что(Ошибки).Заполнено();
|
||||
Ожидаем.Что(Ошибки[0].Текст).Равно("Не указан URL #2");
|
||||
Ожидаем.Что(Ошибки[0].Критичная).ЭтоИстина();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&Тест
|
||||
Процедура ТестДолжен_ПроверитьОшибкуНеУдалосьПолучитьНомерПортаИзURL() Экспорт
|
||||
|
||||
|
||||
@@ -219,23 +219,102 @@
|
||||
&Тест
|
||||
Процедура ТестДолжен_ПроверитьПоддержкуПустогоЗначения() Экспорт
|
||||
|
||||
КоманднаяСтрока = "myapp -a '' -b ' '";
|
||||
|
||||
КоманднаяСтрока = "myapp1 -a '' -b ' '
|
||||
|myapp2 url ''
|
||||
|myapp3 url """"
|
||||
|myapp4 url''
|
||||
|myapp5 url""""
|
||||
|myapp6 url '' -f
|
||||
|myapp7 url """" -f
|
||||
|myapp8 url''''
|
||||
|myapp9 url""""""""
|
||||
|myapp10 url '' '' ''
|
||||
|myapp11 url """" """"";
|
||||
|
||||
Эталон = Новый Массив;
|
||||
Эталон.Добавить("myapp");
|
||||
Эталон.Добавить("-a");
|
||||
Эталон.Добавить("");
|
||||
Эталон.Добавить("-b");
|
||||
Эталон.Добавить(" ");
|
||||
|
||||
|
||||
Команда = Новый Массив;
|
||||
Команда.Добавить("myapp1");
|
||||
Команда.Добавить("-a");
|
||||
Команда.Добавить("");
|
||||
Команда.Добавить("-b");
|
||||
Команда.Добавить(" ");
|
||||
Эталон.Добавить(Команда);
|
||||
|
||||
Команда = Новый Массив;
|
||||
Команда.Добавить("myapp2");
|
||||
Команда.Добавить("url");
|
||||
Команда.Добавить("");
|
||||
Эталон.Добавить(Команда);
|
||||
|
||||
Команда = Новый Массив;
|
||||
Команда.Добавить("myapp3");
|
||||
Команда.Добавить("url");
|
||||
Команда.Добавить("");
|
||||
Эталон.Добавить(Команда);
|
||||
|
||||
Команда = Новый Массив;
|
||||
Команда.Добавить("myapp4");
|
||||
Команда.Добавить("url");
|
||||
Эталон.Добавить(Команда);
|
||||
|
||||
Команда = Новый Массив;
|
||||
Команда.Добавить("myapp5");
|
||||
Команда.Добавить("url");
|
||||
Эталон.Добавить(Команда);
|
||||
|
||||
Команда = Новый Массив;
|
||||
Команда.Добавить("myapp6");
|
||||
Команда.Добавить("url");
|
||||
Команда.Добавить("");
|
||||
Команда.Добавить("-f");
|
||||
Эталон.Добавить(Команда);
|
||||
|
||||
Команда = Новый Массив;
|
||||
Команда.Добавить("myapp7");
|
||||
Команда.Добавить("url");
|
||||
Команда.Добавить("");
|
||||
Команда.Добавить("-f");
|
||||
Эталон.Добавить(Команда);
|
||||
|
||||
Команда = Новый Массив;
|
||||
Команда.Добавить("myapp8");
|
||||
Команда.Добавить("url");
|
||||
Эталон.Добавить(Команда);
|
||||
|
||||
Команда = Новый Массив;
|
||||
Команда.Добавить("myapp9");
|
||||
Команда.Добавить("url");
|
||||
Эталон.Добавить(Команда);
|
||||
|
||||
Команда = Новый Массив;
|
||||
Команда.Добавить("myapp10");
|
||||
Команда.Добавить("url");
|
||||
Команда.Добавить("");
|
||||
Команда.Добавить("");
|
||||
Команда.Добавить("");
|
||||
Эталон.Добавить(Команда);
|
||||
|
||||
Команда = Новый Массив;
|
||||
Команда.Добавить("myapp11");
|
||||
Команда.Добавить("url");
|
||||
Команда.Добавить("");
|
||||
Команда.Добавить("");
|
||||
Эталон.Добавить(Команда);
|
||||
|
||||
Парсер = Новый ПарсерКонсольнойКоманды();
|
||||
Результат = Парсер.Распарсить(КоманднаяСтрока);
|
||||
|
||||
Ожидаем.Что(Результат).ИмеетДлину(1);
|
||||
Ожидаем.Что(Результат[0]).ИмеетДлину(Эталон.Количество());
|
||||
Ожидаем.Что(Результат).ИмеетДлину(Эталон.Количество());
|
||||
|
||||
Для Инд = 0 По Результат[0].ВГраница() Цикл
|
||||
Ожидаем.Что(Результат[0][Инд]).Равно(Эталон[Инд]);
|
||||
Для Инд1 = 0 По Результат.ВГраница() Цикл
|
||||
Заголовок = СтрШаблон("Команда: %1", Инд1 + 1);
|
||||
Ожидаем.Что(Результат[Инд1], Заголовок).ИмеетДлину(Эталон[Инд1].Количество());
|
||||
|
||||
Для Инд2 = 0 По Результат[Инд1].ВГраница() Цикл
|
||||
Заголовок = СтрШаблон("Команда: %1, аргумент: %2", Инд1 + 1, Инд2 + 1);
|
||||
Ожидаем.Что(Результат[Инд1][Инд2], Заголовок).Равно(Эталон[Инд1][Инд2]);
|
||||
КонецЦикла;
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Reference in New Issue
Block a user