/*
 * User: dmclean
 * Date: Oct 23, 2001
 * Time: 4:12:50 PM
 */
package edu.stsci.hst;

import junit.framework.TestCase;
import edu.stsci.util.Blackboard;
import gov.nasa.gsfc.util.CgiRequestor;
import gov.nasa.gsfc.util.CgiResponseEvent;
import gov.nasa.gsfc.util.CgiManager;

public class CgiSynPhotBlackboardEWTest
        extends TestCase
        implements CgiRequestor
{
    public final static String OBS_MODE = "ObsMode";
    public final static String SPECTRUM_EXPRESSION = "FullSynphotExpression[FieldSource]";

    public final static String ANSWER_PARAMETER = "EffectiveWavelength";

    private boolean testComplete = false;

    static private final String osName = System.getProperty("os.name");
    static private final boolean isMac = osName.startsWith("Mac");

    static private final double[] values = isMac ? new double[]{5381.075, 7666.544} : new double[]{5382.6, 7675.5};
    public CgiSynPhotBlackboardEWTest(String s)
    {
        super(s);
    }

    public void testBasic ()
    throws InterruptedException
    {
        Blackboard board = new Blackboard ("/testFiles/edu/stsci/hst/CgiSynPhotBlackboardEW.xml");
        board.setValue(OBS_MODE, "acs,hrc,f555w");
        board.setValue(SPECTRUM_EXPRESSION, "rn(icat(k93models,7200,0.0,4.3),band(v),6,vegamag)");

        assertEquals (values[0], calculateEW(board), 1e-1);

        board.setValue(OBS_MODE, "acs,hrc,f775w");

        assertEquals (values[1], calculateEW(board), 1e-1);
    }

    private double calculateEW(Blackboard board) throws InterruptedException
    {
        testComplete = false;

        CgiSynPhotBlackboardEW testObject = new CgiSynPhotBlackboardEW (this, board, ANSWER_PARAMETER, "FieldSource");
        CgiManager.getInstance().queueCommand(testObject);
        int count = 0;
        while (! testComplete)
        {
            Thread.sleep (1000);
//            System.out.println ("[CgiSynPhotBlackboardSourcerateTest.testBasic] sleeping...");
            count++;
            if (count > 10)
            {
                break;
            }
        }

//        System.out.println ("[CgiSynPhotBlackboardSourcerateTest.testBasic] source counts are " + board.getDouble(ANSWER_PARAMETER));
        return (board.getDouble (ANSWER_PARAMETER));
    }

    public void cgiResponse(CgiResponseEvent response)
    {
        testComplete = true;
    }
}
