Package org.apache.xmlrpc.test

Source Code of org.apache.xmlrpc.test.BaseTest$Remote$CalendarWrapper

/*
* Copyright 1999,2005 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.xmlrpc.test;

import java.io.IOException;
import java.io.Serializable;
import java.io.StringReader;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.TimeZone;

import javax.xml.namespace.QName;
import javax.xml.parsers.DocumentBuilderFactory;

import org.apache.xmlrpc.XmlRpcException;
import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.common.XmlRpcExtensionException;
import org.apache.xmlrpc.server.PropertyHandlerMapping;
import org.apache.xmlrpc.server.XmlRpcHandlerMapping;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.xml.sax.InputSource;


/** An abstract test case, to be implemented for the various
* transport classes.
*/
public class BaseTest extends XmlRpcTestCase {

  /** The remote class being invoked by the test case.
   */
  public static class Remote {
    /** Returns the argument, multiplied by two.
     * @param pArg The argument being doubled.
     * @return The argument, multiplied by two.
     */
    public int byteParam(byte pArg) { return pArg*2; }
    /** Returns the argument, multiplied by two.
     * @param pArg The argument being doubled.
     * @return The argument, multiplied by two.
     */
    public byte byteResult(byte pArg) { return (byte) (pArg*2); }
    /** Returns the argument, multiplied by two.
     * @param pArg The argument being doubled.
     * @return The argument, multiplied by two.
     */
    public int shortParam(short pArg) { return pArg*2; }
    /** Returns the argument, multiplied by two.
     * @param pArg The argument being doubled.
     * @return The argument, multiplied by two.
     */
    public short shortResult(short pArg) { return (short) (pArg*2); }
    /** Returns the argument, multiplied by two.
     * @param pArg The argument being doubled.
     * @return The argument, multiplied by two.
     */
    public int intParam(int pArg) { return pArg*2; }
    /** Returns the argument, multiplied by two.
     * @param pArg The argument being doubled.
     * @return The argument, multiplied by two.
     */
    public int longParam(long pArg) { return (int) (pArg*2); }
    /** Returns the argument, multiplied by two.
     * @param pArg The argument being doubled.
     * @return The argument, multiplied by two.
     */
    public long longResult(long pArg) { return pArg*2; }
    /** Returns the argument, multiplied by two.
     * @param pArg The argument being doubled.
     * @return The argument, multiplied by two.
     */
    public double floatParam(float pArg) { return pArg*2; }
    /** Returns the argument, multiplied by two.
     * @param pArg The argument being doubled.
     * @return The argument, multiplied by two.
     */
    public float floatResult(float pArg) { return pArg*2; }
    /** Returns the argument, multiplied by two.
     * @param pArg The argument being doubled.
     * @return The argument, multiplied by two.
     */
    public double doubleParam(double pArg) { return pArg*2; }
    /** Returns the argument, multiplied by two.
     * @param pArg The argument being doubled.
     * @return The argument, multiplied by two.
     */
    public double doubleResult(double pArg) { return pArg*2; }
    /** Returns the argument, concatenated with itself.
     * @param pArg The argument being concatenated.
     * @return The argument, concatenated with itself.
     */
    public String stringParam(String pArg) { return pArg+pArg; }
    /** Returns the argument, concatenated with itself.
     * @param pArg The argument being concatenated.
     * @return The argument, concatenated with itself.
     */
    public String nullableStringParam(String pArg) {
      if (pArg == null) {
        pArg = "";
      }
      return pArg+pArg;
    }
    /** Returns the argument, concatenated with itself.
     * @param pArg The argument being concatenated.
     * @return The argument, concatenated with itself.
     */
    public String nullableStringResult(String pArg) {
      if (pArg == null) {
        return null;
      }
      return pArg+pArg;
    }
    /** Returns the sum of the bytes in the given byte array.
     * @param pArg The array of bytes being added.
     * @return Sum over the bytes in the array.
     */
    public int byteArrayParam(byte[] pArg) {
      int sum = 0;
      for (int i = 0;  i < pArg.length;  i++) {
        sum += pArg[i];
      }
      return sum;
    }
    /** Returns an array with the bytes 0..pArg.
     * @param pArg Requestes byte array length.
     * @return Byte array with 0..pArg.
     */
    public byte[] byteArrayResult(int pArg) {
      byte[] result = new byte[pArg];
      for (int i = 0;  i < result.length;  i++) {
        result[i] = (byte) i;
      }
      return result;
    }
    /** Returns the sum over the objects in the array.
     * @param pArg Object array being added
     * @return Sum over the objects in the array
     */
    public int objectArrayParam(Object[] pArg) {
      int sum = 0;
      for (int i = 0;  i < pArg.length;  i++) {
        if (pArg[i] instanceof Number) {
          sum += ((Number) pArg[i]).intValue();
        } else {
          sum += Integer.parseInt((String) pArg[i]);
        }
      }
      return sum;
    }
    /** Returns an array of integers with the values
     * 0..pArg.
     * @param pArg Requested array length.
     * @return Array of integers with the values 0..pArg
     */
    public Object[] objectArrayResult(int pArg) {
      Object[] result = new Object[pArg];
      for (int i = 0;  i < result.length;  i++) {
        result[i] = new Integer(i);
      }
      return result;
    }
    /** Returns a sum over the entries in the map. Each
     * key is multiplied with its value.
     * @param pArg The map being iterated.
     * @return Sum of keys, multiplied by their values.
     */
    public int mapParam(Map pArg) {
      int sum = 0;
      for (Iterator iter = pArg.entrySet().iterator();  iter.hasNext()) {
        Map.Entry entry = (Map.Entry) iter.next();
        String key = (String) entry.getKey();
        Integer value = (Integer) entry.getValue();
        sum += Integer.parseInt(key) * value.intValue();
      }
      return sum;
    }
    /** Returns a map with the stringified values 0..pArg as
     * keys and the corresponding integers as values.
     * @param pArg Requested map size.
     * @return Map with the keys "0".."pArg" and
     * 0..pArg as values.
     */
    public Map mapResult(int pArg) {
      Map result = new HashMap();
      for (int i = 0;  i < pArg;  i++) {
        result.put(Integer.toString(i), new Integer(i));
      }
      return result;
    }
    /** Returns the sum of all "int" nodes in <code>pNode</code>.
     * @param pNode The node being counted.
     * @return The sum of the values of all "int" nodes.
     */
    public int nodeParam(Node pNode) {
      if (pNode.getNodeType() != Node.DOCUMENT_NODE) {
        throw new IllegalStateException("Expected document node, got " + pNode);
      }
      Element e = ((Document) pNode).getDocumentElement();
      if (!ROOT_TAG.equals(e.getLocalName()) || !INT_URI.equals(e.getNamespaceURI())) {
        throw new IllegalStateException("Expected root element 'root', got "
                        + new QName(e.getNamespaceURI(), e.getLocalName()));
      }
      return count(pNode);
    }
    private int count(Node pNode) {
      if (INT_TAG.equals(pNode.getLocalName())  &&  INT_URI.equals(pNode.getNamespaceURI())) {
        StringBuffer sb = new StringBuffer();
        for (Node child = pNode.getFirstChild();  child != null;  child = child.getNextSibling()) {
          if (child.getNodeType() == Node.TEXT_NODE  ||  child.getNodeType() == Node.CDATA_SECTION_NODE) {
            sb.append(child.getNodeValue());
          }
        }
        return Integer.parseInt(sb.toString());
      } else {
        int result = 0;
        for (Node child = pNode.getFirstChild();  child != null;  child = child.getNextSibling()) {
          if (child.getNodeType() == Node.ELEMENT_NODE) {
            result += count(child);
          }
        }
        return result;
      }
    }

