1   package org.displaytag.jsptests;
2   
3   import java.io.InputStream;
4   
5   import org.displaytag.export.ExportViewFactory;
6   import org.displaytag.properties.MediaTypeEnum;
7   import org.displaytag.tags.TableTagParameters;
8   import org.displaytag.test.DisplaytagCase;
9   import org.displaytag.util.ParamEncoder;
10  
11  import com.lowagie.text.pdf.PdfReader;
12  import com.meterware.httpunit.GetMethodWebRequest;
13  import com.meterware.httpunit.WebRequest;
14  import com.meterware.httpunit.WebResponse;
15  
16  
17  /***
18   * Tests for pdf export.
19   * @author Fabrizio Giustina
20   * @version $Revision: 1.4 $ ($Author: fgiust $)
21   */
22  public class ExportPdfFilterTest extends DisplaytagCase
23  {
24  
25      /***
26       * @see org.displaytag.test.DisplaytagCase#getJspName()
27       */
28      public String getJspName()
29      {
30          return "exportfull.jsp";
31      }
32  
33      /***
34       * Test for content disposition and filename.
35       * @param jspName jsp name, with full path
36       * @throws Exception any axception thrown during test.
37       */
38      public void doTest(String jspName) throws Exception
39      {
40  
41          ParamEncoder encoder = new ParamEncoder("table");
42          String mediaParameter = encoder.encodeParameterName(TableTagParameters.PARAMETER_EXPORTTYPE);
43          WebRequest request = new GetMethodWebRequest(jspName);
44  
45          // this will force media type initialization
46          ExportViewFactory.getInstance();
47          MediaTypeEnum pdfMedia = MediaTypeEnum.fromName("pdf");
48          assertNotNull("Pdf export view not correctly registered.", pdfMedia);
49          request.setParameter(mediaParameter, Integer.toString(pdfMedia.getCode()));
50  
51          // this will enable the filter!
52          request.setParameter(TableTagParameters.PARAMETER_EXPORTING, "1");
53  
54          WebResponse response = runner.getResponse(request);
55  
56          // we are really testing an xml output?
57          assertEquals("Expected a different content type.", "application/pdf", response.getContentType());
58  
59          assertTrue("Content length should be set.", response.getContentLength() > -1);
60          InputStream stream = response.getInputStream();
61          byte[] result = new byte[response.getContentLength()];
62          stream.read(result);
63  
64          PdfReader reader = new PdfReader(result);
65          assertEquals("Expected a valid pdf file with a single page", 1, reader.getNumberOfPages());
66  
67      }
68  
69  }