adding TestON
diff --git a/TestON/TAI/src/tai_ofa/ExecuteTest.java b/TestON/TAI/src/tai_ofa/ExecuteTest.java
new file mode 100644
index 0000000..d4f9197
--- /dev/null
+++ b/TestON/TAI/src/tai_ofa/ExecuteTest.java
@@ -0,0 +1,705 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package tai_ofa;
+
+/**
+ *
+ * @author Raghavkashyap (raghavkashyap@paxterra.com)
+
+
+ * TestON is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+
+ * TestON is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with TestON. If not, see <http://www.gnu.org/licenses/>.
+
+ */
+// Import the Java classes
+import com.sun.javafx.scene.layout.region.BackgroundFill;
+import com.sun.org.apache.bcel.internal.generic.LoadInstruction;
+import java.awt.TextArea;
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.io.*;
+import java.net.MalformedURLException;
+import java.nio.file.WatchService;
+import java.text.SimpleDateFormat;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javafx.application.Platform;
+import javafx.beans.value.ChangeListener;
+import javafx.beans.value.ObservableValue;
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+import javafx.event.EventHandler;
+import javafx.geometry.Insets;
+import javafx.scene.chart.PieChart;
+import javafx.scene.control.Button;
+import javafx.scene.control.CheckBox;
+import javafx.scene.control.Label;
+import javafx.scene.control.Tab;
+import javafx.scene.control.TabPane;
+import javafx.scene.control.TableView;
+import javafx.scene.control.TextAreaBuilder;
+import javafx.scene.effect.BlendMode;
+import javafx.scene.image.Image;
+import javafx.scene.image.ImageView;
+import javafx.scene.input.ScrollEvent;
+import javafx.scene.layout.HBox;
+import javafx.scene.layout.StackPane;
+import javafx.scene.paint.Color;
+import javafx.scene.paint.Paint;
+import javafx.stage.Popup;
+import javafx.stage.Stage;
+import org.apache.xmlrpc.XmlRpcClient;
+import org.apache.xmlrpc.XmlRpcException;
+
+public class ExecuteTest {
+
+ Pattern stepPatt, casePatt, resultPatt, namePatt, summaryPatt, testStartPatt, testEndPatt, testExecutionTimePatt, testsPlannedPatt,
+ testsRunPatt, totalPassPatt, totalFailPatt, noResultPatt, totalAbortPatt, execPercentagePatt, successPercentagePatt, assertionPatt, totalreRun;
+ TableView summaryTable, finalSummaryTable, stepTable;
+ public static int noOfPassed = 0, noOfFailed = 0, noOfAborted = 0, noOfNoResult = 0, failed = 0, passed = 0, noResults = 0, aboarted = 0;
+ String summary, testStart, testEnd, testExecutionTime, testsPlanned, testsRun, totalPass,
+ totalFail, noResult, totalAbort, execPercentage, successPercentage;
+ ObservableList<SummaryTable> data;
+ ObservableList<FinalSummaryTable> finalSummaryData;
+ ObservableList<StepTable> stepSummaryData;
+ //AutoMateTestSummary summaryWindow ;
+ StackPane summaryTableRoot;
+ TreeMap<String, String> stepHash = new TreeMap<String, String>();
+ TreeMap<String, String> caseNameHash = new TreeMap<String, String>();
+ Matcher m;
+ int tableIndex = -1;
+ int stepTableIndex = -1;
+ Runnable r3;
+ Button viewLogsButton;
+ PieChart summaryChart;
+ PieChart.Data passData, failData, abortData, noResultData;
+ String selectedTest;
+ ObservableList<PieChart.Data> pieChartData;
+ javafx.scene.control.TextArea compononetLogText = TextAreaBuilder.create().build();
+ javafx.scene.control.TextArea flowVisorSessionText = TextAreaBuilder.create().build();
+ javafx.scene.control.TextArea poxSessionText = TextAreaBuilder.create().build();
+ javafx.scene.control.TextArea mininetSessionText = TextAreaBuilder.create().build();
+ Label statusImage;
+ TAILocale label = new TAILocale(Locale.ENGLISH);
+
+ public ExecuteTest(TableView summary, ObservableList<SummaryTable> dataInstance,
+ PieChart chart, TableView finalSummary, ObservableList<FinalSummaryTable> finalSummaryDataInstance,
+ Button viewLogs, ObservableList<PieChart.Data> pieChartData,
+ PieChart.Data passData, PieChart.Data failData, PieChart.Data abortData, PieChart.Data noResultData, String testName, javafx.scene.control.TextArea componentLogText,
+ TableView stepTable, ObservableList<StepTable> stepTableData, javafx.scene.control.TextArea poxText, javafx.scene.control.TextArea mininetText, javafx.scene.control.TextArea flowText) {
+ this.summaryTable = summary;
+ data = dataInstance;
+ summaryChart = chart;
+ finalSummaryTable = finalSummary;
+ finalSummaryData = finalSummaryDataInstance;
+ viewLogsButton = viewLogs;
+ this.pieChartData = pieChartData;
+ this.passData = passData;
+ this.failData = failData;
+ this.abortData = abortData;
+ this.noResultData = noResultData;
+ this.selectedTest = testName;
+ this.compononetLogText = componentLogText;
+ this.stepTable = stepTable;
+ this.stepSummaryData = stepTableData;
+ this.poxSessionText = poxText;
+ this.mininetSessionText = mininetText;
+ this.flowVisorSessionText = flowText;
+
+ }
+ String currentTestCase, testCaseName, testCaseStatus, testCaseStartTime, testCaseEndTime;
+
+ public void runTest() {
+
+
+
+ try {
+
+ summaryTable.setVisible(true);
+ getCaseName();
+ Iterator entries = caseNameHash.entrySet().iterator();
+ data = FXCollections.observableArrayList();
+ int index = 0;
+ while (entries.hasNext()) {
+ index++;
+ Map.Entry entry = (Map.Entry) entries.next();
+ String key = (String) entry.getKey();
+ String value = (String) entry.getValue();
+ Image image = new Image(getClass().getResourceAsStream("/images/loading.gif"), 10, 10, true, true);
+ data.add(new SummaryTable(new Label(key), new Label(value), new Label("", new ImageView(image)), new Label(), new Label()));
+ }
+ summaryTable.setItems(data);
+ File file = new File(selectedTest);
+ String[] runThisFile = file.getName().split("\\.");
+ try {
+ XmlRpcClient server = new XmlRpcClient("http://localhost:9000");
+ Vector params = new Vector();
+ params.add(new String(selectedTest));
+ final Object result = server.execute("runTest", params);
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ ProcessBuilder header = new ProcessBuilder("/bin/sh", "-c", "head -20 " + result.toString());
+ Process headProcess;
+ try {
+ headProcess = header.start();
+ BufferedReader inputHeader = new BufferedReader(new InputStreamReader(headProcess.getInputStream()));
+ String lines;
+ String totalText = "";
+ while ((lines = inputHeader.readLine()) != null) {
+ try {
+ totalText = totalText + "\n" + lines;
+ updateData(lines);
+ } catch (Exception e) {
+ }
+ }
+ compononetLogText.appendText(totalText);
+ headProcess.destroy();
+ } catch (IOException ex) {
+ Logger.getLogger(ExecuteTest.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ String command = "tail -f " + result.toString();
+ File dir = new File(result.toString());
+ String parentPath = dir.getParent();
+ ProcessBuilder tail = new ProcessBuilder("/bin/sh", "-c", "tail -f " + result.toString());
+ Process process;
+ int nullcount = 0;
+ try {
+ while (true) {
+ process = tail.start();
+ BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream()));
+ String line;
+ try {
+ while ((line = input.readLine()) != null) {
+ compononetLogText.appendText("\n" + line + "\n");
+ updateData(line);
+ }
+ if (input.readLine() == null) {
+ nullcount++;
+ }
+ if (nullcount == 2) {
+ process.destroy();
+ }
+
+ } catch (Exception e) {
+ }
+ }
+ } catch (IOException ex) {
+ Logger.getLogger(ExecuteTest.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ String poxFileName = parentPath + "/" + "POX2.session";
+ String flowFileName = parentPath + "/" + "FlowVisor1.session";
+ String mininetFileName = parentPath + "/" + "Mininet1.session";
+ ProcessBuilder tailpox = new ProcessBuilder("/bin/sh", "-c", "tail -f " + poxFileName);
+ }
+ }).start();
+
+ r3 = new Runnable() {
+ public void run() {
+ try {
+ summaryChart.setVisible(true);
+ try {
+ pieChartData.set(0, new PieChart.Data("Pass", ExecuteTest.noOfPassed));
+ pieChartData.set(1, new PieChart.Data("Fail", ExecuteTest.noOfFailed));
+ pieChartData.set(2, new PieChart.Data("Abort", ExecuteTest.noOfAborted));
+ passData.setPieValue(1);
+ failData.setPieValue(0);
+ abortData.setPieValue(0);
+ noResultData.setPieValue(0);
+ summaryChart.getStylesheets().add(getClass().getResource("test.css").toExternalForm());
+ summaryChart.setData(pieChartData);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ };
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void updateData(String line) {
+
+ casePatt = Pattern.compile("\\s*Result\\s+summary\\s+for\\s+Testcase(\\d+)");
+ m = casePatt.matcher(line);
+ if (m.find()) {
+ Date dNow = new Date();
+ SimpleDateFormat ft = new SimpleDateFormat("hh:mm:ss a zzz dd.MM.yyyy");
+ testCaseStartTime = ft.format(dNow);
+ currentTestCase = m.group(1);
+ stepHash.clear();
+ getTestSteps(m.group(1));
+ Image image = new Image(getClass().getResourceAsStream("/images/loading.gif"), 10, 10, true, true);
+ Label statusImage = new Label("", new ImageView(image));
+ stepSummaryData = FXCollections.observableArrayList(new StepTable(new Label(""), new Label(""), new Label("")));
+ Iterator entries = stepHash.entrySet().iterator();
+ while (entries.hasNext()) {
+ Map.Entry entry = (Map.Entry) entries.next();
+ String key = (String) entry.getKey();
+ String value = (String) entry.getValue();
+ stepSummaryData.add(new StepTable(new Label(key), new Label(value), new Label("", new ImageView(image))));
+ }
+ stepTable.setItems(stepSummaryData);
+ }
+
+ namePatt = Pattern.compile("\\[(.*)\\]\\s*\\[(.*)\\]\\s*\\[\\s*CASE\\s*\\](.*)\\s*");
+ m = namePatt.matcher(line);
+
+ if (m.find()) {
+ testCaseName = m.group(3);
+ Image image = new Image(getClass().getResourceAsStream("/images/progress.png"));
+ statusImage = new Label("", new ImageView(image));
+ if (tableIndex < 0) {
+ data = FXCollections.observableArrayList(new SummaryTable(new Label(currentTestCase), new Label(testCaseName),
+ statusImage, new Label(testCaseStartTime), new Label()));
+ } else {
+ data.add(new SummaryTable(new Label(currentTestCase), new Label(testCaseName), statusImage,
+ new Label(testCaseStartTime), new Label("")));
+ }
+ tableIndex++;
+ }
+
+ stepPatt = Pattern.compile("\\[(.*)\\]\\s*\\[(.*)\\]\\s*\\[\\s*STEP\\s*\\]\\s*(\\d+)\\.(\\d+):(.*)\\s*");
+
+ m = stepPatt.matcher(line);
+ if (m.find()) {
+ String currentStepNumber = m.group(3) + "." + m.group(4);
+ for (int i = 1; i < stepSummaryData.size(); i++) {
+ if (stepSummaryData.get(i).getTestStepId().getText().equals(currentStepNumber)) {
+ Image image = new Image(getClass().getResourceAsStream("/images/progress.png"));
+ stepTableIndex = i;
+ stepSummaryData.set(i, new StepTable(new Label(stepSummaryData.get(i).getTestStepId().getText()), new Label(stepSummaryData.get(i).getTestStepName().getText()), new Label("", new ImageView(image))));
+ Image images = new Image(getClass().getResourceAsStream("/images/Pass_Icon.png"));
+ }
+ }
+
+ }
+
+ assertionPatt = Pattern.compile("\\s*(.*)\\s*-\\s*(\\w+)\\s*-\\s*(\\w+)\\s*-\\s*(.*)\\s*");
+ m = assertionPatt.matcher(line);
+ if (m.find() && stepTableIndex > -1) {
+ if (m.group(3).equals("INFO") && m.group(4).equals("Assertion Passed")) {
+ Image image = new Image(getClass().getResourceAsStream("/images/Pass_Icon.png"));
+ stepSummaryData.set(stepTableIndex, new StepTable(new Label(stepSummaryData.get(stepTableIndex).getTestStepId().getText()),
+ new Label(stepSummaryData.get(stepTableIndex).getTestStepName().getText()), new Label("", new ImageView(image))));
+ } else if (m.group(3).equals("WARNING") && m.group(4).equals("Assertion Failed")) {
+ Image image = new Image(getClass().getResourceAsStream("/images/Fail_Icon.png"));
+ stepSummaryData.set(stepTableIndex, new StepTable(new Label(stepSummaryData.get(stepTableIndex).getTestStepId().getText()),
+ new Label(stepSummaryData.get(stepTableIndex).getTestStepName().getText()), new Label("", new ImageView(image))));
+ XmlRpcClient server;
+ }
+
+ }
+
+ resultPatt = Pattern.compile("\\s*Result:\\s+(\\w+)\\s*");
+ m = resultPatt.matcher(line);
+ if (m.find()) {
+ testCaseStatus = m.group(1);
+ Date dNow = new Date();
+ Image image;
+ SimpleDateFormat ft = new SimpleDateFormat("hh:mm:ss a zzz dd.MM.yyyy");
+ testCaseEndTime = ft.format(dNow);
+ if (testCaseStatus.equalsIgnoreCase("No result")) {
+ image = new Image(getClass().getResourceAsStream("/images/noResult.png"));
+ statusImage = new Label("", new ImageView(image));;
+ ExecuteTest.noOfNoResult++;
+ }
+
+ if (testCaseStatus.equalsIgnoreCase("Pass")) {
+ image = new Image(getClass().getResourceAsStream("/images/Pass_Icon.png"));
+ statusImage = new Label("", new ImageView(image));
+ ExecuteTest.noOfPassed++;
+ }
+ if (testCaseStatus.equals("Failed")) {
+ image = new Image(getClass().getResourceAsStream("/images/Fail_Icon.png"));
+ statusImage = new Label("", new ImageView(image));
+ ExecuteTest.noOfFailed++;
+ } else if (testCaseStatus.equals("Aborted")) {
+ image = new Image(getClass().getResourceAsStream("/images/Abort_Icon.png"));
+ statusImage = new Label("", new ImageView(image));
+ this.noOfAborted++;
+ }
+ data.set(tableIndex, new SummaryTable(new Label(currentTestCase), new Label(testCaseName),
+ statusImage, new Label(testCaseStartTime), new Label(testCaseEndTime)));
+ summaryTable.setItems(data);
+ }
+
+ summaryPatt = Pattern.compile("\\s*Test+\\s+Execution(.*)");
+ m = summaryPatt.matcher(line);
+ if (m.find()) {
+ }
+
+ testStartPatt = Pattern.compile("Test\\s+Start\\s+\\:\\s+(.*)");
+ m = testStartPatt.matcher(line);
+ if (m.find()) {
+ Image image = new Image(getClass().getResourceAsStream("/images/Pass_Icon.png"));
+ statusImage = new Label("", new ImageView(image));
+ data.set(tableIndex, new SummaryTable(new Label(currentTestCase), new Label(testCaseName),
+ statusImage, new Label(testCaseStartTime), new Label(testCaseEndTime)));
+ stepTable.setVisible(false);
+ finalSummaryTable.setVisible(true);
+ summaryChart.setVisible(true);
+ finalSummaryData = FXCollections.observableArrayList(new FinalSummaryTable(new Label(""), new Label("")));
+ finalSummaryTable.setItems(finalSummaryData);
+ testStart = m.group(1);
+ finalSummaryData.set(0, new FinalSummaryTable(new Label("Test Start"), new Label(testStart)));
+ finalSummaryTable.setItems(finalSummaryData);
+ }
+ testEndPatt = Pattern.compile("Test\\s+End\\s+\\:\\s+(.*)");
+ m = testEndPatt.matcher(line);
+ if (m.find()) {
+ testEnd = m.group(1);
+ finalSummaryData.add(new FinalSummaryTable(new Label("Test End"), new Label(testEnd)));
+ finalSummaryTable.setItems(finalSummaryData);
+ }
+ testExecutionTimePatt = Pattern.compile("\\s*Execution\\s+Time\\s+\\:\\s+(.*)");
+ m = testExecutionTimePatt.matcher(line);
+ if (m.find()) {
+ testExecutionTime = m.group(1);
+ finalSummaryData.add(new FinalSummaryTable(new Label("Execution Time"), new Label(testExecutionTime)));
+ finalSummaryTable.setItems(finalSummaryData);
+ }
+ testsPlannedPatt = Pattern.compile("\\s*Total\\s+tests\\s+planned\\s+\\:\\s*(.*)");
+ m = testsPlannedPatt.matcher(line);
+ if (m.find()) {
+ testsPlanned = m.group(1);
+ finalSummaryData.add(new FinalSummaryTable(new Label("Total Tests Planned"), new Label(testsPlanned)));
+ finalSummaryTable.setItems(finalSummaryData);
+ }
+
+ testsRunPatt = Pattern.compile("\\s*Total\\s+tests\\s+Run\\s+\\:\\s+(.*)");
+ m = testsRunPatt.matcher(line);
+ if (m.find()) {
+ testsRun = m.group(1);
+ finalSummaryData.add(new FinalSummaryTable(new Label("Total Tests Run"), new Label(testsRun)));
+ finalSummaryTable.setItems(finalSummaryData);
+ }
+ totalPassPatt = Pattern.compile("Total\\s+Pass\\s+\\:\\s+(.*)");
+ m = totalPassPatt.matcher(line);
+ if (m.find()) {
+ totalPass = m.group(1);
+ Label totalPassL = new Label("Total Pass");
+ totalPassL.setTextFill(Color.GREEN);
+ totalPassL.setStyle("-fx-font-weight: bold");
+ Label totalPassValue = new Label(totalPass);
+ totalPassValue.setTextFill(Color.GREEN);
+ totalPassValue.setStyle("-fx-font-weight: bold");
+ finalSummaryData.add(new FinalSummaryTable(totalPassL, totalPassValue));
+ finalSummaryTable.setItems(finalSummaryData);
+ }
+ totalFailPatt = Pattern.compile("Total\\s+Fail\\s+\\:\\s+(.*)");
+ m = totalFailPatt.matcher(line);
+ if (m.find()) {
+ totalFail = m.group(1);
+ Label totalFailL = new Label("Total Fail");
+ totalFailL.setTextFill(Color.RED);
+ totalFailL.setStyle("-fx-font-weight: bold");
+ Label totalFailValue = new Label(totalFail);
+ totalFailValue.setTextFill(Color.RED);
+ totalFailValue.setStyle("-fx-font-weight: bold");
+ finalSummaryData.add(new FinalSummaryTable(totalFailL, totalFailValue));
+ finalSummaryTable.setItems(finalSummaryData);
+ }
+
+ totalreRun = Pattern.compile("Total\\s+Re\\-Run\\s+\\:\\s+(.*)");
+ m = totalreRun.matcher(line);
+ if (m.find()) {
+ Label totalReRun = new Label("Total Re-Run");
+ totalReRun.setTextFill(Color.BLUE);
+ totalReRun.setStyle("-fx-font-weight: bold");
+ Label totalReRunValue = new Label(m.group(1));
+ totalReRunValue.setTextFill(Color.BLUE);
+ totalReRunValue.setStyle("-fx-font-weight: bold");
+ finalSummaryData.add(new FinalSummaryTable(totalReRun, totalReRunValue));
+ finalSummaryTable.setItems(finalSummaryData);
+ }
+
+ noResultPatt = Pattern.compile("Total\\s+No\\s+Result\\s+\\:\\s+(.*)");
+ m = noResultPatt.matcher(line);
+ if (m.find()) {
+ noResult = m.group(1);
+ finalSummaryData.add(new FinalSummaryTable(new Label("Total No-Result"), new Label(noResult)));
+ finalSummaryTable.setItems(finalSummaryData);
+ }
+
+ totalAbortPatt = Pattern.compile("Total\\sabort\\s+\\:\\s+(.*)");
+ m = totalAbortPatt.matcher(line);
+ if (m.find()) {
+ totalAbort = m.group(1);
+ finalSummaryData.add(new FinalSummaryTable(new Label("Total Abort"), new Label(totalAbort)));
+ finalSummaryTable.setItems(finalSummaryData);
+ }
+ execPercentagePatt = Pattern.compile("Execution\\s+Result\\s+\\:\\s+(.*)");
+ m = execPercentagePatt.matcher(line);
+ if (m.find()) {
+ execPercentage = m.group(1);
+ finalSummaryData.add(new FinalSummaryTable(new Label("Execution Percentage"), new Label(execPercentage)));
+ finalSummaryTable.setItems(finalSummaryData);
+ Platform.runLater(r3);
+ }
+ successPercentagePatt = Pattern.compile("Success\\s+Percentage\\s+\\:\\s+(.*)");
+ m = successPercentagePatt.matcher(line);
+ if (m.find()) {
+ successPercentage = m.group(1);
+ finalSummaryData.add(new FinalSummaryTable(new Label("Success Percentage"), new Label(successPercentage)));
+ finalSummaryTable.setItems(finalSummaryData);
+ }
+ }
+
+ public ExecuteTest() {
+ }
+
+ public String getTestCase() {
+ return currentTestCase;
+ }
+
+ public void getTestSteps(String caseNumber) {
+ OFAFileOperations fileOperation = new OFAFileOperations();
+ int stepCount = 0;
+ String stepCounter = "";
+ String ospkFileName = label.hierarchyTestON + "/tests/" + selectedTest + "/" + selectedTest + ".ospk";
+ String pythonScriptName = label.hierarchyTestON + "/tests/" + selectedTest + "/" + selectedTest + ".py";
+ BufferedReader input = null;
+ ArrayList<String> contents = new ArrayList<String>();
+ File scriptName = new File(ospkFileName);
+ if (scriptName.exists()) {
+ try {
+ //use buffering, reading one line at a time
+ //FileReader always assumes default encoding is OK!
+ try {
+ input = new BufferedReader(new FileReader(scriptName));
+ } catch (Exception e) {
+ }
+
+ try {
+ String line = null; //not declared within while loop
+ while ((line = input.readLine()) != null) {
+ contents.add(line);
+ }
+ } finally {
+ try {
+ input.close();
+ } catch (Exception e) {
+ }
+ }
+ } catch (IOException ex) {
+ ex.printStackTrace();
+ }
+ for (int i = 0; i < contents.size(); i++) {
+ Pattern casePattern = Pattern.compile("\\s*CASE\\s*(\\d+)\\s*");
+ Matcher caseMatcher = casePattern.matcher(contents.get(i));
+ if (caseMatcher.find()) {
+ if (caseMatcher.group(1).equals(caseNumber)) {
+ i++;
+ Pattern casePatterns = Pattern.compile("\\s*CASE\\s*(\\d+)\\s*");
+ Matcher caseMatchers = casePatterns.matcher(contents.get(i));
+ while (!caseMatchers.find() && i < contents.size()) {
+ Pattern casesPatterns = Pattern.compile("\\s*CASE\\s*(\\d+)\\s*");
+ Matcher casesMatchers = casesPatterns.matcher(contents.get(i));
+ if (casesMatchers.find()) {
+ break;
+ } else {
+ Pattern stepPattern = Pattern.compile("\\s*STEP\\s+\"\\s*(.*)\\s*\"\\s*");
+ Matcher stepMatcher = stepPattern.matcher(contents.get(i));
+ try {
+ if (stepMatcher.find()) {
+ stepCount++;
+ stepCounter = caseNumber + "." + String.valueOf(stepCount);
+ stepHash.put(stepCounter, stepMatcher.group(1));
+ }
+ } catch (Exception e) {
+ break;
+ }
+ i++;
+ }
+
+ }
+ i--;
+ }
+
+ }
+ }
+ } else {
+ try {
+ //use buffering, reading one line at a time
+ //FileReader always assumes default encoding is OK!
+ try {
+ input = new BufferedReader(new FileReader(pythonScriptName));
+
+ } catch (Exception e) {
+ }
+
+ try {
+ String line = null; //not declared within while loop
+
+ while ((line = input.readLine()) != null) {
+ contents.add(line);
+ }
+ } finally {
+ try {
+ input.close();
+ } catch (Exception e) {
+ }
+
+ }
+ } catch (IOException ex) {
+ ex.printStackTrace();
+ }
+
+ for (int i = 0; i < contents.size(); i++) {
+ Pattern casePattern = Pattern.compile("\\s*def\\s+CASE(\\d+)\\s*\\(\\s*(.*)\\s*\\)\\s*:\\s*");
+ Matcher caseMatcher = casePattern.matcher(contents.get(i));
+ if (caseMatcher.find()) {
+ if (caseMatcher.group(1).equals(caseNumber)) {
+ i++;
+ Pattern casePatterns = Pattern.compile("\\s*def\\s+CASE(\\d+)\\s*\\(\\s*(.*)\\s*\\)\\s*:\\s*");
+ Matcher caseMatchers = casePatterns.matcher(contents.get(i));
+ while (!caseMatchers.find() && i < contents.size()) {
+ Pattern casesPatterns = Pattern.compile("\\s*def\\s+CASE(\\d+)\\s*\\(\\s*(.*)\\s*\\)\\s*:\\s*");
+ Matcher casesMatchers = casesPatterns.matcher(contents.get(i));
+ if (casesMatchers.find()) {
+ break;
+ } else {
+ Pattern stepPattern = Pattern.compile("\\s*main.step\\(\\s*\"\\s*(.*)\\s*\"\\s*\\)\\s*");
+ Matcher stepMatcher = stepPattern.matcher(contents.get(i));
+ try {
+ if (stepMatcher.find()) {
+ stepCount++;
+ stepCounter = caseNumber + "." + String.valueOf(stepCount);
+ stepHash.put(stepCounter, stepMatcher.group(1));
+ }
+ } catch (Exception e) {
+ break;
+ }
+ i++;
+ }
+ }
+ i--;
+ }
+ }
+ }
+ }
+ }
+
+ public void getCaseName() {
+ int stepCount = 0;
+ String stepCounter = "";
+ String paramFilePath = label.hierarchyTestON + "/tests/" + selectedTest + "/" + selectedTest + ".params";
+ FileInputStream fstream;
+ String testCases = "";
+ ArrayList<String> paramFileName = new ArrayList<String>();
+ ArrayList<String> nameBetweenTags = new ArrayList<String>();
+ try {
+ fstream = new FileInputStream(paramFilePath);
+ DataInputStream in = new DataInputStream(fstream);
+ BufferedReader br = new BufferedReader(new InputStreamReader(in));
+ String strLine;
+ try {
+ while ((strLine = br.readLine()) != null) {
+ paramFileName.add(strLine);
+ }
+ } catch (IOException ex) {
+ Logger.getLogger(ExecuteTest.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ } catch (FileNotFoundException ex) {
+ Logger.getLogger(ExecuteTest.class.getName()).log(Level.SEVERE, null, ex);
+ }
+
+ for (int index = 0; index < paramFileName.size(); index++) {
+ Pattern testsPattern = Pattern.compile("<testcases>\\s*(.*)\\s*</testcases>");
+ Matcher testMatcher = testsPattern.matcher(paramFileName.get(index));
+ if (testMatcher.find()) {
+ testCases = testMatcher.group(1);
+ testCases = testCases.replaceAll(" ", "");
+ }
+
+ }
+
+ String[] testArray = null;
+ testArray = testCases.split(",");
+ String ospkFileName = label.hierarchyTestON + "/tests/" + selectedTest + "/" + selectedTest + ".ospk";
+ String pythonScriptName = label.hierarchyTestON + "/tests/" + selectedTest + "/" + selectedTest + ".py";
+ BufferedReader input = null;
+ ArrayList<String> contents = new ArrayList<String>();
+ File scriptName = new File(ospkFileName);
+ String caseId = "";
+ String caseName = "";
+ if (scriptName.exists()) {
+ try {
+ FileInputStream fstream1 = new FileInputStream(ospkFileName);
+ ArrayList<String> driverFunctionName = new ArrayList<String>();
+ DataInputStream in = new DataInputStream(fstream1);
+ BufferedReader br = new BufferedReader(new InputStreamReader(in));
+ String strLine;
+ while ((strLine = br.readLine()) != null) {
+ Pattern casePattern = Pattern.compile("^CASE\\s+(\\d+)");
+ Matcher match = casePattern.matcher(strLine);
+ while (match.find()) {
+ driverFunctionName.add(match.group());
+ caseId = match.group(1);
+ strLine = br.readLine();
+ casePattern = Pattern.compile("NAME\\s+(\\\"+(.*)\\\")");
+ match = casePattern.matcher(strLine);
+ if (match.find()) {
+ caseName = match.group(2);
+ }
+ caseNameHash.put(caseId, caseName);
+ }
+ }
+ } catch (Exception e) {
+ }
+ } else {
+ try {
+
+ FileInputStream fstream2 = new FileInputStream(pythonScriptName);
+ ArrayList<String> driverFunctionName = new ArrayList<String>();
+ DataInputStream in = new DataInputStream(fstream2);
+ BufferedReader br = new BufferedReader(new InputStreamReader(in));
+ String strLine;
+ while ((strLine = br.readLine()) != null) {
+ Pattern casePattern = Pattern.compile("\\s*def\\s+CASE(\\d+)\\s*\\(\\s*(.*)\\s*\\)\\s*:\\s*");
+ Matcher match = casePattern.matcher(strLine);
+ if (match.find()) {
+ driverFunctionName.add(match.group());
+ if (Arrays.asList(testArray).contains(match.group(1))) {
+ caseId = match.group(1);
+ } else {
+ caseId = null;
+ }
+ strLine = br.readLine();
+ }
+
+ casePattern = Pattern.compile("\\s*main.case\\(\\s*\"\\s*(.*)\\s*\"\\s*\\)\\s*");
+ match = casePattern.matcher(strLine);
+
+ if (match.find()) {
+ caseName = match.group(1);
+ if (caseId != null) {
+ caseNameHash.put(caseId, caseName);
+ }
+ }
+ }
+ } catch (Exception e) {
+ }
+ }
+ }
+}