    /** Example of a Serializable instance.
     */
        public static class CalendarWrapper implements Serializable {
            private static final long serialVersionUID = 8153663910532549627L;
            final Calendar cal;
            CalendarWrapper(Calendar pCalendar) {
                cal = pCalendar;
            }
        }

        /** Returns the calendar value in milliseconds.
     * @param pCal Calendar object
     * @return <code>pCal.getTime().getTime()</code>.
     */
    public long serializableParam(CalendarWrapper pCal) {
      return pCal.cal.getTime().getTime();
    }

    /** Returns midnight of the following day.
     */
        public Calendar calendarParam(Calendar pCal) {
            Calendar cal = (Calendar) pCal.clone();
            cal.add(Calendar.DAY_OF_MONTH, 1);
            cal.set(Calendar.HOUR_OF_DAY, 0);
            cal.set(Calendar.MINUTE, 0);
            cal.set(Calendar.SECOND, 0);
            cal.set(Calendar.MILLISECOND, 0);
            return cal;
        }

        /** Returns midnight of the following day.
         */
        public Date dateParam(Date pDate) {
            Calendar cal = Calendar.getInstance();
            cal.setTime(pDate);
            return calendarParam(cal).getTime();
        }
    }

    protected XmlRpcHandlerMapping getHandlerMapping() throws IOException, XmlRpcException {
    return new PropertyHandlerMapping(getClass().getClassLoader(),
                      getClass().getResource("BaseTest.properties"),
                                          getTypeConverterFactory(),
                                          true);
  }

