about summary refs log tree commit diff
diff options
context:
space:
mode:
authorYuki Okushi <huyuumi.dev@gmail.com>2020-10-23 18:26:20 +0900
committerGitHub <noreply@github.com>2020-10-23 18:26:20 +0900
commit4859786c6947dbd4c1bf178d5a717a6067cf4347 (patch)
tree6a0da02b125b616b18ce7f1e93a20f36833e74ed
parentda3e41e8d367ceb3509f7fa95bf817f1895e9321 (diff)
parent0c32e811577fbf2ff46a607897f9ea7b6b95b364 (diff)
downloadrust-4859786c6947dbd4c1bf178d5a717a6067cf4347.tar.gz
rust-4859786c6947dbd4c1bf178d5a717a6067cf4347.zip
Rollup merge of #77890 - gilescope:welformed-json-output-from-libtest, r=KodrAus
Fixing escaping to ensure generation of welformed json.

doc tests' json name have a filename in them. When json test output is asked for on windows currently produces invalid json.
Tracking issue for json test output: #49359
-rw-r--r--library/test/src/formatters/json.rs14
1 files changed, 10 insertions, 4 deletions
diff --git a/library/test/src/formatters/json.rs b/library/test/src/formatters/json.rs
index 41e7e6adcf1..4dc4162700c 100644
--- a/library/test/src/formatters/json.rs
+++ b/library/test/src/formatters/json.rs
@@ -39,9 +39,12 @@ impl<T: Write> JsonFormatter<T> {
         stdout: Option<Cow<'_, str>>,
         extra: Option<&str>,
     ) -> io::Result<()> {
+        // A doc test's name includes a filename which must be escaped for correct json.
         self.write_message(&*format!(
             r#"{{ "type": "{}", "name": "{}", "event": "{}""#,
-            ty, name, evt
+            ty,
+            EscapedString(name),
+            evt
         ))?;
         if let Some(exec_time) = exec_time {
             self.write_message(&*format!(r#", "exec_time": "{}""#, exec_time))?;
@@ -67,7 +70,7 @@ impl<T: Write> OutputFormatter for JsonFormatter<T> {
     fn write_test_start(&mut self, desc: &TestDesc) -> io::Result<()> {
         self.writeln_message(&*format!(
             r#"{{ "type": "test", "event": "started", "name": "{}" }}"#,
-            desc.name
+            EscapedString(desc.name.as_slice())
         ))
     }
 
@@ -140,7 +143,10 @@ impl<T: Write> OutputFormatter for JsonFormatter<T> {
                      \"name\": \"{}\", \
                      \"median\": {}, \
                      \"deviation\": {}{} }}",
-                    desc.name, median, deviation, mbps
+                    EscapedString(desc.name.as_slice()),
+                    median,
+                    deviation,
+                    mbps
                 );
 
                 self.writeln_message(&*line)
@@ -151,7 +157,7 @@ impl<T: Write> OutputFormatter for JsonFormatter<T> {
     fn write_timeout(&mut self, desc: &TestDesc) -> io::Result<()> {
         self.writeln_message(&*format!(
             r#"{{ "type": "test", "event": "timeout", "name": "{}" }}"#,
-            desc.name
+            EscapedString(desc.name.as_slice())
         ))
     }