Skip to content

Commit 81ab244

Browse files
committed
Утверждение "Содержит": добавлена более расширенная и удобная проверка многострочных строк, видно, какая именно строка начинает отличаться.
Также не учитываются начальные конечные пробелы для многострочных строк
1 parent 6f950c9 commit 81ab244

File tree

4 files changed

+335
-1
lines changed

4 files changed

+335
-1
lines changed

.vscode/settings.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
// Place your settings in this file to overwrite default and user settings.
2+
{
3+
"editor.rulers": [120]
4+
}

.vscode/tasks.json

Lines changed: 246 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,246 @@
1+
{
2+
"version": "0.1.0",
3+
"windows": {
4+
"command": "cmd",
5+
// "args": ["/c"]
6+
"args": ["/c", "chcp 65001 >nul &"]
7+
},
8+
"linux": {
9+
"command": "sh",
10+
"args": ["-c"]
11+
},
12+
"isShellCommand": true,
13+
"showOutput": "silent",
14+
"tasks": [
15+
{
16+
"taskName": "Testing project",
17+
"args": [
18+
"1testrunner",
19+
"-runall",
20+
"${workspaceRoot}/tests"
21+
],
22+
"echoCommand": true,
23+
"showOutput": "always",
24+
"suppressTaskName": true,
25+
// "isBuildCommand": false,
26+
"isTestCommand": false,
27+
"problemMatcher": {
28+
"fileLocation": "absolute",
29+
"pattern": {
30+
"regexp": "{Модуль\\s+(.+)\\s\\/\\s.*:\\s+(\\d+)\\s+\\/\\s+([^{]*)",
31+
"file": 1,
32+
"location": 2,
33+
"message": 3
34+
}
35+
}
36+
},
37+
{
38+
"taskName": "Testing current test-file",
39+
"args": [
40+
"1testrunner",
41+
"-run",
42+
"${file}"
43+
],
44+
"echoCommand": true,
45+
"showOutput": "always",
46+
"suppressTaskName": true,
47+
"isBuildCommand": false,
48+
"isTestCommand": true,
49+
"problemMatcher": {
50+
"fileLocation": "absolute",
51+
"pattern": {
52+
"regexp": "{Модуль\\s+(.+)\\s\\/\\s.*:\\s+(\\d+)\\s+\\/\\s+([^{]*)",
53+
"file": 1,
54+
"location": 2,
55+
"message": 3
56+
}
57+
}
58+
},
59+
{
60+
"taskName": "Exec all features",
61+
"args": [
62+
"1bdd",
63+
"${workspaceRoot}/features",
64+
"-out",
65+
"${workspaceRoot}/exec.log"
66+
],
67+
"echoCommand": true,
68+
"showOutput": "always",
69+
"suppressTaskName": true,
70+
"isBuildCommand": true,
71+
"isTestCommand": false,
72+
"problemMatcher": {
73+
"fileLocation": "absolute",
74+
"pattern": {
75+
"regexp": "{Модуль\\s+(.+)\\s\\/\\s.*:\\s+(\\d+)\\s+\\/\\s+([^{]*)",
76+
"file": 1,
77+
"location": 2,
78+
"message": 3
79+
}
80+
}
81+
},
82+
{
83+
"taskName": "Exec feature",
84+
"args": [
85+
"1bdd",
86+
"${file}",
87+
"-fail-fast",
88+
"-out",
89+
"${workspaceRoot}/exec.log"
90+
],
91+
"echoCommand": true,
92+
"showOutput": "always",
93+
"suppressTaskName": true,
94+
"isBuildCommand": false,
95+
"isTestCommand": true,
96+
"problemMatcher": {
97+
"fileLocation": "absolute",
98+
"pattern": [
99+
{
100+
"regexp": "{Модуль\\s+(.+)\\s\\/\\s.*:\\s+(\\d+)\\s+\\/\\s+([^{]*)",
101+
"file": 1,
102+
"location": 2,
103+
"message": 3
104+
}
105+
]
106+
}
107+
},
108+
{
109+
"taskName": "Exec feature for current step def",
110+
"args": [
111+
"1bdd",
112+
"${fileDirname}/../${fileBasenameNoExtension}.feature",
113+
"-fail-fast",
114+
"-out",
115+
"${workspaceRoot}/exec.log"
116+
],
117+
"echoCommand": true,
118+
"showOutput": "always",
119+
"suppressTaskName": true,
120+
"isBuildCommand": false,
121+
"isTestCommand": true,
122+
"problemMatcher": {
123+
"fileLocation": "absolute",
124+
"pattern": [
125+
{
126+
"regexp": "{Модуль\\s+(.+)\\s\\/\\s.*:\\s+(\\d+)\\s+\\/\\s+([^{]*)",
127+
"file": 1,
128+
"location": 2,
129+
"message": 3
130+
}
131+
]
132+
}
133+
},
134+
{
135+
"taskName": "Exec feature + debug",
136+
"args": [
137+
"1bdd",
138+
"${file}",
139+
"-fail-fast",
140+
"-verbose",
141+
"on",
142+
"-out",
143+
"${workspaceRoot}/exec.log"
144+
],
145+
"echoCommand": true,
146+
"showOutput": "always",
147+
"suppressTaskName": true,
148+
// "isBuildCommand": false,
149+
"isTestCommand": false,
150+
"problemMatcher": {
151+
"fileLocation": "absolute",
152+
"pattern": {
153+
"regexp": "{Модуль\\s+(.+)\\s\\/\\s.*:\\s+(\\d+)\\s+\\/\\s+([^{]*)",
154+
"file": 1,
155+
"location": 2,
156+
"message": 3
157+
}
158+
}
159+
},
160+
{
161+
"taskName": "Generate feature steps",
162+
"args": [
163+
"1bdd",
164+
"gen",
165+
"${file}",
166+
"-out",
167+
"${workspaceRoot}/exec.log"
168+
],
169+
"echoCommand": true,
170+
"showOutput": "always",
171+
"suppressTaskName": true,
172+
"isBuildCommand": false,
173+
"isTestCommand": false,
174+
"problemMatcher": {
175+
"fileLocation": "absolute",
176+
"pattern": {
177+
"regexp": "{Модуль\\s+(.+)\\s\\/\\s.*:\\s+(\\d+)\\s+\\/\\s+([^{]*)",
178+
"file": 1,
179+
"location": 2,
180+
"message": 3
181+
}
182+
}
183+
},
184+
{
185+
"taskName": "OneScript: compile",
186+
"args": [
187+
"oscript",
188+
"-encoding=utf-8",
189+
"-compile",
190+
"${file}"
191+
],
192+
"echoCommand": true,
193+
"showOutput": "always",
194+
"suppressTaskName": true,
195+
"isBuildCommand": false
196+
},
197+
{
198+
"taskName": "OneScript: check",
199+
"args": [
200+
"oscript",
201+
"-encoding=utf-8",
202+
"-check",
203+
"${file}"
204+
],
205+
"echoCommand": true,
206+
"showOutput": "always",
207+
"suppressTaskName": true,
208+
"isBuildCommand": false
209+
},
210+
{
211+
"taskName": "OneScript: make",
212+
"args": [
213+
"oscript",
214+
"-encoding=utf-8",
215+
"-make",
216+
"${file}",
217+
"${fileBasename}.exe"
218+
],
219+
"echoCommand": true,
220+
"showOutput": "always",
221+
"suppressTaskName": true,
222+
"isBuildCommand": false
223+
},
224+
{
225+
"taskName": "OneScript: run",
226+
"args": [
227+
"oscript",
228+
"-encoding=utf-8",
229+
"${file}"
230+
],
231+
"echoCommand": true,
232+
"showOutput": "always",
233+
"suppressTaskName": true,
234+
"isBuildCommand": true,
235+
"problemMatcher": {
236+
"fileLocation": "absolute",
237+
"pattern": {
238+
"regexp": "^{Модуль\\s+(.*)\\s\\/\\s.*:\\s+(\\d+)\\s+\\/\\s+(.*)}$",
239+
"file": 1,
240+
"location": 2,
241+
"message": 3
242+
}
243+
}
244+
}
245+
]
246+
}