  /** Test, whether we can invoke a method, passing a byte value.
   * @throws Exception The test failed.
   */
  public void testByteParam() throws Exception {
    for (int i = 0;  i < providers.length;  i++) {
      testByteParam(providers[i]);
    }
  }

  private void testByteParam(ClientProvider pProvider) throws Exception {
    final String methodName = "Remote.byteParam";
    final Object[] params = new Object[]{new Byte((byte) 3)};
    XmlRpcClient client = pProvider.getClient();
    Object result = client.execute(getExConfig(pProvider), methodName, params);
    assertEquals(new Integer(6), result);
    boolean ok = false;
    try {
      client.execute(getConfig(pProvider), methodName, params);
    } catch (XmlRpcExtensionException e) {
      ok = true;
    }
    assertTrue(ok);
  }

  /** Test, whether we can invoke a method, returning a byte.
   * @throws Exception The test failed.
   */
  public void testByteResult() throws Exception {
    for (int i = 0;  i < providers.length;  i++) {
      testByteResult(providers[i]);
    }
  }

  private void testByteResult(ClientProvider pProvider) throws Exception {
    final String methodName = "Remote.byteResult";
    final Object[] params = new Object[]{new Byte((byte) 3)};
    final XmlRpcClient client = pProvider.getClient();
    Object result = client.execute(getExConfig(pProvider), methodName, params);
    assertEquals(new Byte((byte) 6), result);
    boolean ok = false;
    try {
      client.execute(getConfig(pProvider), methodName, params);
    } catch (XmlRpcExtensionException e) {
      ok = true;
    }
    assertTrue(ok);
  }

  /** Test, whether we can invoke a method, passing a short value.
   * @throws Exception The test failed.
   */
  public void testShortParam() throws Exception {
    for (int i = 0;  i < providers.length;  i++) {
      testShortParam(providers[i]);
    }
  }

  private void testShortParam(ClientProvider pProvider) throws Exception {
    final String methodName = "Remote.shortParam";
    final Object[] params = new Object[]{new Short((short) 4)};
    final XmlRpcClient client = pProvider.getClient();
    Object result = client.execute(getExConfig(pProvider), methodName, params);
    assertEquals(new Integer(8), result);
    boolean ok = false;
    try {
      client.execute(getConfig(pProvider), methodName, params);
    } catch (XmlRpcExtensionException e) {
      ok = true;
    }
    assertTrue(ok);
  }

