diff --git a/epf/bddRunner/bddRunner/Ext/ObjectModule.bsl b/epf/bddRunner/bddRunner/Ext/ObjectModule.bsl index 9fe6b1081..2431f3273 100644 --- a/epf/bddRunner/bddRunner/Ext/ObjectModule.bsl +++ b/epf/bddRunner/bddRunner/Ext/ObjectModule.bsl @@ -2,7 +2,7 @@ Перем СтатусыРезультатаТестирования Экспорт; Перем ПараметрыОтчетаУФ; Перем ОтчетВРежимеУФ; -Перем ЭтоLinux; +Перем ЭтоLinux Экспорт; Перем Регулярка; Перем РазницаВМилисекундахМеждуЮниксИНачалЭпохи; diff --git "a/epf/bddRunner/bddRunner/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.bin" "b/epf/bddRunner/bddRunner/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.bin" index 919ad5424..dbd74390b 100644 Binary files "a/epf/bddRunner/bddRunner/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.bin" and "b/epf/bddRunner/bddRunner/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.bin" differ diff --git "a/epf/bddRunner/bddRunner/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/epf/bddRunner/bddRunner/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" index d4ff68291..a1a37a306 100644 --- "a/epf/bddRunner/bddRunner/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" +++ "b/epf/bddRunner/bddRunner/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -3,8 +3,7 @@ Перем ОбъектКонтекстСохраняемый Экспорт; Перем ЭтоУФ; -Перем ЭтоLinux; - + Перем ВыполнятьСценарииАсинхронно; Перем МассивСценариевДляВыполнения; diff --git "a/features/libraries/\320\237\320\273\320\260\320\263\320\270\320\275\321\213/step_definitions/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217.xml" "b/features/libraries/\320\237\320\273\320\260\320\263\320\270\320\275\321\213/step_definitions/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217.xml" new file mode 100644 index 000000000..e2f3e6ea9 --- /dev/null +++ "b/features/libraries/\320\237\320\273\320\260\320\263\320\270\320\275\321\213/step_definitions/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217.xml" @@ -0,0 +1,30 @@ + + + + + + c3831ec8-d8d5-4f93-8a22-f9bfae07327f + 29d2f52d-0ed1-4254-a6bc-bbc6bc333ab1 + + + 503de865-4645-4496-b5dd-2e4a76236095 + 4d213f80-34d7-4f82-80f0-c17b4f80d887 + + + + Фича_РегулярныеВыражения + + + ru + Фича_РегулярныеВыражения + + + + ExternalDataProcessor.Фича_РегулярныеВыражения.Form.Форма + + + +
Форма
+
+
+
\ No newline at end of file diff --git "a/features/libraries/\320\237\320\273\320\260\320\263\320\270\320\275\321\213/step_definitions/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Ext/ObjectModule.bsl" "b/features/libraries/\320\237\320\273\320\260\320\263\320\270\320\275\321\213/step_definitions/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Ext/ObjectModule.bsl" new file mode 100644 index 000000000..217641d81 --- /dev/null +++ "b/features/libraries/\320\237\320\273\320\260\320\263\320\270\320\275\321\213/step_definitions/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Ext/ObjectModule.bsl" @@ -0,0 +1,155 @@ + +#Область Служебные_функции_и_процедуры + +// контекст фреймворка Vanessa-Behavior +Перем Ванесса; + +// Структура, в которой хранится состояние сценария между выполнением шагов. Очищается перед выполнением каждого сценария. +Перем Контекст Экспорт; + +// Структура, в которой можно хранить служебные данные между запусками сценариев. Существует, пока открыта форма Vanessa-Behavior. +Перем КонтекстСохраняемый Экспорт; + +// Функция экспортирует список шагов, которые реализованы в данной внешней обработке. +Функция ПолучитьСписокТестов(КонтекстФреймворкаBDD) Экспорт + Ванесса = КонтекстФреймворкаBDD; + + ВсеТесты = Новый Массив; + + //описание параметров + //Ванесса.ДобавитьШагВМассивТестов(ВсеТесты,Снипет,ИмяПроцедуры,ПредставлениеТеста,ОписаниеШага,ТипШага,Транзакция,Параметр); + + Ванесса.ДобавитьШагВМассивТестов(ВсеТесты,"ПеременнаяСоответствуетРегулярномуВыражению(Парам01,Парам02)","ПеременнаяСоответствуетРегулярномуВыражению","Тогда переменная ""ПроверяемаяСтрока"" соответствует регулярному выражению ""\d\d\d""","",""); + Ванесса.ДобавитьШагВМассивТестов(ВсеТесты,"ЯЗапоминаюСтрокуКакПеременную(Парам01,Парам02)","ЯЗапоминаюСтрокуКакПеременную","Когда Я запоминаю строку ""Привет"" как переменную ""ПроверяемаяСтрока""","",""); + Ванесса.ДобавитьШагВМассивТестов(ВсеТесты,"ПеременнаяСоответствуетПростомуШаблону(Парам01,Парам02)","ПеременнаяСоответствуетПростомуШаблону","Тогда переменная ""ПроверяемаяСтрока"" соответствует простому шаблону ""*ри*""","",""); + Ванесса.ДобавитьШагВМассивТестов(ВсеТесты,"ПеременнаяНеСоответствуетРегулярномуВыражению(Парам01,Парам02)","ПеременнаяНеСоответствуетРегулярномуВыражению","Тогда переменная ""ПроверяемаяСтрока"" не соответствует регулярному выражению ""\d{4}""","",""); + Ванесса.ДобавитьШагВМассивТестов(ВсеТесты,"ПеременнаяНеСоответствуетПростомуШаблону(Парам01,Парам02)","ПеременнаяНеСоответствуетПростомуШаблону","Тогда переменная ""ПроверяемаяСтрока"" не соответствует простому шаблону ""*ДругойТекст*""","",""); + + Возврат ВсеТесты; +КонецФункции + +// Служебная функция для подключения библиотеки создания fixtures. +Функция ПолучитьМакетОбработки(ИмяМакета) Экспорт + Возврат ПолучитьМакет(ИмяМакета); +КонецФункции + +#КонецОбласти + + + +#Область Работа_со_сценариями + +// Процедура выполняется перед началом каждого сценария +Процедура ПередНачаломСценария() Экспорт + +КонецПроцедуры + +// Процедура выполняется перед окончанием каждого сценария +Процедура ПередОкончаниемСценария() Экспорт + +КонецПроцедуры + +#КонецОбласти + + +/////////////////////////////////////////////////// +//Реализация шагов +/////////////////////////////////////////////////// + +//Когда Я запоминаю строку "Привет" как переменную "ПроверяемаяСтрока" +//@ЯЗапоминаюСтрокуКакПеременную(Парам01,Парам02) +Процедура ЯЗапоминаюСтрокуКакПеременную(ИсходнаяСтрока, ИмяПеременной) Экспорт + Контекст.Вставить(ИмяПеременной, ИсходнаяСтрока); +КонецПроцедуры + +//Тогда переменная "ПроверяемаяСтрока" соответствует регулярному выражению "/d/d/d" +//@ПеременнаяСоответствуетРегулярномуВыражению(Парам01,Парам02) +Процедура ПеременнаяСоответствуетРегулярномуВыражению(ИмяПеременной, ШаблонРегулярки) Экспорт + + ПроверяемаяСтрока = ""; + + Нашли = ПеременнаяСоответствуетРегулярномуВыражениюВнутр(ИмяПеременной, ШаблонРегулярки, ПроверяемаяСтрока); + + Ожидаем = Ванесса.Плагин("УтвержденияBDD"); + Ожидаем.Что(Нашли, + СтрШаблон("Ожидали, что проверяемая строка из переменной совпадает с шаблоном регулярного выражения, а это не так + |Регулярное выражение %1 + |Имя переменной %2 + |Проверяемая строка: + |%3", ШаблонРегулярки, ИмяПеременной, ПроверяемаяСтрока)) + .ЭтоИстина(); +КонецПроцедуры + +//Тогда переменная "ПроверяемаяСтрока" не соответствует регулярному выражению "\d{4}" +//@ПеременнаяНеСоответствуетРегулярномуВыражению(Парам01,Парам02) +Процедура ПеременнаяНеСоответствуетРегулярномуВыражению(ИмяПеременной, ШаблонРегулярки) Экспорт + + ПроверяемаяСтрока = ""; + + Нашли = ПеременнаяСоответствуетРегулярномуВыражениюВнутр(ИмяПеременной, ШаблонРегулярки, ПроверяемаяСтрока); + + Ожидаем = Ванесса.Плагин("УтвержденияBDD"); + Ожидаем.Что(Нашли, + СтрШаблон("Ожидали, что проверяемая строка не совпадает с шаблоном регулярного выражения, а она совпадает, что неверно + |Регулярное выражение %1 + |Имя переменной %2 + |Проверяемая строка: + |%3", ШаблонРегулярки, ИмяПеременной, ПроверяемаяСтрока)) + .ЭтоЛожь(); +КонецПроцедуры + +//Тогда переменная "ПроверяемаяСтрока" соответствует простому шаблону "*ри*" +//@ПеременнаяСоответствуетПростомуШаблону(Парам01,Парам02) +Процедура ПеременнаяСоответствуетПростомуШаблону(ИмяПеременной, ШаблонРегулярки) Экспорт + + ПроверяемаяСтрока = ""; + Нашли = ПеременнаяСоответствуетПростомуШаблонуВнутр(ИмяПеременной, ШаблонРегулярки, ПроверяемаяСтрока); + + Ожидаем = Ванесса.Плагин("УтвержденияBDD"); + Ожидаем.Что(Нашли, + СтрШаблон("Ожидали, что проверяемая строка совпадает с шаблоном регулярного выражения, а это не так + |Шаблон проверки %1 + |Имя переменной %2 + |Проверяемая строка: + |%3", ШаблонРегулярки, ИмяПеременной, ПроверяемаяСтрока)) + .ЭтоИстина(); +КонецПроцедуры + +//Тогда переменная "ПроверяемаяСтрока" не соответствует простому шаблону "*ДругойТекст*" +//@ПеременнаяНеСоответствуетПростомуШаблону(Парам01,Парам02) +Процедура ПеременнаяНеСоответствуетПростомуШаблону(ИмяПеременной, ШаблонРегулярки) Экспорт + ПроверяемаяСтрока = ""; + Нашли = ПеременнаяСоответствуетПростомуШаблонуВнутр(ИмяПеременной, ШаблонРегулярки, ПроверяемаяСтрока); + + Ожидаем = Ванесса.Плагин("УтвержденияBDD"); + Ожидаем.Что(Нашли, + СтрШаблон("Ожидали, что проверяемая строка не совпадает с простым шаблоном, а она совпадает, что неверно + |Шаблон проверки %1 + |Имя переменной %2 + |Проверяемая строка: + |%3", ШаблонРегулярки, ИмяПеременной, ПроверяемаяСтрока)) + .ЭтоЛожь(); +КонецПроцедуры + +Функция ПеременнаяСоответствуетРегулярномуВыражениюВнутр(ИмяПеременной, ШаблонРегулярки, ПроверяемаяСтрока) + + РегулярныеВыражения = Ванесса.Плагин("РегулярныеВыражения"); + РегулярныеВыражения.Подготовить(ШаблонРегулярки); + + ПроверяемаяСтрока = Контекст[ИмяПеременной]; + + Нашли = РегулярныеВыражения.Совпадает(ПроверяемаяСтрока); + + Возврат Нашли; +КонецФункции + +Функция ПеременнаяСоответствуетПростомуШаблонуВнутр(ИмяПеременной, ШаблонРегулярки, ПроверяемаяСтрока) + + РегулярныеВыражения = Ванесса.Плагин("РегулярныеВыражения"); + + ПроверяемаяСтрока = Контекст[ИмяПеременной]; + + Нашли = РегулярныеВыражения.СтрокаСоответствуетШаблону(ПроверяемаяСтрока, ШаблонРегулярки); + + Возврат Нашли; +КонецФункции diff --git "a/features/libraries/\320\237\320\273\320\260\320\263\320\270\320\275\321\213/step_definitions/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260.xml" "b/features/libraries/\320\237\320\273\320\260\320\263\320\270\320\275\321\213/step_definitions/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260.xml" new file mode 100644 index 000000000..cd892735e --- /dev/null +++ "b/features/libraries/\320\237\320\273\320\260\320\263\320\270\320\275\321\213/step_definitions/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260.xml" @@ -0,0 +1,22 @@ + + +
+ + Форма + + + ru + Форма + + + + Managed + false + + PersonalComputer + MobileDevice + + + +
+
\ No newline at end of file diff --git "a/features/libraries/\320\237\320\273\320\260\320\263\320\270\320\275\321\213/step_definitions/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" "b/features/libraries/\320\237\320\273\320\260\320\263\320\270\320\275\321\213/step_definitions/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" new file mode 100644 index 000000000..fc02585eb --- /dev/null +++ "b/features/libraries/\320\237\320\273\320\260\320\263\320\270\320\275\321\213/step_definitions/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" @@ -0,0 +1,12 @@ + +
+ + + + + cfg:ExternalDataProcessorObject.Фича_РегулярныеВыражения + + true + + + \ No newline at end of file diff --git "a/features/libraries/\320\237\320\273\320\260\320\263\320\270\320\275\321\213/step_definitions/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/features/libraries/\320\237\320\273\320\260\320\263\320\270\320\275\321\213/step_definitions/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" new file mode 100644 index 000000000..8fb0fbadd --- /dev/null +++ "b/features/libraries/\320\237\320\273\320\260\320\263\320\270\320\275\321\213/step_definitions/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -0,0 +1,176 @@ + +#Область Служебные_функции_и_процедуры + +&НаКлиенте +// контекст фреймворка Vanessa-Behavior +Перем Ванесса; + +&НаКлиенте +// Структура, в которой хранится состояние сценария между выполнением шагов. Очищается перед выполнением каждого сценария. +Перем Контекст Экспорт; + +&НаКлиенте +// Структура, в которой можно хранить служебные данные между запусками сценариев. Существует, пока открыта форма Vanessa-Behavior. +Перем КонтекстСохраняемый Экспорт; + +&НаКлиенте +// Функция экспортирует список шагов, которые реализованы в данной внешней обработке. +Функция ПолучитьСписокТестов(КонтекстФреймворкаBDD) Экспорт + Ванесса = КонтекстФреймворкаBDD; + + ВсеТесты = Новый Массив; + + //описание параметров + //Ванесса.ДобавитьШагВМассивТестов(ВсеТесты,Снипет,ИмяПроцедуры,ПредставлениеТеста,ОписаниеШага,ТипШага,Транзакция,Параметр); + + Ванесса.ДобавитьШагВМассивТестов(ВсеТесты,"ПеременнаяСоответствуетРегулярномуВыражению(Парам01,Парам02)","ПеременнаяСоответствуетРегулярномуВыражению","Тогда переменная ""ПроверяемаяСтрока"" соответствует регулярному выражению ""\d\d\d""","",""); + Ванесса.ДобавитьШагВМассивТестов(ВсеТесты,"ЯЗапоминаюСтрокуКакПеременную(Парам01,Парам02)","ЯЗапоминаюСтрокуКакПеременную","Когда Я запоминаю строку ""Привет"" как переменную ""ПроверяемаяСтрока""","",""); + Ванесса.ДобавитьШагВМассивТестов(ВсеТесты,"ПеременнаяСоответствуетПростомуШаблону(Парам01,Парам02)","ПеременнаяСоответствуетПростомуШаблону","Тогда переменная ""ПроверяемаяСтрока"" соответствует простому шаблону ""*ри*""","",""); + Ванесса.ДобавитьШагВМассивТестов(ВсеТесты,"ПеременнаяНеСоответствуетРегулярномуВыражению(Парам01,Парам02)","ПеременнаяНеСоответствуетРегулярномуВыражению","Тогда переменная ""ПроверяемаяСтрока"" не соответствует регулярному выражению ""\d{4}""","",""); + Ванесса.ДобавитьШагВМассивТестов(ВсеТесты,"ПеременнаяНеСоответствуетПростомуШаблону(Парам01,Парам02)","ПеременнаяНеСоответствуетПростомуШаблону","Тогда переменная ""ПроверяемаяСтрока"" не соответствует простому шаблону ""*ДругойТекст*""","",""); + + Возврат ВсеТесты; +КонецФункции + +&НаСервере +// Служебная функция. +Функция ПолучитьМакетСервер(ИмяМакета) + ОбъектСервер = РеквизитФормыВЗначение("Объект"); + Возврат ОбъектСервер.ПолучитьМакет(ИмяМакета); +КонецФункции + +&НаКлиенте +// Служебная функция для подключения библиотеки создания fixtures. +Функция ПолучитьМакетОбработки(ИмяМакета) Экспорт + Возврат ПолучитьМакетСервер(ИмяМакета); +КонецФункции + +#КонецОбласти + + + +#Область Работа_со_сценариями + +&НаКлиенте +// Процедура выполняется перед началом каждого сценария +Процедура ПередНачаломСценария() Экспорт + +КонецПроцедуры + +&НаКлиенте +// Процедура выполняется перед окончанием каждого сценария +Процедура ПередОкончаниемСценария() Экспорт + +КонецПроцедуры + +#КонецОбласти + + +/////////////////////////////////////////////////// +//Реализация шагов +/////////////////////////////////////////////////// + +&НаКлиенте +//Когда Я запоминаю строку "Привет" как переменную "ПроверяемаяСтрока" +//@ЯЗапоминаюСтрокуКакПеременную(Парам01,Парам02) +Процедура ЯЗапоминаюСтрокуКакПеременную(ИсходнаяСтрока, ИмяПеременной) Экспорт + Контекст.Вставить(ИмяПеременной, ИсходнаяСтрока); +КонецПроцедуры + +&НаКлиенте +//Тогда переменная "ПроверяемаяСтрока" соответствует регулярному выражению "/d/d/d" +//@ПеременнаяСоответствуетРегулярномуВыражению(Парам01,Парам02) +Процедура ПеременнаяСоответствуетРегулярномуВыражению(ИмяПеременной, ШаблонРегулярки) Экспорт + + ПроверяемаяСтрока = ""; + + Нашли = ПеременнаяСоответствуетРегулярномуВыражениюВнутр(ИмяПеременной, ШаблонРегулярки, ПроверяемаяСтрока); + + Ожидаем = Ванесса.Плагин("УтвержденияBDD"); + Ожидаем.Что(Нашли, + СтрШаблон("Ожидали, что проверяемая строка из переменной совпадает с шаблоном регулярного выражения, а это не так + |Регулярное выражение %1 + |Имя переменной %2 + |Проверяемая строка: + |%3", ШаблонРегулярки, ИмяПеременной, ПроверяемаяСтрока)) + .ЭтоИстина(); +КонецПроцедуры + +&НаКлиенте +//Тогда переменная "ПроверяемаяСтрока" не соответствует регулярному выражению "\d{4}" +//@ПеременнаяНеСоответствуетРегулярномуВыражению(Парам01,Парам02) +Процедура ПеременнаяНеСоответствуетРегулярномуВыражению(ИмяПеременной, ШаблонРегулярки) Экспорт + + ПроверяемаяСтрока = ""; + + Нашли = ПеременнаяСоответствуетРегулярномуВыражениюВнутр(ИмяПеременной, ШаблонРегулярки, ПроверяемаяСтрока); + + Ожидаем = Ванесса.Плагин("УтвержденияBDD"); + Ожидаем.Что(Нашли, + СтрШаблон("Ожидали, что проверяемая строка не совпадает с шаблоном регулярного выражения, а она совпадает, что неверно + |Регулярное выражение %1 + |Имя переменной %2 + |Проверяемая строка: + |%3", ШаблонРегулярки, ИмяПеременной, ПроверяемаяСтрока)) + .ЭтоЛожь(); +КонецПроцедуры + +&НаКлиенте +//Тогда переменная "ПроверяемаяСтрока" соответствует простому шаблону "*ри*" +//@ПеременнаяСоответствуетПростомуШаблону(Парам01,Парам02) +Процедура ПеременнаяСоответствуетПростомуШаблону(ИмяПеременной, ШаблонРегулярки) Экспорт + + ПроверяемаяСтрока = ""; + Нашли = ПеременнаяСоответствуетПростомуШаблонуВнутр(ИмяПеременной, ШаблонРегулярки, ПроверяемаяСтрока); + + Ожидаем = Ванесса.Плагин("УтвержденияBDD"); + Ожидаем.Что(Нашли, + СтрШаблон("Ожидали, что проверяемая строка совпадает с шаблоном регулярного выражения, а это не так + |Шаблон проверки %1 + |Имя переменной %2 + |Проверяемая строка: + |%3", ШаблонРегулярки, ИмяПеременной, ПроверяемаяСтрока)) + .ЭтоИстина(); +КонецПроцедуры + +&НаКлиенте +//Тогда переменная "ПроверяемаяСтрока" не соответствует простому шаблону "*ДругойТекст*" +//@ПеременнаяНеСоответствуетПростомуШаблону(Парам01,Парам02) +Процедура ПеременнаяНеСоответствуетПростомуШаблону(ИмяПеременной, ШаблонРегулярки) Экспорт + ПроверяемаяСтрока = ""; + Нашли = ПеременнаяСоответствуетПростомуШаблонуВнутр(ИмяПеременной, ШаблонРегулярки, ПроверяемаяСтрока); + + Ожидаем = Ванесса.Плагин("УтвержденияBDD"); + Ожидаем.Что(Нашли, + СтрШаблон("Ожидали, что проверяемая строка не совпадает с простым шаблоном, а она совпадает, что неверно + |Шаблон проверки %1 + |Имя переменной %2 + |Проверяемая строка: + |%3", ШаблонРегулярки, ИмяПеременной, ПроверяемаяСтрока)) + .ЭтоЛожь(); +КонецПроцедуры + +&НаКлиенте +Функция ПеременнаяСоответствуетРегулярномуВыражениюВнутр(ИмяПеременной, ШаблонРегулярки, ПроверяемаяСтрока) + + РегулярныеВыражения = Ванесса.Плагин("РегулярныеВыражения"); + РегулярныеВыражения.Подготовить(ШаблонРегулярки); + + ПроверяемаяСтрока = Контекст[ИмяПеременной]; + + Нашли = РегулярныеВыражения.Совпадает(ПроверяемаяСтрока); + + Возврат Нашли; +КонецФункции + +&НаКлиенте +Функция ПеременнаяСоответствуетПростомуШаблонуВнутр(ИмяПеременной, ШаблонРегулярки, ПроверяемаяСтрока) + + РегулярныеВыражения = Ванесса.Плагин("РегулярныеВыражения"); + + ПроверяемаяСтрока = Контекст[ИмяПеременной]; + + Нашли = РегулярныеВыражения.СтрокаСоответствуетШаблону(ПроверяемаяСтрока, ШаблонРегулярки); + + Возврат Нашли; +КонецФункции diff --git "a/features/libraries/\320\237\320\273\320\260\320\263\320\270\320\275\321\213/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217.feature" "b/features/libraries/\320\237\320\273\320\260\320\263\320\270\320\275\321\213/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217.feature" new file mode 100644 index 000000000..fab65344e --- /dev/null +++ "b/features/libraries/\320\237\320\273\320\260\320\263\320\270\320\275\321\213/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217.feature" @@ -0,0 +1,24 @@ +# language: ru + +@IgnoreOnWeb + +Функционал: Регулярные выражения + Как Пользователь VB + Я хочу выполнять больше различных проверок, используя регулярные выражения + Чтобы автоматизировать рутинную деятельность разработчика + +Сценарий: Соответствие шаблону + Когда Я запоминаю значение выражения "345" в переменную "ПроверяемаяСтрока" + Тогда переменная "ПроверяемаяСтрока" соответствует регулярному выражению "\d\d\d" + +Сценарий: Соответствие простому шаблону с использованием маски "*", т.е. "любые символы" + Когда Я запоминаю строку "Привет" как переменную "ПроверяемаяСтрока" + Тогда переменная "ПроверяемаяСтрока" соответствует простому шаблону "*ри*" + +Сценарий: Несовпадение с шаблоном + Когда Я запоминаю значение выражения "345" в переменную "ПроверяемаяСтрока" + Тогда переменная "ПроверяемаяСтрока" не соответствует регулярному выражению "\d{4}" + +Сценарий: Несовпадение с простым шаблоном с использованием маски "*", т.е. "любые символы" + Когда Я запоминаю строку "Привет" как переменную "ПроверяемаяСтрока" + Тогда переменная "ПроверяемаяСтрока" не соответствует простому шаблону "*ДругойТекст*" diff --git "a/plugins/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217.xml" "b/plugins/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217.xml" new file mode 100644 index 000000000..e91c9d20f --- /dev/null +++ "b/plugins/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217.xml" @@ -0,0 +1,30 @@ + + + + + + c3831ec8-d8d5-4f93-8a22-f9bfae07327f + 908d0aaf-e4ec-4668-8d14-3e8075d222fd + + + 85629dd2-6be4-49c6-9a69-13411102aa57 + 3fdd55c8-e92e-4f99-8b28-3ba8957b50ab + + + + РегулярныеВыражения + + + ru + Регулярные выражения + + + + ExternalDataProcessor.РегулярныеВыражения.Form.Форма + + + +
Форма
+
+
+
\ No newline at end of file diff --git "a/plugins/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Ext/ObjectModule.bsl" "b/plugins/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Ext/ObjectModule.bsl" new file mode 100644 index 000000000..91f976bd3 --- /dev/null +++ "b/plugins/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Ext/ObjectModule.bsl" @@ -0,0 +1,192 @@ +Перем ПутьКФайлуПолный Экспорт;// в эту переменную будет установлен правильный клиентский путь к текущему файлу + +Перем КонтекстЯдра; +Перем ЭтоLinux; + +Перем РегулярноеВыражение; + +Перем ТестерЛинукс; + +Перем Ожидаем; + +// { Plugin interface +Функция ОписаниеПлагина(ВозможныеТипыПлагинов) Экспорт + Результат = Новый Структура; + Результат.Вставить("Тип", ВозможныеТипыПлагинов.Утилита); + Результат.Вставить("Идентификатор", Метаданные().Имя); + Результат.Вставить("Представление", "РегулярныеВыражения"); + + Возврат Новый ФиксированнаяСтруктура(Результат); +КонецФункции + +Процедура Инициализация(КонтекстЯдраПараметр) Экспорт + КонтекстЯдра = КонтекстЯдраПараметр; + ЭтоLinux = КонтекстЯдраПараметр.ЭтоLinux; +КонецПроцедуры +// } Plugin interface + +// { API + +// Установить шаблон регулярного выражения +// +// Параметры: +// Шаблон - Строка - шаблон регулярного выражения +// +Процедура Подготовить(Знач Шаблон) Экспорт + Если ЭтоLinux Тогда + ПодготовитьШаблонRexExpLinux(Шаблон); + Иначе + Если РегулярноеВыражение = Неопределено Тогда + Попытка + РегулярноеВыражение = Новый COMОбъект("VBScript.RegExp"); + Исключение + ВызватьИсключение "Не удалось создать COMОбъект - VBScript.RegExp"; + КонецПопытки; + КонецЕсли; + + РегулярноеВыражение.Global = Истина; + РегулярноеВыражение.Pattern = Шаблон; + + КонецЕсли; +КонецПроцедуры + +// Проверяет строку на соответствие подготовленному регулярному выражению +// +// Параметры: +// ПроверяемаяСтрока - - +// +// Возвращаемое значение: +// Булево - соответствует или нет +// +Функция Совпадает(Знач ПроверяемаяСтрока) Экспорт + ПроверитьПодготовленность(); + Возврат РегулярноеВыражение.Test(ПроверяемаяСтрока); +КонецФункции + +// Позволяет проверить соответствие строки "ПроверяемаяСтрока" шаблону "Шаблон" +// при этом подстрока "Шаблон" может содержать символы *, который означает "любые символы" +// например СтрокаСоответствуетШаблону("Привет","*вет") +// +// Параметры: +// ПроверяемаяСтрока - Строка - +// Шаблон - Строка - +// +// Возвращаемое значение: +// Булево - соответствует или нет +// +Функция СтрокаСоответствуетШаблону(Знач ПроверяемаяСтрока, Знач Шаблон = "") Экспорт + + Если ЗначениеЗаполнено(Шаблон) Тогда + Шаблон = ПодготовитьШаблонКИспользованиюВРегулярке(Шаблон); + Если Не ЭтоLinux Тогда + //для VBScript.RegExp явно указываем что есть начало и конец строки + Шаблон = "^" + Шаблон + "$"; + КонецЕсли; + + Подготовить(Шаблон); + КонецЕсли; + + ПроверитьПодготовленность(); + + Если ЭтоLinux Тогда + Возврат ПроверитьСтрокуRexExpLinux(ПроверяемаяСтрока); + Иначе + Возврат РегулярноеВыражение.Test(ПроверяемаяСтрока); + КонецЕсли; +КонецФункции + +// Подготовить шаблон к использованию в регулярке путем экранирования служебных символов +// Важно: Символ * в шаблоне трактуется как выражение .+ (любой символ) +// +// Параметры: +// Шаблон - Строка - строка регулярного выражения без экранирования +// +// Возвращаемое значение: +// Строка - подготовленный шаблон регулярного выражения с добавлением экранирования и заменой * +// +Функция ПодготовитьШаблонКИспользованиюВРегулярке(Знач Шаблон) Экспорт + + // Экранируем все, кроме звездочки. Ее будем трактовать по-своему. + СпецСимволы = Новый Массив; + СпецСимволы.Добавить("\"); + СпецСимволы.Добавить("^"); + СпецСимволы.Добавить("$"); + СпецСимволы.Добавить("("); + СпецСимволы.Добавить(")"); + СпецСимволы.Добавить("<"); + СпецСимволы.Добавить("["); + СпецСимволы.Добавить("]"); + СпецСимволы.Добавить("{"); + СпецСимволы.Добавить("}"); + СпецСимволы.Добавить("|"); + СпецСимволы.Добавить(">"); + СпецСимволы.Добавить("."); + СпецСимволы.Добавить("+"); + СпецСимволы.Добавить("?"); + + Для Каждого СпецСимвол Из СпецСимволы Цикл + Шаблон = СтрЗаменить(Шаблон, СпецСимвол, "\" + СпецСимвол); + КонецЦикла; + + // Трактуем * по-нашему. + Шаблон = СтрЗаменить(Шаблон, "*", ".+"); + + Возврат Шаблон; + +КонецФункции + +// } API + +// { Helpers + +Процедура ПроверитьПодготовленность() + Если ЭтоLinux Тогда + Значение = ТестерЛинукс; + Иначе + Значение = РегулярноеВыражение; + КонецЕсли; + Ожидаем().Что(Значение <> Неопределено, + "Ожидали, что регулярное выражение подготовлено, а это не так") + .ЭтоИстина(); +КонецПроцедуры + +//взято из https://infostart.ru/public/464971/ +Функция ПроверитьСтрокуRexExpLinux(Знач Строка) + + Попытка + ТестерЛинукс.TestItem = Строка; + Возврат Истина + Исключение + Возврат Ложь + КонецПопытки; +КонецФункции + +//взято из https://infostart.ru/public/464971/ +Функция ПодготовитьШаблонRexExpLinux(Знач Шаблон) + Чтение = Новый ЧтениеXML; + Чтение.УстановитьСтроку( + " + | + | + |" + Шаблон + " + | + | + | + | + | + |"); + + Модель = ФабрикаXDTO.ПрочитатьXML(Чтение); + МояФабрикаXDTO = Новый ФабрикаXDTO(Модель); + Пакет = МояФабрикаXDTO.Пакеты.Получить("sample-my-package"); + ТестерЛинукс = МояФабрикаXDTO.Создать(Пакет.Получить("TestObj")); + + Возврат ТестерЛинукс; +КонецФункции + +Функция Ожидаем() + Ожидаем = КонтекстЯдра.Плагин("УтвержденияBDD"); + Возврат Ожидаем; +КонецФункции + +// } Helpers diff --git "a/plugins/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260.xml" "b/plugins/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260.xml" new file mode 100644 index 000000000..30f4aedce --- /dev/null +++ "b/plugins/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260.xml" @@ -0,0 +1,22 @@ + + +
+ + Форма + + + ru + Форма + + + + Managed + false + + PersonalComputer + MobileDevice + + + +
+
\ No newline at end of file diff --git "a/plugins/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" "b/plugins/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" new file mode 100644 index 000000000..41cf6ed38 --- /dev/null +++ "b/plugins/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" @@ -0,0 +1,13 @@ + +
+ useIfNecessary + + + + + cfg:ExternalDataProcessorObject.РегулярныеВыражения + + true + + + \ No newline at end of file diff --git "a/plugins/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/plugins/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" new file mode 100644 index 000000000..006d451aa --- /dev/null +++ "b/plugins/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -0,0 +1,204 @@ +&НаКлиенте +Перем ПутьКФайлуПолный Экспорт;// в эту переменную будет установлен правильный клиентский путь к текущему файлу + +&НаКлиенте +Перем ЭтоLinux; + +&НаКлиенте +Перем РегулярноеВыражение; + +&НаКлиенте +Перем ТестерЛинукс; + +&НаКлиенте +Перем Ожидаем; + +// { Plugin interface +&НаКлиенте +Функция ОписаниеПлагина(ВозможныеТипыПлагинов) Экспорт + Возврат ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов); +КонецФункции + +&НаКлиенте +Процедура Инициализация(КонтекстЯдраПараметр) Экспорт + ЭтоLinux = КонтекстЯдраПараметр.ЭтоLinux; + Ожидаем = КонтекстЯдраПараметр.Плагин("УтвержденияBDD"); +КонецПроцедуры + +&НаСервере +Функция ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов) + Возврат ЭтотОбъектНаСервере().ОписаниеПлагина(ВозможныеТипыПлагинов); +КонецФункции +// } Plugin interface + +// { API + +// Установить шаблон регулярного выражения +// +// Параметры: +// Шаблон - Строка - шаблон регулярного выражения +// +&НаКлиенте +Процедура Подготовить(Знач Шаблон) Экспорт + Если ЭтоLinux Тогда + ПодготовитьШаблонRexExpLinux(Шаблон); + Иначе + Если РегулярноеВыражение = Неопределено Тогда + Попытка + РегулярноеВыражение = Новый COMОбъект("VBScript.RegExp"); + Исключение + ВызватьИсключение "Не удалось создать COMОбъект - VBScript.RegExp"; + КонецПопытки; + КонецЕсли; + + РегулярноеВыражение.Global = Истина; + РегулярноеВыражение.Pattern = Шаблон; + + КонецЕсли; +КонецПроцедуры + +// Проверяет строку на соответствие подготовленному регулярному выражению +// +// Параметры: +// ПроверяемаяСтрока - - +// +// Возвращаемое значение: +// Булево - соответствует или нет +// +&НаКлиенте +Функция Совпадает(Знач ПроверяемаяСтрока) Экспорт + ПроверитьПодготовленность(); + Возврат РегулярноеВыражение.Test(ПроверяемаяСтрока); +КонецФункции + +// Позволяет проверить соответствие строки "ПроверяемаяСтрока" шаблону "Шаблон" +// при этом подстрока "Шаблон" может содержать символы *, который означает "любые символы" +// например СтрокаСоответствуетШаблону("Привет","*вет") +// +// Параметры: +// ПроверяемаяСтрока - Строка - +// Шаблон - Строка - +// +// Возвращаемое значение: +// Булево - соответствует или нет +// +&НаКлиенте +Функция СтрокаСоответствуетШаблону(Знач ПроверяемаяСтрока, Знач Шаблон = "") Экспорт + + Если ЗначениеЗаполнено(Шаблон) Тогда + Шаблон = ПодготовитьШаблонКИспользованиюВРегулярке(Шаблон); + Если Не ЭтоLinux Тогда + //для VBScript.RegExp явно указываем что есть начало и конец строки + Шаблон = "^" + Шаблон + "$"; + КонецЕсли; + + Подготовить(Шаблон); + КонецЕсли; + + ПроверитьПодготовленность(); + + Если ЭтоLinux Тогда + Возврат ПроверитьСтрокуRexExpLinux(ПроверяемаяСтрока); + Иначе + Возврат РегулярноеВыражение.Test(ПроверяемаяСтрока); + КонецЕсли; +КонецФункции + +// Подготовить шаблон к использованию в регулярке путем экранирования служебных символов +// Важно: Символ * в шаблоне трактуется как выражение .+ (любой символ) +// +// Параметры: +// Шаблон - Строка - строка регулярного выражения без экранирования +// +// Возвращаемое значение: +// Строка - подготовленный шаблон регулярного выражения с добавлением экранирования и заменой * +// +&НаКлиенте +Функция ПодготовитьШаблонКИспользованиюВРегулярке(Знач Шаблон) Экспорт + + // Экранируем все, кроме звездочки. Ее будем трактовать по-своему. + СпецСимволы = Новый Массив; + СпецСимволы.Добавить("\"); + СпецСимволы.Добавить("^"); + СпецСимволы.Добавить("$"); + СпецСимволы.Добавить("("); + СпецСимволы.Добавить(")"); + СпецСимволы.Добавить("<"); + СпецСимволы.Добавить("["); + СпецСимволы.Добавить("]"); + СпецСимволы.Добавить("{"); + СпецСимволы.Добавить("}"); + СпецСимволы.Добавить("|"); + СпецСимволы.Добавить(">"); + СпецСимволы.Добавить("."); + СпецСимволы.Добавить("+"); + СпецСимволы.Добавить("?"); + + Для Каждого СпецСимвол Из СпецСимволы Цикл + Шаблон = СтрЗаменить(Шаблон, СпецСимвол, "\" + СпецСимвол); + КонецЦикла; + + // Трактуем * по-нашему. + Шаблон = СтрЗаменить(Шаблон, "*", ".+"); + + Возврат Шаблон; + +КонецФункции + +// } API + +// { Helpers +&НаСервере +Функция ЭтотОбъектНаСервере() + Возврат РеквизитФормыВЗначение("Объект"); +КонецФункции + +&НаКлиенте +Процедура ПроверитьПодготовленность() + Если ЭтоLinux Тогда + Значение = ТестерЛинукс; + Иначе + Значение = РегулярноеВыражение; + КонецЕсли; + Ожидаем.Что(Значение <> Неопределено, + "Ожидали, что регулярное выражение подготовлено, а это не так") + .ЭтоИстина(); +КонецПроцедуры + +//взято из https://infostart.ru/public/464971/ +&НаКлиенте +Функция ПроверитьСтрокуRexExpLinux(Знач Строка) + + Попытка + ТестерЛинукс.TestItem = Строка; + Возврат Истина + Исключение + Возврат Ложь + КонецПопытки; +КонецФункции + +//взято из https://infostart.ru/public/464971/ +&НаКлиенте +Функция ПодготовитьШаблонRexExpLinux(Знач Шаблон) + Чтение = Новый ЧтениеXML; + Чтение.УстановитьСтроку( + " + | + | + |" + Шаблон + " + | + | + | + | + | + |"); + + Модель = ФабрикаXDTO.ПрочитатьXML(Чтение); + МояФабрикаXDTO = Новый ФабрикаXDTO(Модель); + Пакет = МояФабрикаXDTO.Пакеты.Получить("sample-my-package"); + ТестерЛинукс = МояФабрикаXDTO.Создать(Пакет.Получить("TestObj")); + + Возврат ТестерЛинукс; +КонецФункции + +// } Helpers