feat: Конвертация параметров запроса из URL в коллекцию (#252)

This commit is contained in:
Dmitry Ivanov
2025-12-10 16:33:18 +03:00
committed by GitHub
parent 516a1b360b
commit 8730e598e1
6 changed files with 267 additions and 136 deletions
@@ -268,9 +268,9 @@
НазначениеДанных = НазначенияПередаваемыхДанных.ТелоЗапроса;
Если ВозможнаПередачаДанныхЧерезСоответствие(НазначениеДанных) Тогда
Если ВозможноПередатьОтправляемыеДанныеЧерезСоответствие(НазначениеДанных) Тогда
ДобавитьДанныеЗапросаЧерезСоответствие(НазначениеДанных, ИмяПараметраДанныеЗапроса, ДанныеЗапросаСборка);
ДобавитьТелоЗапросаЧерезСоответствие(ИмяПараметраДанныеЗапроса, ДанныеЗапросаСборка);
ИначеЕсли ОписаниеЗапроса.ОтправлятьКакMultipartFormData Тогда
@@ -287,30 +287,40 @@
Процедура ДобавитьПараметрыЗапроса()
НазначениеДанных = НазначенияПередаваемыхДанных.СтрокаЗапроса;
Если Не Состояние.ПереданаСтрокаЗапроса
Или Не ВозможнаПередачаДанныхЧерезСоответствие(НазначениеДанных) Тогда
Если Не (ЕстьПараметрыЗапроса() И ВозможноПередатьПараметрыЗапросаЧерезСоответствие()) Тогда
Возврат;
КонецЕсли;
ДобавитьДанныеЗапросаЧерезСоответствие(НазначениеДанных, ИмяПараметраПараметрыЗапроса);
КонецПроцедуры
Процедура ДобавитьДанныеЗапросаЧерезСоответствие(Назначение, ИмяПараметра, РезультатСборка = "")
КонструкторДанных = Новый КонструкторПрограммногоКода(ОписаниеЗапроса.ИменаПеременных);
ДобавитьДанныеЗапросаИзТекстовыхДанныхЧерезСоответствие(КонструкторДанных, Назначение, ИмяПараметра);
ДобавитьДанныеЗапросаИзПрочитанныхФайловЧерезСоответствие(КонструкторДанных, Назначение, ИмяПараметра);
Если Не КонструкторДанных.Пустой() Тогда
ПараметрыЗапроса = Новый Соответствие();
Назначение = НазначенияПередаваемыхДанных.СтрокаЗапроса;
ПолучитьПараметрыЗапросаИзURL(ПараметрыЗапроса);
ПолучитьПараметрыИзТекстовыхДанных(Назначение, ПараметрыЗапроса);
ПолучитьПараметрыИзПрочитанныхФайлов(Назначение, ПараметрыЗапроса);
Если ПараметрыЗапроса.Количество() > 0 Тогда
Конструктор
.ДобавитьПустуюСтроку()
.ДобавитьСтроку("%1 = Новый Соответствие();", ИмяПараметра)
.ДобавитьСтроку(КонструкторДанных.ПолучитьРезультат());
.ДобавитьСоответствие(ПараметрыЗапроса, ИмяПараметраПараметрыЗапроса);
КонецЕсли;
КонецПроцедуры
Процедура ДобавитьТелоЗапросаЧерезСоответствие(ИмяПараметра, РезультатСборка)
Назначение = НазначенияПередаваемыхДанных.ТелоЗапроса;
ДанныеТела = Новый Соответствие();
ПолучитьПараметрыИзТекстовыхДанных(Назначение, ДанныеТела);
ПолучитьПараметрыИзПрочитанныхФайлов(Назначение, ДанныеТела);
Если ДанныеТела.Количество() > 0 Тогда
Конструктор
.ДобавитьПустуюСтроку()
.ДобавитьСоответствие(ДанныеТела, ИмяПараметра);
РезультатСборка = ИмяПараметра;
@@ -318,7 +328,22 @@
КонецПроцедуры
Процедура ДобавитьДанныеЗапросаИзТекстовыхДанныхЧерезСоответствие(КонструкторДанных, Назначение, ИмяПараметра)
Процедура ПолучитьПараметрыЗапросаИзURL(ИсходящиеПараметры)
Если ОписаниеЗапроса.АдресаРесурсов.Количество() > 1 Тогда
Возврат;
КонецЕсли;
ОписаниеРесурса = ОписаниеЗапроса.АдресаРесурсов[0];
СтруктураURL = Новый РазборURL(ОписаниеРесурса.URL);
Для Каждого Параметр Из СтруктураURL.ПараметрыЗапроса Цикл
ОбщийНаборИнструментов.ВставитьВСловарьСписков(ИсходящиеПараметры, Параметр.Ключ, Параметр.Значение);
КонецЦикла;
КонецПроцедуры
Процедура ПолучитьПараметрыИзТекстовыхДанных(Назначение, ИсходящиеПараметры)
Для Каждого ПередаваемыйТекст Из ОписаниеЗапроса.ОтправляемыеТекстовыеДанные Цикл
@@ -334,93 +359,25 @@
Значение = "";
КонецЕсли;
ПараметрыМетода = Новый Массив();
ПараметрыМетода.Добавить(Конструктор.ПараметрВСтроку(Ключ));
ПараметрыМетода.Добавить(Конструктор.НеобязательныйПараметрВСтроку(Значение));
КонструкторДанных.ДобавитьСтроку(
"%1.Вставить(%2);",
ИмяПараметра,
Конструктор.ПараметрыФункцииВСтроку(ПараметрыМетода)
);
ОбщийНаборИнструментов.ВставитьВСловарьСписков(ИсходящиеПараметры, Ключ, Значение);
КонецЦикла;
КонецПроцедуры
Процедура ДобавитьДанныеЗапросаИзПрочитанныхФайловЧерезСоответствие(КонструкторДанных, Назначение, ИмяПараметра)
Процедура ПолучитьПараметрыИзПрочитанныхФайлов(Назначение, ИсходящиеПараметры)
ЗначенияПолей = Новый Соответствие();
Для Каждого ПрочитанныйФайл Из ПрочитанныеФайлы Цикл
ПередаваемыйФайл = ПрочитанныйФайл.ПередаваемыйФайл;
Если Не ПередаваемыйФайл.Назначение = Назначение
Или Не ПередаваемыйФайл.ПрочитатьСодержимое Тогда
Или Не ПередаваемыйФайл.ПрочитатьСодержимое
Или Не ЗначениеЗаполнено(ПередаваемыйФайл.ИмяПоля) Тогда
Продолжить;
КонецЕсли;
ИмяПоля = ПередаваемыйФайл.ИмяПоля;
Если ЗначенияПолей[ИмяПоля] = Неопределено Тогда
ЗначенияПолей.Вставить(ИмяПоля, ПрочитанныйФайл.ИмяПеременной);
ИначеЕсли ТипЗнч(ЗначенияПолей[ИмяПоля]) = Тип("Массив") Тогда
ЗначенияПолей[ИмяПоля].Добавить(ПрочитанныйФайл.ИмяПеременной);
Иначе
МассивЗначений = Новый Массив();
МассивЗначений.Добавить(ЗначенияПолей[ИмяПоля]);
МассивЗначений.Добавить(ПрочитанныйФайл.ИмяПеременной);
ЗначенияПолей.Вставить(ИмяПоля, МассивЗначений);
КонецЕсли;
КонецЦикла;
Для Каждого Данные Из ЗначенияПолей Цикл
ИмяПоля = Данные.Ключ;
Если ТипЗнч(Данные.Значение) = Тип("Массив") Тогда
МассивПеременныхФайлов = Данные.Значение;
КонструкторДанных.ДобавитьСтроку(
"%1.Вставить(%2, Новый Массив());",
ИмяПараметра,
КонструкторДанных.ПараметрВСтроку(ИмяПоля)
);
Для Каждого ИмяПеременнойФайла Из МассивПеременныхФайлов Цикл
КонструкторДанных.ДобавитьСтроку(
"%1[%2].{t(Массив.Добавить)}(%3);",
ИмяПараметра,
КонструкторДанных.ПараметрВСтроку(ИмяПоля),
ИмяПеременнойФайла
);
КонецЦикла;
Иначе
ИмяПеременнойФайла = Данные.Значение;
ПараметрыМетода = Новый Массив();
ПараметрыМетода.Добавить(КонструкторДанных.ПараметрВСтроку(ИмяПоля));
ПараметрыМетода.Добавить(ИмяПеременнойФайла);
КонструкторДанных.ДобавитьСтроку(
"%1.Вставить(%2);",
ИмяПараметра,
КонструкторДанных.ПараметрыФункцииВСтроку(ПараметрыМетода)
);
КонецЕсли;
ОбщийНаборИнструментов.ВставитьВСловарьСписков(ИсходящиеПараметры, ПередаваемыйФайл.ИмяПоля, ПрочитанныйФайл.ИмяПеременной);
КонецЦикла;
@@ -795,8 +752,7 @@
Если ОписаниеРесурса.Метод = "GET" Тогда
ПараметрПараметрыЗапроса = "";
Если Состояние.ПереданаСтрокаЗапроса
И ВозможнаПередачаДанныхЧерезСоответствие(НазначенияПередаваемыхДанных.СтрокаЗапроса) Тогда
Если ЕстьПараметрыЗапроса() И ВозможноПередатьПараметрыЗапросаЧерезСоответствие() Тогда
ПараметрПараметрыЗапроса = ИмяПараметраПараметрыЗапроса;
КонецЕсли;
@@ -837,25 +793,28 @@
Процедура ДобавитьURL(СтруктураURL)
URLСборка = "";
НазначениеДанных = НазначенияПередаваемыхДанных.СтрокаЗапроса;
Если Состояние.ПереданаСтрокаЗапроса
И ВозможнаПередачаДанныхЧерезСоответствие(НазначениеДанных) Тогда
Если ВозможноПередатьПараметрыЗапросаЧерезСоответствие() Тогда
URLСборка = Новый ГенераторКодаURL(ОписаниеЗапроса, СтруктураURL).Получить();
СтруктураURL.ПараметрыЗапроса.Очистить();
ГенераторКодаURL = Новый ГенераторКодаURL(
ОписаниеЗапроса,
СтруктураURL
);
Иначе
URLСборка = Новый ГенераторКодаURL(
ГенераторКодаURL = Новый ГенераторКодаURL(
ОписаниеЗапроса,
СтруктураURL,
ОписаниеЗапроса.ОтправляемыеТекстовыеДанные,
ПрочитанныеФайлы
).Получить();
);
КонецЕсли;
URLСборка = ГенераторКодаURL.Получить();
Если СтрЧислоСтрок(URLСборка) > 1 Тогда
Конструктор
@@ -989,8 +948,8 @@
Процедура ДобавитьПараметрыЗапросаВДополнительныеПараметры(КонструкторДопПараметров, ОписаниеРесурса)
Если Состояние.ПереданаСтрокаЗапроса
И ВозможнаПередачаДанныхЧерезСоответствие(НазначенияПередаваемыхДанных.СтрокаЗапроса)
Если ЕстьПараметрыЗапроса()
И ВозможноПередатьПараметрыЗапросаЧерезСоответствие()
И Не ВозможноПередатьПараметрыЗапросаВПараметрыФункцииВызоваМетода(ОписаниеРесурса.Метод) Тогда
КонструкторДопПараметров.ДобавитьСтроку(
@@ -1095,7 +1054,57 @@
Возврат Метод = "GET";
КонецФункции
Функция ВозможнаПередачаДанныхЧерезСоответствие(Назначение)
Функция ЕстьПараметрыЗапроса()
АдресаРесурсов = ОписаниеЗапроса.АдресаРесурсов;
ЕстьПараметрыЗапросаВАдресе = ОписаниеЗапроса.АдресаРесурсов.Количество() = 1
И СтрНайти(АдресаРесурсов[0].URL, "?");
Возврат Состояние.ПереданаСтрокаЗапроса Или ЕстьПараметрыЗапросаВАдресе;
КонецФункции
Функция ВозможноПередатьПараметрыЗапросаЧерезСоответствие()
Возврат ВозможноПередатьПараметрыЗапросаИзОтправляемыхДанныхЧерезСоответствие()
И ВозможноПередатьПараметрыЗапросаИзURLЧерезСоответствие();
КонецФункции
Функция ВозможноПередатьПараметрыЗапросаИзURLЧерезСоответствие()
АдресаРесурсов = ОписаниеЗапроса.АдресаРесурсов;
Если АдресаРесурсов.Количество() <> 1 Тогда
Возврат Ложь;
КонецЕсли;
Если ОписаниеЗапроса.ИменаПеременных.Количество() = 0 Тогда
Возврат Истина;
КонецЕсли;
ПрефиксХешаПеременной = ОбщийНаборИнструментов.ПрефиксХешаПеременной();
СтруктураURL = Новый РазборURL(АдресаРесурсов[0].URL);
Для Каждого ПараметрЗапроса Из СтруктураURL.ПараметрыЗапроса Цикл
Если Не ЗначениеЗаполнено(ПараметрЗапроса.Значение)
И СтрНайти(ПараметрЗапроса.Ключ, ПрефиксХешаПеременной) > 0 Тогда
Возврат Ложь;
КонецЕсли;
КонецЦикла;
Возврат Истина;
КонецФункции
Функция ВозможноПередатьПараметрыЗапросаИзОтправляемыхДанныхЧерезСоответствие()
Возврат Не Состояние.ПереданаСтрокаЗапроса
Или ВозможноПередатьОтправляемыеДанныеЧерезСоответствие(НазначенияПередаваемыхДанных.СтрокаЗапроса);
КонецФункции
Функция ВозможноПередатьОтправляемыеДанныеЧерезСоответствие(Назначение)
ЭтоДанныеMultipart = ОписаниеЗапроса.ОтправлятьКакMultipartFormData
И Назначение = НазначенияПередаваемыхДанных.ТелоЗапроса;
@@ -164,9 +164,14 @@
Тип = ТипЗнч(Значение);
Если Тип = Тип("Строка") Тогда
Если Не СтрНачинаетсяС(Значение, "{t(Переменная.") Тогда
Результат = ЭкранироватьКавычки(Значение);
Результат = СтрШаблон("""%1""", Результат);
Иначе
Результат = Значение;
КонецЕсли;
Результат = ЭкранироватьКавычки(Значение);
Результат = СтрШаблон("""%1""", Результат);
Результат = ОбработатьПараметрыВСтроке(Результат);
Возврат Результат;
@@ -273,7 +278,7 @@
МассивПараметров = Новый Массив();
МассивПараметров.Добавить(ПараметрВСтроку(КлючИЗначение.Ключ));
МассивПараметров.Добавить(ПараметрВСтроку(КлючИЗначение.Значение));
МассивПараметров.Добавить(НеобязательныйПараметрВСтроку(КлючИЗначение.Значение));
ДобавитьСтроку(
"%1.{t(Соответствие.Вставить)}(%2);",
@@ -279,7 +279,7 @@
Процедура ДобавитьПеременную(Знач Значение)
ШаблонВТексте = "$ENV_%1";
ШаблонВТексте = ОбщийНаборИнструментов.ПрефиксХешаПеременной() + "%1";
Имя = Сред(Значение, 2);
Имя = СтрЗаменить(Имя, "{", "");
@@ -260,4 +260,42 @@
КонецФункции
// Возвращает префикс хеша переменной.
//
// Возвращаемое значение:
// Строка
Функция ПрефиксХешаПеременной() Экспорт
Возврат "$ENV_";
КонецФункции
// Добавляет значение в соответствие, поддерживая множественные значения для одного ключа.
//
// Параметры:
// Соответствие - Соответствие - Соответствие, в которое добавляется значение
// Ключ - Произвольный - Ключ для добавления/обновления
// Значение - Произвольный - Значение для добавления
Процедура ВставитьВСловарьСписков(Соответствие, Ключ, Значение) Экспорт
ТекущееЗначение = Соответствие[Ключ];
Если ТипЗнч(ТекущееЗначение) = Тип("Массив") Тогда
ТекущееЗначение.Добавить(Значение);
ИначеЕсли Не ТекущееЗначение = Неопределено Тогда
Значения = Новый Массив();
Значения.Добавить(ТекущееЗначение);
Значения.Добавить(Значение);
Соответствие[Ключ] = Значения;
Иначе
Соответствие[Ключ] = Значение;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
@@ -66,47 +66,79 @@
ТестовыеДанные.Вставить(
"curl http://example.com?param=value",
"Результат = КоннекторHTTP.Get(""http://example.com?param=value"");"
"ПараметрыЗапроса = Новый Соответствие();
|ПараметрыЗапроса.Вставить(""param"", ""value"");
|
|Результат = КоннекторHTTP.Get(""http://example.com"", ПараметрыЗапроса);"
);
ТестовыеДанные.Вставить(
"curl 'http://example.com?param1=value1&param2=value2'",
"Результат = КоннекторHTTP.Get(""http://example.com?param1=value1&param2=value2"");"
"ПараметрыЗапроса = Новый Соответствие();
|ПараметрыЗапроса.Вставить(""param1"", ""value1"");
|ПараметрыЗапроса.Вставить(""param2"", ""value2"");
|
|Результат = КоннекторHTTP.Get(""http://example.com"", ПараметрыЗапроса);"
);
ТестовыеДанные.Вставить(
"curl 'http://example.com?param1=value1&param2=value2&param3=value3'",
"Результат = КоннекторHTTP.Get(""http://example.com?param1=value1&param2=value2&param3=value3"");"
"ПараметрыЗапроса = Новый Соответствие();
|ПараметрыЗапроса.Вставить(""param1"", ""value1"");
|ПараметрыЗапроса.Вставить(""param2"", ""value2"");
|ПараметрыЗапроса.Вставить(""param3"", ""value3"");
|
|Результат = КоннекторHTTP.Get(""http://example.com"", ПараметрыЗапроса);"
);
ТестовыеДанные.Вставить(
"curl 'http://example.com?param='",
"Результат = КоннекторHTTP.Get(""http://example.com?param"");"
"ПараметрыЗапроса = Новый Соответствие();
|ПараметрыЗапроса.Вставить(""param"");
|
|Результат = КоннекторHTTP.Get(""http://example.com"", ПараметрыЗапроса);"
);
ТестовыеДанные.Вставить(
"curl http://example.com?param",
"Результат = КоннекторHTTP.Get(""http://example.com?param"");"
"ПараметрыЗапроса = Новый Соответствие();
|ПараметрыЗапроса.Вставить(""param"");
|
|Результат = КоннекторHTTP.Get(""http://example.com"", ПараметрыЗапроса);"
);
ТестовыеДанные.Вставить(
"curl 'http://example.com?param=value&param=value2'",
"Результат = КоннекторHTTP.Get(""http://example.com?param=value&param=value2"");"
"ПараметрыЗапроса = Новый Соответствие();
|ПараметрыЗапроса.Вставить(""param"", Новый Массив());
|ПараметрыЗапроса[""param""].Добавить(""value"");
|ПараметрыЗапроса[""param""].Добавить(""value2"");
|
|Результат = КоннекторHTTP.Get(""http://example.com"", ПараметрыЗапроса);"
);
ТестовыеДанные.Вставить(
"curl 'http://example.com?param=value%20with%20spaces'",
"Результат = КоннекторHTTP.Get(""http://example.com?param=value%20with%20spaces"");"
"ПараметрыЗапроса = Новый Соответствие();
|ПараметрыЗапроса.Вставить(""param"", ""value%20with%20spaces"");
|
|Результат = КоннекторHTTP.Get(""http://example.com"", ПараметрыЗапроса);"
);
ТестовыеДанные.Вставить(
"curl 'http://example.com?param=%3D'",
"Результат = КоннекторHTTP.Get(""http://example.com?param=%3D"");"
"ПараметрыЗапроса = Новый Соответствие();
|ПараметрыЗапроса.Вставить(""param"", ""%3D"");
|
|Результат = КоннекторHTTP.Get(""http://example.com"", ПараметрыЗапроса);"
);
ТестовыеДанные.Вставить(
"curl 'http://example.com?param=значение'",
"Результат = КоннекторHTTP.Get(""http://example.com?param=значение"");"
"ПараметрыЗапроса = Новый Соответствие();
|ПараметрыЗапроса.Вставить(""param"", ""значение"");
|
|Результат = КоннекторHTTP.Get(""http://example.com"", ПараметрыЗапроса);"
);
ТестовыеДанные.Вставить(
@@ -126,7 +158,10 @@
ТестовыеДанные.Вставить(
"curl 'http://example.com?param=value#fragment'",
"Результат = КоннекторHTTP.Get(""http://example.com?param=value#fragment"");"
"ПараметрыЗапроса = Новый Соответствие();
|ПараметрыЗапроса.Вставить(""param"", ""value"");
|
|Результат = КоннекторHTTP.Get(""http://example.com#fragment"", ПараметрыЗапроса);"
);
ТестовыеДанные.Вставить(
@@ -372,19 +407,59 @@
&Тест
Процедура ТестДолжен_ПроверитьПередачуДанныхЧерезСоответствие() Экспорт
КонсольнаяКоманда = "curl http://example.com \
| --data 'param1=value1' \
| --data 'param2=value2&param3=value3'";
ТестовыеДанные = Новый Соответствие();
ПрограммныйКод = "Данные = Новый Соответствие();
|Данные.Вставить(""param1"", ""value1"");
|Данные.Вставить(""param2"", ""value2"");
|Данные.Вставить(""param3"", ""value3"");
|
|Результат = КоннекторHTTP.Post(""http://example.com"", Данные);";
ТестовыеДанные.Вставить("curl http://example.com \
| --data 'param1=value1' \
| --data 'param2=value2&param3=value3'",
"Данные = Новый Соответствие();
|Данные.Вставить(""param1"", ""value1"");
|Данные.Вставить(""param2"", ""value2"");
|Данные.Вставить(""param3"", ""value3"");
|
|Результат = КоннекторHTTP.Post(""http://example.com"", Данные);"
);
ТестовыеДанные.Вставить("curl http://example.com \
| --url-query param2=value2 \
| --data 'param1=value1' \
| --data-urlencode photo@forest.jpeg",
"ЧтениеТекста = Новый ЧтениеТекста(""forest.jpeg"");
|ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать();
|ТекстовыеДанныеФайла_1 = КодироватьСтроку(ТекстовыеДанныеФайла_1, СпособКодированияСтроки.КодировкаURL);
|
|Данные = Новый Соответствие();
|Данные.Вставить(""param1"", ""value1"");
|Данные.Вставить(""photo"", ТекстовыеДанныеФайла_1);
|
|ПараметрыЗапроса = Новый Соответствие();
|ПараметрыЗапроса.Вставить(""param2"", ""value2"");
|
|ДополнительныеПараметры = Новый Структура();
|ДополнительныеПараметры.Вставить(""ПараметрыЗапроса"", ПараметрыЗапроса);
|
|Результат = КоннекторHTTP.Post(""http://example.com"", Данные, ДополнительныеПараметры);"
);
ТестовыеДанные.Вставить("curl http://example.com \
| --get \
| --data 'param1=value1' \
| --data-urlencode photo@forest.jpeg",
"ЧтениеТекста = Новый ЧтениеТекста(""forest.jpeg"");
|ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать();
|ТекстовыеДанныеФайла_1 = КодироватьСтроку(ТекстовыеДанныеФайла_1, СпособКодированияСтроки.КодировкаURL);
|
|ПараметрыЗапроса = Новый Соответствие();
|ПараметрыЗапроса.Вставить(""param1"", ""value1"");
|ПараметрыЗапроса.Вставить(""photo"", ТекстовыеДанныеФайла_1);
|
|Результат = КоннекторHTTP.Get(""http://example.com"", ПараметрыЗапроса);"
);
Для Каждого Строка Из ТестовыеДанные Цикл
ВалидаторКонвертацииКоманды.Проверить(Строка.Ключ, Строка.Значение);
КонецЦикла;
ВалидаторКонвертацииКоманды.Проверить(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
&Тест
@@ -1668,7 +1743,10 @@
"QUERY1 = """";
|QUERY2 = """";
|
|Результат = КоннекторHTTP.Get(""http://example.com?search="" + QUERY1 + QUERY2);"
|ПараметрыЗапроса = Новый Соответствие();
|ПараметрыЗапроса.Вставить(""search"", QUERY1 + QUERY2);
|
|Результат = КоннекторHTTP.Get(""http://example.com"", ПараметрыЗапроса);"
);
ТестовыеДанные.Вставить(
@@ -396,6 +396,7 @@
|myapp4 -a '$VAR'
|myapp5 -a ""Text$VAR text""";
ПрефиксХешаПеременной = ОбщийНаборИнструментов.ПрефиксХешаПеременной();
ХешСтрока = ОбщийНаборИнструментов.ХешСтрокаИмениПеременной("VAR");
Эталон = Новый Массив;
@@ -403,12 +404,12 @@
Команда = Новый Массив;
Команда.Добавить("myapp1");
Команда.Добавить("-a");
Команда.Добавить("$ENV_" + ХешСтрока);
Команда.Добавить(ПрефиксХешаПеременной + ХешСтрока);
Эталон.Добавить(Команда);
Команда = Новый Массив;
Команда.Добавить("myapp2");
Команда.Добавить("$ENV_" + ХешСтрока);
Команда.Добавить(ПрефиксХешаПеременной + ХешСтрока);
Эталон.Добавить(Команда);
Команда = Новый Массив;
@@ -425,7 +426,7 @@
Команда = Новый Массив;
Команда.Добавить("myapp5");
Команда.Добавить("-a");
Команда.Добавить("Text$ENV_" + ХешСтрока + " text");
Команда.Добавить("Text" + ПрефиксХешаПеременной + ХешСтрока + " text");
Эталон.Добавить(Команда);
Парсер = Новый ПарсерКонсольнойКоманды();