/** * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright (c) 2006 Sun Microsystems Inc. All Rights Reserved * * The contents of this file are subject to the terms * of the Common Development and Distribution License * (the License). You may not use this file except in * compliance with the License. * * You can obtain a copy of the License at * https://opensso.dev.java.net/public/CDDLv1.0.html or * opensso/legal/CDDLv1.0.txt * See the License for the specific language governing * permission and limitations under the License. * * When distributing Covered Code, include this CDDL * Header Notice in each file and include the License file * at opensso/legal/CDDLv1.0.txt. * If applicable, add the following below the CDDL Header, * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * * $Id: ReportGenerator.java,v 1.2 2008/06/25 05:53:06 qcheng Exp $ * */ package com.sun.identity.shared.test.tools; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.TreeSet; import javax.xml.parsers.ParserConfigurationException; import org.xml.sax.SAXException; /** * This class generates HTML report based on testNG result XML * file. */ public class ReportGenerator { private String dataDir; private String templateDir; private String outputDir; private List suitesPassed = new ArrayList(); private List suitesFailed = new ArrayList(); /** * Creates an instance of ReportGenerator object. * * @param dataDir Directory where code>testNG result XML resides. * @param templateDir Directory where HTML templates reside. * @param outputDir Directory to place the HTML reports. */ public ReportGenerator( String dataDir, String templateDir, String outputDir ) { this.dataDir = dataDir; this.templateDir = templateDir; this.outputDir = outputDir; } /** * Creates HTML report. * * @throws ParserConfigurationException if the testNG * report XML is not well formed. * @throws SAXException if the testNG report XML is not * well formed. * @throws IOException if the testNG report XML is not * accessible. */ public void createHTMLReports() throws ParserConfigurationException, SAXException, IOException { Set directories = getDirectories(); for (File f : directories) { Suite suite = new Suite(f); if (suite.passed()) { suitesPassed.add(suite); } else { suitesFailed.add(suite); } } genMainPage(); } private void genMainPage() throws IOException { String templateIndex = getFileContent(templateDir + "/index.html"); StringBuffer buff = new StringBuffer(); for (Suite s : suitesFailed) { buff.append(s.toHTML()); s.createHTMLReports(templateDir, outputDir); } for (Suite s : suitesPassed) { buff.append(s.toHTML()); s.createHTMLReports(templateDir, outputDir); } writeToFile(templateIndex.replaceAll("", buff.toString()), outputDir + "/index.html"); } private Set getDirectories() { Set directories = new TreeSet(); File oDir = new File(dataDir); File[] files = oDir.listFiles(); for (int i = 0; i < files.length; i++) { File f = files[i]; if (!f.getName().startsWith(".") && f.isDirectory()) { directories.add(f); } } return directories; } /** * Writes content to a file. * * @param content Content to be written. * @param fileName Name of file of which content is written to. * @throws IOException if content cannot be written. */ public static void writeToFile(String content, String fileName) throws IOException { FileWriter fw = null; try { fw = new FileWriter(fileName); fw.write(content, 0, content.length()); } finally { if (fw != null) { fw.close(); } } } /** * Returns content of a file. * * @param fileName Name of the file. * @return Content of a file. * @throws IOException if connect cannot be read. */ public static String getFileContent(String fileName) throws IOException { BufferedReader br = null; StringBuffer buff = new StringBuffer(); try { br = new BufferedReader(new FileReader(fileName)); String line = br.readLine(); while (line != null) { buff.append(line).append("\n"); line = br.readLine(); } } finally { if (br != null) { br.close(); } } return buff.toString(); } public static void main(String[] args) { ReportGenerator gen = new ReportGenerator(args[0], args[1], args[2]); try { gen.createHTMLReports(); } catch (Exception e) { e.printStackTrace(); } } }