@@ -0,0 +1,3201 @@
+/*%0A * See the NOTICE file distributed with this work for additional%0A * information regarding copyright ownership.%0A *%0A * This is free software; you can redistribute it and/or modify it%0A * under the terms of the GNU Lesser General Public License as%0A * published by the Free Software Foundation; either version 2.1 of%0A * the License, or (at your option) any later version.%0A *%0A * This software is distributed in the hope that it will be useful,%0A * but WITHOUT ANY WARRANTY; without even the implied warranty of%0A * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU%0A * Lesser General Public License for more details.%0A *%0A * You should have received a copy of the GNU Lesser General Public%0A * License along with this software; if not, write to the Free%0A * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA%0A * 02110-1301 USA, or see the FSF site: http://www.fsf.org.%0A */%0Apackage org.xwiki.web;%0A%0Aimport javax.script.ScriptContext;%0A%0Aimport org.junit.jupiter.api.BeforeEach;%0Aimport org.junit.jupiter.api.Test;%0Aimport org.mockito.Mock;%0Aimport org.xwiki.model.reference.DocumentReference;%0Aimport org.xwiki.query.internal.ScriptQuery;%0Aimport org.xwiki.script.ScriptContextManager;%0Aimport org.xwiki.template.TemplateManager;%0Aimport org.xwiki.test.page.PageTest;%0A%0Aimport com.xpn.xwiki.api.Attachment;%0Aimport com.xpn.xwiki.doc.XWikiAttachment;%0Aimport com.xpn.xwiki.doc.XWikiDocument;%0Aimport com.xpn.xwiki.store.XWikiRecycleBinStoreInterface;%0A%0Aimport static org.junit.jupiter.api.Assertions.assertFalse;%0Aimport static org.junit.jupiter.api.Assertions.assertTrue;%0A%0A/**%0A * Test the %7B@code viewattachrev.vm%7D template. Assert that the returned results are well-formed.%0A *%0A * @version $Id$%0A */%0Aclass ViewattachrevPageTest extends PageTest%0A%7B%0A    private static final String VIEWATTACHREV = %22viewattachrev.vm%22;%0A%0A    @Mock%0A    private ScriptQuery query;%0A%0A    @Mock%0A    private XWikiRecycleBinStoreInterface recycleBinStore;%0A%0A    private TemplateManager templateManager;%0A%0A    private ScriptContext scriptContext;%0A%0A    @BeforeEach%0A    void setUp() throws Exception%0A    %7B%0A        this.templateManager = this.oldcore.getMocker().getInstance(TemplateManager.class);%0A        this.scriptContext = this.oldcore.getMocker().%3CScriptContextManager%3EgetInstance(ScriptContextManager.class)%0A            .getCurrentScriptContext();%0A    %7D%0A%0A    @Test%0A    void escapeAttachmentName() throws Exception%0A    %7B%0A        XWikiDocument document =%0A            this.xwiki.getDocument(new DocumentReference(%22wiki%22, %22space%22, %22document%22), this.context);%0A%0A        XWikiAttachment attachment = new XWikiAttachment(document, %22%3E%3Cimg src=1 onerror=alert(1)%3E.jpg%22);%0A        attachment.setMimeType(%22image/jpeg%22);%0A        attachment.setArchive(%22%22);%0A        attachment.getAttachment_archive().updateArchive(this.context);%0A%0A        this.scriptContext.setAttribute(%22attachment%22,%0A            new Attachment(document.newDocument(this.context), attachment, this.context), ScriptContext.GLOBAL_SCOPE);%0A%0A        String result = this.templateManager.render(VIEWATTACHREV);%0A%0A        assertFalse(result.contains(%22%3E%3Cimg src=1 onerror=alert(1)%3E.jpg%22));%0A        assertTrue(result.contains(%22&#62;&#60;img src=1 onerror=alert(1)&#62;.jpg%22));%0A    %7D%0A%7D%0A

Improve attachment history display * add test (for real this time)