diff --git a/lib.config b/lib.config index b87e58a..90453f4 100644 --- a/lib.config +++ b/lib.config @@ -1,4 +1,5 @@  + \ No newline at end of file diff --git a/packagedef b/packagedef index 2255e96..178ed41 100644 --- a/packagedef +++ b/packagedef @@ -1,6 +1,6 @@  Описание.Имя("asserts") - .Версия("1.2.0") + .Версия("1.4.0") .ВерсияСреды("1.0.21") .ВключитьФайл("src") .ВключитьФайл("tests") diff --git a/src/asserts-commons.os b/src/asserts-commons.os new file mode 100644 index 0000000..6160900 --- /dev/null +++ b/src/asserts-commons.os @@ -0,0 +1,41 @@ +Функция ИсключениеНеравенстваСтрок(ПервоеЗначение, ВтороеЗначение) Экспорт + + СтрокаНабора = "----------------------------"; + ДиапазонОтНачала = 5; + ДиапазонВКонце = 5; + + ИндексРазличия = ИндексРазличияСтрок(ПервоеЗначение, ВтороеЗначение); + Если ИндексРазличия = 0 Тогда + // не надо вызывать эту функцию на неразличающихся строках + ВызватьИсключение "Строки не различаются."; + КонецЕсли; + + ОтступНачала = ИндексРазличия - ДиапазонОтНачала; + Если ОтступНачала < 0 Тогда + ОтступНачала = 1; + КонецЕсли; + + НачалоПервой = СтрЗаменить(Сред(ПервоеЗначение, ОтступНачала, ДиапазонОтНачала), Символы.ПС, "\n"); + НачалоВторой = СтрЗаменить(Сред(ВтороеЗначение, ОтступНачала, ДиапазонОтНачала), Символы.ПС, "\n"); + КонецПервой = СтрЗаменить(Сред(ПервоеЗначение, ИндексРазличия, ДиапазонВКонце), Символы.ПС, "\n"); + КонецВторой = СтрЗаменить(Сред(ВтороеЗначение, ИндексРазличия, ДиапазонВКонце), Символы.ПС, "\n"); + + Префикс = 9; // Строка Х: + + Возврат "Различия в позиции " + ИндексРазличия + ". + |Строка 1:" + НачалоПервой + КонецПервой + " + | " + Лев(СтрокаНабора, СтрДлина(НачалоПервой)) + "^ + |Строка 2:" + НачалоВторой + КонецВторой; + +КонецФункции + +Функция ИндексРазличияСтрок(Знач ПервоеЗначение, Знач ВтороеЗначение) + Для Сч = 1 По Мин(СтрДлина(ПервоеЗначение), СтрДлина(ВтороеЗначение)) Цикл + Символ1 = Сред(ПервоеЗначение,Сч,1); + Символ2 = Сред(ВтороеЗначение,Сч,1); + Если Символ1 <> Символ2 Тогда + Возврат Сч; + КонецЕсли + КонецЦикла; + Возврат 0; +КонецФункции \ No newline at end of file diff --git a/src/bdd-asserts.os b/src/bdd-asserts.os index e68ad74..f7ec132 100644 --- a/src/bdd-asserts.os +++ b/src/bdd-asserts.os @@ -272,12 +272,12 @@ КонецФункции // Проверяет существование метода с указанным именем -// +// // Выбрасывает исключение, если метод отсутствует // // Параметры: // ИмяМетода - Строка - Имя метода, наличие которого требуется проверить -// +// Функция ИмеетМетод(Знач ИмяМетода) Экспорт Перем Рефлектор; @@ -321,13 +321,13 @@ КонецЕсли; Отступ = Отступ + СимволОтступа; - + СтрокаСтекТрейса = СтрШаблон( - "%1%2 / Метод %3 / Строка %4", + "%1%2 / Метод %3 / Строка %4", Отступ, КадрСтекаВызовов.ИмяМодуля, КадрСтекаВызовов.Метод, - Формат(КадрСтекаВызовов.НомерСтроки, "ЧГ=") + Формат(КадрСтекаВызовов.НомерСтроки, "ЧГ=") ); МассивТекстИсключения.Добавить(СтрокаСтекТрейса); КонецЦикла; @@ -346,6 +346,13 @@ КонецФункции Функция СформироватьСообщениеОбОшибке(Знач ПроверяемоеЗначение, Знач Ожидание) + Если ФлагОтрицанияДляСообщения = Ложь + И ТипЗнч(Ожидание) = Тип("Строка") + И ТипЗнч(ПроверяемоеЗначение) = Тип("Строка") Тогда + + Возврат "Ожидали равенство строк. " + assertsОбщиеФункции.ИсключениеНеравенстваСтрок(Ожидание, ПроверяемоеЗначение); + КонецЕсли; + Возврат "Ожидали, что проверяемое значение (" + ПроверяемоеЗначение + ")" + ?(ФлагОтрицанияДляСообщения, " НЕ ", " ") + Ожидание + ФорматДСО(ДопСообщениеОшибки); КонецФункции @@ -360,7 +367,7 @@ Процедура ПроверитьЧтоМногострочнаяСтрокаСодержитПодстрокуБезУчетаНачальныхКонечныхПробеловВПодстроках(Знач Строка, Знач Подстрока, ДопСообщениеОшибки = "") СообщениеОшибки = ""; Нашли = МногострочнаяСтрокаСодержитПодстрокуБезУчетаНачальныхКонечныхПробеловВПодстроках(Строка, Подстрока, СообщениеОшибки); - Если Не Нашли Тогда + Если ЛогическоеВыражениеВерно(Не Нашли) Тогда ВызватьОшибкуПроверки( СтрШаблон("Ожидали, что в строке < |%1 |> @@ -374,36 +381,55 @@ КонецПроцедуры Функция МногострочнаяСтрокаСодержитПодстрокуБезУчетаНачальныхКонечныхПробеловВПодстроках(Знач Строка, Знач Подстрока, СообщениеОшибки = "") - ПерваяСтрока = СокрЛП(СтрПолучитьСтроку(Подстрока, 1)); - НашлиПервуюСтроку = Ложь; - Для Счетчик = 1 По СтрЧислоСтрок(Строка) Цикл - ОчереднаяСтрока = СокрЛП(СтрПолучитьСтроку(Строка, Счетчик)); - НашлиПервуюСтроку = Найти(ОчереднаяСтрока, ПерваяСтрока) <> 0; - Если НашлиПервуюСтроку Тогда - Прервать; + СтартоваяПозиция = 1; + Пока Истина Цикл // ищем первый совпадающий блок во всей строке + ПерваяСтрока = СокрЛП(СтрПолучитьСтроку(Подстрока, 1)); +// Сообщить("СтартоваяПозиция + <" + СтартоваяПозиция + ">"); +// Сообщить("ПерваяСтрока + <" + ПерваяСтрока + ">"); + НашлиПервуюСтроку = Ложь; + Для Счетчик = СтартоваяПозиция По СтрЧислоСтрок(Строка) Цикл + ОчереднаяСтрока = СокрЛП(СтрПолучитьСтроку(Строка, Счетчик)); + // Сообщить("ОчереднаяСтрока + <" + ОчереднаяСтрока + ">"); + + НашлиПервуюСтроку = Найти(ОчереднаяСтрока, ПерваяСтрока) <> 0; + Если НашлиПервуюСтроку Тогда + Прервать; + КонецЕсли; + КонецЦикла; + Если Не НашлиПервуюСтроку Тогда + СообщениеОшибки = СтрШаблон("Не нашли первую же подстроку <%1>", ПерваяСтрока); + Возврат Ложь; КонецЕсли; - КонецЦикла; - Если Не НашлиПервуюСтроку Тогда - СообщениеОшибки = СтрШаблон("Не нашли первую же подстроку <%1>", ПерваяСтрока); - Возврат Ложь; - КонецЕсли; - СчетчикЧтоИщем = 2; - Для Счетчик = Счетчик+1 По СтрЧислоСтрок(Строка) Цикл - ОчереднаяСтрока = СокрЛП(СтрПолучитьСтроку(Строка, Счетчик)); - ЧтоИщем = СокрЛП(СтрПолучитьСтроку(Подстрока, СчетчикЧтоИщем)); - Поз = Найти(ОчереднаяСтрока, ЧтоИщем); - Если Поз = 0 Тогда - СообщениеОшибки = СтрШаблон("Не нашли подстроку № %1 <%2>", СчетчикЧтоИщем, ЧтоИщем); - Возврат Ложь; - Иначе + Нашли = Истина; + СчетчикЧтоИщем = 1;//2; + Для Счетчик = Счетчик+1 По СтрЧислоСтрок(Строка) Цикл СчетчикЧтоИщем = СчетчикЧтоИщем + 1; Если СчетчикЧтоИщем > СтрЧислоСтрок(Подстрока) Тогда Возврат Истина; КонецЕсли; + ОчереднаяСтрока = СокрЛП(СтрПолучитьСтроку(Строка, Счетчик)); + // Сообщить(" ОчереднаяСтрока + <" + ОчереднаяСтрока + ">"); + ЧтоИщем = СокрЛП(СтрПолучитьСтроку(Подстрока, СчетчикЧтоИщем)); + // Сообщить(" ЧтоИщем + <" + ЧтоИщем + ">"); + Если ПустаяСтрока(ОчереднаяСтрока) Тогда + Если Не ПустаяСтрока(ЧтоИщем) Тогда + СчетчикЧтоИщем = СчетчикЧтоИщем + 1; + КонецЕсли; + Продолжить; + КонецЕсли; + Поз = Найти(ОчереднаяСтрока, ЧтоИщем); + Если Поз = 0 Тогда + СообщениеОшибки = СтрШаблон("Не нашли подстроку № %1 <%2>", СчетчикЧтоИщем, ЧтоИщем); + Возврат Ложь; + КонецЕсли; + КонецЦикла; + Если Нашли Или СчетчикЧтоИщем > СтрЧислоСтрок(Подстрока) Тогда + Возврат Истина; КонецЕсли; + СтартоваяПозиция = Счетчик; КонецЦикла; - Возврат СчетчикЧтоИщем > СтрЧислоСтрок(Подстрока); + Возврат Ложь; КонецФункции Функция ПредставлениеЗначения() diff --git a/src/xunit-asserts.os b/src/xunit-asserts.os index ebf7d90..08c2042 100644 --- a/src/xunit-asserts.os +++ b/src/xunit-asserts.os @@ -26,6 +26,11 @@ Процедура ПроверитьРавенство(ПервоеЗначение, ВтороеЗначение, ДопСообщениеОшибки = "") Экспорт Если ПервоеЗначение <> ВтороеЗначение Тогда + Если ТипЗнч(ПервоеЗначение) = Тип("Строка") И ТипЗнч(ВтороеЗначение) = Тип("Строка") Тогда + ТекстОшибки = assertsОбщиеФункции.ИсключениеНеравенстваСтрок(ПервоеЗначение, ВтороеЗначение) + + ФорматДСО(ДопСообщениеОшибки); + ВызватьИсключение ТекстОшибки; + КонецЕсли; СообщениеОшибки = "Сравниваемые значения ("+ПервоеЗначение+"; "+ВтороеЗначение+") не равны, а хотели, чтобы были равны." + ФорматДСО(ДопСообщениеОшибки); ВызватьИсключение(СообщениеОшибки); КонецЕсли; diff --git a/tests/bdd-assertions-tests.os b/tests/bdd-assertions-tests.os index 8e3b05e..b3a4b70 100644 --- a/tests/bdd-assertions-tests.os +++ b/tests/bdd-assertions-tests.os @@ -30,13 +30,15 @@ ВсеТесты.Добавить("ТестДолжен_Проверить_Отрицание_Между"); ВсеТесты.Добавить("ТестДолжен_Проверить_Содержит"); ВсеТесты.Добавить("ТестДолжен_Проверить_Содержит_ДляМногострочныхСтрок"); + ВсеТесты.Добавить("ТестДолжен_Проверить_Содержит_ДляМногострочныхСтрок2"); + ВсеТесты.Добавить("ТестДолжен_Проверить_Содержит_ДляМногострочныхСтрок_НеНайдено"); ВсеТесты.Добавить("ТестДолжен_Проверить_Отрицание_Содержит"); ВсеТесты.Добавить("ТестДолжен_Проверить_ИмеетДлину"); ВсеТесты.Добавить("ТестДолжен_Проверить_Отрицание_ИмеетДлину"); ВсеТесты.Добавить("ТестДолжен_Проверить_КомпозитныеУтверждения"); ВсеТесты.Добавить("ТестДолжен_Проверить_КомпозитныеУтверждения_ВПеремешкуС_Отрицаниями"); ВсеТесты.Добавить("ТестДолжен_Проверить_ЧтоВыбрасываетсяИсключение"); - + Возврат ВсеТесты; КонецФункции @@ -82,7 +84,7 @@ НекоеЧисло = 9; Ожидаем.Что(НекоеЧисло).БольшеИлиРавно(5); Ожидаем.Что(НекоеЧисло).БольшеИлиРавно(9); - + Ожидаем.Что(НекоеЧисло).Минимум(1); Ожидаем.Что(НекоеЧисло).Минимум(9); КонецПроцедуры @@ -97,7 +99,7 @@ НекоеЧисло = 30; Ожидаем.Что(НекоеЧисло).МеньшеИлиРавно(32); Ожидаем.Что(НекоеЧисло).МеньшеИлиРавно(30); - + Ожидаем.Что(НекоеЧисло).Максимум(37); Ожидаем.Что(НекоеЧисло).Максимум(30); КонецПроцедуры @@ -181,20 +183,20 @@ Процедура ТестДолжен_Проверить_Содержит() Экспорт Ожидаем.Что("Некая строка", "Строка").Содержит("ока"); - + НекийМассив = Новый Массив; НекийМассив.Добавить(1); НекийМассив.Добавить(2); Ожидаем.Что(НекийМассив, "НекийМассив").Содержит(2); - + НекаяСтруктура = Новый Структура("Ключ1, Ключ2", "Значение1", "Значение2"); Ожидаем.Что(НекаяСтруктура, "НекаяСтруктура").Содержит("Значение1"); - + НекоеСоответствие = Новый Соответствие; НекоеСоответствие.Вставить(1, НекийМассив); НекоеСоответствие.Вставить(2, НекаяСтруктура); Ожидаем.Что(НекоеСоответствие, "НекоеСоответствие").Содержит(НекийМассив); - + НекийСписокЗначений = Новый СписокЗначений; НекийСписокЗначений.Добавить("знач1"); НекийСписокЗначений.Добавить("знач2"); @@ -220,9 +222,59 @@ Ожидаем.Что(Строка, "Строка").Содержит(ЧтоИщем); КонецПроцедуры +Процедура ТестДолжен_Проверить_Содержит_ДляМногострочныхСтрок2() Экспорт + Строка = "BDD for OneScript ver.1.13.0 +| Функциональность Просто функционал +| Сценарий Просто сценарий +| ПРЕДУПРЕЖДЕНИЕ - выполняется несуществующий шаг +| Не реализован +| +| +| +| Проблемные сценарии: +| Функциональность Просто функционал +| Сценарий Просто сценарий +| Шаг выполняется несуществующий шаг - Не реализован +| +| ПРЕДУПРЕЖДЕНИЕ - 1 Сценарий ( 0 Пройден, 1 Не реализован, 0 Сломался, 0 Не выполнялся ) +| ПРЕДУПРЕЖДЕНИЕ - 1 Шаг ( 0 Пройден, 1 Не реализован, 0 Сломался, 0 Не выполнялся )"; + + ЧтоИщем = "Проблемные сценарии: + |Функциональность Просто функционал + | Сценарий Просто сценарий + | Шаг выполняется несуществующий шаг - Не реализован"; + + Ожидаем.Что(Строка, "Строка").Содержит(ЧтоИщем); +КонецПроцедуры + +Процедура ТестДолжен_Проверить_Содержит_ДляМногострочныхСтрок_НеНайдено() Экспорт + Строка = "BDD for OneScript ver.1.13.0 +| Функциональность Просто функционал +| Сценарий Просто сценарий +| ПРЕДУПРЕЖДЕНИЕ - выполняется несуществующий шаг +| Не реализован +| +| +| +| Проблемные сценарии: +| Функциональность Просто функционал +| Сценарий Просто сценарий +| Шаг выполняется несуществующий шаг - Не реализован +| +| ПРЕДУПРЕЖДЕНИЕ - 1 Сценарий ( 0 Пройден, 1 Не реализован, 0 Сломался, 0 Не выполнялся ) +| ПРЕДУПРЕЖДЕНИЕ - 1 Шаг ( 0 Пройден, 1 Не реализован, 0 Сломался, 0 Не выполнялся )"; + + ЧтоИщем = "Проблемные сценарии: + |Функциональность Просто функционал + | Сценарий Просто сценарий + | Шаг несуществующий шаг - Не реализован"; + + Ожидаем.Что(Строка, "Строка").ЭтоНе().Содержит(ЧтоИщем); +КонецПроцедуры + Процедура ТестДолжен_Проверить_Отрицание_Содержит() Экспорт Ожидаем.Что("Некая строка").Не_().Содержит("!!!"); - + НекийМассив = Новый Массив; НекийМассив.Добавить(1); НекийМассив.Добавить(2); @@ -231,20 +283,20 @@ Процедура ТестДолжен_Проверить_ИмеетДлину() Экспорт Ожидаем.Что("Некая строка", "Строка").ИмеетДлину(12); - + НекийМассив = Новый Массив; НекийМассив.Добавить(1); НекийМассив.Добавить(2); Ожидаем.Что(НекийМассив, "НекийМассив").ИмеетДлину(2); - + НекаяСтруктура = Новый Структура("Ключ1, Ключ2, Ключ3", "Значение1", "Значение2"); Ожидаем.Что(НекаяСтруктура, "НекаяСтруктура").ИмеетДлину(3); - + НекоеСоответствие = Новый Соответствие; НекоеСоответствие.Вставить(1, НекийМассив); НекоеСоответствие.Вставить(2, НекаяСтруктура); Ожидаем.Что(НекоеСоответствие, "НекоеСоответствие").ИмеетДлину(2); - + НекийСписокЗначений = Новый СписокЗначений; НекийСписокЗначений.ЗагрузитьЗначения(НекийМассив); НекийСписокЗначений.Добавить("знач1"); @@ -254,7 +306,7 @@ Процедура ТестДолжен_Проверить_Отрицание_ИмеетДлину() Экспорт Ожидаем.Что("Некая строка", "Строка").Не_().ИмеетДлину(1); - + НекаяСтруктура = Новый Структура("Ключ1, Ключ2, Ключ3", "Значение1", "Значение2"); Ожидаем.Что(НекаяСтруктура, "НекаяСтруктура").Не_().ИмеетДлину(4); КонецПроцедуры @@ -276,13 +328,15 @@ КонецПроцедуры Процедура ТестДолжен_Проверить_ЧтоВыбрасываетсяИсключение() Экспорт + // ОжидаемыйТекстИсключения = "Недостаточно фактических параметров"; + ОжидаемыйТекстИсключения = "Задано неправильное имя атрибута структуры"; Контекст = Новый Структура; - Ожидаем.Что(Контекст).Метод("Вставить").ВыбрасываетИсключение("Недостаточно фактических параметров"); - + Ожидаем.Что(Контекст).Метод("Вставить").ВыбрасываетИсключение(ОжидаемыйТекстИсключения); + Массив = Новый Массив; Массив.Добавить("Ключ"); Массив.Добавить("Значение"); - - Ожидаем.Что(Контекст).Метод("Вставить", Массив).Не_().ВыбрасываетИсключение("Недостаточно фактических параметров"); - + + Ожидаем.Что(Контекст).Метод("Вставить", Массив).Не_().ВыбрасываетИсключение(ОжидаемыйТекстИсключения); + КонецПроцедуры diff --git a/tests/commons-tests.os b/tests/commons-tests.os new file mode 100644 index 0000000..0753413 --- /dev/null +++ b/tests/commons-tests.os @@ -0,0 +1,32 @@ +Перем ОбщиеФункции; + +Функция ПолучитьСписокТестов(юТест) Экспорт + + ПутьКМодулю = ОбъединитьПути(ТекущийСценарий().Каталог, "../src/asserts-commons.os"); + ОбщиеФункции = ЗагрузитьСценарий(ПутьКМодулю); + ВсеТесты = Новый Массив; + + ВсеТесты.Добавить("ТестДолжен_Проверить_ТекстОшибкиРавенстваСтрок"); + + Возврат ВсеТесты; +КонецФункции + +Процедура ТестДолжен_Проверить_ТекстОшибкиРавенстваСтрок() Экспорт + + ПерваяСтрока = "Это обычная строка"; + ВтораяСтрока = "Это обчная строка"; + + ТекстОшибки = ОбщиеФункции.ИсключениеНеравенстваСтрок(ПерваяСтрока, ВтораяСтрока); + + Эталон = "Различия в позиции 7. + |Строка 1:то обычная + | -----^ + |Строка 2:то обчная "; + + // TODO: понять, почему не подключаются ассерты + Если ТекстОшибки <> Эталон Тогда + ВызватьИсключение "Строки не равны: + |" + ТекстОшибки; + КонецЕсли; + +КонецПроцедуры \ No newline at end of file