STAMP-project / EvoCrash-demo

See https://stamp-project.github.io/botsing/ for the latest version of STAMP crash reproduction tool.
https://stamp-project.github.io/botsing/
Apache License 2.0
1 stars 2 forks source link

Problem reproducing stacktrace for XRENDERING-422 when executing generated test #8

Closed vmassol closed 6 years ago

vmassol commented 6 years ago

stacktrace: https://jira.xwiki.org/browse/XRENDERING-422

Evocrash generated:

import org.evosuite.shaded.org.mockito.Matchers;
import org.evosuite.shaded.org.mockito.Mockito;
import org.junit.Test;
import static org.junit.Assert.*;
import java.util.Map;
import java.util.NoSuchElementException;
import org.evosuite.runtime.ViolatedAssumptionAnswer;
import static org.evosuite.shaded.org.mockito.Mockito.*;
import static org.evosuite.runtime.EvoAssertions.*;
import org.xwiki.rendering.listener.Format;
import org.xwiki.rendering.listener.Listener;
import org.xwiki.rendering.listener.chaining.BlockStateChainingListener;
import org.xwiki.rendering.listener.chaining.ConsecutiveNewLineStateChainingListener;
import org.xwiki.rendering.listener.chaining.EmptyBlockChainingListener;
import org.xwiki.rendering.listener.chaining.ListenerChain;

public class XRENDERING_422_Frame7 {
    @Test(timeout = 4000)
    public void test0()  throws Throwable  {
        ListenerChain listenerChain0 = new ListenerChain();
        EmptyBlockChainingListener emptyBlockChainingListener0 = new EmptyBlockChainingListener(listenerChain0);
        ListenerChain listenerChain1 = Mockito.mock(ListenerChain.class, new ViolatedAssumptionAnswer());
        Mockito.doReturn(emptyBlockChainingListener0).when(listenerChain1).getNextListener(Matchers.any(java.lang.Class.class));
        BlockStateChainingListener blockStateChainingListener0 = new BlockStateChainingListener(listenerChain1);
        ListenerChain listenerChain2 = Mockito.mock(ListenerChain.class, new ViolatedAssumptionAnswer());
        Mockito.doReturn(blockStateChainingListener0).when(listenerChain2).getNextListener(Matchers.any(java.lang.Class.class));
        ConsecutiveNewLineStateChainingListener consecutiveNewLineStateChainingListener0 =
                new ConsecutiveNewLineStateChainingListener(listenerChain2);
        ListenerChain listenerChain3 = Mockito.mock(ListenerChain.class, new ViolatedAssumptionAnswer());
        Mockito.doReturn(consecutiveNewLineStateChainingListener0).when(listenerChain3).getNextListener(Matchers.any(java.lang.Class.class));
        EmptyBlockChainingListener emptyBlockChainingListener1 = new EmptyBlockChainingListener(listenerChain3);
        Map<String, String> map0 = Listener.EMPTY_PARAMETERS;
        Format format0 = Format.NONE;
        emptyBlockChainingListener1.endFormat(format0, map0);

}
}

I modified it as follows:

/*
 * See the NOTICE file distributed with this work for additional
 * information regarding copyright ownership.
 *
 * This is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of
 * the License, or (at your option) any later version.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this software; if not, write to the Free
 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 */
package org.xwiki.rendering;

import java.util.Map;

import org.junit.Test;
import org.mockito.Matchers;
import org.mockito.Mockito;
import org.xwiki.rendering.listener.Format;
import org.xwiki.rendering.listener.Listener;
import org.xwiki.rendering.listener.chaining.BlockStateChainingListener;
import org.xwiki.rendering.listener.chaining.ConsecutiveNewLineStateChainingListener;
import org.xwiki.rendering.listener.chaining.EmptyBlockChainingListener;
import org.xwiki.rendering.listener.chaining.ListenerChain;

