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);
3373a5f0f792308fc7f7b972d5c7ae4936d85c7b2bCédric Beust    for (ISuite suite : getSuites()) {
34276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      if (suite.getResults().size() == 0) {
35276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust        continue;
36276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      }
37276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
38324f5bfc4d7bc7d34b83e8a5f9c2cf7dcc3eeca3Cédric Beust      String suiteName = "suite-" + suiteToTag(suite);
39276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
40276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      XMLStringBuffer header = new XMLStringBuffer(main.getCurrentIndent());
41276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
42276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      Map<String, ISuiteResult> results = suite.getResults();
43276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      int failed = 0;
44276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      int skipped = 0;
45276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      int passed = 0;
46276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      for (ISuiteResult result : results.values()) {
47276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust        ITestContext context = result.getTestContext();
48276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust        failed += context.getFailedTests().size();
49276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust        skipped += context.getSkippedTests().size();
50276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust        passed += context.getPassedTests().size();
51276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      }
52276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
53276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      // Suite name in big font
54276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      header.push(D, C, "suite");
550fe6cf657bd3740e8c877506169146565e37a557Cédric Beust      header.push(D, C, "rounded-window");
56276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      // Extra div so the highlighting logic will only highlight this line and not
57276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      // the entire container
580fe6cf657bd3740e8c877506169146565e37a557Cédric Beust      header.push(D, C, "suite-header light-rounded-window-top");
59276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      header.push("a", "href", "#",
60276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust          "panel-name", suiteName,
61276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust          C, "navigator-link");
620fe6cf657bd3740e8c877506169146565e37a557Cédric Beust      header.addOptional(S, suite.getName(),
630fe6cf657bd3740e8c877506169146565e37a557Cédric Beust          C, "suite-name border-" + getModel().getStatusForSuite(suite.getName()));
64276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      header.pop("a");
65276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      header.pop(D);
66276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
67b067aa6284d39e160c607c76e6a9bb0a0b76a732Cédric Beust      header.push(D, C, "navigator-suite-content");
68b067aa6284d39e160c607c76e6a9bb0a0b76a732Cédric Beust
698e33619cdbd62e5eb6569dcb99b2f7b0402a575dCédric Beust      generateInfo(header, suite);
70848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust      generateResult(header, failed, skipped, passed, suite, suiteName);
71276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
72276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      header.pop("ul");
73276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
74b067aa6284d39e160c607c76e6a9bb0a0b76a732Cédric Beust      header.pop(D); // suite-section-content
75276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      header.pop(D); // suite-header
76276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      header.pop(D); // suite
77276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
78b067aa6284d39e160c607c76e6a9bb0a0b76a732Cédric Beust      header.pop(D); // result-section
79b067aa6284d39e160c607c76e6a9bb0a0b76a732Cédric Beust
80b067aa6284d39e160c607c76e6a9bb0a0b76a732Cédric Beust      header.pop(D); // navigator-suite-content
81b067aa6284d39e160c607c76e6a9bb0a0b76a732Cédric Beust
82276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      main.addString(header.toXML());
83276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust    }
841e3250e4d7fc3e52d172d4c504c257d2d5e82ea8Cédric Beust    main.pop(D);
85276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust  }
86276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
87848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust  private void generateResult(XMLStringBuffer header, int failed, int skipped, int passed,
88848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust      ISuite suite, String suiteName) {
89848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    //
90848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    // Results
91848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    //
92848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.push(D, C, "result-section");
93848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust
94848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.push(D, C, "suite-section-title");
95848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.addRequired(S, "Results");
96848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.pop(D);
97848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust
98848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    // Method stats
99848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    int total = failed + skipped + passed;
100848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    String stats = String.format("%s, %s %s %s",
101848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust        pluralize(total, "method"),
102848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust        maybe(failed, "failed", ", "),
103848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust        maybe(skipped, "skipped", ", "),
104848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust        maybe(passed, "passed", ""));
105848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.push(D, C, "suite-section-content");
106848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.push("ul");
107848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.push("li");
108848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.addOptional(S, stats, C, "method-stats");
109848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.pop("li");
110848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust
11106342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    generateMethodList("Failed methods", new ResultsByStatus(suite, "failed", ITestResult.FAILURE),
11206342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust        suiteName, header);
11306342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    generateMethodList("Skipped methods", new ResultsByStatus(suite, "skipped", ITestResult.SKIP),
11406342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust        suiteName, header);
11506342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    generateMethodList("Passed methods", new ResultsByStatus(suite, "passed", ITestResult.SUCCESS),
11606342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust        suiteName, header);
117848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    }
118848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust
1198e33619cdbd62e5eb6569dcb99b2f7b0402a575dCédric Beust  private void generateInfo(XMLStringBuffer header, ISuite suite) {
120848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    //
121848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    // Info
122848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    //
123848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.push(D, C, "suite-section-title");
124848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.addRequired(S, "Info");
125848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.pop(D);
126848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust
127848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.push(D, C, "suite-section-content");
128848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust
129848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.push("ul");
130848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust
13175dc72bcb18d5bdac3511ae2a83bd06ec479a1e3Cédric Beust    // All the panels
13275dc72bcb18d5bdac3511ae2a83bd06ec479a1e3Cédric Beust    for (INavigatorPanel panel : m_panels) {
13375dc72bcb18d5bdac3511ae2a83bd06ec479a1e3Cédric Beust      addLinkTo(header, panel, suite);
13475dc72bcb18d5bdac3511ae2a83bd06ec479a1e3Cédric Beust    }
135848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust
136848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.pop("ul");
137848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust    header.pop(D); // suite-section-content
138848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust  }
139848fa8ad10fce699e7d761825054d070b8ebfec1Cédric Beust
140b67b89e0aff199b1b7ac2c67eb3d7c9222c1c046Cédric Beust  private void addLinkTo(XMLStringBuffer header, INavigatorPanel panel, ISuite suite) {
141c92c41936d66dda27d28929671ccd7d304d02781Cédric Beust    String text = panel.getNavigatorLink(suite);
1423432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust    header.push("li");
1433432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust    header.push("a", "href", "#",
1443432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust        "panel-name", panel.getPanelName(suite),
1453432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust        C, "navigator-link ");
146b67b89e0aff199b1b7ac2c67eb3d7c9222c1c046Cédric Beust    String className = panel.getClassName();
1473432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust    if (className != null) {
1483432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust      header.addOptional(S, text, C, className);
1493432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust    } else {
1503432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust      header.addOptional(S, text);
1513432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust    }
1523432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust    header.pop("a");
1533432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust    header.pop("li");
1543432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust  }
1553432a37713dd061e6bdbb204376ef232d91cc132Cédric Beust
156276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust  private static String maybe(int count, String s, String sep) {
157276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust    return count > 0 ? count + " " + s + sep: "";
158276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust  }
159276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
16006342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust  private List<ITestResult> getMethodsByStatus(ISuite suite, int status) {
16106342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    List<ITestResult> result = Lists.newArrayList();
16206342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    List<ITestResult> testResults = getModel().getTestResults(suite);
16306342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    for (ITestResult tr : testResults) {
16406342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust      if (tr.getStatus() == status) {
16506342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust        result.add(tr);
16606342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust      }
16706342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    }
16806342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    Collections.sort(result, ResultsByClass.METHOD_NAME_COMPARATOR);
16906342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust
17006342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    return result;
17106342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust  }
17206342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust
17306342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust  private static interface IResultProvider {
17406342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    List<ITestResult> getResults();
17506342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    String getType();
17606342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust  }
17706342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust
17806342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust  private abstract static class BaseResultProvider implements IResultProvider {
17906342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    protected ISuite m_suite;
18006342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    protected String m_type;
18106342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    public BaseResultProvider(ISuite suite, String type) {
18206342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust      m_suite = suite;
18306342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust      m_type = type;
18406342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    }
1852ad7693fa5a5125aafeefff55ab96cbf8715d788Cédric Beust
18606342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    @Override
18706342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    public String getType() {
18806342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust      return m_type;
18906342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    }
19006342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust  }
19106342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust
19206342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust  private class ResultsByStatus extends BaseResultProvider {
19306342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    private final int m_status;
19406342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust
19506342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    public ResultsByStatus(ISuite suite, String type, int status) {
19606342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust      super(suite, type);
19706342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust      m_status = status;
19806342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    }
19906342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust
20006342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    @Override
20106342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    public List<ITestResult> getResults() {
20206342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust      return getMethodsByStatus(m_suite, m_status);
20306342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    }
20406342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust  }
20506342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust
20606342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust  private void generateMethodList(String name, IResultProvider provider,
207c66736dac6ae57ef48546ff1314ff8139655e2f5Cédric Beust      String suiteName, XMLStringBuffer main) {
208276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust    XMLStringBuffer xsb = new XMLStringBuffer(main.getCurrentIndent());
20906342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    String type = provider.getType();
210de5fa7ab1b0b8c0b9f6c07f286ccd4f46018f1f7Cédric Beust    String image = Model.getImage(type);
211e90fee42931eb3d671fb8fe1dbbaaedca789963dCédric Beust
212276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust    xsb.push("li");
213e90fee42931eb3d671fb8fe1dbbaaedca789963dCédric Beust
214e90fee42931eb3d671fb8fe1dbbaaedca789963dCédric Beust    // The methods themselves
215e90fee42931eb3d671fb8fe1dbbaaedca789963dCédric Beust    xsb.addRequired(S, name, C, "method-list-title " + type);
216e90fee42931eb3d671fb8fe1dbbaaedca789963dCédric Beust
217e90fee42931eb3d671fb8fe1dbbaaedca789963dCédric Beust    // The mark up to show the (hide)/(show) links
218e90fee42931eb3d671fb8fe1dbbaaedca789963dCédric Beust    xsb.push(S, C, "show-or-hide-methods " + type);
2195211845e4f8c7091941f5c233d72d2e8cb84a5eeCédric Beust    xsb.addRequired("a", " (hide)", "href", "#", C, "hide-methods " + type + " " + suiteName,
2205211845e4f8c7091941f5c233d72d2e8cb84a5eeCédric Beust        "panel-name", suiteName);
2215211845e4f8c7091941f5c233d72d2e8cb84a5eeCédric Beust    xsb.addRequired("a", " (show)", "href", "#",C, "show-methods " + type + " " + suiteName,
2225211845e4f8c7091941f5c233d72d2e8cb84a5eeCédric Beust        "panel-name", suiteName);
223e90fee42931eb3d671fb8fe1dbbaaedca789963dCédric Beust    xsb.pop(S);
224276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
225c66736dac6ae57ef48546ff1314ff8139655e2f5Cédric Beust    // List of methods
2265211845e4f8c7091941f5c233d72d2e8cb84a5eeCédric Beust    xsb.push(D, C, "method-list-content " + type + " " + suiteName);
227276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust    int count = 0;
22806342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust    List<ITestResult> testResults = provider.getResults();
229e90fee42931eb3d671fb8fe1dbbaaedca789963dCédric Beust    if (testResults != null) {
230e90fee42931eb3d671fb8fe1dbbaaedca789963dCédric Beust      Collections.sort(testResults, ResultsByClass.METHOD_NAME_COMPARATOR);
231e90fee42931eb3d671fb8fe1dbbaaedca789963dCédric Beust      for (ITestResult tr : testResults) {
23206342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust        String testName = Model.getTestResultName(tr);
23306342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust        xsb.push(S);
23406342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust        xsb.addEmptyElement("img", "src", image, "width", "3%");
23506342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust        xsb.addRequired("a", testName, "href", "#",
23606342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust            "hash-for-method", getModel().getTag(tr),
23706342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust            "panel-name", suiteName,
23806342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust            "title", tr.getTestClass().getName(),
23906342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust            C, "method navigator-link");
24006342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust        xsb.pop(S);
24106342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust        xsb.addEmptyElement("br");
24206342fe6ccf1d8acadccd8a6edec29719df92752Cédric Beust        count++;
243276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      }
244276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust    }
245b067aa6284d39e160c607c76e6a9bb0a0b76a732Cédric Beust    xsb.pop(D);
246276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust    xsb.pop("li");
247276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
248276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust    if (count > 0) {
249276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust      main.addString(xsb.toXML());
250276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust    }
251276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust  }
252276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust
253276cc499a809d1363cc25d2d7590033ccc5bcf52Cédric Beust}
254