1 package org.testng.reporters.jq; 2 3 import static org.testng.reporters.jq.BasePanel.C; 4 import static org.testng.reporters.jq.BasePanel.D; 5 6 import org.testng.IReporter; 7 import org.testng.ISuite; 8 import org.testng.internal.Utils; 9 import org.testng.reporters.Files; 10 import org.testng.reporters.XMLStringBuffer; 11 import org.testng.xml.XmlSuite; 12 13 import java.io.File; 14 import java.io.IOException; 15 import java.io.InputStream; 16 import java.util.Arrays; 17 import java.util.List; 18 19 public class Main implements IReporter { 20 private static final String[] RESOURCES = new String[] { 21 "jquery-1.7.1.min.js", "testng-reports.css", "testng-reports.js", 22 "passed.png", "failed.png", "skipped.png", "navigator-bullet.png", 23 "bullet_point.png", "collapseall.gif" 24 }; 25 26 private Model m_model; 27 private String m_outputDirectory; 28 29 @Override 30 public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites, 31 String outputDirectory) { 32 m_model = new Model(suites); 33 m_outputDirectory = outputDirectory; 34 35 XMLStringBuffer xsb = new XMLStringBuffer(" "); 36 37 // Generate the top banner 38 new BannerPanel(m_model).generate(xsb); 39 40 // All the panels selectable from the navigator 41 List<INavigatorPanel> panels = Arrays.<INavigatorPanel>asList( 42 new TestNgXmlPanel(m_model), 43 new TestPanel(m_model), 44 new GroupPanel(m_model), 45 new TimesPanel(m_model), 46 new ReporterPanel(m_model), 47 new IgnoredMethodsPanel(m_model), 48 new ChronologicalPanel(m_model)); 49 50 // Generate the navigator on the left hand side 51 new NavigatorPanel(m_model, panels).generate(xsb); 52 53 xsb.push(D, C, "wrapper"); 54 xsb.push(D, "class", "main-panel-root"); 55 56 // 57 // Generate the main suite panel 58 // 59 new SuitePanel(m_model).generate(xsb); 60 61 // Generate all the navigator panels 62 for (INavigatorPanel panel : panels) { 63 panel.generate(xsb); 64 } 65 66 xsb.pop(D); // main-panel-root 67 xsb.pop(D); // wrapper 68 69 xsb.addString(" </body>\n"); 70 xsb.addString("</html>\n"); 71 72 String all; 73 try { 74 try (InputStream header = getClass().getResourceAsStream("/header")) { 75 if (header == null) { 76 throw new RuntimeException("Couldn't find resource header"); 77 } 78 for (String fileName : RESOURCES) { 79 try (InputStream is = getClass().getResourceAsStream("/" + fileName)) { 80 if (is == null) { 81 throw new AssertionError("Couldn't find resource: " + fileName); 82 } 83 Files.copyFile(is, new File(m_outputDirectory, fileName)); 84 } 85 } 86 all = Files.readFile(header); 87 Utils.writeUtf8File(m_outputDirectory, "index.html", xsb, all); 88 } 89 } catch (IOException e) { 90 // TODO Auto-generated catch block 91 e.printStackTrace(); 92 } 93 } 94 95 } 96