<%
/*
 * Copyright:
 *   (C) 2006 by Derrell Lipman
 *       All rights reserved
 *
 * License:
 *   LGPL 2.1: http://creativecommons.org/licenses/LGPL/2.1/
 */

/*
 * This is the standard qooxdoo test class.  There are tests for each of the
 * primitive types here, along with standard named tests "echo", "sink" and
 * "sleep".
 */

/**
 * Echo the (one and only) parameter.
 *
 * @param params
 *   An array containing the parameters to this method
 *
 * @param error
 *   An object of class JsonRpcError.
 *
 * @return
 *   Success: The object containing the result of the method;
 *   Failure: null
 */
function _echo(params, error)
{
    if (params.length != 1)
    {
        error.setError(JsonRpcError_ParameterMismatch,
                       "Expected 1 parameter; got " + params.length);
        return error;
    }
    return "Client said: [" + params[0] + "]";
}
jsonrpc.method.echo = _echo;

/**
 * Sink all data and never return.
 *
 * @param params
 *   An array containing the parameters to this method (none expected)
 *
 * @param error
 *   An object of class JsonRpcError.
 *
 * @return
 *   "Never"
 */
function _sink(params, error)
{
    /* We're never supposed to return.  Just sleep for a very long time. */
    sleep(240);
}
jsonrpc.method.sink = _sink;

/**
 * Sleep for the number of seconds specified by the parameter.
 *
 * @param params
 *   An array containing the parameters to this method (one expected)
 *
 * @param error
 *   An object of class JsonRpcError.
 *
 * @return
 *   Success: The object containing the result of the method;
 *   Failure: null
 */
function _sleep(params, error)
{
    if (params.length != 1)
    {
        error.setError(JsonRpcError_ParameterMismatch,
                       "Expected 1 parameter; got " + params.length);
        return error;
    }
    
    sleep(params[0]);
    return params[0];
}
jsonrpc.method.sleep = _sleep;

/*************************************************************************/

/*
 * The remainder of the functions test each individual primitive type, and
 * test echoing arbitrary types.  Hopefully the name is self-explanatory.
 */

function _getInteger(params, error)
{
    return 1;
}
jsonrpc.method.getInteger = _getInteger;

function _getFloat(params, error)
{
    return 1/3;
}
jsonrpc.method.getFloat = _getFloat;

function _getString(params, error)
{
    return "Hello world";
}
jsonrpc.method.getString = _getString;

function _getBadString(params, error)
{
    return "<!DOCTYPE HTML \"-//IETF//DTD HTML 2.0//EN\">";
}
jsonrpc.method.getBadString = _getBadString;

function _getArrayInteger(params, error)
{
    return new Array(1, 2, 3, 4);
}
jsonrpc.method.getArrayInteger = _getArrayInteger;

function _getArrayString(params, error)
{
    return new Array("one", "two", "three", "four");
}
jsonrpc.method.getArrayString = _getArrayString;

function _getObject(params, error)
{
    o = new Object(); // some arbitrary object
    o.something = 23;
    o.garbage = 'lkasjdff;lajsdfkl;sadf';
    return o;    
}
jsonrpc.method.getObject = _getObject;

function _getTrue(params, error)
{
    return true;
}
jsonrpc.method.getTrue = _getTrue;

function _getFalse(params, error)
{
    return false;
}
jsonrpc.method.getFalse = _getFalse;

function _getNull(params, error)
{
    return null;
}
jsonrpc.method.getNull = _getNull;

function _isInteger(params, error)
{
    var type = nativeTypeOf(params[0]);
    return type == "integer" || type == "integer64";
}
jsonrpc.method.isInteger = _isInteger;

function _isFloat(params, error)
{
    return nativeTypeOf(params[0]) == "float";
}
jsonrpc.method.isFloat = _isFloat;

function _isString(params, error)
{
    return nativeTypeOf(params[0]) == "string";
}
jsonrpc.method.isString = _isString;

function _isBoolean(params, error)
{
    return nativeTypeOf(params[0]) == "boolean";
}
jsonrpc.method.isBoolean = _isBoolean;

function _isArray(params, error)
{
    return nativeTypeOf(params[0]) == "object" && params.length != undefined;
}
jsonrpc.method.isArray = _isArray;

function _isObject(params, error)
{
    return nativeTypeOf(params[0]) == "object";
}
jsonrpc.method.isObject = _isObject;

function _isNull(params, error)
{
    return nativeTypeOf(params[0]) == "null";
}
jsonrpc.method.isNull = _isNull;

function _getParams(params, error)
{
    return params;
}	
jsonrpc.method.getParams = _getParams;

function _getParam(params, error)
{
    return params[0];
}	
jsonrpc.method.getParam = _getParam;

function _getCurrentTimestamp()
{
    now = gettimeofday();
    obj = new Object();
    obj.now = now.sec;
    obj.json = JSON_Date.create(now);
    return obj;
}
jsonrpc.method.getCurrentTimestamp = _getCurrentTimestamp;

function _getError(params, error)
{
    error.setError(23, "This is an application-provided error");
    return error;
}	
jsonrpc.method.getError = _getError;


/*
 * Local Variables:
 * mode: c
 * End:
 */
%>