  /** Test, whether we can invoke a method, returning a short value.
   * @throws Exception The test failed.
   */
  public void testShortResult() throws Exception {
    for (int i = 0;  i < providers.length;  i++) {
      testShortResult(providers[i]);
    }
  }

  private void testShortResult(ClientProvider pProvider) throws Exception {
    final String methodName = "Remote.shortResult";
    final Object[] params = new Object[]{new Short((short) 4)};
    final XmlRpcClient client = pProvider.getClient();
    Object result = client.execute(getExConfig(pProvider), methodName, params);
    assertEquals(new Short((short) 8), result);
    boolean ok = false;
    try {
      client.execute(getConfig(pProvider), methodName, params);
    } catch (XmlRpcExtensionException e) {
      ok = true;
    }
    assertTrue(ok);
  }

  /** Test, whether we can invoke a method, passing an
   * integer value.
   * @throws Exception The test failed.
   */
  public void testIntParam() throws Exception {
    for (int i = 0;  i < providers.length;  i++) {
      testIntParam(providers[i]);
    }
  }

  private void testIntParam(ClientProvider pProvider) throws Exception {
    final String methodName = "Remote.intParam";
    final Object[] params = new Object[]{new Integer(5)};
    final XmlRpcClient client = pProvider.getClient();
    Object result = client.execute(getConfig(pProvider), methodName, params);
    assertEquals(new Integer(10), result);
    result = client.execute(getExConfig(pProvider), methodName, params);
    assertEquals(new Integer(10), result);
  }

  /** Test, whether we can invoke a method, passing a long value.
   * @throws Exception The test failed.
   */
  public void testLongParam() throws Exception {
    for (int i = 0;  i < providers.length;  i++) {
      testLongParam(providers[i]);
    }
  }

  private void testLongParam(ClientProvider pProvider) throws Exception {
    final String methodName = "Remote.longParam";
    final Object[] params = new Object[]{new Long(6L)};
    final XmlRpcClient client = pProvider.getClient();
    Object result = client.execute(getExConfig(pProvider), methodName, params);
    assertEquals(new Integer(12), result);
    boolean ok = false;
    try {
      client.execute(getConfig(pProvider), methodName, params);
    } catch (XmlRpcExtensionException e) {
      ok = true;
    }
    assertTrue(ok);
  }

  /** Test, whether we can invoke a method, returning a long value.
   * @throws Exception The test failed.
   */
  public void testLongResult() throws Exception {
    for (int i = 0;  i < providers.length;  i++) {
      testLongResult(providers[i]);
    }
  }

  private void testLongResult(ClientProvider pProvider) throws Exception {
    final String methodName = "Remote.longResult";
    final Object[] params = new Object[]{new Long(6L)};
    final XmlRpcClient client = pProvider.getClient();
    Object result = client.execute(getExConfig(pProvider), methodName, params);
    assertEquals(new Long(12L), result);
    boolean ok = false;
    try {
      client.execute(getConfig(pProvider), methodName, params);
    } catch (XmlRpcExtensionException e) {
      ok = true;
    }
    assertTrue(ok);
  }

  /** Test, whether we can invoke a method, passing a
   * string value.
   * @throws Exception The test failed.
   */
  public void testStringParam() throws Exception {
    for (int i = 0;  i < providers.length;  i++) {
      testStringParam(providers[i]);
    }
  }

  private void testStringParam(ClientProvider pProvider) throws Exception {
    final String methodName = "Remote.stringParam";
    final Object[] params = new Object[]{"abc"};
    final XmlRpcClient client = pProvider.getClient();
    Object result = client.execute(getConfig(pProvider), methodName, params);
    assertEquals("abcabc", result);
    result = client.execute(getExConfig(pProvider), methodName, params);
    assertEquals("abcabc", result);
  }

  /** Test, whether we can invoke a method, passing a
   * string value or null.
   * @throws Exception The test failed.
   */
  public void testNullableStringParam() throws Exception {
    for (int i = 0;  i < providers.length;  i++) {
      testNullableStringParam(providers[i]);
    }
  }

