fitnesse
fitnesse copied to clipboard
Where Used wikiWord="" leads to Exception
Hi,
the "Where used" Function may lead to the folowing Exception. Reason for this is an empty ("") wikiWord.
The method expandPrefix in fitnesse.wiki.WikiWordReference.java should be changed to something like:
public static String expandPrefix(WikiPage wikiPage, String theWord) { if(!theWord.equals("")) { if (theWord.charAt(0) == '^' || theWord.charAt(0) == '>') { String prefix = wikiPage.getName(); return String.format("%s.%s", prefix, theWord.substring(1)); } else if (theWord.charAt(0) == '<') { String undecoratedPath = theWord.substring(1); String[] pathElements = undecoratedPath.split("."); String target = pathElements[0]; for (WikiPage current = wikiPage.getParent(); !current.isRoot(); current = current.getParent()) { if (current.getName().equals(target)) { pathElements[0] = PathParser.render(current.getPageCrawler().getFullPath()); return "." + StringUtils.join(Arrays.asList(pathElements), "."); } } return "." + undecoratedPath; } } return theWord; }
Greetings
c
Searching... java.lang.StringIndexOutOfBoundsException: String index out of range: 0 java.lang.String.charAt(Unknown Source) fitnesse.wiki.WikiWordReference.expandPrefix(WikiWordReference.java:25) fitnesse.wiki.WikiWordReference.getReferencedPage(WikiWordReference.java:19) fitnesse.wiki.search.WhereUsedPageFinder.visit(WhereUsedPageFinder.java:57) fitnesse.wikitext.parser.Symbol.walkPreOrder(Symbol.java:97) fitnesse.wikitext.parser.Symbol.walkPreOrder(Symbol.java:100) fitnesse.wiki.search.WhereUsedPageFinder.process(WhereUsedPageFinder.java:33) fitnesse.wiki.search.WhereUsedPageFinder.process(WhereUsedPageFinder.java:11) fitnesse.wiki.PageCrawlerImpl.traverse(PageCrawlerImpl.java:129) fitnesse.wiki.PageCrawlerImpl.traverse(PageCrawlerImpl.java:131) fitnesse.wiki.PageCrawlerImpl.traverse(PageCrawlerImpl.java:125) fitnesse.wiki.search.WhereUsedPageFinder.search(WhereUsedPageFinder.java:39) fitnesse.responders.search.ResultResponder.traverse(ResultResponder.java:94) fitnesse.html.template.TraverseDirective.render(TraverseDirective.java:43) org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirective.java:207) org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:342) org.apache.velocity.runtime.directive.Parse.render(Parse.java:260) org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirective.java:207) org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:342) org.apache.velocity.Template.merge(Template.java:356) org.apache.velocity.Template.merge(Template.java:260) fitnesse.html.template.HtmlPage.render(HtmlPage.java:81) fitnesse.responders.search.ResultResponder.doSending(ResultResponder.java:85) fitnesse.responders.ChunkingResponder.startSending(ChunkingResponder.java:74) fitnesse.http.ChunkedResponse.sendTo(ChunkedResponse.java:27) fitnesse.FitNesseExpediter.sendResponse(FitNesseExpediter.java:95) fitnesse.FitNesseExpediter.run(FitNesseExpediter.java:61) java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) java.util.concurrent.FutureTask.run(Unknown Source) java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) java.lang.Thread.run(Unknown Source)