/*
 * $Id$
 *
 * Copyright 1996-2008 Sun Microsystems, Inc.  All Rights Reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.  Sun designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Sun in the LICENSE file that accompanied this code.
 *
 * This code 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
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
 * CA 95054 USA or visit www.sun.com if you need additional information or
 * have any questions.
 */
package com.sun.javatest.lib;

import com.sun.javatest.Status;

/**
 * This is a modification of <code>ProcessCommand</code> suitable
 * for executing standard tests in a separate JVM.  When run in a
 * separate process, these tests report their exit status by calling
 * <code>Status.exit()</code>.  
 **/
public class ExecStdTestOtherJVMCmd extends ProcessCommand
{

    /**
     *	Generate a status for the command, based upon the command's exit code
     *  and a status that may have been passed from the command by using 
     *  <code>status.exit()</code>.
     *
     *  @param exitCode		The exit code from the command that was executed.
     *  @param logStatus	If the command that was executed was a test program
     *				and exited by calling <code>status.exit()</code>,
     *				then logStatus will be set to `status'.  Otherwise,
     *				it will be null.  The value of the status is passed
     *				from the command by writing it as the last line to
     *				stdout before exiting the process.   If it is not
     *				received as the last line, the value will be lost.
     *  @return			If <code>logStatus</code> is not null, it will
     *				be used as the result; this will normally correspond
     *				to the status for which the test called 
     *				<code>status.exit();</code>. 
     *				<p> If <code>logStatus</code> is null, that means
     *				that for some reason the test did not successfully
     *				call <code>status.exit()</code> and the test is
     *				deemed to have failed. If the exit code is zero,
     *				a likely possibility is that the test raised an
     *				exception which caused the JVM to dump the stack
     *				and exit. In this case, the result is
     *				<code>Status.failed("exit without status, exception assumed")</code>.
     *				In other cases, the result is simply
     *				<code>Status.failed("exit code" + exitCode)</code>.
     *			
     **/
    protected Status getStatus(int exitCode, Status logStatus) {
	if (logStatus != null)
	    return logStatus;
	else if (exitCode == 0)
	    return Status.failed("exit without status, exception assumed");
	else
	    return Status.failed("exit code " + exitCode);
    }
}
