View Javadoc

1   package net.sf.jameleon.reporting;
2   
3   import net.sf.jameleon.TestCaseTag;
4   import net.sf.jameleon.util.JameleonUtility;
5   import net.sf.jameleon.bean.TestCase;
6   import net.sf.jameleon.result.*;
7   
8   import java.io.StringWriter;
9   import java.io.File;
10  import java.io.IOException;
11  import java.util.HashMap;
12  import java.util.Iterator;
13  import java.util.Map;
14  
15  /***
16   * Generates the HTML results for a given test case
17   */
18  public class HtmlTestCaseResultGenerator {
19  
20      private TestCaseTag tct;
21      private final static String RES_DIR = ".."+File.separator+"..";
22  
23      public HtmlTestCaseResultGenerator(TestCaseTag tct){
24          this.tct = tct;    
25      }
26  
27      /***
28       * Generates the main page along with all other iframes and content.
29       * @return The main file that was written to.
30       */
31      public File generateTestCaseResultPage(){
32          File resultsDir = tct.getTimestampedResultsDir();
33          File mainFile = new File(resultsDir, "index.html");
34          File tcSummaryFile = new File(resultsDir, "summary.html");
35          File tcResultSummaryFile = new File(resultsDir, "resultsSummary.html");
36          try {
37              JameleonUtility.recordResultsToFile(mainFile, generateTestCasePage());
38              JameleonUtility.recordResultsToFile(tcSummaryFile, generateTestCaseSummary());
39              JameleonUtility.recordResultsToFile(tcResultSummaryFile, generateTestCaseResultSummary());
40          } catch (IOException e) {
41              System.err.println("Error writing results to file: ");
42              e.printStackTrace();
43          }
44          return mainFile;
45      }
46  
47      public String generateTestCaseResult(){
48          StringWriter writer = new StringWriter();
49          String childrenResults = generateAppropriateResult(tct.getResults());
50          Map params = new HashMap();
51          params.put("results_res_dir", RES_DIR);
52          params.put("childrenResults", childrenResults);
53          ReporterUtils.outputToTemplate(writer, tct.getTestCaseResultTemplate(), params);
54          return writer.toString();
55      }
56  
57      public String generateTestCasePage() {
58          final TestCase testCase = tct.getTestCase();
59          StringWriter writer = new StringWriter();
60          String results = generateTestCaseResult();
61          Map params = new HashMap();
62          params.put("testCase", testCase);
63          params.put("results_res_dir", RES_DIR);
64          params.put("encoding", tct.getGenTestCaseDocsEncoding());
65          params.put("results", results);
66          ReporterUtils.outputToTemplate(writer, tct.getTestCaseMainPageTemplate(), params);
67          return writer.toString();
68      }
69  
70      public String generateTestCaseSummary() {
71          TestCase testCase = tct.getTestCase();
72          TestCaseResult result = tct.getResults();
73          StringWriter writer = new StringWriter();
74          Map params = new HashMap();
75          params.put("result", result);
76          params.put("tc", testCase);
77          params.put("encoding", tct.getGenTestCaseDocsEncoding());
78          params.put("results_res_dir", RES_DIR);
79          if (tct.getBugTrackerUrl() != null) {
80              params.put("bugTrackerUrl", tct.getBugTrackerUrl());
81          }
82          ReporterUtils.outputToTemplate(writer, tct.getTestCaseSummaryTemplate(), params);
83          return writer.toString();
84      }
85  
86      public String generateTestCaseResultSummary() {
87          TestCaseResult result = tct.getResults();
88          StringWriter writer = new StringWriter();
89          Map params = new HashMap();
90          params.put("result", result);
91          params.put("encoding", tct.getGenTestCaseDocsEncoding());
92          params.put("results_res_dir", RES_DIR);
93          ReporterUtils.outputToTemplate(writer, tct.getTestCaseResultSummaryTemplate(), params);
94  
95          return writer.toString();
96      }
97  
98      protected String generateSessionResult(SessionResult result) {
99          StringWriter writer = new StringWriter();
100         String childrenResults = generateResultsForChildren(result);
101 
102         Map params = new HashMap();
103         params.put("result", result);
104         params.put("childrenResults", childrenResults);
105         params.put("results_res_dir", RES_DIR);
106         ReporterUtils.outputToTemplate(writer, tct.getTestCaseResultSessionTemplate(), params);
107         return writer.toString();
108     }
109 
110     protected String generateFunctionResult(FunctionResult result) {
111         StringWriter writer = new StringWriter();
112         Map params = new HashMap();
113         params.put("result", result);
114         params.put("results_res_dir", RES_DIR);
115         ReporterUtils.outputToTemplate(writer, tct.getTestCaseResultFunctionTemplate(), params);
116         return writer.toString();
117     }
118 
119     protected String generateDDRowResult(DataDrivableRowResult result){
120         StringWriter writer = new StringWriter();
121         String childrenResults = generateResultsForChildren(result);
122 
123         Map params = new HashMap();
124         params.put("result", result);
125         params.put("childrenResults", childrenResults);
126         params.put("results_res_dir", RES_DIR);
127         ReporterUtils.outputToTemplate(writer, tct.getTestCaseResultDataRowTemplate(), params);
128         return writer.toString();
129     }
130 
131     protected String generateResultsForChildren(TestResultWithChildren result) {
132         StringBuffer childrenResults = new StringBuffer();
133         for(Iterator i = result.getChildrenResults().iterator(); i.hasNext();){
134             childrenResults.append(generateAppropriateResult((JameleonTestResult)i.next()));
135         }
136         return childrenResults.toString();
137     }
138 
139     protected String generateAppropriateResult(JameleonTestResult result) {
140         String resString = null;
141         if (result instanceof SessionResult){
142             resString = generateSessionResult((SessionResult)result);
143         }else if (result instanceof FunctionResult){
144             resString = generateFunctionResult((FunctionResult)result);
145         }else if (result instanceof DataDrivableResultContainer){
146             resString = generateResultsForChildren((DataDrivableResultContainer)result);
147         }else if (result instanceof DataDrivableRowResult){
148             resString = generateDDRowResult((DataDrivableRowResult)result);
149         }else if (result instanceof TestCaseResult){
150             TestCaseResult tcr = (TestCaseResult)result;
151             if (tcr.getChildrenResults() != null && tcr.getChildrenResults().size() > 0 &&
152                 tcr.getChildrenResults().get(0) instanceof DataDrivableResultContainer ){
153                 resString = generateResultsForChildren((DataDrivableResultContainer)tcr.getChildrenResults().get(0));
154             }else if (tcr.getChildrenResults() != null && tcr.getChildrenResults().size() > 0 &&
155                     !(tcr.getChildrenResults().get(0) instanceof DataDrivableResultContainer) ){
156                 resString = generateResultsForChildren((TestResultWithChildren) result);
157             }
158         }
159         return resString;
160     }
161 
162 }