  private void testNullableStringParam(ClientProvider pProvider) throws Exception {
    final String methodName = "Remote.nullableStringParam";
    final Object[] params = new Object[]{"abc"};
    final XmlRpcClient client = pProvider.getClient();
    Object result = client.execute(getConfig(pProvider), methodName, params);
    assertEquals("abcabc", result);
    result = client.execute(getExConfig(pProvider), methodName, params);
    assertEquals("abcabc", result);
    final Object[] nullParams = new Object[]{null};
    result = client.execute(getExConfig(pProvider), methodName, nullParams);
    assertEquals("", result);
    boolean ok = false;
    try {
      client.execute(getConfig(pProvider), methodName, nullParams);
    } catch (XmlRpcExtensionException e) {
      ok = true;
    }
    assertTrue(ok);
  }

  /** Test, whether we can invoke a method, returning a
   * string value or null.
   * @throws Exception The test failed.
   */
  public void testNullableStringResult() throws Exception {
    for (int i = 0;  i < providers.length;  i++) {
      testNullableStringResult(providers[i]);
    }
  }

  private void testNullableStringResult(ClientProvider pProvider) throws Exception {
    final String methodName = "Remote.nullableStringResult";
    final Object[] params = new Object[]{"abc"};
    final XmlRpcClient client = pProvider.getClient();
    Object result = client.execute(getConfig(pProvider), methodName, params);
    assertEquals("abcabc", result);
    result = client.execute(getExConfig(pProvider), methodName, params);
    assertEquals("abcabc", result);
    final Object[] nullParams = new Object[]{null};
    result = client.execute(getExConfig(pProvider), methodName, nullParams);
    assertEquals(null, result);
    boolean ok = false;
    try {
      client.execute(getConfig(pProvider), methodName, nullParams);
    } catch (XmlRpcExtensionException e) {
      ok = true;
    }
    assertTrue(ok);
  }

  /** Test, whether we can invoke a method, passing a float value.
   * @throws Exception The test failed.
   */
  public void testFloatParam() throws Exception {
    for (int i = 0;  i < providers.length;  i++) {
      testFloatParam(providers[i]);
    }
  }

  private void testFloatParam(ClientProvider pProvider) throws Exception {
    final String methodName = "Remote.floatParam";
    final Object[] params = new Object[]{new Float(0.4)};
    final XmlRpcClient client = pProvider.getClient();
    Object result = client.execute(getExConfig(pProvider), methodName, params);
    assertEquals(8, Math.round(((Double) result).doubleValue()*10));
    boolean ok = false;
    try {
      client.execute(getConfig(pProvider), methodName, params);
    } catch (XmlRpcExtensionException e) {
      ok = true;
    }
    assertTrue(ok);
  }

  /** Test, whether we can invoke a method, returning a float value.
   * @throws Exception The test failed.
   */
  public void testFloatResult() throws Exception {
    for (int i = 0;  i < providers.length;  i++) {
      testFloatResult(providers[i]);
    }
  }

  private void testFloatResult(ClientProvider pProvider) throws Exception {
    final String methodName = "Remote.floatResult";
    final Object[] params = new Object[]{new Float(0.4)};
    final XmlRpcClient client = pProvider.getClient();
    Object result = client.execute(getExConfig(pProvider), methodName, params);
    assertEquals(new Float(0.8), result);
    boolean ok = false;
    try {
      client.execute(getConfig(pProvider), methodName, params);
    } catch (XmlRpcExtensionException e) {
      ok = true;
    }
    assertTrue(ok);
  }

  /** Test, whether we can invoke a method, passing a
   * double value.
   * @throws Exception The test failed.
   */
  public void testDoubleParam() throws Exception {
    for (int i = 0;  i < providers.length;  i++) {
      testDoubleParam(providers[i]);
    }
  }

