mirror of
https://github.com/bia-technologies/yaxunit.git
synced 2025-01-08 13:06:32 +02:00
Merge pull request #149 from Daabramov/feature/138-regex
Поддержка проверки строки по регулярке
This commit is contained in:
commit
6faa36e111
@ -40,6 +40,19 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Возвращает внешнюю компоненту, реализующую функциональность регулярных выражений
|
||||
// Подробнее с документацией можно ознакомиться по ссылке: https://github.com/alexkmbk/RegEx1CAddin
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// ВнешнийОбъект
|
||||
Функция РегулярныеВыражения() Экспорт
|
||||
|
||||
Компонента = СоздатьКомпоненту(ОписаниеКомпонентыРегулярныхВыражений());
|
||||
Компонента.ВызыватьИсключения = Истина;
|
||||
Возврат Компонента;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
@ -90,6 +103,16 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Описание компоненты реализующей функциональность регулярных выражений.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// см. ОписаниеКомпоненты
|
||||
Функция ОписаниеКомпонентыРегулярныхВыражений() Экспорт
|
||||
|
||||
Возврат ОписаниеКомпоненты("ОбщийМакет.ЮТRegEx1CAddin", "RegEx1CAddin", "RegEx");
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Описание внешней компоненты.
|
||||
//
|
||||
// Параметры:
|
||||
|
@ -22,6 +22,7 @@
|
||||
|
||||
ПараметрыТихойУстановки = ПараметрыТихойУстановки();
|
||||
ПараметрыТихойУстановки.Компоненты.Добавить(ЮТКомпоненты.ОписаниеКомпонентыПауза());
|
||||
ПараметрыТихойУстановки.Компоненты.Добавить(ЮТКомпоненты.ОписаниеКомпонентыРегулярныхВыражений());
|
||||
|
||||
ЮТАсинхроннаяОбработкаСлужебныйКлиент.ДобавитьОбработчикЦепочки(ПараметрыТихойУстановки,
|
||||
ЭтотОбъект,
|
||||
|
@ -267,6 +267,34 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Добавляет предикат, проверяющий, что строка соответствует указанному регулярному выражению
|
||||
//
|
||||
// Параметры:
|
||||
// Значение - Строка
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// ОбщийМодуль - Этот модуль для замыкания
|
||||
Функция СоответствуетШаблону(Значение) Экспорт
|
||||
|
||||
ДобавитьПредикат(Выражения().СоответствуетШаблону, Значение);
|
||||
Возврат ЮТПредикаты;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Добавляет предикат, проверяющий, что строка не соответствует указанному регулярному выражению
|
||||
//
|
||||
// Параметры:
|
||||
// Значение - Строка
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// ОбщийМодуль - Этот модуль для замыкания
|
||||
Функция НеСоответствуетШаблону(Значение) Экспорт
|
||||
|
||||
ДобавитьПредикат(Выражения().НеСоответствуетШаблону, Значение);
|
||||
Возврат ЮТПредикаты;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Возвращает набор сформированных утверждений.
|
||||
//
|
||||
// Рекомендуется использовать этот метод, если планируется отложенная проверка предикатов. Например, вы хотите сформировать два набору предикатов
|
||||
@ -316,7 +344,9 @@
|
||||
Выражения.Вставить("НеИмеетСвойство", "НеИмеетСвойство");
|
||||
Выражения.Вставить("Содержит", "Содержит");
|
||||
Выражения.Вставить("НеСодержит", "НеСодержит");
|
||||
|
||||
Выражения.Вставить("СоответствуетШаблону", "СоответствуетШаблону");
|
||||
Выражения.Вставить("НеСоответствуетШаблону", "НеСоответствуетШаблону");
|
||||
|
||||
Возврат Новый ФиксированнаяСтруктура(Выражения);
|
||||
|
||||
КонецФункции
|
||||
|
@ -151,6 +151,8 @@
|
||||
Шаблон = "содержит свойство `%1`";
|
||||
ИначеЕсли Выражение = Выражения.Содержит Тогда
|
||||
Шаблон = "содержит `%1`";
|
||||
ИначеЕсли Выражение = Выражения.СоответствуетШаблону Тогда
|
||||
Шаблон = "соответствует регулярному выражению `%1`";
|
||||
Иначе
|
||||
ВызватьИсключение "Не описан шаблон сообщения для выражения предиката " + Выражение;
|
||||
КонецЕсли;
|
||||
@ -278,7 +280,11 @@
|
||||
ИначеЕсли ВидСравненияВыражения = ВидыСравнения.Содержит Тогда
|
||||
|
||||
ЮТСравнениеКлиентСервер.ПроверитьСодержит(СтатусПроверки, ПараметрыПроверки);
|
||||
|
||||
|
||||
ИначеЕсли ВидСравненияВыражения = ВидыСравнения.СоответствуетШаблону Тогда
|
||||
|
||||
ЮТСравнениеКлиентСервер.ПроверитьСоответствуетШаблону(СтатусПроверки, ПараметрыПроверки);
|
||||
|
||||
Иначе
|
||||
|
||||
ВызватьИсключение СтрШаблон("Неизвестное выражение предиката `%1`", Выражение.ВидСравнения);
|
||||
|
@ -249,6 +249,30 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПроверитьСоответствуетШаблону(РезультатПроверки, ПараметрыПроверки) Экспорт
|
||||
|
||||
Если НЕ ПроверитьТипЗначения(РезультатПроверки, ПараметрыПроверки.ОжидаемоеЗначение, "Строка") Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
ПроверяемоеЗначение = ПроверяемоеЗначение(ПараметрыПроверки);
|
||||
СоответствуетШаблону = СоответствуетШаблону(ПроверяемоеЗначение, ПараметрыПроверки.ОжидаемоеЗначение);
|
||||
|
||||
Если СоответствуетШаблону = Неопределено Тогда
|
||||
ТекстОшибки = СтрШаблон("Тип проверяемого значения `%1` не обрабатывается утверждением", ТипЗнч(ПроверяемоеЗначение));
|
||||
ЮТРегистрацияОшибок.ДобавитьОшибкуКРезультатуПроверки(РезультатПроверки, ТекстОшибки);
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Результат = СоответствуетШаблону;
|
||||
Реверс(Результат, ПараметрыПроверки);
|
||||
|
||||
Если НЕ Результат Тогда
|
||||
ОбработатьРезультатСравнения(РезультатПроверки, ПараметрыПроверки, ПроверяемоеЗначение);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Параметры проверки.
|
||||
//
|
||||
// Параметры:
|
||||
@ -574,6 +598,24 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СоответствуетШаблону(ПроверяемаяСтрока, РегулярноеВыражение)
|
||||
|
||||
Если ТипЗнч(ПроверяемаяСтрока) <> Тип("Строка") Тогда
|
||||
Возврат Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
РегулярныеВыражения = ЮТКомпоненты.РегулярныеВыражения();
|
||||
|
||||
Попытка
|
||||
Результат = РегулярныеВыражения.Совпадает(ПроверяемаяСтрока, РегулярноеВыражение);
|
||||
Исключение
|
||||
ВызватьИсключение РегулярныеВыражения.ОписаниеОшибки;
|
||||
КонецПопытки;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция НайтиЗначение(ПроверяемоеЗначение, ОжидаемоеЗначение)
|
||||
|
||||
ТипПроверяемогоЗначения = ТипЗнч(ПроверяемоеЗначение);
|
||||
|
@ -696,6 +696,40 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Проверяет установленное значение Контекста (или его свойство) на соответствие регулярному выражению
|
||||
//
|
||||
// Параметры:
|
||||
// ОжидаемоеЗначение - Строка - Ожидается, что значение Контекста (или его свойство) соответствует этому регулярному выражению
|
||||
// ОписаниеПроверки - Строка - Описание конкретной проверки
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// ОбщийМодуль - Этот модуль для замыкания
|
||||
Функция СоответствуетШаблону(Знач ОжидаемоеЗначение, Знач ОписаниеПроверки = Неопределено) Экспорт
|
||||
|
||||
Контекст = Контекст();
|
||||
УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки);
|
||||
ПроверитьСоответствиеШаблону(Контекст, ОжидаемоеЗначение, Ложь);
|
||||
Возврат ЮТУтверждения;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Проверяет установленное значение Контекста (или его свойство) на несоответствие регулярному выражению
|
||||
//
|
||||
// Параметры:
|
||||
// ОжидаемоеЗначение - Строка - Ожидается, что значение Контекста (или его свойство) НЕ соответствует этому регулярному выражению
|
||||
// ОписаниеПроверки - Строка - Описание конкретной проверки
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// ОбщийМодуль - Этот модуль для замыкания
|
||||
Функция НеСоответствуетШаблону(Знач ОжидаемоеЗначение, Знач ОписаниеПроверки = Неопределено) Экспорт
|
||||
|
||||
Контекст = Контекст();
|
||||
УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки);
|
||||
ПроверитьСоответствиеШаблону(Контекст, ОжидаемоеЗначение, Истина);
|
||||
Возврат ЮТУтверждения;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Проверяет установленное значение Контекста (или его свойство) на длину или размер коллекции.
|
||||
//
|
||||
// Проверка поддерживается для следующих типов проверяемого значения:
|
||||
@ -1750,6 +1784,25 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПроверитьСоответствиеШаблону(Контекст, ОжидаемоеЗначение, Реверс)
|
||||
|
||||
Попытка
|
||||
ПроверяемоеЗначение = ПроверяемоеЗначение(Контекст);
|
||||
Результат = ВыполнитьПроверкуСоответствуетШаблону(ПроверяемоеЗначение, ОжидаемоеЗначение);
|
||||
Исключение
|
||||
ЮТРегистрацияОшибок.СгенерироватьОшибкуВыполнения(ИнформацияОбОшибке(), Контекст);
|
||||
КонецПопытки;
|
||||
|
||||
Если Результат = Неопределено Тогда
|
||||
ТекстОшибки = СтрШаблон("Тип проверяемого значения `%1` не обрабатывается утверждением", ТипЗнч(ПроверяемоеЗначение));
|
||||
ЮТРегистрацияОшибок.СгенерироватьОшибкуВыполнения(ТекстОшибки, Контекст);
|
||||
КонецЕсли;
|
||||
|
||||
Сообщение = СтрШаблон("соответствует шаблону `%1`", ОжидаемоеЗначение);
|
||||
ОбработатьРезультатСравнения(Результат, Сообщение, Реверс, ПроверяемоеЗначение, ОжидаемоеЗначение);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ДлинаПроверяемогоЗначения(Контекст)
|
||||
|
||||
Попытка
|
||||
@ -1932,4 +1985,22 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ВыполнитьПроверкуСоответствуетШаблону(ПроверяемаяСтрока, РегулярноеВыражение)
|
||||
|
||||
Если ТипЗнч(ПроверяемаяСтрока) <> Тип("Строка") Тогда
|
||||
Возврат Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
РегулярныеВыражения = ЮТКомпоненты.РегулярныеВыражения();
|
||||
|
||||
Попытка
|
||||
Результат = РегулярныеВыражения.Совпадает(ПроверяемаяСтрока, РегулярноеВыражение);
|
||||
Исключение
|
||||
ВызватьИсключение РегулярныеВыражения.ОписаниеОшибки;
|
||||
КонецПопытки;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
BIN
exts/yaxunit/src/CommonTemplates/ЮТRegEx1CAddin/Template.addin
Normal file
BIN
exts/yaxunit/src/CommonTemplates/ЮТRegEx1CAddin/Template.addin
Normal file
Binary file not shown.
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonTemplate xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="6f86b3d9-1e91-4f04-a8b5-47a0117c653d">
|
||||
<name>ЮТRegEx1CAddin</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Reg ex1 c addin</value>
|
||||
</synonym>
|
||||
<templateType>AddIn</templateType>
|
||||
</mdclass:CommonTemplate>
|
@ -43,6 +43,7 @@
|
||||
<commonTemplates>CommonTemplate.ЮТ_СловарьПодражателя_Люди_МужскиеИмена_ru</commonTemplates>
|
||||
<commonTemplates>CommonTemplate.ЮТ_СловарьПодражателя_Люди_МужскиеОтчества_ru</commonTemplates>
|
||||
<commonTemplates>CommonTemplate.ЮТ_СловарьПодражателя_Люди_МужскиеФамилии_ru</commonTemplates>
|
||||
<commonTemplates>CommonTemplate.ЮТRegEx1CAddin</commonTemplates>
|
||||
<commonTemplates>CommonTemplate.ЮТYaxUnitAddIn</commonTemplates>
|
||||
<commonTemplates>CommonTemplate.ЮТОписаниеМетаданных</commonTemplates>
|
||||
<commonModules>CommonModule.Мокито</commonModules>
|
||||
|
@ -81,6 +81,8 @@
|
||||
.Добавить(Выражения.НеИмеетСвойство, "Число", "не содержит свойство `Число`", "ВложенныйОбъект")
|
||||
.Добавить(Выражения.Содержит, "4", "содержит `4`", "Строка")
|
||||
.Добавить(Выражения.НеСодержит, "2", "не содержит `2`", "Строка")
|
||||
.Добавить(Выражения.СоответствуетШаблону, "\D{3}", "соответствует регулярному выражению `\D{3}`", "Строка")
|
||||
.Добавить(Выражения.НеСоответствуетШаблону, "\d{3}", "не соответствует регулярному выражению `\d{3}`", "Строка")
|
||||
;
|
||||
|
||||
Для Каждого Вариант Из Варианты.СписокВариантов() Цикл
|
||||
|
@ -49,6 +49,8 @@
|
||||
.ДобавитьТест("НеИмеетТип")
|
||||
.ДобавитьТест("Содержит")
|
||||
.ДобавитьТест("НеСодержит")
|
||||
.ДобавитьТест("СоответствуетШаблону")
|
||||
.ДобавитьТест("НеСоответствуетШаблону")
|
||||
.ДобавитьТест("ИмеетДлину")
|
||||
.ДобавитьТест("НеИмеетДлину")
|
||||
.ДобавитьТест("ВыбрасываетИсключение")
|
||||
@ -1358,6 +1360,48 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура СоответствуетШаблону() Экспорт
|
||||
|
||||
// Позитивные тесты
|
||||
ЮТУтверждения.Что("123321")
|
||||
.СоответствуетШаблону("\d{3}")
|
||||
.СоответствуетШаблону(".{6}")
|
||||
;
|
||||
|
||||
// Негативные тесты
|
||||
Попытка
|
||||
Ошибка = Неопределено;
|
||||
ЮТУтверждения.Что("123321")
|
||||
.СоответствуетШаблону(".{7}");
|
||||
Исключение
|
||||
Ошибка = ИнформацияОбОшибке();
|
||||
КонецПопытки;
|
||||
ПроверитьОшибкуУтверждения(Ошибка, "Ожидали, что проверяемое значение `123321` соответствует шаблону `.{7}`, но это не так");
|
||||
ПроверитьДанныеОшибкиСравнения("123321", ".{7}");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура НеСоответствуетШаблону() Экспорт
|
||||
|
||||
// Позитивные тесты
|
||||
ЮТУтверждения.Что("123321")
|
||||
.НеСоответствуетШаблону("\D{3}")
|
||||
.НеСоответствуетШаблону(".{7}")
|
||||
;
|
||||
|
||||
// Негативные тесты
|
||||
Попытка
|
||||
Ошибка = Неопределено;
|
||||
ЮТУтверждения.Что("123321")
|
||||
.НеСоответствуетШаблону(".{6}");
|
||||
Исключение
|
||||
Ошибка = ИнформацияОбОшибке();
|
||||
КонецПопытки;
|
||||
ПроверитьОшибкуУтверждения(Ошибка, "Ожидали, что проверяемое значение `123321` не соответствует шаблону `.{6}`, но это не так");
|
||||
ПроверитьДанныеОшибкиСравнения("123321", ".{6}");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ИмеетДлину() Экспорт
|
||||
|
||||
// Позитивные тесты
|
||||
|
Loading…
Reference in New Issue
Block a user