Details
Description
When writing an example table that contains a vertical bar in a value, I got an IndexOutOfBoundsException
This somehow hangs the execution of the scenario, the log only says "BeforeStories" and never gets to start the story, but the Firefox from Selenium stays open.
It would be better if a proper error message or warning is printed and the story is marked as failed or not executed.
A preliminary test to show the error is this, I'll look a bit further into the problem maybe tomorrow.
@Test public void shouldCatchErrorWrongNumberOfColumns() { String tableWithWrongColumn = "|a|b|\n|a|b|c|\n"; ExamplesTable table = new ExamplesTable(tableWithWrongColumn); }
Activity
Mauro Talevi
made changes -
Field | Original Value | New Value |
---|---|---|
Status | Open [ 1 ] | Resolved [ 5 ] |
Assignee | Mauro Talevi [ maurotalevi ] | |
Fix Version/s | 3.6 [ 17721 ] | |
Resolution | Fixed [ 1 ] |
(this belongs into org.jbehave.core.model.ExamplesTableBehaviour.java)
the stack trace for an example story with the table looks like this:
java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
at java.util.ArrayList.RangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at org.jbehave.core.model.ExamplesTable.parse(ExamplesTable.java:152)
at org.jbehave.core.model.ExamplesTable.<init>(ExamplesTable.java:121)
at org.jbehave.core.model.ExamplesTableFactory.createExamplesTable(ExamplesTableFactory.java:66)
at org.jbehave.core.parsers.RegexStoryParser.findExamplesTable(RegexStoryParser.java:179)
at org.jbehave.core.parsers.RegexStoryParser.parseScenario(RegexStoryParser.java:153)
at org.jbehave.core.parsers.RegexStoryParser.parseScenariosFrom(RegexStoryParser.java:127)
at org.jbehave.core.parsers.RegexStoryParser.parseStory(RegexStoryParser.java:60)
at org.jbehave.core.embedder.StoryRunner.storyOfPath(StoryRunner.java:176)
at org.jbehave.core.embedder.Embedder.runStoriesAsPaths(Embedder.java:211)
at org.jbehave.core.junit.JUnitStories.run(JUnitStories.java:20)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)