1 package hudson.tasks.junit; 2 3 import hudson.model.AbstractBuild; 4 import hudson.util.IOException2; 5 import org.apache.tools.ant.DirectoryScanner; 6 import org.dom4j.DocumentException; 7 import org.kohsuke.stapler.StaplerRequest; 8 import org.kohsuke.stapler.StaplerResponse; 9 10 import java.io.File ; 11 import java.io.IOException ; 12 import java.util.ArrayList ; 13 import java.util.Collection ; 14 import java.util.Collections ; 15 import java.util.HashMap ; 16 import java.util.List ; 17 import java.util.Map ; 18 import java.util.TreeMap ; 19 20 25 public final class TestResult extends MetaTabulatedResult { 26 30 private final List <SuiteResult> suites = new ArrayList <SuiteResult>(); 31 32 35 private transient Map <String ,SuiteResult> suitesByName; 36 37 40 private transient Map <String ,PackageResult> byPackages; 41 42 private transient TestResultAction parent; 44 45 48 private transient int totalTests; 49 52 private transient List <CaseResult> failedTests; 53 54 57 TestResult() { 58 } 59 60 64 public TestResult(long buildTime, DirectoryScanner results) throws IOException { 65 String [] includedFiles = results.getIncludedFiles(); 66 File baseDir = results.getBasedir(); 67 68 for (String value : includedFiles) { 69 File reportFile = new File (baseDir, value); 70 if(buildTime <= reportFile.lastModified()) 72 parse(reportFile); 73 } 74 } 75 76 79 public void parse(File reportFile) throws IOException { 80 try { 81 suites.add(new SuiteResult(reportFile)); 82 } catch (DocumentException e) { 83 throw new IOException2("Failed to read "+reportFile,e); 84 } 85 } 86 87 public String getDisplayName() { 88 return "Test Result"; 89 } 90 91 public AbstractBuild<?,?> getOwner() { 92 return parent.owner; 93 } 94 95 @Override 96 public TestResult getPreviousResult() { 97 TestResultAction p = parent.getPreviousResult(); 98 if(p!=null) 99 return p.getResult(); 100 else 101 return null; 102 } 103 104 public String getTitle() { 105 return "Test Result"; 106 } 107 108 public String getChildTitle() { 109 return "Package"; 110 } 111 112 @Override 113 public int getPassCount() { 114 return totalTests-getFailCount(); 115 } 116 117 @Override 118 public int getFailCount() { 119 return failedTests.size(); 120 } 121 122 @Override 123 public List <CaseResult> getFailedTests() { 124 return failedTests; 125 } 126 127 @Override 128 public Collection <PackageResult> getChildren() { 129 return byPackages.values(); 130 } 131 132 public PackageResult getDynamic(String packageName, StaplerRequest req, StaplerResponse rsp) { 133 return byPackage(packageName); 134 } 135 136 public PackageResult byPackage(String packageName) { 137 return byPackages.get(packageName); 138 } 139 140 public SuiteResult getSuite(String name) { 141 return suitesByName.get(name); 142 } 143 144 152 public void freeze(TestResultAction parent) { 153 this.parent = parent; 154 if(suitesByName==null) { 155 suitesByName = new HashMap <String ,SuiteResult>(); 157 totalTests = 0; 158 failedTests = new ArrayList <CaseResult>(); 159 byPackages = new TreeMap <String ,PackageResult>(); 160 } 161 162 for (SuiteResult s : suites) { 163 if(!s.freeze(this)) 164 continue; 165 166 suitesByName.put(s.getName(),s); 167 168 totalTests += s.getCases().size(); 169 for(CaseResult cr : s.getCases()) { 170 if(!cr.isPassed()) 171 failedTests.add(cr); 172 173 String pkg = cr.getPackageName(); 174 PackageResult pr = byPackage(pkg); 175 if(pr==null) 176 byPackages.put(pkg,pr=new PackageResult(this,pkg)); 177 pr.add(cr); 178 } 179 } 180 181 Collections.sort(failedTests,CaseResult.BY_AGE); 182 183 for (PackageResult pr : byPackages.values()) 184 pr.freeze(); 185 } 186 } 187 | Popular Tags |