  private void testDoubleParam(ClientProvider pProvider) throws Exception {
    final String methodName = "Remote.doubleParam";
    final Object[] params = new Object[]{new Double(0.6)};
    final XmlRpcClient client = pProvider.getClient();
    Object result = client.execute(getConfig(pProvider), methodName, params);
    assertEquals(new Double(1.2), result);
    result = client.execute(getExConfig(pProvider), methodName, params);
    assertEquals(new Double(1.2), result);
  }

  /** Test, whether we can invoke a method, returning a
   * double value.
   * @throws Exception The test failed.
   */
  public void testDoubleResult() throws Exception {
    for (int i = 0;  i < providers.length;  i++) {
      testDoubleResult(providers[i]);
    }
  }

  private void testDoubleResult(ClientProvider pProvider) throws Exception {
    final String methodName = "Remote.doubleResult";
    final Object[] params = new Object[]{new Double(0.6)};
    final XmlRpcClient client = pProvider.getClient();
    Object result = client.execute(getConfig(pProvider), methodName, params);
    assertEquals(new Double(1.2), result);
    result = client.execute(getExConfig(pProvider), methodName, params);
    assertEquals(new Double(1.2), result);
  }

  /** Test, whether we can invoke a method, passing a
   * byte array.
   * @throws Exception The test failed.
   */
  public void testByteArrayParam() throws Exception {
    for (int i = 0;  i < providers.length;  i++) {
      testByteArrayParam(providers[i]);
    }
  }

