mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-16 14:23:28 +07:00
[testRunner] WEB-66843: Add HTML escaping for tests' output for Export test results
- Fix escaping for tests output for exporting XSL template - Add tests Merge-request: IJ-MR-133878 Merged-by: Dmitry Makhnev <Dmitry.Makhnev@jetbrains.com> GitOrigin-RevId: 84ab65655e16069608dbb2975db0df66703ed8ca
This commit is contained in:
committed by
intellij-monorepo-bot
parent
eea2a6fee0
commit
052a3e69af
@@ -5,6 +5,7 @@ import com.intellij.execution.executors.DefaultRunExecutor;
|
||||
import com.intellij.execution.testframework.Filter;
|
||||
import com.intellij.execution.testframework.TestConsoleProperties;
|
||||
import com.intellij.execution.testframework.actions.AbstractRerunFailedTestsAction;
|
||||
import com.intellij.execution.testframework.export.ExportTestResultsAction;
|
||||
import com.intellij.execution.testframework.export.TestResultsXmlFormatter;
|
||||
import com.intellij.execution.testframework.sm.Marker;
|
||||
import com.intellij.execution.testframework.sm.runner.events.*;
|
||||
@@ -32,10 +33,8 @@ import javax.xml.transform.TransformerFactory;
|
||||
import javax.xml.transform.sax.SAXTransformerFactory;
|
||||
import javax.xml.transform.sax.TransformerHandler;
|
||||
import javax.xml.transform.stream.StreamResult;
|
||||
import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.io.StringReader;
|
||||
import javax.xml.transform.stream.StreamSource;
|
||||
import java.io.*;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.List;
|
||||
|
||||
@@ -660,6 +659,41 @@ public class GeneralToSMTRunnerEventsConvertorTest extends BaseSMTRunnerTestCase
|
||||
assertEquals("ATe&st", tests.get(0).getName());
|
||||
}
|
||||
|
||||
public void testIntellijExportXslEscaping() throws Exception {
|
||||
String systemOutput = "<span onclick=\"alert(\"Ops!\")\">SYSTEM_OUTPUT\n<span>";
|
||||
String escapedSystemOutput = "<span onclick=\"alert(\"Ops!\")\">SYSTEM_OUTPUT<br/><span><br/>";
|
||||
String normalOutput = "<div onclick=\"alert(\"Ops!!\")\">NORMAL_OUTPUT<span>";
|
||||
String escapedNormalOutput = "<div onclick=\"alert(\"Ops!!\")\">NORMAL_OUTPUT<span><br/>";
|
||||
String errorOutput = "<p onclick=\"alert(\"Ops!!!\")\">ERROR_OUTPUT<div>";
|
||||
String escapedErrorOutput = "<p onclick=\"alert(\"Ops!!!\")\">ERROR_OUTPUT<div><br/>";
|
||||
|
||||
mySuite.addChild(mySimpleTest);
|
||||
mySimpleTest.addLast(printer -> {
|
||||
printer.print(systemOutput, ConsoleViewContentType.SYSTEM_OUTPUT);
|
||||
printer.print(normalOutput, ConsoleViewContentType.NORMAL_OUTPUT);
|
||||
printer.print(errorOutput, ConsoleViewContentType.ERROR_OUTPUT);
|
||||
});
|
||||
mySimpleTest.setFinished();
|
||||
mySuite.setFinished();
|
||||
|
||||
SAXTransformerFactory transformerFactory = (SAXTransformerFactory)TransformerFactory.newDefaultInstance();
|
||||
|
||||
try (InputStream bundledXsltUrl = ExportTestResultsAction.class.getResourceAsStream("intellij-export.xsl")) {
|
||||
TransformerHandler handler = transformerFactory.newTransformerHandler(new StreamSource(bundledXsltUrl));
|
||||
File output = FileUtil.createTempFile("output", "");
|
||||
FileUtilRt.createParentDirs(output);
|
||||
try (FileWriter writer = new FileWriter(output, StandardCharsets.UTF_8)) {
|
||||
handler.setResult(new StreamResult(writer));
|
||||
MockRuntimeConfiguration configuration = new MockRuntimeConfiguration(getProject());
|
||||
TestResultsXmlFormatter.execute(mySuite, configuration, new SMTRunnerConsoleProperties(configuration, "framework", new DefaultRunExecutor()), handler);
|
||||
String renderedResult = FileUtil.loadFile(output);
|
||||
assertContains(escapedSystemOutput, renderedResult);
|
||||
assertContains(escapedNormalOutput, renderedResult);
|
||||
assertContains(escapedErrorOutput, renderedResult);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void testPreserveFullOutputAfterImport() throws Exception {
|
||||
|
||||
mySuite.addChild(mySimpleTest);
|
||||
|
||||
@@ -679,16 +679,13 @@ jQuery.cookie = function(name, value, options) {
|
||||
<xsl:if test="count(./output) > 0">
|
||||
<ul>
|
||||
<xsl:for-each select="output">
|
||||
<xsl:variable name="displayText">
|
||||
<xsl:for-each select="str:tokenize(text(), ' ')">
|
||||
<xsl:value-of select="."/>
|
||||
<xsl:text><br/></xsl:text>
|
||||
</xsl:for-each>
|
||||
</xsl:variable>
|
||||
<li class="text">
|
||||
<xsl:variable name="output-type" select="@type"/>
|
||||
<span class="{$output-type}">
|
||||
<xsl:value-of disable-output-escaping="yes" select="$displayText"/>
|
||||
<xsl:for-each select="str:tokenize(text(), ' ')">
|
||||
<xsl:value-of select="." />
|
||||
<xsl:value-of disable-output-escaping="yes" select="'<br/>'"/>
|
||||
</xsl:for-each>
|
||||
</span>
|
||||
</li>
|
||||
</xsl:for-each>
|
||||
|
||||
Reference in New Issue
Block a user