public class EvoCrashTest
{
    @Test(timeout = 4000)
    public void test0() throws Exception
    {
        ListenerChain listenerChain0 = new ListenerChain();
        EmptyBlockChainingListener emptyBlockChainingListener0 = new EmptyBlockChainingListener(listenerChain0);
        ListenerChain listenerChain1 = Mockito.mock(ListenerChain.class, "listenerChain1");
        Mockito.doReturn(emptyBlockChainingListener0).when(listenerChain1)
            .getNextListener(Matchers.any(java.lang.Class.class));
        BlockStateChainingListener blockStateChainingListener0 = new BlockStateChainingListener(listenerChain1);
        ListenerChain listenerChain2 = Mockito.mock(ListenerChain.class, "listenerChain2");
        Mockito.doReturn(blockStateChainingListener0).when(listenerChain2)
            .getNextListener(Matchers.any(java.lang.Class.class));
        ConsecutiveNewLineStateChainingListener consecutiveNewLineStateChainingListener0 =
            new ConsecutiveNewLineStateChainingListener(listenerChain2);
        ListenerChain listenerChain3 = Mockito.mock(ListenerChain.class, "listenerChain3");
        Mockito.doReturn(consecutiveNewLineStateChainingListener0).when(listenerChain3)
            .getNextListener(Matchers.any(java.lang.Class.class));
        EmptyBlockChainingListener emptyBlockChainingListener1 = new EmptyBlockChainingListener(listenerChain3);
        Map<String, String> map0 = Listener.EMPTY_PARAMETERS;
        Format format0 = Format.NONE;
        emptyBlockChainingListener1.endFormat(format0, map0);
    }
}

However when executed, I get (executed on master, I should try on older code but I think it'll get the same result, to be checked) the following stack trace:

java.util.NoSuchElementException
    at java.util.ArrayDeque.removeFirst(ArrayDeque.java:280)
    at java.util.ArrayDeque.pop(ArrayDeque.java:517)
    at org.xwiki.rendering.listener.chaining.EmptyBlockChainingListener.stopContainerBlock(EmptyBlockChainingListener.java:503)
    at org.xwiki.rendering.listener.chaining.EmptyBlockChainingListener.endFormat(EmptyBlockChainingListener.java:287)
    at org.xwiki.rendering.listener.chaining.AbstractChainingListener.endFormat(AbstractChainingListener.java:317)
    at org.xwiki.rendering.listener.chaining.BlockStateChainingListener.endFormat(BlockStateChainingListener.java:450)
    at org.xwiki.rendering.listener.chaining.AbstractChainingListener.endFormat(AbstractChainingListener.java:317)
    at org.xwiki.rendering.listener.chaining.ConsecutiveNewLineStateChainingListener.endFormat(ConsecutiveNewLineStateChainingListener.java:116)
    at org.xwiki.rendering.listener.chaining.AbstractChainingListener.endFormat(AbstractChainingListener.java:317)
    at org.xwiki.rendering.listener.chaining.EmptyBlockChainingListener.endFormat(EmptyBlockChainingListener.java:286)
    at org.xwiki.rendering.EvoCrashTest.test0(EvoCrashTest.java:56)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298)
    at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.lang.Thread.run(Thread.java:745)

It doesn't seem to be reproducing the stacktrace at https://jira.xwiki.org/browse/XRENDERING-422

vmassol commented 6 years ago

Actually my mistake, it's the correct stack trace (I was looking at the wrong part):

