Hi Matt, IIRC, you need to call the setup method to pass in a response object. The renderer then gets the writer from the response object.
Regards, Justin On Thu, Feb 2, 2017 at 3:57 PM Matt Ryan <o...@mvryan.org> wrote: > Hi Justin, > > Thanks for your reply. But I'm still not seeing how to go about solving > this. > > Where I get stuck is how to get the HtmlRenderer to use my writer. It has > a private PrintWriter field inside it, which as best I can tell is never > actually initialized. If I just create a new HtmlRenderer() and then > invoke one of the methods that makes use of the PrintWriter, I will get a > NullPointerException because the PrintWriter is null. > > I think what you were suggesting is that I do it via an HttpServletResponse > implementation that uses the HtmlRenderer. But I still don't have a good > way to put my PrintWriter into the HtmlRenderer - not without some > reflection hacks anyway. > > What am I missing here? > > > On Wed, Feb 1, 2017 at 3:11 PM, Justin Edelson <jus...@justinedelson.com> > wrote: > > > Hi Matt, > > Thanks for adding tests!!! > > > > What I would suggest is to mock the HttpServletResponse and provide a > your > > own StringWriter to response.getWriter(). > > > > Regards, > > Justin > > > > On Wed, Feb 1, 2017 at 4:26 PM Matt Ryan <o...@mvryan.org> wrote: > > > > > Hi, > > > > > > I'm trying to add unit tests for > > > org.apache.sling.junit.impl.servlet.HtmlRenderer. However, I'm not > sure > > > the best way to verify that the correct behavior has occurred for the > > > public methods. Each public method takes action on a private field - a > > > PrintWriter instance - but I'm not seeing any public way to inspect > that > > > field or get the output. > > > > > > One approach I know will work is to use reflection to initialize the > > > PrintWriter and then to capture the output after calling a method. > This > > > approach technically will work, but it makes the code brittle. > > > > > > Other options would be to make the PrintWriter protected, so I can > > inspect > > > it from a child class, or add a method to the HtmlRenderer that returns > > the > > > contents of the PrintWriter, e.g. > > > > > > public String render() { > > > output.flush(); > > > return new String(outputStream.getBytes()); > > > } > > > > > > Any suggestions on the approach from the community? > > > > > > > > > -MR > > > > > >