package org.jenkinsci.plugins.quarantine; import hudson.Extension; import hudson.model.TopLevelItem; import hudson.model.Hudson; import hudson.model.Job; import hudson.model.RootAction; import hudson.model.Run; import hudson.model.View; import hudson.tasks.junit.SuiteResult; import hudson.tasks.junit.TestResultAction; import hudson.tasks.junit.CaseResult; import hudson.tasks.test.TestResult; import java.util.ArrayList; import java.util.List; import org.kohsuke.stapler.Stapler; import org.kohsuke.stapler.StaplerRequest; @Extension public class QuarantinedTestsReport implements RootAction { public QuarantinedTestsReport() { } public String getIconFileName() { return "/plugin/quarantine/icons/quarantine-24x24.png"; } public String getUrlName() { return "/quarantine"; } public View getOwner() { StaplerRequest request = Stapler.getCurrentRequest(); if (request != null) { View view = request.findAncestorObject(View.class); if (view != null) { return view; } } return Hudson.getInstance().getView("All"); } public QuarantineTestAction getAction(CaseResult test) { return test.getTestAction(QuarantineTestAction.class); } public List<CaseResult> getQuarantinedTests() { ArrayList<CaseResult> list = new ArrayList<CaseResult>(); for (TopLevelItem item : getOwner().getItems()) { if (item instanceof Job) { Job job = (Job) item; Run lb = job.getLastBuild(); while (lb != null && (lb.hasntStartedYet() || lb.isBuilding())) lb = lb.getPreviousBuild(); if (lb != null && lb.getAction(TestResultAction.class) != null) { for (SuiteResult suite : lb.getAction(TestResultAction.class).getResult().getSuites()) { for (CaseResult test : suite.getCases()) { QuarantineTestAction action = test.getTestAction(QuarantineTestAction.class); if (action != null && action.isQuarantined()) { list.add(test); } } } } } } return list; } public int getNumberOfSuccessivePasses(CaseResult test) { int count = 0; for (TestResult result : test.getHistory().getList()) { if (result.isPassed()) { count++; } else { return count; } } return count; } public String getDisplayName() { return Messages.QuarantinedTestsReport_DisplayName(); } }