NavigatorPanel.java revision b67b89e0aff199b1b7ac2c67eb3d7c9222c1c046
1276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beustpackage org.testng.reporters.jq;
2276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
3276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beustimport org.testng.ISuite;
4276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beustimport org.testng.ISuiteResult;
5276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beustimport org.testng.ITestContext;
6276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beustimport org.testng.ITestResult;
706342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beustimport org.testng.collections.Lists;
8276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beustimport org.testng.reporters.XMLStringBuffer;
9276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
10c92a697e87fde8525e18f2fcb270533ee8545986Cédric Beustimport java.util.Collections;
11c92a697e87fde8525e18f2fcb270533ee8545986Cédric Beustimport java.util.List;
12276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beustimport java.util.Map;
13276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
1473a5f0f792308fc7f7b972d5c7ae4936d85c7b2bCédric Beustpublic class NavigatorPanel extends BasePanel {
1573a5f0f792308fc7f7b972d5c7ae4936d85c7b2bCédric Beust
16ba0fb55d58a3ea09ff7f027768106c3fc1e5cd40Cédric Beust  private TestNgXmlPanel m_testNgPanel;
17ba0fb55d58a3ea09ff7f027768106c3fc1e5cd40Cédric Beust  private TestPanel m_testPanel;
1854434b4aca8e38432b58d57ec8f16ef14aaafc7fCédric Beust  private GroupPanel m_groupPanel;
1903932733f81c510b12e4b391eb249c713301a402Cédric Beust  private TimesPanel m_timePanel;
2070fd043e61f436825c446ec484d39fbb2ded2f6bCédric Beust  private ReporterPanel m_reporterPanel;
212ad7693fa5a5125aafeefff55ab96cbf8715d788Cédric Beust  private IgnoredMethodsPanel m_ignoredMethodsPanel;
22234c85874acc0cd3360639949fbd566255ab31edCédric Beust  private ChronologicalPanel m_chronologicalPanel;
23ba0fb55d58a3ea09ff7f027768106c3fc1e5cd40Cédric Beust
2454434b4aca8e38432b58d57ec8f16ef14aaafc7fCédric Beust  public NavigatorPanel(Model model, TestNgXmlPanel testNgPanel, TestPanel testPanel,
252ad7693fa5a5125aafeefff55ab96cbf8715d788Cédric Beust      GroupPanel groupPanel, TimesPanel timePanel, ReporterPanel reporterPanel,
26234c85874acc0cd3360639949fbd566255ab31edCédric Beust      IgnoredMethodsPanel ignoredMethodsPanel,ChronologicalPanel chronologicalPanel) {
2773a5f0f792308fc7f7b972d5c7ae4936d85c7b2bCédric Beust    super(model);
28ba0fb55d58a3ea09ff7f027768106c3fc1e5cd40Cédric Beust    m_testNgPanel = testNgPanel;
29ba0fb55d58a3ea09ff7f027768106c3fc1e5cd40Cédric Beust    m_testPanel = testPanel;
3054434b4aca8e38432b58d57ec8f16ef14aaafc7fCédric Beust    m_groupPanel = groupPanel;
3171b49146fae442f11d76af035b279536e5c1d549Cédric Beust    m_timePanel = timePanel;
3270fd043e61f436825c446ec484d39fbb2ded2f6bCédric Beust    m_reporterPanel = reporterPanel;
332ad7693fa5a5125aafeefff55ab96cbf8715d788Cédric Beust    m_ignoredMethodsPanel = ignoredMethodsPanel;
34234c85874acc0cd3360639949fbd566255ab31edCédric Beust    m_chronologicalPanel = chronologicalPanel;
35276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust  }
36276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
37276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust  @Override
3873a5f0f792308fc7f7b972d5c7ae4936d85c7b2bCédric Beust  public void generate(XMLStringBuffer main) {
391e3250e4d7fc3e52d172d4c504c257d2d5e82ea8Cédric Beust    main.push(D, C, "navigator-root");
40d89f766403c534b48fdac8cd4c6349905e63945cCédric Beust    main.push(D, C, "navigator-suite-header");
41d89f766403c534b48fdac8cd4c6349905e63945cCédric Beust    main.addRequired(S, "All suites");
42d89f766403c534b48fdac8cd4c6349905e63945cCédric Beust    main.push("a", C, "collapse-all-link", "href", "#", "title", "Collapse/expand all the suites");
43d89f766403c534b48fdac8cd4c6349905e63945cCédric Beust    main.push("img", "src", "collapseall.gif", C, "collapse-all-icon");
44d89f766403c534b48fdac8cd4c6349905e63945cCédric Beust    main.pop("img");
45d89f766403c534b48fdac8cd4c6349905e63945cCédric Beust    main.pop("a");
46d89f766403c534b48fdac8cd4c6349905e63945cCédric Beust    main.pop(D);
47276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust    int suiteCount = 0;
4873a5f0f792308fc7f7b972d5c7ae4936d85c7b2bCédric Beust    for (ISuite suite : getSuites()) {
49276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      if (suite.getResults().size() == 0) {
50276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust        continue;
51276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      }
52276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
53276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      String suiteName = "suite-" + suiteCount;
54276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
55276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      XMLStringBuffer header = new XMLStringBuffer(main.getCurrentIndent());
56276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
57276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      Map<String, ISuiteResult> results = suite.getResults();
58276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      int failed = 0;
59276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      int skipped = 0;
60276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      int passed = 0;
61276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      for (ISuiteResult result : results.values()) {
62276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust        ITestContext context = result.getTestContext();
63276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust        failed += context.getFailedTests().size();
64276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust        skipped += context.getSkippedTests().size();
65276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust        passed += context.getPassedTests().size();
66276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      }
67276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
68276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      // Suite name in big font
69276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      header.push(D, C, "suite");
700fe6cf657bd3740e8c877506169146565e37a557Cédric Beust      header.push(D, C, "rounded-window");
71276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      // Extra div so the highlighting logic will only highlight this line and not
72276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      // the entire container
730fe6cf657bd3740e8c877506169146565e37a557Cédric Beust      header.push(D, C, "suite-header light-rounded-window-top");
74276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      header.push("a", "href", "#",
75276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust          "panel-name", suiteName,
76276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust          C, "navigator-link");
770fe6cf657bd3740e8c877506169146565e37a557Cédric Beust      header.addOptional(S, suite.getName(),
780fe6cf657bd3740e8c877506169146565e37a557Cédric Beust          C, "suite-name border-" + getModel().getStatusForSuite(suite.getName()));
79276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      header.pop("a");
80276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      header.pop(D);
81276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
82b067aa6284d39e160c607c76e6a9bb0a0b76a732Cédric Beust      header.push(D, C, "navigator-suite-content");
83b067aa6284d39e160c607c76e6a9bb0a0b76a732Cédric Beust
848e33619cdbd62e5eb6569dcb99b2f7b0402a575dCédric Beust      generateInfo(header, suite);
85848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust      generateResult(header, failed, skipped, passed, suite, suiteName);
86276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
87276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      header.pop("ul");
88276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
89b067aa6284d39e160c607c76e6a9bb0a0b76a732Cédric Beust      header.pop(D); // suite-section-content
90276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      header.pop(D); // suite-header
91276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      header.pop(D); // suite
92276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
93b067aa6284d39e160c607c76e6a9bb0a0b76a732Cédric Beust      header.pop(D); // result-section
94b067aa6284d39e160c607c76e6a9bb0a0b76a732Cédric Beust
95b067aa6284d39e160c607c76e6a9bb0a0b76a732Cédric Beust      header.pop(D); // navigator-suite-content
96b067aa6284d39e160c607c76e6a9bb0a0b76a732Cédric Beust
97276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      main.addString(header.toXML());
98276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
99276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      suiteCount++;
100276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust    }
1011e3250e4d7fc3e52d172d4c504c257d2d5e82ea8Cédric Beust    main.pop(D);
102276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust  }
103276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
104848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust  private void generateResult(XMLStringBuffer header, int failed, int skipped, int passed,
105848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust      ISuite suite, String suiteName) {
106848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    //
107848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    // Results
108848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    //
109848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.push(D, C, "result-section");
110848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust
111848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.push(D, C, "suite-section-title");
112848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.addRequired(S, "Results");
113848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.pop(D);
114848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust
115848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    // Method stats
116848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    int total = failed + skipped + passed;
117848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    String stats = String.format("%s, %s %s %s",
118848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust        pluralize(total, "method"),
119848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust        maybe(failed, "failed", ", "),
120848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust        maybe(skipped, "skipped", ", "),
121848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust        maybe(passed, "passed", ""));
122848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.push(D, C, "suite-section-content");
123848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.push("ul");
124848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.push("li");
125848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.addOptional(S, stats, C, "method-stats");
126848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.pop("li");
127848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust
12806342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    generateMethodList("Failed methods", new ResultsByStatus(suite, "failed", ITestResult.FAILURE),
12906342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust        suiteName, header);
13006342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    generateMethodList("Skipped methods", new ResultsByStatus(suite, "skipped", ITestResult.SKIP),
13106342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust        suiteName, header);
13206342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    generateMethodList("Passed methods", new ResultsByStatus(suite, "passed", ITestResult.SUCCESS),
13306342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust        suiteName, header);
134848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    }
135848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust
1368e33619cdbd62e5eb6569dcb99b2f7b0402a575dCédric Beust  private void generateInfo(XMLStringBuffer header, ISuite suite) {
137848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    //
138848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    // Info
139848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    //
140848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.push(D, C, "suite-section-title");
141848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.addRequired(S, "Info");
142848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.pop(D);
143848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust
144848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    //
145848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    // Info
146848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    //
147848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.push(D, C, "suite-section-content");
148848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust
149848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.push("ul");
150848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust
151848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    // "59 Tests"
152b67b89e0aff199b1b7ac2c67eb3d7c9222c1c046Cédric Beust    addLinkTo(header, m_testPanel, suite);
153848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust
154848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    // "12 groups"
155b67b89e0aff199b1b7ac2c67eb3d7c9222c1c046Cédric Beust    addLinkTo(header, m_groupPanel, suite);
156848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust
15771b49146fae442f11d76af035b279536e5c1d549Cédric Beust    // Times
158b67b89e0aff199b1b7ac2c67eb3d7c9222c1c046Cédric Beust    addLinkTo(header, m_timePanel, suite);
15971b49146fae442f11d76af035b279536e5c1d549Cédric Beust
16070fd043e61f436825c446ec484d39fbb2ded2f6bCédric Beust    // Reporter
161b67b89e0aff199b1b7ac2c67eb3d7c9222c1c046Cédric Beust    addLinkTo(header, m_reporterPanel, suite);
16270fd043e61f436825c446ec484d39fbb2ded2f6bCédric Beust
163234c85874acc0cd3360639949fbd566255ab31edCédric Beust    // Chronological
164b67b89e0aff199b1b7ac2c67eb3d7c9222c1c046Cédric Beust    addLinkTo(header, m_chronologicalPanel, suite);
165234c85874acc0cd3360639949fbd566255ab31edCédric Beust
1662ad7693fa5a5125aafeefff55ab96cbf8715d788Cédric Beust    // Ignored methods
167b67b89e0aff199b1b7ac2c67eb3d7c9222c1c046Cédric Beust    addLinkTo(header, m_ignoredMethodsPanel, suite);
1682ad7693fa5a5125aafeefff55ab96cbf8715d788Cédric Beust
169848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    // "testng.xml"
170b67b89e0aff199b1b7ac2c67eb3d7c9222c1c046Cédric Beust    addLinkTo(header, m_testNgPanel, suite);
171848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust
172848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.pop("ul");
173848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.pop(D); // suite-section-content
174848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust  }
175848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust
176b67b89e0aff199b1b7ac2c67eb3d7c9222c1c046Cédric Beust  private void addLinkTo(XMLStringBuffer header, INavigatorPanel panel, ISuite suite) {
177c92c41936d66dda27d28929671ccd7d304d02781Cédric Beust    String text = panel.getNavigatorLink(suite);
1783432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust    header.push("li");
1793432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust    header.push("a", "href", "#",
1803432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust        "panel-name", panel.getPanelName(suite),
1813432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust        C, "navigator-link ");
182b67b89e0aff199b1b7ac2c67eb3d7c9222c1c046Cédric Beust    String className = panel.getClassName();
1833432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust    if (className != null) {
1843432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust      header.addOptional(S, text, C, className);
1853432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust    } else {
1863432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust      header.addOptional(S, text);
1873432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust    }
1883432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust    header.pop("a");
1893432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust    header.pop("li");
1903432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust  }
1913432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust
192276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust  private static String maybe(int count, String s, String sep) {
193276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust    return count > 0 ? count + " " + s + sep: "";
194276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust  }
195276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
19606342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust  private List<ITestResult> getMethodsByStatus(ISuite suite, int status) {
19706342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    List<ITestResult> result = Lists.newArrayList();
19806342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    List<ITestResult> testResults = getModel().getTestResults(suite);
19906342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    for (ITestResult tr : testResults) {
20006342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust      if (tr.getStatus() == status) {
20106342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust        result.add(tr);
20206342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust      }
20306342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    }
20406342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    Collections.sort(result, ResultsByClass.METHOD_NAME_COMPARATOR);
20506342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust
20606342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    return result;
20706342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust  }
20806342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust
20906342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust  private static interface IResultProvider {
21006342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    List<ITestResult> getResults();
21106342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    String getType();
21206342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust  }
21306342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust
21406342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust  private abstract static class BaseResultProvider implements IResultProvider {
21506342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    protected ISuite m_suite;
21606342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    protected String m_type;
21706342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    public BaseResultProvider(ISuite suite, String type) {
21806342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust      m_suite = suite;
21906342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust      m_type = type;
22006342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    }
2212ad7693fa5a5125aafeefff55ab96cbf8715d788Cédric Beust
22206342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    @Override
22306342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    public String getType() {
22406342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust      return m_type;
22506342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    }
22606342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust  }
22706342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust
22806342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust  private class ResultsByStatus extends BaseResultProvider {
22906342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    private final int m_status;
23006342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust
23106342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    public ResultsByStatus(ISuite suite, String type, int status) {
23206342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust      super(suite, type);
23306342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust      m_status = status;
23406342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    }
23506342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust
23606342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    @Override
23706342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    public List<ITestResult> getResults() {
23806342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust      return getMethodsByStatus(m_suite, m_status);
23906342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    }
24006342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust  }
24106342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust
24206342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust  private void generateMethodList(String name, IResultProvider provider,
243c66736dac6ae57ef48546ff1314ff8139655e2f5Cédric Beust      String suiteName, XMLStringBuffer main) {
244276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust    XMLStringBuffer xsb = new XMLStringBuffer(main.getCurrentIndent());
24506342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    String type = provider.getType();
246de5fa7ab1b0b8c0b9f6c07f286ccd4f46018f1f7Cédric Beust    String image = Model.getImage(type);
247e90fee42931eb3d671fb8fe1dbbaaedca789963dCédric Beust
248276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust    xsb.push("li");
249e90fee42931eb3d671fb8fe1dbbaaedca789963dCédric Beust
250e90fee42931eb3d671fb8fe1dbbaaedca789963dCédric Beust    // The methods themselves
251e90fee42931eb3d671fb8fe1dbbaaedca789963dCédric Beust    xsb.addRequired(S, name, C, "method-list-title " + type);
252e90fee42931eb3d671fb8fe1dbbaaedca789963dCédric Beust
253e90fee42931eb3d671fb8fe1dbbaaedca789963dCédric Beust    // The mark up to show the (hide)/(show) links
254e90fee42931eb3d671fb8fe1dbbaaedca789963dCédric Beust    xsb.push(S, C, "show-or-hide-methods " + type);
2555211845e4f8c7091941f5c233d72d2e8cb84a5eeCédric Beust    xsb.addRequired("a", " (hide)", "href", "#", C, "hide-methods " + type + " " + suiteName,
2565211845e4f8c7091941f5c233d72d2e8cb84a5eeCédric Beust        "panel-name", suiteName);
2575211845e4f8c7091941f5c233d72d2e8cb84a5eeCédric Beust    xsb.addRequired("a", " (show)", "href", "#",C, "show-methods " + type + " " + suiteName,
2585211845e4f8c7091941f5c233d72d2e8cb84a5eeCédric Beust        "panel-name", suiteName);
259e90fee42931eb3d671fb8fe1dbbaaedca789963dCédric Beust    xsb.pop(S);
260276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
261c66736dac6ae57ef48546ff1314ff8139655e2f5Cédric Beust    // List of methods
2625211845e4f8c7091941f5c233d72d2e8cb84a5eeCédric Beust    xsb.push(D, C, "method-list-content " + type + " " + suiteName);
263276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust    int count = 0;
26406342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    List<ITestResult> testResults = provider.getResults();
265e90fee42931eb3d671fb8fe1dbbaaedca789963dCédric Beust    if (testResults != null) {
266e90fee42931eb3d671fb8fe1dbbaaedca789963dCédric Beust      Collections.sort(testResults, ResultsByClass.METHOD_NAME_COMPARATOR);
267e90fee42931eb3d671fb8fe1dbbaaedca789963dCédric Beust      for (ITestResult tr : testResults) {
26806342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust        String testName = Model.getTestResultName(tr);
26906342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust        xsb.push(S);
27006342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust        xsb.addEmptyElement("img", "src", image, "width", "3%");
27106342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust        xsb.addRequired("a", testName, "href", "#",
27206342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust            "hash-for-method", getModel().getTag(tr),
27306342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust            "panel-name", suiteName,
27406342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust            "title", tr.getTestClass().getName(),
27506342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust            C, "method navigator-link");
27606342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust        xsb.pop(S);
27706342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust        xsb.addEmptyElement("br");
27806342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust        count++;
279276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      }
280276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust    }
281b067aa6284d39e160c607c76e6a9bb0a0b76a732Cédric Beust    xsb.pop(D);
282276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust    xsb.pop("li");
283276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
284276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust    if (count > 0) {
285276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      main.addString(xsb.toXML());
286276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust    }
287276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust  }
288276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
289276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust}
290