/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at * trunk/opends/resource/legal-notices/OpenDS.LICENSE * or https://OpenDS.dev.java.net/OpenDS.LICENSE. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable, * add the following below this CDDL HEADER, with the fields enclosed * by brackets "[]" replaced with your own identifying information: * Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END * * * Copyright 2008-2010 Sun Microsystems, Inc. */ import java.io.*; import java.lang.*; import java.util.ArrayList; import javax.xml.transform.*; public class GenerateOpenDSTestSpecs { private static String strParentDirName; private static String strOutputDirName; private static String strFileFormat; private static String strTestType; private static File fileList; private ArrayList <Object> arrayParsedData; public GenerateOpenDSTestSpecs() { } public static void main(String[] args) { // retrieve input if(args.length == 3) { strParentDirName = new String(args[0]); strOutputDirName = new String(args[1]); strFileFormat = new String(args[2]); } else { usage(); System.exit(0); } // validate input File fileDirName = new File(strParentDirName); if(!fileDirName.isDirectory()) { fatalMsg(fileDirName + " is not a directory."); System.exit(0); } else { System.out.println("Using file directory, " + strParentDirName); } File outputDirName = new File(strOutputDirName); if(!outputDirName.isDirectory()) { fatalMsg(outputDirName + " is not a directory."); System.exit(0); } else { System.out.println("Using output directory, " + strOutputDirName); } // java files are assumed to be from the unit-integration tests. // xml files are assumed to be from the functional tests. if((strFileFormat.startsWith("java")) || (strFileFormat.startsWith("xml"))) { System.out.println("Using file format " + strFileFormat.toString()); if (strFileFormat.startsWith("java")) strTestType = "Int"; else if (strFileFormat.startsWith("xml")) strTestType = "Func"; } else { fatalMsg(strFileFormat + " is not supported in this version"); System.exit(0); } System.out.println("Now running......"); // create list of files to parse TestFileList listFiles = new TestFileList(strParentDirName); listFiles.createFileArray(); // clean out the list of files listFiles.purgeFilesWithSubstring("svn"); if(strFileFormat.startsWith("java")) { listFiles.keepFilesWithSubstring("java"); } else if(strFileFormat.startsWith("xml")) { listFiles.keepFilesWithSubstring("xml"); } // The ArrayList object, arrayFiles, contains the list of files that must be parsed. ArrayList arrayFiles = listFiles.getFileArray(); // print out list of files //for(int i=0; i<arrayFiles.size(); i++) //{ // File gotFile = (File)(arrayFiles.get(i)); // System.out.println("File number " + Integer.toString(i) + " is " + gotFile.toString()); //} // The ArrayList object, arrayDirs, contains the list of directories where the files will be found. ArrayList arrayDirs = listFiles.getDirArray(); listFiles.purgeDirsWithSubstring("svn"); // print out list of directories //for(int i=0; i<arrayDirs.size(); i++) //{ // File gotDir = (File)(arrayDirs.get(i)); // System.out.println("Directory number " + Integer.toString(i) + " is " + gotDir.toString()); //} // Assume each directory will result in an output xml file // There will be one ParseData object for each directory. // Each ParseData object holds the test specs for all tests in that directory. // The ArrayList object, arrayTests, contains all the ParseData objects. ArrayList <Object>arrayTests = new ArrayList<Object>(); // For each directory, parse out the data from each file within that directory. for(int i=0; i<arrayDirs.size(); i++) { // parse out data from all java files in a directory File gotDir = (File)(arrayDirs.get(i)); String parsedDir = parseSuite(gotDir, strParentDirName); ParseData parseData = new ParseData(parsedDir, strFileFormat); try { arrayTests.add((ArrayData)(parseData.ParseFile(parsedDir, arrayFiles, strParentDirName))); } catch(Exception e) { e.printStackTrace(); System.exit(0); } } // create the output xml files from the ParsedData objects for(int i = 0; i < arrayTests.size(); i++) { ArrayData arrayData = (ArrayData)(arrayTests.get(i)); if(arrayData.size() > 0) { if(strFileFormat.startsWith("java")) { WriteXMLFile_int xmlFile = new WriteXMLFile_int(arrayData.getTestSuite(0)); try { xmlFile.MakeXMLFile(arrayData, strOutputDirName); } catch(Exception e) { e.printStackTrace(); } } else if(strFileFormat.startsWith("xml")) { WriteXMLFile_xml xmlFile = new WriteXMLFile_xml(arrayData.getTestSuite(0)); WriteHTMLFile htmlFile = new WriteHTMLFile(arrayData.getTestSuite(0)); try { xmlFile.MakeXMLFile(arrayData, strOutputDirName); htmlFile.MakeHTMLFile(arrayData, strOutputDirName,strParentDirName); } catch(Exception e) { e.printStackTrace(); } } } } // Write the index file if(strFileFormat.startsWith("xml")) { // Index.xml try { File indexFile = new File(strOutputDirName + "/index.xml"); FileWriter indexFileout = new FileWriter(indexFile); indexFileout.write("<?xml version=\"1.0\"?>\n\n"); indexFileout.write("<qa>\n"); indexFileout.write(" <doc>\n"); for(int k = 0; k < arrayTests.size(); k++) { ArrayData testSuitePath = (ArrayData)(arrayTests.get(k)); if(testSuitePath.size() > 0) { String specPath=testSuitePath.getTestSuite(0); String specName = (new File(specPath)).getName(); String specFile=strOutputDirName + "/" + specPath + "/" + specName + ".html"; indexFileout.write(" <testspec name=\"" + specName + "\" location=\"" + specFile + "\"/>\n"); } } indexFileout.write(" </doc>\n"); indexFileout.write("</qa>\n"); indexFileout.close(); } catch (Exception e) { e.printStackTrace( ); } // Index.html File xmlFilename= new File(strOutputDirName + "/index.xml"); File xslFilename = new File(strParentDirName + "/../../shared/xsl/testspec-index-stylesheet.xsl"); File htmlFilename = new File(strOutputDirName + "/index.html"); try{ TransformerFactory transFactory = TransformerFactory.newInstance(); Transformer transformer = transFactory.newTransformer (new javax.xml.transform.stream.StreamSource(xslFilename)); transformer.transform (new javax.xml.transform.stream.StreamSource(xmlFilename), new javax.xml.transform.stream.StreamResult (new FileOutputStream(htmlFilename)) ); } catch (Exception e) { e.printStackTrace( ); } } System.out.println("Files successfully written to the output directory."); } private static void usage() { System.out.println("Version 01202007"); System.out.println("This program will parse files that are used for testing and create an xml file that is used for generating test specification html pages."); System.out.println("The program will recursively search for files from the directory that is passed in from the parameter."); System.out.println("This version will only recursively search one or two levels below the \"directory to files\" which is passed in as a parameter."); System.out.println("The file formats that are currently supported are \"java\" and \"xml\"."); System.out.println("Usage:"); System.out.println(" java GenerateOpenDSTestSpecs [directory to files] [directory for output files] [file format]"); } private static void fatalMsg(String str) { System.out.println(str); System.out.println("exiting....."); } private static String parseSuite(File inDir, String strParentDir) { String tmpStr = new String(inDir.toString()); int index = tmpStr.indexOf(strParentDir) + strParentDir.length() + 1; String subStr = tmpStr.substring(index); return subStr; } }