/src/fitnesse/responders/testHistory/PageHistory.java

https://github.com/dleonard0/fitnesse · Java · 250 lines · 206 code · 44 blank · 0 comment · 26 complexity · 82063062748dcebb9dacb99a74c04701 MD5 · raw file

  1. package fitnesse.responders.testHistory;
  2. import fitnesse.responders.run.TestSummary;
  3. import fitnesse.responders.run.XmlFormatter;
  4. import util.FileUtil;
  5. import java.io.File;
  6. import java.text.ParseException;
  7. import java.text.SimpleDateFormat;
  8. import java.util.*;
  9. public class PageHistory {
  10. private SimpleDateFormat dateFormat = new SimpleDateFormat(XmlFormatter.TEST_RESULT_FILE_DATE_PATTERN);
  11. private int failures = 0;
  12. private int passes = 0;
  13. private Date minDate = null;
  14. private Date maxDate = null;
  15. private int maxAssertions = 0;
  16. private BarGraph barGraph;
  17. private final HashMap<Date, PageTestSummary> summaryMap = new HashMap<Date, PageTestSummary>();
  18. public PageHistory(File pageDirectory) {
  19. try {
  20. compileHistoryFromPageDirectory(pageDirectory);
  21. } catch (Exception e) {
  22. throw new RuntimeException(e);
  23. }
  24. }
  25. private void compileHistoryFromPageDirectory(File pageDirectory) throws ParseException {
  26. File[] resultFiles = FileUtil.getDirectoryListing(pageDirectory);
  27. for (File file : resultFiles)
  28. compileResultFileIntoHistory(file);
  29. compileBarGraph();
  30. }
  31. private void compileBarGraph() {
  32. List<Date> dates = new ArrayList<Date>(summaryMap.keySet());
  33. Collections.sort(dates, reverseChronologicalDateComparator());
  34. barGraph = new BarGraph();
  35. for (int i = 0; i < dates.size() && i < 20; i++) {
  36. barGraph.addSummary(get(dates.get(i)));
  37. }
  38. }
  39. private Comparator<Date> reverseChronologicalDateComparator() {
  40. return new Comparator<Date>() {
  41. public int compare(Date d1, Date d2) {
  42. long diff = d2.getTime() - d1.getTime();
  43. if (diff < 0)
  44. return -1;
  45. if (diff > 0)
  46. return 1;
  47. return 0;
  48. }
  49. };
  50. }
  51. private void compileResultFileIntoHistory(File file) throws ParseException {
  52. String fileName = file.getName();
  53. PageTestSummary summary = summaryFromFilename(fileName);
  54. summaryMap.put(summary.getDate(), summary);
  55. countResult(summary);
  56. setMinMaxDate(summary.getDate());
  57. setMaxAssertions(summary);
  58. }
  59. private void setMaxAssertions(PageTestSummary summary) {
  60. int assertions = summary.right + summary.wrong + summary.exceptions;
  61. maxAssertions = Math.max(maxAssertions, assertions);
  62. }
  63. private PageTestSummary summaryFromFilename(String fileName) throws ParseException {
  64. String parts[] = fileName.split("_|\\.");
  65. Date date = dateFormat.parse(parts[0]);
  66. PageTestSummary summary = new PageTestSummary(
  67. date,
  68. Integer.parseInt(parts[1]),
  69. Integer.parseInt(parts[2]),
  70. Integer.parseInt(parts[3]),
  71. Integer.parseInt(parts[4]));
  72. return summary;
  73. }
  74. private void setMinMaxDate(Date date) {
  75. if (minDate == null)
  76. minDate = maxDate = date;
  77. else if (date.getTime() > maxDate.getTime())
  78. maxDate = date;
  79. else if (date.getTime() < minDate.getTime())
  80. minDate = date;
  81. }
  82. private void countResult(PageTestSummary summary) {
  83. if (summary.wrong > 0 || summary.exceptions > 0 || summary.right == 0)
  84. failures++;
  85. else
  86. passes++;
  87. }
  88. public int getFailures() {
  89. return failures;
  90. }
  91. public int getPasses() {
  92. return passes;
  93. }
  94. public Date getMinDate() {
  95. return minDate;
  96. }
  97. public Date getMaxDate() {
  98. return maxDate;
  99. }
  100. public BarGraph getBarGraph() {
  101. return barGraph;
  102. }
  103. public int size() {
  104. return summaryMap.size();
  105. }
  106. public PageTestSummary get(Object key) {
  107. return summaryMap.get(key);
  108. }
  109. public int maxAssertions() {
  110. return maxAssertions;
  111. }
  112. public SortedSet<Date> datesInChronologicalOrder() {
  113. Set<Date> dates = summaryMap.keySet();
  114. SortedSet<Date> sortedDates = new TreeSet<Date>(dates);
  115. return sortedDates;
  116. }
  117. public PassFailBar getPassFailBar(Date date, int maxUnits) {
  118. PageTestSummary summary = summaryMap.get(date);
  119. int fail = summary.wrong + summary.exceptions;
  120. double unitsPerAssertion = (double)maxUnits/(double)maxAssertions;
  121. int unitsForThisTest = (int)Math.round((fail + summary.right) * unitsPerAssertion);
  122. double doubleFailUnits = fail * unitsPerAssertion;
  123. int failUnits = (int) doubleFailUnits;
  124. if (Math.abs(doubleFailUnits - failUnits) > .001)
  125. failUnits++;
  126. int passUnits = unitsForThisTest - failUnits;
  127. return new PassFailBar(summary.right, fail, passUnits, failUnits);
  128. }
  129. public static class PageTestSummary extends TestSummary {
  130. private Date date;
  131. PageTestSummary(Date date, int right, int wrong, int ignores, int exceptions) {
  132. super(right, wrong, ignores, exceptions);
  133. this.date = date;
  134. }
  135. public Date getDate() {
  136. return date;
  137. }
  138. }
  139. public static String formatDate(String format, Date date) {
  140. SimpleDateFormat fmt = new SimpleDateFormat(format);
  141. return fmt.format(date);
  142. }
  143. public static class BarGraph {
  144. private Date startingDate;
  145. private Date endingDate;
  146. private List<Boolean> passFailList = new ArrayList<Boolean>();
  147. public Date getStartingDate() {
  148. return startingDate;
  149. }
  150. public String formatStartingDate(String format) {
  151. return formatDate(format, startingDate);
  152. }
  153. public String formatEndingDate(String format) {
  154. return formatDate(format, endingDate);
  155. }
  156. public Date getEndingDate() {
  157. return endingDate;
  158. }
  159. public void addSummary(PageTestSummary summary) {
  160. minMaxDate(summary);
  161. passFailList.add(summary.wrong == 0 && summary.exceptions == 0 && summary.right > 0);
  162. }
  163. private void minMaxDate(PageTestSummary summary) {
  164. Date date = summary.getDate();
  165. if (startingDate == null)
  166. startingDate = endingDate = date;
  167. else if (date.getTime() < startingDate.getTime())
  168. startingDate = date;
  169. else if (date.getTime() > endingDate.getTime())
  170. endingDate = date;
  171. }
  172. public int size() {
  173. return passFailList.size();
  174. }
  175. public boolean getPassFail(int i) {
  176. return passFailList.get(i);
  177. }
  178. public Boolean[] passFailArray() {
  179. return passFailList.toArray(new Boolean[passFailList.size()]);
  180. }
  181. }
  182. public class PassFailBar {
  183. private int passUnits;
  184. private int failUnits;
  185. private int pass;
  186. private int fail;
  187. public PassFailBar(int pass, int fail, int passUnits, int failUnits) {
  188. this.pass = pass;
  189. this.fail = fail;
  190. this.passUnits = passUnits;
  191. this.failUnits = failUnits;
  192. }
  193. public int getPassUnits() {
  194. return passUnits;
  195. }
  196. public int getFailUnits() {
  197. return failUnits;
  198. }
  199. public int getPass() {
  200. return pass;
  201. }
  202. public int getFail() {
  203. return fail;
  204. }
  205. }
  206. }