001 /*
002 This project provide access to non public fields
003 and methods as help for writing tests.
004 Copyright (C) 2007 Christof Lehmann
005
006 This program is free software; you can redistribute it and/or
007 modify it under the terms of the GNU General Public License
008 as published by the Free Software Foundation; either version 2
009 of the License, or (at your option) any later version.
010
011 This program is distributed in the hope that it will be useful,
012 but WITHOUT ANY WARRANTY; without even the implied warranty of
013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
014 GNU General Public License for more details.
015
016 You should have received a copy of the GNU General Public License
017 along with this program; if not, write to the Free Software
018 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
019 */
020 package net.sf.testextensions;
021
022 /**
023 * The interface <code>AccessObject</code> declares the methods
024 * to access non public fields and methods. The implementation
025 * of the AccessObject should enclose all the nessecary things.
026 * @author forge-cl
027 *
028 */
029 public interface AccessObject {
030
031 /**
032 * The methode <code>getField</code> select a field
033 * for manipulation.
034 * @param fieldName the name of the wished field.
035 * @return an instance of AccessField
036 * @throws TestExtensionException the exception shows an
037 * error, when preparing the access to the field.
038 */
039 AccessField getField(String fieldName) throws TestExtensionException;
040
041 /**
042 * The method <code>getMethod</code> provide access to
043 * a by name called method. If there exists several methods
044 * with the same name, all methods were accessed by this method.
045 * @param methodName the name of the method.
046 * @return an object, which provide access to the method.
047 * @throws TestExtensionException the exception shows an
048 * error, when preparing the access to the method, for instance
049 * when no method was found.
050 */
051 AccessMethod getMethod(String methodName) throws TestExtensionException;
052
053 /**
054 * The method <code>newInnerInstance</code> create a instance of an
055 * inner class from the current object.
056 * @param innerClassname The name of the inner class without the prefix for
057 * the outer class.
058 * @return a new instance of an inner class of the current object.
059 * @throws TestExtensionException shows any error.
060 */
061 AccessObject newInnerInstance(String innerClassname)
062 throws TestExtensionException;
063
064 /**
065 * The method <code>newInnerInstance</code> create a instance of an inner
066 * class from the current object.
067 *
068 * @param innerClassname
069 * The name of the inner class without the prefix for the outer
070 * class.
071 * @param args
072 * the arguments for the constructor.
073 * @return a new instance of an inner class of the current object.
074 * @throws TestExtensionException
075 * shows any error.
076 */
077 AccessObject newInnerInstance(String innerClassname, Object[] args)
078 throws TestExtensionException;
079
080 }