src/bdd-asserts.os

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,13 @@
187187

188188
ТипПроверяемоегоЗначения = ТипЗнч(ПроверяемоеЗначение);
189189
Если ТипПроверяемоегоЗначения = Тип("Строка") Тогда
190-
ИскомоеЗначениеНайдено = Найти(ПроверяемоеЗначение, ИскомоеЗначение) > 0;
190+
Если СтрЧислоСтрок(ИскомоеЗначение) = 1 Тогда
191+
ИскомоеЗначениеНайдено = Найти(ПроверяемоеЗначение, ИскомоеЗначение) > 0;
192+
Иначе
193+
ПроверитьЧтоМногострочнаяСтрокаСодержитПодстрокуБезУчетаНачальныхКонечныхПробеловВПодстроках(ПроверяемоеЗначение, ИскомоеЗначение, ФорматДСО(ДопСообщениеОшибки));
194+
ИскомоеЗначениеНайдено = Истина;
195+
КонецЕсли;
196+
191197
ИначеЕсли ТипПроверяемоегоЗначения = Тип("Массив") Тогда
192198
ИскомоеЗначениеНайдено = ПроверяемоеЗначение.Найти(ИскомоеЗначение) <> Неопределено;
193199
ИначеЕсли ТипПроверяемоегоЗначения = Тип("Структура")
@@ -290,6 +296,64 @@
290296
Функция СформироватьСообщениеОбОшибке(Знач ПроверяемоеЗначение, Знач Ожидание)
291297
Возврат "Ожидали, что проверяемое значение (" + ПроверяемоеЗначение + ")" + ?(ФлагОтрицанияДляСообщения, " НЕ ", " ") + Ожидание + ФорматДСО(ДопСообщениеОшибки);
292298
КонецФункции
299+
300+
// Процедура ЕстьПодстрока(Знач Строка, Знач ПроверяемаяСтрока)
301+
// Если СтрЧислоСтрок(ПроверяемаяСтрока) = 1 Тогда
302+
// ЭтотОбъект.Что(Строка, "Проверяем одиночную строку").Содержит(ПроверяемаяСтрока);
303+
// Иначе
304+
// ПроверитьЧтоМногострочнаяСтрокаСодержитПодстрокуБезУчетаНачальныхКонечныхПробеловВПодстроках(Строка, ПроверяемаяСтрока);
305+
// КонецЕсли;
306+
// КонецПроцедуры
307+
308+
Процедура ПроверитьЧтоМногострочнаяСтрокаСодержитПодстрокуБезУчетаНачальныхКонечныхПробеловВПодстроках(Знач Строка, Знач Подстрока, ДопСообщениеОшибки = "")
309+
СообщениеОшибки = "";
310+
Нашли = МногострочнаяСтрокаСодержитПодстрокуБезУчетаНачальныхКонечныхПробеловВПодстроках(Строка, Подстрока, СообщениеОшибки);
311+
Если Не Нашли Тогда
312+
ВызватьОшибкуПроверки( СтрШаблон("Ожидали, что в строке <
313+
|%1
314+
|>
315+
|найдем подстроку<
316+
|%2
317+
|>
318+
|А это не так.
319+
|Уточнение: %3.
320+
|%4", Строка, Подстрока, СообщениеОшибки, ДопСообщениеОшибки));
321+
КонецЕсли;
322+
КонецПроцедуры
323+
324+
Функция МногострочнаяСтрокаСодержитПодстрокуБезУчетаНачальныхКонечныхПробеловВПодстроках(Знач Строка, Знач Подстрока, СообщениеОшибки = "")
325+
ПерваяСтрока = СокрЛП(СтрПолучитьСтроку(Подстрока, 1));
326+
НашлиПервуюСтроку = Ложь;
327+
Для Счетчик = 1 По СтрЧислоСтрок(Строка) Цикл
328+
ОчереднаяСтрока = СокрЛП(СтрПолучитьСтроку(Строка, Счетчик));
329+
НашлиПервуюСтроку = Найти(ОчереднаяСтрока, ПерваяСтрока) <> 0;
330+
Если НашлиПервуюСтроку Тогда
331+
Прервать;
332+
КонецЕсли;
333+
КонецЦикла;
334+
Если Не НашлиПервуюСтроку Тогда
335+
СообщениеОшибки = СтрШаблон("Не нашли первую же подстроку <%1>", ПерваяСтрока);
336+
Возврат Ложь;
337+
КонецЕсли;
338+
339+
СчетчикЧтоИщем = 2;
340+
Для Счетчик = Счетчик+1 По СтрЧислоСтрок(Строка) Цикл
341+
ОчереднаяСтрока = СокрЛП(СтрПолучитьСтроку(Строка, Счетчик));
342+
ЧтоИщем = СокрЛП(СтрПолучитьСтроку(Подстрока, СчетчикЧтоИщем));
343+
Поз = Найти(ОчереднаяСтрока, ЧтоИщем);
344+
Если Поз = 0 Тогда
345+
СообщениеОшибки = СтрШаблон("Не нашли подстроку № %1 <%2>", СчетчикЧтоИщем, ЧтоИщем);
346+
Возврат Ложь;
347+
Иначе
348+
СчетчикЧтоИщем = СчетчикЧтоИщем + 1;
349+
Если СчетчикЧтоИщем > СтрЧислоСтрок(Подстрока) Тогда
350+
Возврат Истина;
351+
КонецЕсли;
352+
КонецЕсли;
353+
КонецЦикла;
354+
Возврат СчетчикЧтоИщем > СтрЧислоСтрок(Подстрока);
355+
КонецФункции
356+
293357
// } Helpers
294358

295359
СтатусыРезультатаТестирования = Новый Структура;

tests/bdd-assertions-tests.os

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
ВсеТесты.Добавить("ТестДолжен_Проверить_Между");
3030
ВсеТесты.Добавить("ТестДолжен_Проверить_Отрицание_Между");
3131
ВсеТесты.Добавить("ТестДолжен_Проверить_Содержит");
32+
ВсеТесты.Добавить("ТестДолжен_Проверить_Содержит_ДляМногострочныхСтрок");
3233
ВсеТесты.Добавить("ТестДолжен_Проверить_Отрицание_Содержит");
3334
ВсеТесты.Добавить("ТестДолжен_Проверить_ИмеетДлину");
3435
ВсеТесты.Добавить("ТестДолжен_Проверить_Отрицание_ИмеетДлину");
@@ -200,6 +201,25 @@
200201
Ожидаем.Что(НекийСписокЗначений, "НекийСписокЗначений").Содержит("знач1");
201202
КонецПроцедуры
202203

204+
Процедура ТестДолжен_Проверить_Содержит_ДляМногострочныхСтрок() Экспорт
205+
Строка = "<?xml version=""1.0"" encoding=""utf-8""?>
206+
|<testsuites name=""1bdd"" time=""0"" tests=""1"" failures=""0"" skipped=""1"">
207+
| <testsuite name=""Выполнение фич"">
208+
| <properties />
209+
| <testcase classname=""После нереализованного шага следующие шаги сценария не выполняются"" name=""я запускаю нереализованный шаг"" status=""skipped"" />
210+
| </testsuite>
211+
|</testsuites>";
212+
213+
ЧтоИщем = "<testsuites name=""1bdd"" time=""0"" tests=""1"" failures=""0"" skipped=""1"">
214+
| <testsuite name=""Выполнение фич"">
215+
| <properties />
216+
| <testcase classname=""После нереализованного шага следующие шаги сценария не выполняются"" name=""я запускаю нереализованный шаг"" status=""skipped"" />
217+
| </testsuite>
218+
|</testsuites>";
219+
220+
Ожидаем.Что(Строка, "Строка").Содержит(ЧтоИщем);
221+
КонецПроцедуры
222+
203223
Процедура ТестДолжен_Проверить_Отрицание_Содержит() Экспорт
204224
Ожидаем.Что("Некая строка").Не_().Содержит("!!!");
205225

0 commit comments

Comments
 (0)