Package gnu.testlet.java.lang.reflect.Proxy

Source Code of gnu.testlet.java.lang.reflect.Proxy.check13

//Tags: JDK1.3

//Copyright (C) 2005 Robert Schuster <thebohemian@gmx.net>

//This file is part of Mauve.

//Mauve is free software; you can redistribute it and/or modify
//it under the terms of the GNU General Public License as published by
//the Free Software Foundation; either version 2, or (at your option)
//any later version.

//Mauve 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 for more details.

//You should have received a copy of the GNU General Public License
//along with Mauve; see the file COPYING.  If not, write to
//the Free Software Foundation, 59 Temple Place - Suite 330,
//Boston, MA 02111-1307, USA.  */

package gnu.testlet.java.lang.reflect.Proxy;

import gnu.testlet.TestHarness;
import gnu.testlet.Testlet;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.IOException;
import java.io.Serializable;
import java.lang.reflect.Proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/** A basic test for the proxy mechanism that tests whether the arguments are delivered correctly.
*
* @author Robert Schuster
*/
public class check13 implements Testlet, InvocationHandler, Serializable {
 
  transient Object proxy;
  transient Object[] args;
  transient Method method;
 
  public void test(TestHarness harness) {
    // Creates a Proxy implementation of an ActionListener that will
    // call the invoke() method whenever a method of al is called.
    ActionListener al = (ActionListener) Proxy.newProxyInstance(
        getClass().getClassLoader(),
        new Class[] { ActionListener.class }, this);

    Method expectedMethod = null;
    try {
      // Note: Proxy API uses the method that is declared in the interface not in the Proxy itself!
      expectedMethod = ActionListener.class.getMethod("actionPerformed", new Class[] { ActionEvent.class });
    } catch(NoSuchMethodException nsme) {
      harness.fail("test setup failed");
    }

    ActionEvent event = new ActionEvent(this, 0, "GNU yourself!");
   
    // Provokes a call to invoke().
    al.actionPerformed(event);

    // Note: Referential equality checks are used to really make sure we have
    // the same instance.
   
    harness.check(proxy == al, "proxy method called");
    harness.check(method, expectedMethod);
    harness.check(args.length, 1);
    harness.check(args[0] == event);

                // Test serialization
                harness.checkPoint("serialization");
                try {
                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
                    ObjectOutputStream oos = new ObjectOutputStream(baos);
                    oos.writeObject(proxy);
                    oos.close();
                    ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
                    ObjectInputStream ois = new ObjectInputStream(bais);
                    Proxy p = (Proxy)ois.readObject();
                    harness.check(p.getClass() == proxy.getClass());
                    harness.check(Proxy.getInvocationHandler(p).getClass() == Proxy.getInvocationHandler(proxy).getClass());
                } catch(Exception x) {
                    harness.debug(x);
                    harness.fail("Unexpected exception");
                }
  }

  public Object invoke(Object proxy, Method method, Object[] args)
      throws Throwable {
   
    this.proxy = proxy;
    this.method = method;
    this.args = args;
   
    return null;
  }

}
TOP

Related Classes of gnu.testlet.java.lang.reflect.Proxy.check13

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.