jtreg adds additional backslashes in Strings that are written to System.out/err?
pavel.rappo at oracle.com
Wed Sep 15 13:15:14 UTC 2021
David Holmes pointed me to this thread after I started a discussion elsewhere. Coincidentally, I stumbled upon the described jtreg behavior myself yesterday. It took me a while to figure out what was happening. When I described my finding to a colleague, Jonathan Gibbons, he suggested that if required I could read `.jtr` files using a (lesser-known?) option called `show`. This option's description is buried in help output and is not particularly clear: (Care to file a bug to improve that? File a JBS issue against Project=CODETOOLS and Subcomponent=jtreg.)
$ jtreg --help General Options | grep -A 3 'show:<sec'
Show information from a section in the results file for a
test. For example, -show:rerun
-showGroups Show the expansion (to files and directories) of the groups
As far as I understand, when run with this option, jtreg does not run your test. Instead, it reads the specified section from the existing `.jtr` file and outputs the same way it would otherwise appear on the console: no escapes. You can specify System.out or System.err as such a section.
Now, here are some details. JTHarness, which is used by jtreg, encodes special symbols it encounters in standard streams. While CR, LR and TAB are output as they are, \ is output as \\ and the rest of the escape sequences are output using the \uxxxx notation. The code I saw suggests that it is not a bug and is done on purpose. Anyhow, this is how output is stored in `.jtr` files. My understanding is that jtreg knows about that and recovers original output from `.jtr` files on demand.
More information about the jtreg-use