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