  private void testByteArrayParam(ClientProvider pProvider) throws Exception {
    final byte[] bytes = new byte[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    final String methodName = "Remote.byteArrayParam";
    final Object[] params = new Object[]{bytes};
    final XmlRpcClient client = pProvider.getClient();
    Object result = client.execute(getConfig(pProvider), methodName, params);
    assertEquals(new Integer(0+1+2+3+4+5+6+7+8+9), result);
    result = client.execute(getExConfig(pProvider), methodName, params);
    assertEquals(new Integer(0+1+2+3+4+5+6+7+8+9), result);
  }

  /** Test, whether we can invoke a method, returning a
   * byte array.
   * @throws Exception The test failed.
   */
  public void testByteArrayResult() throws Exception {
    for (int i = 0;  i < providers.length;  i++) {
      testByteArrayResult(providers[i]);
    }
  }

  private void testByteArrayResult(ClientProvider pProvider) throws Exception {
    final byte[] bytes = new byte[]{0, 1, 2, 3, 4, 5, 6, 7};
    final String methodName = "Remote.byteArrayResult";
    final Object[] params = new Object[]{new Integer(8)};
    final XmlRpcClient client = pProvider.getClient();
    Object result = client.execute(getConfig(pProvider), methodName, params);
    assertTrue(Arrays.equals(bytes, (byte[]) result));
    result = client.execute(getExConfig(pProvider), methodName, params);
    assertTrue(Arrays.equals(bytes, (byte[]) result));
  }

  /** Test, whether we can invoke a method, passing an
   * object array.
   * @throws Exception The test failed.
   */
  public void testObjectArrayParam() throws Exception {
    for (int i = 0;  i < providers.length;  i++) {
      testObjectArrayParam(providers[i]);
    }
  }

  private void testObjectArrayParam(ClientProvider pProvider) throws Exception {
    final Object[] objects = new Object[]{new Byte((byte) 1), new Short((short) 2),
                        new Integer(3), new Long(4), "5"};
    final String methodName = "Remote.objectArrayParam";
    final Object[] params = new Object[]{objects};
    final XmlRpcClient client = pProvider.getClient();
    boolean ok = false;
    try {
      client.execute(getConfig(pProvider), methodName, params);
    } catch (XmlRpcExtensionException e) {
      ok = true;
    }
    assertTrue(ok);
    Object result = client.execute(getExConfig(pProvider), methodName, params);
    assertEquals(new Integer(15), result);
  }

  /** Test, whether we can invoke a method, returning an
   * object array.
   * @throws Exception The test failed.
   */
  public void testObjectArrayResult() throws Exception {
    for (int i = 0;  i < providers.length;  i++) {
      testObjectArrayResult(providers[i]);
    }
  }

  private void testObjectArrayResult(ClientProvider pProvider) throws Exception {
    final Object[] objects = new Object[]{new Integer(0), new Integer(1),
                        new Integer(2), new Integer(3)};
    final String methodName = "Remote.objectArrayResult";
    final Object[] params = new Object[]{new Integer(4)};
    final XmlRpcClient client = pProvider.getClient();
    Object result = client.execute(getConfig(pProvider), methodName, params);
    assertTrue(Arrays.equals(objects, (Object[]) result));
    result = client.execute(getExConfig(pProvider), methodName, params);
    assertTrue(Arrays.equals(objects, (Object[]) result));
  }

  /** Test, whether we can invoke a method, passing a map.
   * @throws Exception The test failed.
   */
  public void testMapParam() throws Exception {
    for (int i = 0;  i < providers.length;  i++) {
      testMapParam(providers[i]);
    }
  }

  private void testMapParam(ClientProvider pProvider) throws Exception {
    final Map map = new HashMap();
    map.put("2", new Integer(3));
    map.put("3", new Integer(5));
    final String methodName = "Remote.mapParam";
    final Object[] params = new Object[]{map};
    final XmlRpcClient client = pProvider.getClient();
    Object result = client.execute(getConfig(pProvider), methodName, params);
    assertEquals(new Integer(21), result);
    result = client.execute(getExConfig(pProvider), methodName, params);
    assertEquals(new Integer(21), result);
  }

  private void checkMap(Map pResult) {
    assertEquals(4, pResult.size());
    assertEquals(new Integer(0), pResult.get("0"));
    assertEquals(new Integer(1), pResult.get("1"));
    assertEquals(new Integer(2), pResult.get("2"));
    assertEquals(new Integer(3), pResult.get("3"));
  }

  /** Test, whether we can invoke a method, returning a map.
   * @throws Exception The test failed.
   */
  public void testMapResult() throws Exception {
    for (int i = 0;  i < providers.length;  i++) {
      testMapResult(providers[i]);
    }
  }

  private void testMapResult(ClientProvider pProvider) throws Exception {
    final String methodName = "Remote.mapResult";
    final Object[] params = new Object[]{new Integer(4)};
    final XmlRpcClient client = pProvider.getClient();
    Object result = client.execute(getConfig(pProvider), methodName, params);
    checkMap((Map) result);
    result = client.execute(getExConfig(pProvider), methodName, params);
    checkMap((Map) result);
  }

  /** Test, whether we can invoke a method, passing a DOM
   * node as parameter.
   * @throws Exception The test failed.
   */
  public void testNodeParam() throws Exception {
    for (int i = 0;  i < providers.length;  i++) {
      testNodeParam(providers[i]);
    }
  }

  private static final String ROOT_TAG = "root";
  private static final String INT_TAG = "int";
  private static final String INT_URI = "http://ws.apache.org/xmlrpc/namespaces/testNodeParam";

  private void testNodeParam(ClientProvider pProvider) throws Exception {
    final String xml =
      "<" + ROOT_TAG + " xmlns='" + INT_URI +"'>" +
      "  <" + INT_TAG + ">1</" + INT_TAG + ">" +
      "  <" + INT_TAG + ">2</" + INT_TAG + ">" +
      "  <" + INT_TAG + ">3</" + INT_TAG + ">" +
      "  <" + INT_TAG + ">4</" + INT_TAG + ">" +
      "  <" + INT_TAG + ">5</" + INT_TAG + ">" +
      "</" + ROOT_TAG + ">";
    final String methodName = "Remote.nodeParam";
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    dbf.setValidating(false);
    dbf.setNamespaceAware(true);
    Document doc = dbf.newDocumentBuilder().parse(new InputSource(new StringReader(xml)));
    final Object[] params = new Object[]{doc};
    final XmlRpcClient client = pProvider.getClient();
    Object result = client.execute(getExConfig(pProvider), methodName, params);
    assertEquals(new Integer(1+2+3+4+5), result);
    boolean ok = false;
    try {
      client.execute(getConfig(pProvider), methodName, params);
    } catch (XmlRpcExtensionException e) {
      ok = true;
    }
    assertTrue(ok);
  }

  /** Test, whether we can invoke a method, passing an instance of
   * {@link java.io.Serializable} as a parameter.
   * @throws Exception The test failed.
   */
  public void testSerializableParam() throws Exception {
    for (int i = 0;  i < providers.length;  i++) {
      testSerializableParam(providers[i]);
    }
  }

  private void testSerializableParam(ClientProvider pProvider) throws Exception {
    final String methodName = "Remote.serializableParam";
    Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
    cal.set(2005, 5, 23, 8, 4, 0);
    cal.set(Calendar.MILLISECOND, 5);
    final Object[] params = new Object[]{new Remote.CalendarWrapper(cal)};
    final XmlRpcClient client = pProvider.getClient();
    Object result = client.execute(getExConfig(pProvider), methodName, params);
    assertEquals(new Long(cal.getTime().getTime()), result);
    boolean ok = false;
    try {
      client.execute(getConfig(pProvider), methodName, params);
    } catch (XmlRpcExtensionException e) {
      ok = true;
    }
    assertTrue(ok);
  }

  /** Tests, whether we can invoke a method, passing an instance of
     * {@link Calendar} as a parameter.
     * @throws Exception The test failed.
   */
  public void testCalendarParam() throws Exception {
      for (int i = 0;  i < providers.length;  i++) {
          testCalendarParam(providers[i]);
        }
    }

  private void testCalendarParam(ClientProvider pProvider) throws Exception {
      final String methodName = "Remote.calendarParam";
        Calendar cal1 = newCalendarParam();
        Calendar cal2 = newCalendarResult();
        final Object[] params = new Object[]{cal1};
        final XmlRpcClient client = pProvider.getClient();
        Object result = client.execute(getExConfig(pProvider), methodName, params);
        assertEquals(cal2.getTime(), ((Calendar) result).getTime());
        boolean ok = false;
        try {
            client.execute(getConfig(pProvider), methodName, params);
        } catch (XmlRpcExtensionException e) {
            ok = true;
        }
        assertTrue(ok);
    }

    private Calendar newCalendarResult() {
        Calendar cal2 = Calendar.getInstance(TimeZone.getDefault());
        cal2.set(2005, 5, 24, 0, 0, 0);
        cal2.set(Calendar.MILLISECOND, 0);
        return cal2;
    }

    private Calendar newCalendarParam() {
        Calendar cal1 = Calendar.getInstance(TimeZone.getDefault());
        cal1.set(2005, 5, 23, 8, 4, 0);
        cal1.set(Calendar.MILLISECOND, 5);
        return cal1;
    }

    /** Tests, whether we can invoke a method, passing an instance of
     * {@link Date} as a parameter.
     * @throws Exception The test failed.
     */
    public void testDateParam() throws Exception {
        for (int i = 0;  i < providers.length;  i++) {
            testDateParam(providers[i]);
        }
    }

    private void testDateParam(ClientProvider pProvider) throws Exception {
        final String methodName = "Remote.dateParam";
        Date date1 = newCalendarParam().getTime();
        Calendar cal2 = newCalendarResult();
        final Object[] params = new Object[]{date1};
        final XmlRpcClient client = pProvider.getClient();
        Object result = client.execute(getExConfig(pProvider), methodName, params);
        assertEquals(cal2.getTime(), result);
        result = client.execute(getConfig(pProvider), methodName, params);
        assertEquals(cal2.getTime(), result);
    }
}
TOP

Related Classes of org.apache.xmlrpc.test.BaseTest$Remote$CalendarWrapper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.