From 89f6da50061ea6104d57e9ae9fa49552a2d5d774 Mon Sep 17 00:00:00 2001 From: Dani Megert Date: Thu, 2 Nov 2006 08:48:21 +0000 Subject: Fixed bug 163116: [implementation] Potential for infinite loop in WordRule --- .../jface/text/tests/rules/RulesTestSuite.java | 9 ++-- .../jface/text/tests/rules/WordRuleTest.java | 58 ++++++++++++++++++++++ 2 files changed, 63 insertions(+), 4 deletions(-) create mode 100644 org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/rules/WordRuleTest.java (limited to 'org.eclipse.jface.text.tests/src') diff --git a/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/rules/RulesTestSuite.java b/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/rules/RulesTestSuite.java index 959baee12e6..9ea7558c544 100644 --- a/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/rules/RulesTestSuite.java +++ b/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/rules/RulesTestSuite.java @@ -14,7 +14,6 @@ package org.eclipse.jface.text.tests.rules; import junit.framework.Test; import junit.framework.TestSuite; - /** * * @since 3.0 @@ -22,12 +21,14 @@ import junit.framework.TestSuite; public class RulesTestSuite { public static Test suite() { - TestSuite suite= new TestSuite("Test Suite org.eclipse.jface.text.tests.rules"); - //$JUnit-BEGIN$ + TestSuite suite= new TestSuite( + "Test Suite org.eclipse.jface.text.tests.rules"); + // $JUnit-BEGIN$ suite.addTestSuite(FastPartitionerTest.class); suite.addTestSuite(DefaultPartitionerTest.class); suite.addTestSuite(DefaultPartitionerZeroLengthTest.class); - //$JUnit-END$ + suite.addTestSuite(WordRuleTest.class); + // $JUnit-END$ return suite; } } diff --git a/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/rules/WordRuleTest.java b/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/rules/WordRuleTest.java new file mode 100644 index 00000000000..94fcbec72a9 --- /dev/null +++ b/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/rules/WordRuleTest.java @@ -0,0 +1,58 @@ +/******************************************************************************* + * Copyright (c) 2005, 2006 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 + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.jface.text.tests.rules; + +import junit.framework.TestCase; + +import org.eclipse.jface.text.Document; +import org.eclipse.jface.text.rules.IRule; +import org.eclipse.jface.text.rules.IToken; +import org.eclipse.jface.text.rules.IWordDetector; +import org.eclipse.jface.text.rules.RuleBasedScanner; +import org.eclipse.jface.text.rules.Token; +import org.eclipse.jface.text.rules.WordRule; + +/** + * @since 3.3 + */ +public class WordRuleTest extends TestCase { + + /* + * https://bugs.eclipse.org/bugs/show_bug.cgi?id=163116 + */ + public void testBug163116() throws Exception { + IWordDetector detector= new IWordDetector() { + + public boolean isWordPart(char c) { + return true; + } + + public boolean isWordStart(char c) { + return true; + } + + }; + + WordRule rule= new WordRule(detector, new Token(this)); + + RuleBasedScanner scanner= new RuleBasedScanner(); + scanner.setRules(new IRule[] { rule }); + scanner.setRange(new Document(), 0, 0); + + IToken token= null; + int i= 0; + while (token != Token.EOF && i++ < 1000) + token= scanner.nextToken(); + + assertTrue(i < 1000); + + } +} -- cgit v1.2.3