diff options
Diffstat (limited to 'org.eclipse.text.tests/src/org/eclipse/text/tests/FindReplaceDocumentAdapterTest.java')
-rw-r--r-- | org.eclipse.text.tests/src/org/eclipse/text/tests/FindReplaceDocumentAdapterTest.java | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/org.eclipse.text.tests/src/org/eclipse/text/tests/FindReplaceDocumentAdapterTest.java b/org.eclipse.text.tests/src/org/eclipse/text/tests/FindReplaceDocumentAdapterTest.java index 01e6ad5e1e4..a51c2b55c4c 100644 --- a/org.eclipse.text.tests/src/org/eclipse/text/tests/FindReplaceDocumentAdapterTest.java +++ b/org.eclipse.text.tests/src/org/eclipse/text/tests/FindReplaceDocumentAdapterTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2013 IBM Corporation and others. + * Copyright (c) 2000, 2017 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -9,6 +9,7 @@ * IBM Corporation - initial API and implementation * Cagatay Calli <ccalli@gmail.com> - [find/replace] retain caps when replacing - https://bugs.eclipse.org/bugs/show_bug.cgi?id=28949 * Cagatay Calli <ccalli@gmail.com> - [find/replace] define & fix behavior of retain caps with other escapes and text before \C - https://bugs.eclipse.org/bugs/show_bug.cgi?id=217061 + * Florian Ingerl <imelflorianingerl@gmail.com> - [find/replace] replace doesn't work when using a regex with a lookahead or boundary matchers - https://bugs.eclipse.org/bugs/show_bug.cgi?id=109481 *******************************************************************************/ package org.eclipse.text.tests; @@ -500,4 +501,27 @@ public class FindReplaceDocumentAdapterTest { } fail(); } + + @Test + public void testRegexReplaceWithLookarounds() throws Exception { + fDocument.set("1<2<3<4"); + replaceAllRegex("(?<=(\\d))\\<(\\d)(?=\\<(\\d))", "<($1+$3)/2=$2", true); + assertEquals("1<(1+3)/2=2<(2+4)/2=3<4", fDocument.get()); + + fDocument.set("1<2<3<4"); + replaceAllRegex("(?<=(\\d)\\<)(\\d)\\<(?=(\\d))", "$2=($1+$3)/2<", false); + assertEquals("1<2=(1+3)/2<3=(2+4)/2<4", fDocument.get()); + } + + private void replaceAllRegex(String findString, String replaceString, boolean forwardSearch) throws BadLocationException { + FindReplaceDocumentAdapter findReplaceDocumentAdapter= new FindReplaceDocumentAdapter(fDocument); + + int index= forwardSearch ? 0 : fDocument.getLength(); + while(index!=-1) { + if(findReplaceDocumentAdapter.find(index, findString, forwardSearch, true, false, true)==null) + break; + IRegion region= findReplaceDocumentAdapter.replace(replaceString, true); + index= forwardSearch ? region.getOffset() + region.getLength() : region.getOffset() - 1; + } + } } |