approvals / ApprovalTests.Java

ApprovalTest verification library for Java
Apache License 2.0
337 stars 74 forks source link

verifyXml() escaping behaviour #466

Closed JCook21 closed 3 weeks ago

JCook21 commented 9 months ago

I'm working with Jackson to generate some XML that I'd like to then approve with the verifyXml() method. Jackson takes care of escaping special characters in the XML but doesn't pretty print it. I'm finding some inconsistencies with how Approvals then formats the XML:

Do you have any comments on this? Is it possible to just apply formatting to the XML string that adds line breaks and indents but without further formatting the content?

isidore commented 8 months ago
  1. would you be willing to join us on a zoom call to work on this?
  2. do you have a unit test we can look at to see the issues?
JCook21 commented 8 months ago

Happy to join you on a Zoom call to look into this. I don't have a unit test yet but I can look to add one today.

JCook21 commented 8 months ago

I'm wondering if a similar approach to JsonJacksonApprovals would work here too.

JCook21 commented 8 months ago

Added a draft pull request #473 with a couple of tests to show the discrepancies I'm seeing. Strangely, I couldn't verify that & is being converted to &, even though I saw this in my own codebase a few weeks ago.

LarsEckart commented 8 months ago

Please send an email to llewellyn.falco@gmail.com and he'll forward you the invite for our next session. Looking forward to it!

LarsEckart commented 1 month ago

hey Jeremy,

it's been a while but tonight we worked on it. It's tricky. A suggested workaround is to write this line of code:

public void verifyJacksonXml(String xml) {
    Approvals.verify(prettyPrintWithJackson(xml), new Options().forFile().withExtension(".xml"));
}

where you have to implement the prettyPrintWithJackson still yourself.

We'll get back to it in a week, if you want to join us, let us know.

LarsEckart commented 3 weeks ago

hey @JCook21

we think we fixed this by using XOM. But we also created a seam so that you can pass your own xml pretty printer that Approvals will use.

If you get it working with jackson as the pretty printer, we'd love if you'd contribute it back! (we weren't able to when we tried) :)

We're publishing a new release now that contains XmlXomApprovals.verifyXml() and Approvals.verifyXml(xml, prettyPrinter)