1   package com.diasparsoftware.htmlunitx.test;
2   
3   import java.io.InputStream;
4   import java.net.URL;
5   
6   import junit.framework.TestCase;
7   import junitx.framework.ArrayAssert;
8   
9   import com.diasparsoftware.gsbase.StreamUtil;
10  import com.diasparsoftware.htmlunitx.TestableWebResponse;
11  
12  public abstract class AbstractWebResponseTestCase extends
13      TestCase {
14      private TestableWebResponse webResponse;
15  
16      protected void setUp() throws Exception {
17          webResponse = makeActualWebResponse();
18      }
19  
20      protected abstract TestableWebResponse makeActualWebResponse()
21          throws Exception;
22  
23      protected abstract byte[] getExpectedResponseBody()
24          throws Exception;
25  
26      protected abstract InputStream getExpectedContentAsStream()
27          throws Exception;
28  
29      protected abstract String getExpectedContentAsString()
30          throws Exception;
31  
32      public void testStatusCode() {
33          assertEquals(200, webResponse.getStatusCode());
34          webResponse.setStatusCode(500);
35          assertEquals(500, webResponse.getStatusCode());
36      }
37  
38      public void testStatusMessage() {
39          assertEquals("", webResponse.getStatusMessage());
40          webResponse.setStatusMessage("A status message");
41          assertEquals("A status message", webResponse
42              .getStatusMessage());
43      }
44  
45      public void testContentAsStream() throws Exception {
46          ArrayAssert
47              .assertEquals(
48                            StreamUtil
49                                .getContentAsBytes(getExpectedContentAsStream()),
50                            StreamUtil
51                                .getContentAsBytes(webResponse
52                                    .getContentAsStream()));
53      }
54  
55      public void testContentAsString() throws Exception {
56          assertEquals(getExpectedContentAsString(), webResponse
57              .getContentAsString());
58      }
59  
60      public void testContentCharSet() {
61          assertEquals("ISO-8859-1", webResponse
62              .getContentCharSet());
63          webResponse.setContentCharSet("Big5");
64          assertEquals("Big5", webResponse.getContentCharSet());
65      }
66  
67      public void testContentType() {
68          assertEquals("application/octet-stream", webResponse
69              .getContentType());
70          webResponse.setContentType("text/plain");
71          assertEquals("text/plain", webResponse.getContentType());
72      }
73  
74      public void testHasStopwatch() {
75          assertNotNull(webResponse.getStopwatch());
76      }
77  
78      public void testLoadTime() throws Exception {
79          FakeStopwatch fakeStopwatch = new FakeStopwatch(100);
80          webResponse.setStopwatch(fakeStopwatch);
81          webResponse.getContentAsStream();
82          assertEquals(100, webResponse
83              .getLoadTimeInMilliSeconds());
84      }
85  
86      public void testResponseBody() throws Exception {
87          ArrayAssert.assertEquals(getExpectedResponseBody(),
88                                   webResponse.getResponseBody());
89      }
90  
91      public void testResponseHeaderValue() {
92          assertEquals(null, webResponse
93              .getResponseHeaderValue("notThereYet"));
94          webResponse.addResponseHeaderValue("thereNow",
95                                             "a value");
96          assertEquals("a value", webResponse
97              .getResponseHeaderValue("thereNow"));
98  
99      }
100 
101     public void testUrl() throws Exception {
102         assertEquals(new URL("http://foo"), webResponse
103             .getUrl());
104     }
105 
106 }