Changeset View
Changeset View
Standalone View
Standalone View
autotests/src/regexpsearch_test.cpp
Show All 18 Lines | |||||
19 | 19 | | |||
20 | #include "regexpsearch_test.h" | 20 | #include "regexpsearch_test.h" | ||
21 | #include "moc_regexpsearch_test.cpp" | 21 | #include "moc_regexpsearch_test.cpp" | ||
22 | 22 | | |||
23 | #include <katedocument.h> | 23 | #include <katedocument.h> | ||
24 | #include <kateglobal.h> | 24 | #include <kateglobal.h> | ||
25 | #include <kateregexpsearch.h> | 25 | #include <kateregexpsearch.h> | ||
26 | 26 | | |||
27 | #include <QRegularExpression> | ||||
28 | | ||||
27 | #include <QtTestWidgets> | 29 | #include <QtTestWidgets> | ||
28 | 30 | | |||
29 | QTEST_MAIN(RegExpSearchTest) | 31 | QTEST_MAIN(RegExpSearchTest) | ||
30 | 32 | | |||
31 | #define testNewRow() (QTest::newRow(QString("line %1").arg(__LINE__).toLatin1().data())) | 33 | #define testNewRow() (QTest::newRow(QString("line %1").arg(__LINE__).toLatin1().data())) | ||
32 | 34 | | |||
33 | using namespace KTextEditor; | 35 | using namespace KTextEditor; | ||
34 | 36 | | |||
▲ Show 20 Lines • Show All 188 Lines • ▼ Show 20 Line(s) | 212 | { | |||
223 | testNewRow() << "^fe" << Range(0, 0, 0, 2) << true << Range(0, 0, 0, 2); | 225 | testNewRow() << "^fe" << Range(0, 0, 0, 2) << true << Range(0, 0, 0, 2); | ||
224 | testNewRow() << "^fe" << Range(0, 0, 0, 1) << true << Range::invalid(); | 226 | testNewRow() << "^fe" << Range(0, 0, 0, 1) << true << Range::invalid(); | ||
225 | testNewRow() << "^fe" << Range(0, 0, 0, 2) << true << Range(0, 0, 0, 2); | 227 | testNewRow() << "^fe" << Range(0, 0, 0, 2) << true << Range(0, 0, 0, 2); | ||
226 | testNewRow() << "^fe" << Range(0, 3, 0, 8) << true << Range::invalid(); | 228 | testNewRow() << "^fe" << Range(0, 3, 0, 8) << true << Range::invalid(); | ||
227 | 229 | | |||
228 | testNewRow() << "fe$" << Range(0, 0, 0, 8) << false << Range(0, 6, 0, 8); | 230 | testNewRow() << "fe$" << Range(0, 0, 0, 8) << false << Range(0, 6, 0, 8); | ||
229 | testNewRow() << "fe$" << Range(0, 7, 0, 8) << false << Range::invalid(); | 231 | testNewRow() << "fe$" << Range(0, 7, 0, 8) << false << Range::invalid(); | ||
230 | testNewRow() << "fe$" << Range(0, 6, 0, 8) << false << Range(0, 6, 0, 8); | 232 | testNewRow() << "fe$" << Range(0, 6, 0, 8) << false << Range(0, 6, 0, 8); | ||
231 | // testNewRow() << "fe$" << Range(0, 0, 0, 5) << false << Range::invalid(); // only match at line end, fails | 233 | testNewRow() << "fe$" << Range(0, 0, 0, 5) << false << Range::invalid(); // only match at line end, fails | ||
232 | testNewRow() << "fe$" << Range(0, 0, 0, 8) << true << Range(0, 6, 0, 8); | 234 | testNewRow() << "fe$" << Range(0, 0, 0, 8) << true << Range(0, 6, 0, 8); | ||
233 | testNewRow() << "fe$" << Range(0, 7, 0, 8) << true << Range::invalid(); | 235 | testNewRow() << "fe$" << Range(0, 7, 0, 8) << true << Range::invalid(); | ||
234 | testNewRow() << "fe$" << Range(0, 6, 0, 8) << true << Range(0, 6, 0, 8); | 236 | testNewRow() << "fe$" << Range(0, 6, 0, 8) << true << Range(0, 6, 0, 8); | ||
235 | // testNewRow() << "fe$" << Range(0, 0, 0, 5) << true << Range::invalid(); // fails due to $-shortcoming in QRegExp | 237 | testNewRow() << "fe$" << Range(0, 0, 0, 5) << true << Range::invalid(); | ||
236 | 238 | | |||
237 | testNewRow() << "^fe fe fe$" << Range(0, 0, 0, 8) << false << Range(0, 0, 0, 8); | 239 | testNewRow() << "^fe fe fe$" << Range(0, 0, 0, 8) << false << Range(0, 0, 0, 8); | ||
238 | testNewRow() << "^fe fe fe$" << Range(0, 3, 0, 8) << false << Range::invalid(); | 240 | testNewRow() << "^fe fe fe$" << Range(0, 3, 0, 8) << false << Range::invalid(); | ||
239 | testNewRow() << "^fe fe fe$" << Range(0, 0, 0, 5) << false << Range::invalid(); | 241 | testNewRow() << "^fe fe fe$" << Range(0, 0, 0, 5) << false << Range::invalid(); | ||
240 | testNewRow() << "^fe fe fe$" << Range(0, 3, 0, 5) << false << Range::invalid(); | 242 | testNewRow() << "^fe fe fe$" << Range(0, 3, 0, 5) << false << Range::invalid(); | ||
241 | testNewRow() << "^fe fe fe$" << Range(0, 0, 0, 8) << true << Range(0, 0, 0, 8); | 243 | testNewRow() << "^fe fe fe$" << Range(0, 0, 0, 8) << true << Range(0, 0, 0, 8); | ||
242 | testNewRow() << "^fe fe fe$" << Range(0, 3, 0, 8) << true << Range::invalid(); | 244 | testNewRow() << "^fe fe fe$" << Range(0, 3, 0, 8) << true << Range::invalid(); | ||
243 | testNewRow() << "^fe fe fe$" << Range(0, 0, 0, 5) << true << Range::invalid(); | 245 | testNewRow() << "^fe fe fe$" << Range(0, 0, 0, 5) << true << Range::invalid(); | ||
244 | testNewRow() << "^fe fe fe$" << Range(0, 3, 0, 5) << true << Range::invalid(); | 246 | testNewRow() << "^fe fe fe$" << Range(0, 3, 0, 5) << true << Range::invalid(); | ||
245 | 247 | | |||
246 | testNewRow() << "^fe( fe)*$" << Range(0, 0, 0, 8) << false << Range(0, 0, 0, 8); | 248 | testNewRow() << "^fe( fe)*$" << Range(0, 0, 0, 8) << false << Range(0, 0, 0, 8); | ||
247 | testNewRow() << "^fe( fe)*" << Range(0, 0, 0, 8) << false << Range(0, 0, 0, 8); | 249 | testNewRow() << "^fe( fe)*" << Range(0, 0, 0, 8) << false << Range(0, 0, 0, 8); | ||
248 | testNewRow() << "fe( fe)*$" << Range(0, 0, 0, 8) << false << Range(0, 0, 0, 8); | 250 | testNewRow() << "fe( fe)*$" << Range(0, 0, 0, 8) << false << Range(0, 0, 0, 8); | ||
249 | testNewRow() << "fe( fe)*" << Range(0, 0, 0, 8) << false << Range(0, 0, 0, 8); | 251 | testNewRow() << "fe( fe)*" << Range(0, 0, 0, 8) << false << Range(0, 0, 0, 8); | ||
250 | testNewRow() << "^fe( fe)*$" << Range(0, 3, 0, 8) << false << Range::invalid(); | 252 | testNewRow() << "^fe( fe)*$" << Range(0, 3, 0, 8) << false << Range::invalid(); | ||
251 | testNewRow() << "fe( fe)*$" << Range(0, 3, 0, 8) << false << Range(0, 3, 0, 8); | 253 | testNewRow() << "fe( fe)*$" << Range(0, 3, 0, 8) << false << Range(0, 3, 0, 8); | ||
252 | // testNewRow() << "^fe( fe)*$" << Range(0, 0, 0, 5) << false << Range::invalid(); // fails due to $-shortcoming in QRegExp | 254 | testNewRow() << "^fe( fe)*$" << Range(0, 0, 0, 5) << false << Range::invalid(); | ||
253 | testNewRow() << "^fe( fe)*" << Range(0, 0, 0, 5) << false << Range(0, 0, 0, 5); | 255 | // fails because the whole line is fed to QRegularExpression, then matches | ||
256 | // that end beyond the search range are rejected, see KateRegExpSearch::searchText() | ||||
257 | // testNewRow() << "^fe( fe)*" << Range(0, 0, 0, 5) << false << Range(0, 0, 0, 5); | ||||
258 | | ||||
254 | testNewRow() << "^fe( fe)*$" << Range(0, 0, 0, 8) << true << Range(0, 0, 0, 8); | 259 | testNewRow() << "^fe( fe)*$" << Range(0, 0, 0, 8) << true << Range(0, 0, 0, 8); | ||
255 | testNewRow() << "^fe( fe)*" << Range(0, 0, 0, 8) << true << Range(0, 0, 0, 8); | 260 | testNewRow() << "^fe( fe)*" << Range(0, 0, 0, 8) << true << Range(0, 0, 0, 8); | ||
256 | // testNewRow() << "fe( fe)*$" << Range(0, 0, 0, 8) << true << Range(0, 0, 0, 8); // fails, shouldn't matching be greedy? | 261 | testNewRow() << "fe( fe)*$" << Range(0, 0, 0, 8) << true << Range(0, 0, 0, 8); | ||
257 | // testNewRow() << "fe( fe)*" << Range(0, 0, 0, 8) << true << Range(0, 0, 0, 8); // fails, shouldn't matching be greedy? | 262 | testNewRow() << "fe( fe)*" << Range(0, 0, 0, 8) << true << Range(0, 0, 0, 8); | ||
258 | testNewRow() << "^fe( fe)*$" << Range(0, 3, 0, 8) << true << Range::invalid(); | 263 | testNewRow() << "^fe( fe)*$" << Range(0, 3, 0, 8) << true << Range::invalid(); | ||
259 | // testNewRow() << "fe( fe)*$" << Range(0, 3, 0, 8) << true << Range(0, 3, 0, 8); // fails, shouldn't matching be greedy? | 264 | testNewRow() << "fe( fe)*$" << Range(0, 3, 0, 8) << true << Range(0, 3, 0, 8); | ||
260 | // testNewRow() << "^fe( fe)*$" << Range(0, 0, 0, 5) << true << Range::invalid(); // fails due to $-shortcoming in QRegExp | 265 | testNewRow() << "^fe( fe)*$" << Range(0, 0, 0, 5) << true << Range::invalid(); | ||
261 | 266 | | |||
262 | testNewRow() << "^fe|fe$" << Range(0, 0, 0, 5) << false << Range(0, 0, 0, 2); | 267 | testNewRow() << "^fe|fe$" << Range(0, 0, 0, 5) << false << Range(0, 0, 0, 2); | ||
263 | testNewRow() << "^fe|fe$" << Range(0, 3, 0, 8) << false << Range(0, 6, 0, 8); | 268 | testNewRow() << "^fe|fe$" << Range(0, 3, 0, 8) << false << Range(0, 6, 0, 8); | ||
264 | // testNewRow() << "^fe|fe$" << Range(0, 0, 0, 5) << true << Range(0, 0, 0, 2); // fails due to $-shortcoming in QRegExp | 269 | testNewRow() << "^fe|fe$" << Range(0, 0, 0, 5) << true << Range(0, 0, 0, 2); | ||
265 | testNewRow() << "^fe|fe$" << Range(0, 3, 0, 8) << true << Range(0, 6, 0, 8); | 270 | testNewRow() << "^fe|fe$" << Range(0, 3, 0, 8) << true << Range(0, 6, 0, 8); | ||
266 | } | 271 | } | ||
267 | 272 | | |||
268 | void RegExpSearchTest::testAnchoredRegexp() | 273 | void RegExpSearchTest::testAnchoredRegexp() | ||
269 | { | 274 | { | ||
270 | QFETCH(QString, pattern); | 275 | QFETCH(QString, pattern); | ||
271 | QFETCH(Range, inputRange); | 276 | QFETCH(Range, inputRange); | ||
272 | QFETCH(bool, backwards); | 277 | QFETCH(bool, backwards); | ||
273 | QFETCH(Range, expected); | 278 | QFETCH(Range, expected); | ||
274 | 279 | | |||
275 | KTextEditor::DocumentPrivate doc; | 280 | KTextEditor::DocumentPrivate doc; | ||
276 | doc.setText("fe fe fe"); | 281 | doc.setText("fe fe fe"); | ||
277 | 282 | | |||
278 | KateRegExpSearch searcher(&doc, Qt::CaseInsensitive); | 283 | KateRegExpSearch searcher(&doc); | ||
279 | 284 | | |||
280 | static int i = 0; | 285 | static int i = 0; | ||
281 | if (i == 34 || i == 36) { | 286 | if (i == 34 || i == 36) { | ||
282 | qDebug() << i; | 287 | qDebug() << i; | ||
283 | } | 288 | } | ||
284 | i++; | 289 | i++; | ||
285 | 290 | | |||
286 | const Range result = searcher.search(pattern, inputRange, backwards)[0]; | 291 | const Range result = searcher.search(pattern, inputRange, backwards, QRegularExpression::CaseInsensitiveOption)[0]; | ||
287 | 292 | | |||
288 | QCOMPARE(result, expected); | 293 | QCOMPARE(result, expected); | ||
289 | } | 294 | } | ||
290 | 295 | | |||
291 | void RegExpSearchTest::testSearchForward() | 296 | void RegExpSearchTest::testSearchForward() | ||
292 | { | 297 | { | ||
293 | KTextEditor::DocumentPrivate doc; | 298 | KTextEditor::DocumentPrivate doc; | ||
294 | doc.setText(" \\piinfercong"); | 299 | doc.setText(" \\piinfercong"); | ||
295 | 300 | | |||
296 | KateRegExpSearch search(&doc, Qt::CaseSensitive); | 301 | KateRegExpSearch searcher(&doc); | ||
297 | const Range result = search.search("\\\\piinfer(\\w)", Range(0, 2, 0, 15))[0]; | 302 | const Range result = searcher.search("\\\\piinfer(\\w)", Range(0, 2, 0, 15), false)[0]; | ||
298 | 303 | | |||
299 | QCOMPARE(result, Range(0, 2, 0, 11)); | 304 | QCOMPARE(result, Range(0, 2, 0, 11)); | ||
300 | } | 305 | } | ||
301 | 306 | | |||
302 | void RegExpSearchTest::testSearchBackwardInSelection() | 307 | void RegExpSearchTest::testSearchBackwardInSelection() | ||
303 | { | 308 | { | ||
304 | KTextEditor::DocumentPrivate doc; | 309 | KTextEditor::DocumentPrivate doc; | ||
305 | doc.setText("foobar foo bar foo bar foo"); | 310 | doc.setText("foobar foo bar foo bar foo"); | ||
306 | 311 | | |||
307 | KateRegExpSearch search(&doc, Qt::CaseSensitive); | 312 | KateRegExpSearch searcher(&doc); | ||
308 | const Range result = search.search("foo", Range(0, 0, 0, 15), true)[0]; | 313 | const Range result = searcher.search("foo", Range(0, 0, 0, 15), true)[0]; | ||
309 | 314 | | |||
310 | QCOMPARE(result, Range(0, 7, 0, 10)); | 315 | QCOMPARE(result, Range(0, 7, 0, 10)); | ||
311 | } | 316 | } | ||
312 | 317 | | |||
313 | void RegExpSearchTest::test() | 318 | void RegExpSearchTest::test() | ||
314 | { | 319 | { | ||
315 | KTextEditor::DocumentPrivate doc; | 320 | KTextEditor::DocumentPrivate doc; | ||
316 | doc.setText("\\newcommand{\\piReductionOut}"); | 321 | doc.setText("\\newcommand{\\piReductionOut}"); | ||
317 | 322 | | |||
318 | KateRegExpSearch search(&doc, Qt::CaseSensitive); | 323 | KateRegExpSearch searcher(&doc); | ||
319 | const QVector<Range> result = search.search("\\\\piReduction(\\S)", Range(0, 10, 0, 28), true); | 324 | const QVector<Range> result = searcher.search("\\\\piReduction(\\S)", Range(0, 10, 0, 28), true); | ||
320 | 325 | | |||
321 | QCOMPARE(result.size(), 2); | 326 | QCOMPARE(result.size(), 2); | ||
322 | QCOMPARE(result[0], Range(0, 12, 0, 25)); | 327 | QCOMPARE(result[0], Range(0, 12, 0, 25)); | ||
323 | QCOMPARE(result[1], Range(0, 24, 0, 25)); | 328 | QCOMPARE(result[1], Range(0, 24, 0, 25)); | ||
324 | QCOMPARE(doc.text(result[0]), QString("\\piReductionO")); | 329 | QCOMPARE(doc.text(result[0]), QString("\\piReductionO")); | ||
325 | QCOMPARE(doc.text(result[1]), QString("O")); | 330 | QCOMPARE(doc.text(result[1]), QString("O")); | ||
326 | } | 331 | } |