001 /******************************************************************************
002 * Copyright (C) MActor Developers. All rights reserved. *
003 * ---------------------------------------------------------------------------*
004 * This file is part of MActor. *
005 * *
006 * MActor is free software; you can redistribute it and/or modify *
007 * it under the terms of the GNU General Public License as published by *
008 * the Free Software Foundation; either version 2 of the License, or *
009 * (at your option) any later version. *
010 * *
011 * MActor is distributed in the hope that it will be useful, *
012 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
014 * GNU General Public License for more details. *
015 * *
016 * You should have received a copy of the GNU General Public License *
017 * along with MActor; if not, write to the Free Software *
018 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *
019 ******************************************************************************/
020 package org.mactor.ui.cmd;
021
022 import java.io.File;
023
024 import org.dom4j.Document;
025 import org.mactor.framework.MactorException;
026 import org.mactor.framework.MockRunner;
027 import org.mactor.framework.TestRunner;
028 import org.mactor.framework.data.DataProviderFactory;
029 import org.mactor.framework.data.DataTable;
030 import org.mactor.framework.spec.MockBatterySpec;
031 import org.mactor.framework.spec.ProjectContext;
032 import org.mactor.framework.spec.TestRunSpec;
033 import org.mactor.framework.spec.TestSpec;
034
035 public class MActorCmd {
036 public static void main(String[] args) {
037 if (args.length != 1) {
038 printUsage();
039 System.exit(1);
040 }
041 File f = new File(args[0]);
042 if (!f.exists()) {
043 printUsage();
044 System.exit(1);
045 }
046 String name = f.getName();
047 try {
048 ProjectContext.getGlobalInstance().setProjectDir(f.getParentFile());
049 Document doc = ProjectContext.getGlobalInstance().readFromFile(name, false);
050 if (doc.getRootElement().getName().equals("test")) {
051 runTest(doc, name);
052 } else if (doc.getRootElement().getName().equals("test_run")) {
053 runTestRun(doc, name);
054 } else if (doc.getRootElement().getName().equals("mock_battery")) {
055 runMockBattery(doc, name);
056 } else {
057 System.out.println("'" + name + "' in project '" + ProjectContext.getGlobalInstance().getProjectName() + "' is not an executable test");
058 printUsage();
059 System.exit(1);
060 }
061 } catch (MactorException me) {
062 System.out.println("Execution of '" + name + "' in project '" + ProjectContext.getGlobalInstance().getProjectName() + "' failed with reason:" + me.getMessage());
063 printUsage();
064 System.exit(1);
065 }
066 }
067 private static void runTest(Document doc, String name) throws MactorException {
068 TestSpec spec = TestSpec.loadFromDocument(doc, name);
069 DataTable dt = new DataTable();
070 dt.addColumn("dummy_");
071 dt.addRow(new String[] { "" });
072 TestRunner tr = new TestRunner(1, spec, dt, new SimpleLogFeedbackHandler());
073 tr.start();
074 if (tr.waitForCompletion() == 0)
075 System.exit(0);
076 else
077 System.exit(1);
078 }
079 private static void runTestRun(Document doc, String name) throws MactorException {
080 TestRunSpec spec = TestRunSpec.loadFromDocument(doc, name);
081 TestRunner tr = new TestRunner(spec.getThreadCount(), TestSpec.loadFromFile(spec.getTest()), DataProviderFactory.getDataProvider(spec.getDataSource()).loadData(),
082 new SimpleLogFeedbackHandler());
083 tr.start();
084 if (tr.waitForCompletion() == 0)
085 System.exit(0);
086 else
087 System.exit(1);
088 }
089 private static void runMockBattery(Document doc, String name) throws MactorException {
090 MockBatterySpec spec = MockBatterySpec.loadFromDocument(doc, name);
091 MockRunner mr = new MockRunner(spec.getThreadCount(), spec.getTestSpecs(), new SimpleLogFeedbackHandler());
092 mr.start();
093 mr.waitForCompletion();
094 }
095 private static void printUsage() {
096 System.out.println("Usage: runtest <path to the test file to execute (the file must be a test a test_run or mock_battery)>");
097 }
098 }