Caused by: java.util.NoSuchElementException
    at java.util.ArrayDeque.removeFirst(ArrayDeque.java:278)
    at java.util.ArrayDeque.pop(ArrayDeque.java:507)
    at org.xwiki.rendering.listener.chaining.EmptyBlockChainingListener.stopContainerBlock(EmptyBlockChainingListener.java:458)
    at org.xwiki.rendering.listener.chaining.EmptyBlockChainingListener.endFormat(EmptyBlockChainingListener.java:263)
    at org.xwiki.rendering.listener.chaining.AbstractChainingListener.endFormat(AbstractChainingListener.java:290)
    at org.xwiki.rendering.listener.chaining.BlockStateChainingListener.endFormat(BlockStateChainingListener.java:439)
    at org.xwiki.rendering.listener.chaining.AbstractChainingListener.endFormat(AbstractChainingListener.java:290)
    at org.xwiki.rendering.listener.CompositeListener.endFormat(CompositeListener.java:253)
    at org.xwiki.rendering.internal.parser.wikimodel.DefaultXWikiGeneratorListener.flushFormat(DefaultXWikiGeneratorListener.java:325)
    at org.xwiki.rendering.internal.parser.wikimodel.DefaultXWikiGeneratorListener.flushFormat(DefaultXWikiGeneratorListener.java:273)
    at org.xwiki.rendering.internal.parser.wikimodel.DefaultXWikiGeneratorListener.flushFormat(DefaultXWikiGeneratorListener.java:267)
    at org.xwiki.rendering.internal.parser.wikimodel.DefaultXWikiGeneratorListener.onWord(DefaultXWikiGeneratorListener.java:906)
    at org.xwiki.rendering.wikimodel.impl.InternalWikiScannerContext.onWord(InternalWikiScannerContext.java:1147)
    at org.xwiki.rendering.wikimodel.impl.WikiScannerContext.onWord(WikiScannerContext.java:597)
    at org.xwiki.rendering.wikimodel.xhtml.impl.TagStack.flushStack(TagStack.java:205)
    at org.xwiki.rendering.wikimodel.xhtml.impl.TagStack.onCharacters(TagStack.java:227)
    at org.xwiki.rendering.wikimodel.xhtml.impl.XhtmlHandler.characters(XhtmlHandler.java:180)
    at org.xml.sax.helpers.XMLFilterImpl.characters(XMLFilterImpl.java:588)
    at org.xwiki.rendering.wikimodel.xhtml.filter.XHTMLWhitespaceXMLFilter.sendCharacters(XHTMLWhitespaceXMLFilter.java:487)
    at org.xwiki.rendering.wikimodel.xhtml.filter.XHTMLWhitespaceXMLFilter.sendCharacters(XHTMLWhitespaceXMLFilter.java:480)
    at org.xwiki.rendering.wikimodel.xhtml.filter.XHTMLWhitespaceXMLFilter.flushContent(XHTMLWhitespaceXMLFilter.java:357)
    at org.xwiki.rendering.wikimodel.xhtml.filter.XHTMLWhitespaceXMLFilter.flushContent(XHTMLWhitespaceXMLFilter.java:335)
    at org.xwiki.rendering.wikimodel.xhtml.filter.XHTMLWhitespaceXMLFilter.endElement(XHTMLWhitespaceXMLFilter.java:200)
    at org.xml.sax.helpers.XMLFilterImpl.endElement(XMLFilterImpl.java:570)
    at org.xwiki.rendering.wikimodel.xhtml.filter.AccumulationXMLFilter.endElement(AccumulationXMLFilter.java:86)
    at org.xml.sax.helpers.XMLFilterImpl.endElement(XMLFilterImpl.java:570)
    at org.xwiki.rendering.wikimodel.xhtml.filter.DTDXMLFilter.endElement(DTDXMLFilter.java:86)
    at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
    at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at org.apache.xerces.parsers.XML11NonValidatingConfiguration.parse(Unknown Source)
    at org.apache.xerces.parsers.XML11NonValidatingConfiguration.parse(Unknown Source)
    at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
    at org.xml.sax.helpers.XMLFilterImpl.parse(XMLFilterImpl.java:357)
    at org.xwiki.rendering.wikimodel.xhtml.filter.DefaultXMLFilter.parse(DefaultXMLFilter.java:58)
    at org.xml.sax.helpers.XMLFilterImpl.parse(XMLFilterImpl.java:357)
    at org.xwiki.rendering.wikimodel.xhtml.filter.DefaultXMLFilter.parse(DefaultXMLFilter.java:58)
    at org.xml.sax.helpers.XMLFilterImpl.parse(XMLFilterImpl.java:357)
    at org.xwiki.rendering.wikimodel.xhtml.filter.DefaultXMLFilter.parse(DefaultXMLFilter.java:58)
    at org.xwiki.rendering.wikimodel.xhtml.XhtmlParser.parse(XhtmlParser.java:132)
    ... 36 more

there are some small variations on the line but that's most likely caused by changes in the code. I'm continuing my investigation.