gecko-dev/js/jsdj/classes/com/netscape/jsdebugging/apitests/Main.java

206 строки
7.1 KiB
Java

/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
package com.netscape.jsdebugging.apitests;
import java.io.*;
import java.util.*;
import com.netscape.jsdebugging.engine.*;
import com.netscape.jsdebugging.api.*;
import com.netscape.jsdebugging.apitests.xml.*;
import com.netscape.jsdebugging.apitests.testing.*;
/**
* This class runs a set of tests on the given engine.
*
* @author Alex Rakhlin
*/
public class Main {
public static final String LOCAL_CREATOR_NAME =
"com.netscape.jsdebugging.engine.local.RuntimeCreatorLocal";
public static final String RHINO_CREATOR_NAME =
"com.netscape.jsdebugging.engine.rhino.RuntimeCreatorRhino";
public static void main(String args[]) {
new Main(args);
}
private Main (String args[]) {
Tags.init();
_processArguments (args);
_engine_name = "";
if (_creatorName.equals (LOCAL_CREATOR_NAME)) _engine_name = "SPIDER_MONKEY";
if (_creatorName.equals (RHINO_CREATOR_NAME)) _engine_name = "RHINO";
try {
System.setErr (new PrintStream (new FileOutputStream ("error_main_"+_engine_name+".log")));
} catch (IOException e) { System.out.println ("Error redirecting error stream"); }
try {
System.setOut (new PrintStream (new FileOutputStream ("output_main_"+_engine_name+".log")));
} catch (IOException e) { System.out.println ("Error redirecting error stream"); }
if ( null == _xmlw ){
System.out.println ("FAILED to Init Output");
return;
}
try {
Class clazz = Class.forName(_creatorName);
IRuntimeCreator creator = (IRuntimeCreator) clazz.newInstance();
_runtime = creator.newRuntime(IRuntimeCreator.ENABLE_DEBUGGING, null);
_context = _runtime.newContext(null);
_controller = _runtime.getDebugController();
_sourceTextProvider = _runtime.getSourceTextProvider();
LocalSink sink = new LocalSink();
_context.setPrintSink(sink);
_context.setErrorSink(sink);
if( null == _controller )
{
System.out.println ("FAILED to Init DebugController");
return;
}
_xmlw.startTag ("TESTS");
_tests = new TestSuite (_xmlw, _controller);
for (int i = 0; i < _test_names.size(); i++){
Test t = null;
try {
t = (Test) java.lang.Class.forName ((String)_test_names.elementAt(i)).newInstance();
}
catch (ClassNotFoundException e) { System.err.println ("CLASS "+(String)_test_names.elementAt(i)+" not found");}
_xmlw.tag ("TEST", (String)_test_names.elementAt(i));
t.setXMLWriter (_xmlw);
_tests.addTest (t);
}
_xmlw.endTag ("TESTS");
_xmlw.startTag ("SCRIPT_FILES");
for (int i = 0; i < _filenames.size(); i++){
_xmlw.tag ("FILE", (String) _filenames.elementAt (i));
}
_xmlw.endTag ("SCRIPT_FILES");
_controller.setScriptHook (new MyScriptHook (_tests));
_controller.setInterruptHook(new MyInterruptHook(_tests));
_controller.setErrorReporter(new MyErrorReporter(_tests));
_controller.sendInterrupt();
}
catch(Throwable t)
{
System.err.println("execption thrown " + t );
}
_xmlw.tag ("ENGINE", _engine_name);
//-------------------- LOOP -----------------
for (int i = 0; i < _filenames.size(); i++){
_context.loadFile((String) _filenames.elementAt (i));
}
//--------------------- END -----------------
_xmlw.close();
/*
try {
DataInputStream d = new DataInputStream (System.in);
d.readLine();
}
catch (IOException e) {}
*/
}
public String getClassName() {
return "global";
}
private void _processArguments (String args[]){
_filenames = new Vector();
_test_names = new Vector();
_creatorName = null;
/* Process command line arguments
*/
for (int i=0; i < args.length; i++) {
String arg = args[i];
if (arg.equals("-f")) {
for (int j=i+1; j < args.length; j++)
if (!args[j].startsWith ("-")) _filenames.addElement(args[j]);
else break;
}
if (arg.equals("-o")){
_xmlw = new XMLWriter (args[i+1], 2); //second arg is the starting indent
}
if (arg.equals("-t")){
for (int j=i+1; j < args.length; j++)
if (!args[j].startsWith ("-")) _test_names.addElement(args[j]);
else break;
}
if (arg.equals ("-e")){
if (args[i+1].equalsIgnoreCase ("Rhino")) _creatorName = RHINO_CREATOR_NAME;
if (args[i+1].equalsIgnoreCase ("Local")) _creatorName = LOCAL_CREATOR_NAME;
}
}
}
public DebugController getController() {return _controller;}
public SourceTextProvider getSourceTextProvider() {return _sourceTextProvider;}
private DebugController _controller;
private IRuntime _runtime;
private IContext _context;
private SourceTextProvider _sourceTextProvider;
private Vector _filenames;
private XMLWriter _xmlw;
private TestSuite _tests;
private Vector _test_names;
private String _creatorName;;
private String _engine_name;
}
class LocalSink implements IPrintSink, IErrorSink
{
public void print(String s) {
System.out.print(s);
}
public void error(String msg, String filename, int lineno,
String lineBuf, int offset)
{
System.out.println("");
System.out.println("-------------------------------------");
System.out.println(msg);
System.out.println(filename);
System.out.println(lineno);
System.out.println(lineBuf);
System.out.println(offset);
System.out.println("-------------------------------------");
System.out.println("");
}
}