Home | History | Annotate | Download | only in jq
      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