mirror of
https://github.com/alei1180/curlone.git
synced 2025-11-26 23:10:24 +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], "-") И НЕ Аргументы[0] = "-" Тогда
|
||||||
Результат.Ошибка = ОшибкиПарсера.ОшибкаОжидаетсяАргументВместоОпции(Аргумент.Имя, Аргументы[0]);
|
Результат.Ошибка = ОшибкиПарсера.ОшибкаОжидаетсяАргументВместоОпции(Аргумент.Имя, Аргументы[0]);
|
||||||
Возврат Результат;
|
Возврат Результат;
|
||||||
|
|||||||
@@ -1534,8 +1534,18 @@
|
|||||||
|
|
||||||
Если ОписаниеЗапроса.АдресаРесурсов.Количество() = 0 Тогда
|
Если ОписаниеЗапроса.АдресаРесурсов.Количество() = 0 Тогда
|
||||||
ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка("Не указан URL"));
|
ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка("Не указан 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 Тогда
|
Если АргументыКоманд.Количество() = 0 Тогда
|
||||||
ДобавитьНовуюКоманду();
|
ДобавитьНовуюКоманду();
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
АргументыКоманд[АргументыКоманд.ВГраница()].Добавить(Значение);
|
АргументыКоманд[АргументыКоманд.ВГраница()].Добавить(Значение);
|
||||||
|
|
||||||
|
ОчиститьНакопительнуюСтроку();
|
||||||
|
|
||||||
КонецПроцедуры
|
КонецПроцедуры
|
||||||
|
|
||||||
Процедура ДобавитьНовуюКоманду()
|
Процедура ДобавитьНовуюКоманду()
|
||||||
@@ -285,16 +304,9 @@
|
|||||||
КонецПроцедуры
|
КонецПроцедуры
|
||||||
|
|
||||||
Процедура ОчиститьНакопительнуюСтроку()
|
Процедура ОчиститьНакопительнуюСтроку()
|
||||||
НакопленнаяСтрока = "";
|
НакопленнаяСтрока = Неопределено;
|
||||||
КонецПроцедуры
|
КонецПроцедуры
|
||||||
|
|
||||||
Функция ПолучитьНакопительнуюСтроку()
|
|
||||||
Результат = НакопленнаяСтрока;
|
|
||||||
ОчиститьНакопительнуюСтроку();
|
|
||||||
|
|
||||||
Возврат Результат;
|
|
||||||
КонецФункции
|
|
||||||
|
|
||||||
Функция ОткрытаКавычка()
|
Функция ОткрытаКавычка()
|
||||||
Возврат ОткрытаКавычкаБезПоддержкиИнтерполяции Или ОткрытаКавычкаСПоддержкойИнтерполяции;
|
Возврат ОткрытаКавычкаБезПоддержкиИнтерполяции Или ОткрытаКавычкаСПоддержкойИнтерполяции;
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|||||||
@@ -95,6 +95,22 @@
|
|||||||
|
|
||||||
КонецПроцедуры
|
КонецПроцедуры
|
||||||
|
|
||||||
|
&Тест
|
||||||
|
Процедура ТестДолжен_ПроверитьОшибкуНеУказанОдинИзURL() Экспорт
|
||||||
|
|
||||||
|
КонсольнаяКоманда = "curl example1.com '' example2.com";
|
||||||
|
|
||||||
|
Ошибки = Неопределено;
|
||||||
|
|
||||||
|
Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда,, Ошибки);
|
||||||
|
|
||||||
|
Ожидаем.Что(Результат).Не_().Заполнено();
|
||||||
|
Ожидаем.Что(Ошибки).Заполнено();
|
||||||
|
Ожидаем.Что(Ошибки[0].Текст).Равно("Не указан URL #2");
|
||||||
|
Ожидаем.Что(Ошибки[0].Критичная).ЭтоИстина();
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
&Тест
|
&Тест
|
||||||
Процедура ТестДолжен_ПроверитьОшибкуНеУдалосьПолучитьНомерПортаИзURL() Экспорт
|
Процедура ТестДолжен_ПроверитьОшибкуНеУдалосьПолучитьНомерПортаИз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");
|
Команда = Новый Массив;
|
||||||
Эталон.Добавить("");
|
Команда.Добавить("myapp1");
|
||||||
Эталон.Добавить("-b");
|
Команда.Добавить("-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].ВГраница() Цикл
|
Для Инд1 = 0 По Результат.ВГраница() Цикл
|
||||||
Ожидаем.Что(Результат[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