JBehave
  1. JBehave
  2. JBEHAVE-724

Too many columns in an example table give IndexOutOfBoundsException

    Details

    • Type: Bug Bug
    • Status: Resolved Resolved
    • Priority: Minor Minor
    • Resolution: Fixed
    • Affects Version/s: 3.5.4
    • Fix Version/s: 3.6
    • Component/s: Core
    • Labels:
      None
    • Number of attachments :
      0

      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

        Hide
        Alexander Lehmann added a comment - - edited

        (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)

        Show
        Alexander Lehmann added a comment - - edited (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)
        Hide
        Alexander Lehmann added a comment -

        https://github.com/alexlehm/jbehave-core/commit/465bf95ded8e94c73b5b6a2d2c4227cedd84d80d

        JBEHAVE-724: Too many columns in an example table give IndexOutOfBoundsException

        check for header array size and ignore the rest of the columns

        Show
        Alexander Lehmann added a comment - https://github.com/alexlehm/jbehave-core/commit/465bf95ded8e94c73b5b6a2d2c4227cedd84d80d JBEHAVE-724 : Too many columns in an example table give IndexOutOfBoundsException check for header array size and ignore the rest of the columns
        Hide
        Mauro Talevi added a comment -

        Pulled with thanks.

        Show
        Mauro Talevi added a comment - Pulled with thanks.
        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 ]

          People

          • Assignee:
            Mauro Talevi
            Reporter:
            Alexander Lehmann
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: