NavigatorPanel.java revision 75dc72bcb18d5bdac3511ae2a83bd06ec479a1e3
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
1675dc72bcb18d5bdac3511ae2a83bd06ec479a1e3Cédric Beust  private List<INavigatorPanel> m_panels;
1775dc72bcb18d5bdac3511ae2a83bd06ec479a1e3Cédric Beust
1875dc72bcb18d5bdac3511ae2a83bd06ec479a1e3Cédric Beust  public NavigatorPanel(Model model, List<INavigatorPanel> panels) {
1973a5f0f792308fc7f7b972d5c7ae4936d85c7b2bCédric Beust    super(model);
2075dc72bcb18d5bdac3511ae2a83bd06ec479a1e3Cédric Beust    m_panels = panels;
21276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust  }
22276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
23276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust  @Override
2473a5f0f792308fc7f7b972d5c7ae4936d85c7b2bCédric Beust  public void generate(XMLStringBuffer main) {
251e3250e4d7fc3e52d172d4c504c257d2d5e82ea8Cédric Beust    main.push(D, C, "navigator-root");
26d89f766403c534b48fdac8cd4c6349905e63945cCédric Beust    main.push(D, C, "navigator-suite-header");
27d89f766403c534b48fdac8cd4c6349905e63945cCédric Beust    main.addRequired(S, "All suites");
28d89f766403c534b48fdac8cd4c6349905e63945cCédric Beust    main.push("a", C, "collapse-all-link", "href", "#", "title", "Collapse/expand all the suites");
29d89f766403c534b48fdac8cd4c6349905e63945cCédric Beust    main.push("img", "src", "collapseall.gif", C, "collapse-all-icon");
30d89f766403c534b48fdac8cd4c6349905e63945cCédric Beust    main.pop("img");
31d89f766403c534b48fdac8cd4c6349905e63945cCédric Beust    main.pop("a");
32d89f766403c534b48fdac8cd4c6349905e63945cCédric Beust    main.pop(D);
33276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust    int suiteCount = 0;
3473a5f0f792308fc7f7b972d5c7ae4936d85c7b2bCédric Beust    for (ISuite suite : getSuites()) {
35276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      if (suite.getResults().size() == 0) {
36276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust        continue;
37276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      }
38276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
39276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      String suiteName = "suite-" + suiteCount;
40276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
41276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      XMLStringBuffer header = new XMLStringBuffer(main.getCurrentIndent());
42276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
43276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      Map<String, ISuiteResult> results = suite.getResults();
44276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      int failed = 0;
45276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      int skipped = 0;
46276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      int passed = 0;
47276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      for (ISuiteResult result : results.values()) {
48276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust        ITestContext context = result.getTestContext();
49276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust        failed += context.getFailedTests().size();
50276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust        skipped += context.getSkippedTests().size();
51276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust        passed += context.getPassedTests().size();
52276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      }
53276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
54276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      // Suite name in big font
55276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      header.push(D, C, "suite");
560fe6cf657bd3740e8c877506169146565e37a557Cédric Beust      header.push(D, C, "rounded-window");
57276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      // Extra div so the highlighting logic will only highlight this line and not
58276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      // the entire container
590fe6cf657bd3740e8c877506169146565e37a557Cédric Beust      header.push(D, C, "suite-header light-rounded-window-top");
60276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      header.push("a", "href", "#",
61276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust          "panel-name", suiteName,
62276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust          C, "navigator-link");
630fe6cf657bd3740e8c877506169146565e37a557Cédric Beust      header.addOptional(S, suite.getName(),
640fe6cf657bd3740e8c877506169146565e37a557Cédric Beust          C, "suite-name border-" + getModel().getStatusForSuite(suite.getName()));
65276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      header.pop("a");
66276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      header.pop(D);
67276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
68b067aa6284d39e160c607c76e6a9bb0a0b76a732Cédric Beust      header.push(D, C, "navigator-suite-content");
69b067aa6284d39e160c607c76e6a9bb0a0b76a732Cédric Beust
708e33619cdbd62e5eb6569dcb99b2f7b0402a575dCédric Beust      generateInfo(header, suite);
71848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust      generateResult(header, failed, skipped, passed, suite, suiteName);
72276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
73276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      header.pop("ul");
74276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
75b067aa6284d39e160c607c76e6a9bb0a0b76a732Cédric Beust      header.pop(D); // suite-section-content
76276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      header.pop(D); // suite-header
77276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      header.pop(D); // suite
78276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
79b067aa6284d39e160c607c76e6a9bb0a0b76a732Cédric Beust      header.pop(D); // result-section
80b067aa6284d39e160c607c76e6a9bb0a0b76a732Cédric Beust
81b067aa6284d39e160c607c76e6a9bb0a0b76a732Cédric Beust      header.pop(D); // navigator-suite-content
82b067aa6284d39e160c607c76e6a9bb0a0b76a732Cédric Beust
83276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      main.addString(header.toXML());
84276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
85276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      suiteCount++;
86276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust    }
871e3250e4d7fc3e52d172d4c504c257d2d5e82ea8Cédric Beust    main.pop(D);
88276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust  }
89276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
90848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust  private void generateResult(XMLStringBuffer header, int failed, int skipped, int passed,
91848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust      ISuite suite, String suiteName) {
92848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    //
93848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    // Results
94848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    //
95848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.push(D, C, "result-section");
96848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust
97848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.push(D, C, "suite-section-title");
98848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.addRequired(S, "Results");
99848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.pop(D);
100848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust
101848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    // Method stats
102848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    int total = failed + skipped + passed;
103848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    String stats = String.format("%s, %s %s %s",
104848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust        pluralize(total, "method"),
105848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust        maybe(failed, "failed", ", "),
106848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust        maybe(skipped, "skipped", ", "),
107848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust        maybe(passed, "passed", ""));
108848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.push(D, C, "suite-section-content");
109848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.push("ul");
110848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.push("li");
111848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.addOptional(S, stats, C, "method-stats");
112848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.pop("li");
113848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust
11406342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    generateMethodList("Failed methods", new ResultsByStatus(suite, "failed", ITestResult.FAILURE),
11506342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust        suiteName, header);
11606342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    generateMethodList("Skipped methods", new ResultsByStatus(suite, "skipped", ITestResult.SKIP),
11706342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust        suiteName, header);
11806342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    generateMethodList("Passed methods", new ResultsByStatus(suite, "passed", ITestResult.SUCCESS),
11906342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust        suiteName, header);
120848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    }
121848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust
1228e33619cdbd62e5eb6569dcb99b2f7b0402a575dCédric Beust  private void generateInfo(XMLStringBuffer header, ISuite suite) {
123848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    //
124848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    // Info
125848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    //
126848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.push(D, C, "suite-section-title");
127848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.addRequired(S, "Info");
128848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.pop(D);
129848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust
130848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.push(D, C, "suite-section-content");
131848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust
132848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.push("ul");
133848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust
13475dc72bcb18d5bdac3511ae2a83bd06ec479a1e3Cédric Beust    // All the panels
13575dc72bcb18d5bdac3511ae2a83bd06ec479a1e3Cédric Beust    for (INavigatorPanel panel : m_panels) {
13675dc72bcb18d5bdac3511ae2a83bd06ec479a1e3Cédric Beust      addLinkTo(header, panel, suite);
13775dc72bcb18d5bdac3511ae2a83bd06ec479a1e3Cédric Beust    }
138848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust
139848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.pop("ul");
140848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.pop(D); // suite-section-content
141848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust  }
142848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust
143b67b89e0aff199b1b7ac2c67eb3d7c9222c1c046Cédric Beust  private void addLinkTo(XMLStringBuffer header, INavigatorPanel panel, ISuite suite) {
144c92c41936d66dda27d28929671ccd7d304d02781Cédric Beust    String text = panel.getNavigatorLink(suite);
1453432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust    header.push("li");
1463432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust    header.push("a", "href", "#",
1473432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust        "panel-name", panel.getPanelName(suite),
1483432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust        C, "navigator-link ");
149b67b89e0aff199b1b7ac2c67eb3d7c9222c1c046Cédric Beust    String className = panel.getClassName();
1503432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust    if (className != null) {
1513432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust      header.addOptional(S, text, C, className);
1523432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust    } else {
1533432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust      header.addOptional(S, text);
1543432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust    }
1553432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust    header.pop("a");
1563432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust    header.pop("li");
1573432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust  }
1583432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust
159276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust  private static String maybe(int count, String s, String sep) {
160276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust    return count > 0 ? count + " " + s + sep: "";
161276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust  }
162276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
16306342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust  private List<ITestResult> getMethodsByStatus(ISuite suite, int status) {
16406342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    List<ITestResult> result = Lists.newArrayList();
16506342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    List<ITestResult> testResults = getModel().getTestResults(suite);
16606342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    for (ITestResult tr : testResults) {
16706342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust      if (tr.getStatus() == status) {
16806342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust        result.add(tr);
16906342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust      }
17006342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    }
17106342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    Collections.sort(result, ResultsByClass.METHOD_NAME_COMPARATOR);
17206342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust
17306342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    return result;
17406342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust  }
17506342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust
17606342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust  private static interface IResultProvider {
17706342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    List<ITestResult> getResults();
17806342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    String getType();
17906342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust  }
18006342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust
18106342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust  private abstract static class BaseResultProvider implements IResultProvider {
18206342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    protected ISuite m_suite;
18306342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    protected String m_type;
18406342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    public BaseResultProvider(ISuite suite, String type) {
18506342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust      m_suite = suite;
18606342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust      m_type = type;
18706342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    }
1882ad7693fa5a5125aafeefff55ab96cbf8715d788Cédric Beust
18906342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    @Override
19006342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    public String getType() {
19106342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust      return m_type;
19206342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    }
19306342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust  }
19406342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust
19506342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust  private class ResultsByStatus extends BaseResultProvider {
19606342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    private final int m_status;
19706342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust
19806342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    public ResultsByStatus(ISuite suite, String type, int status) {
19906342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust      super(suite, type);
20006342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust      m_status = status;
20106342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    }
20206342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust
20306342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    @Override
20406342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    public List<ITestResult> getResults() {
20506342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust      return getMethodsByStatus(m_suite, m_status);
20606342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    }
20706342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust  }
20806342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust
20906342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust  private void generateMethodList(String name, IResultProvider provider,
210c66736dac6ae57ef48546ff1314ff8139655e2f5Cédric Beust      String suiteName, XMLStringBuffer main) {
211276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust    XMLStringBuffer xsb = new XMLStringBuffer(main.getCurrentIndent());
21206342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    String type = provider.getType();
213de5fa7ab1b0b8c0b9f6c07f286ccd4f46018f1f7Cédric Beust    String image = Model.getImage(type);
214e90fee42931eb3d671fb8fe1dbbaaedca789963dCédric Beust
215276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust    xsb.push("li");
216e90fee42931eb3d671fb8fe1dbbaaedca789963dCédric Beust
217e90fee42931eb3d671fb8fe1dbbaaedca789963dCédric Beust    // The methods themselves
218e90fee42931eb3d671fb8fe1dbbaaedca789963dCédric Beust    xsb.addRequired(S, name, C, "method-list-title " + type);
219e90fee42931eb3d671fb8fe1dbbaaedca789963dCédric Beust
220e90fee42931eb3d671fb8fe1dbbaaedca789963dCédric Beust    // The mark up to show the (hide)/(show) links
221e90fee42931eb3d671fb8fe1dbbaaedca789963dCédric Beust    xsb.push(S, C, "show-or-hide-methods " + type);
2225211845e4f8c7091941f5c233d72d2e8cb84a5eeCédric Beust    xsb.addRequired("a", " (hide)", "href", "#", C, "hide-methods " + type + " " + suiteName,
2235211845e4f8c7091941f5c233d72d2e8cb84a5eeCédric Beust        "panel-name", suiteName);
2245211845e4f8c7091941f5c233d72d2e8cb84a5eeCédric Beust    xsb.addRequired("a", " (show)", "href", "#",C, "show-methods " + type + " " + suiteName,
2255211845e4f8c7091941f5c233d72d2e8cb84a5eeCédric Beust        "panel-name", suiteName);
226e90fee42931eb3d671fb8fe1dbbaaedca789963dCédric Beust    xsb.pop(S);
227276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
228c66736dac6ae57ef48546ff1314ff8139655e2f5Cédric Beust    // List of methods
2295211845e4f8c7091941f5c233d72d2e8cb84a5eeCédric Beust    xsb.push(D, C, "method-list-content " + type + " " + suiteName);
230276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust    int count = 0;
23106342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    List<ITestResult> testResults = provider.getResults();
232e90fee42931eb3d671fb8fe1dbbaaedca789963dCédric Beust    if (testResults != null) {
233e90fee42931eb3d671fb8fe1dbbaaedca789963dCédric Beust      Collections.sort(testResults, ResultsByClass.METHOD_NAME_COMPARATOR);
234e90fee42931eb3d671fb8fe1dbbaaedca789963dCédric Beust      for (ITestResult tr : testResults) {
23506342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust        String testName = Model.getTestResultName(tr);
23606342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust        xsb.push(S);
23706342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust        xsb.addEmptyElement("img", "src", image, "width", "3%");
23806342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust        xsb.addRequired("a", testName, "href", "#",
23906342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust            "hash-for-method", getModel().getTag(tr),
24006342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust            "panel-name", suiteName,
24106342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust            "title", tr.getTestClass().getName(),
24206342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust            C, "method navigator-link");
24306342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust        xsb.pop(S);
24406342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust        xsb.addEmptyElement("br");
24506342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust        count++;
246276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      }
247276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust    }
248b067aa6284d39e160c607c76e6a9bb0a0b76a732Cédric Beust    xsb.pop(D);
249276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust    xsb.pop("li");
250276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
251276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust    if (count > 0) {
252276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      main.addString(xsb.toXML());
253276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust    }
254276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust  }
255276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
256276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust}
257