/*
* 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 legal-notices/CDDLv1_0.txt
* or http://forgerock.org/license/CDDLv1.0.html.
* 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 legal-notices/CDDLv1_0.txt.
* 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 Sun Microsystems, Inc.
*/
import java.io.*;
import java.lang.*;
import java.util.ArrayList;
public class ParseData
{
private String suite;
private String fileFormat;
private ArrayData arrayData;
public ParseData(String inName, String inFileFormat)
{
suite = inName;
fileFormat = inFileFormat;
arrayData = new ArrayData();
}
// Parse out data from all the files in the directory.
// Place the data into an ArrayData object.
// Return the ArrayData object.
public ArrayData ParseFile(String fileDir, ArrayList arrayFiles, String strParentDirName) throws IOException
{
String currTestSuite = strParentDirName + "/" + fileDir;
for(int j=0; j<arrayFiles.size(); j++)
{
File currFile = (File)(arrayFiles.get(j));
if(currFile.toString().indexOf(currTestSuite) >= 0)
{
// synthesize the filename for the current file to parse
String filename = currTestSuite + "/" + currFile.getName();
File inputFile = new File(filename);
// Final check to make sure inputFile is a real file
if(inputFile.isFile())
{
FileInputStream fis = new FileInputStream(inputFile);
LineNumberReader fin = new LineNumberReader(new InputStreamReader(fis));
String tmpStr;
while((tmpStr = fin.readLine()) != null)
{
// First check the line to see if there is any QA test marker, #@, at all.
if(tmpStr.indexOf("#@") >= 0)
{
if(tmpStr.indexOf("#@TestSuiteName") >= 0)
{
arrayData.setTestSuiteName(StripSubstring(tmpStr, "#@TestSuiteName"));
//System.out.println("Test suite name is " + arrayData.getTestSuiteName());
}
else if(tmpStr.indexOf("#@TestGroupName") >= 0)
{
arrayData.setGroupName(StripSubstring(tmpStr, "#@TestGroupName"));
}
else if(tmpStr.indexOf("#@TestGroupPurpose") >= 0)
{
arrayData.setGroupPurpose(MultipleLines(tmpStr, "#@TestGroupPurpose", fin));
}
else if(tmpStr.indexOf("#@TestSubgroupName") >= 0)
{
arrayData.setSubgroupName(StripSubstring(tmpStr, "#@TestSubgroupName"));
}
else if(tmpStr.indexOf("#@TestSuitePurpose") >= 0)
{
arrayData.setTestSuitePurpose(MultipleLines(tmpStr, "#@TestSuitePurpose", fin));
}
else if(tmpStr.indexOf("#@TestSuiteID") >= 0)
{
arrayData.setTestSuiteID(StripSubstring(tmpStr, "#@TestSuiteID"));
}
else if(tmpStr.indexOf("#@TestSuiteGroup") >= 0)
{
arrayData.setTestSuiteGroup(StripSubstring(tmpStr, "#@TestSuiteGroup"));
}
else if(tmpStr.indexOf("#@TestSuitePreamble") >= 0)
{
arrayData.setTestSuitePreamble(StripSubstring(tmpStr, "#@TestSuitePreamble"));
}
else if(tmpStr.indexOf("#@TestSuitePostamble") >= 0)
{
arrayData.setTestSuitePostamble(StripSubstring(tmpStr, "#@TestSuitePostamble"));
}
else if(tmpStr.indexOf("#@TestName") >= 0)
{
arrayData.setTestName(MultipleLines(tmpStr, "#@TestName", fin));
arrayData.setTestSuite(fileDir);
}
else if(tmpStr.indexOf("#@TestMarker") >= 0)
{
arrayData.setTestMarker(StripSubstring(tmpStr, "#@TestMarker"));
}
else if(tmpStr.indexOf("#@TestID") >= 0)
{
arrayData.setTestID(StripSubstring(tmpStr, "#@TestID"));
}
else if(tmpStr.indexOf("#@TestIssue") >= 0)
{
arrayData.setTestIssue(StripSubstring(tmpStr, "#@TestIssue"));
}
else if(tmpStr.indexOf("#@TestGroup") >= 0)
{
arrayData.setTestGroup(StripSubstring(tmpStr, "#@TestGroup"));
}
else if(tmpStr.indexOf("#@TestScript") >= 0)
{
arrayData.setTestScript(StripSubstring(tmpStr, "#@TestScript"));
}
else if(tmpStr.indexOf("#@TestHTMLLink") >= 0)
{
arrayData.setTestHTMLLink(StripSubstring(tmpStr, "#@TestHTMLLink"));
}
else if(tmpStr.indexOf("#@TestPreamble") >= 0)
{
arrayData.setTestPreamble(StripSubstring(tmpStr, "#@TestPreamble"));
}
else if(tmpStr.indexOf("#@TestStep") >= 0)
{
ArrayList <String> strIndividualSteps = new ArrayList<String>();
fin.mark(1000);
while(tmpStr.indexOf("#@TestStep") >= 0)
{
String strStep = StripSubstring(tmpStr, "#@TestStep");
tmpStr = fin.readLine();
while((tmpStr.indexOf("#@")) < 0)
{
strStep = strStep + " " + tmpStr.toString();
tmpStr = fin.readLine();
}
strIndividualSteps.add(strStep);
}
arrayData.setTestSteps(strIndividualSteps);
fin.reset();
tmpStr = fin.readLine();
while(tmpStr.indexOf("#@") < 0 || tmpStr.indexOf("#@TestStep") >= 0)
{
fin.mark(100);
tmpStr = fin.readLine();
}
fin.reset();
}
else if(tmpStr.indexOf("#@TestPostamble") >= 0)
{
arrayData.setTestPostamble(StripSubstring(tmpStr, "#@TestPostamble"));
}
else if(tmpStr.indexOf("#@TestPurpose") >= 0)
{
arrayData.setTestPurpose(MultipleLines(tmpStr, "#@TestPurpose", fin));
}
else if(tmpStr.indexOf("#@TestResult") >= 0)
{
if(fileFormat.startsWith("xml"))
{
arrayData.setTestResult(MultipleLines(tmpStr, "#@TestResult", fin));
}
else if(fileFormat.startsWith("java"))
{
arrayData.setTestResult(StripSubstring(tmpStr, "#@TestResult"));
// parse test purpose from java doc comments
fin.mark(1000);
String oneMoLine = new String(fin.readLine().trim());
while((oneMoLine.indexOf("/**")) < 0)
{
oneMoLine = new String(fin.readLine().trim());
}
oneMoLine = new String(fin.readLine().trim());
String strPurpose = StripSubstring(oneMoLine, "*");
oneMoLine = new String(fin.readLine().trim());
while((oneMoLine.indexOf("@")) < 0)
{
strPurpose += " ";
strPurpose += StripSubstring(oneMoLine.toString().trim(), "*");
oneMoLine = new String(fin.readLine().trim());
}
fin.reset();
int starIndex = strPurpose.lastIndexOf("*");
if(starIndex > 0)
{
String strPurpose2 = new String(strPurpose.substring(0, starIndex));
arrayData.setTestPurpose(strPurpose2.toString());
}
else
{
arrayData.setTestPurpose(strPurpose.toString());
}
}
}
}
}
fin.close();
}
}
}
return arrayData;
}
private String StripSubstring(String tmpStr, String subStr)
{
int index = tmpStr.indexOf(subStr);
String retStr = tmpStr.substring(index + subStr.length());
return (retStr.trim());
}
private String MultipleLines(String tmpStr, String tag, LineNumberReader fin) throws IOException
{
String currValue = StripSubstring(tmpStr, tag);
fin.mark(1000);
String oneMoLine = new String(fin.readLine().trim());
while((oneMoLine.indexOf("#@") < 0) && (oneMoLine.indexOf("-->") < 0)) {
currValue = currValue + " " + oneMoLine;
oneMoLine = new String(fin.readLine().trim());
}
fin.reset();
return currValue;
}
}