/* Copyright (c) 2007 Timothy Wall, All Rights Reserved
*
* The contents of this file is dual-licensed under 2
* alternative Open Source/Free licenses: LGPL 2.1 or later and
* Apache License 2.0. (starting with JNA version 4.0.0).
*
* You can freely decide which license you want to apply to
* the project.
*
* You may obtain a copy of the LGPL License at:
*
* http://www.gnu.org/licenses/licenses.html
*
* A copy is also included in the downloadable source code package
* containing JNA, in file "LGPL2.1".
*
* You may obtain a copy of the Apache License at:
*
* http://www.apache.org/licenses/
*
* A copy is also included in the downloadable source code package
* containing JNA, in file "AL2.0".
*/
package com.sun.jna;
import junit.framework.TestCase;
/** Exercise the {@link Function} class.
*
* @author twall@users.sf.net
*/
//@SuppressWarnings("unused")
public class FunctionTest extends TestCase {
public void testTooManyArgs() {
NativeLibrary lib = NativeLibrary.getInstance(Platform.C_LIBRARY_NAME);
Function f = lib.getFunction("printf");
Object[] args = new Object[Function.MAX_NARGS+1];
// Make sure we don't break 'printf'
args[0] = getName();
try {
f.invokeInt(args);
fail("Arguments should be limited to " + Function.MAX_NARGS);
} catch(UnsupportedOperationException e) {
// expected
}
assertEquals("Wrong result from 'printf'", getName().length(), f.invokeInt(new Object[] { getName() }));
}
public void testUnsupportedReturnType() {
NativeLibrary lib = NativeLibrary.getInstance(Platform.C_LIBRARY_NAME);
Function f = lib.getFunction("printf");
try {
f.invoke(getClass(), new Object[] { getName() });
fail("Invalid return types should throw an exception");
} catch(IllegalArgumentException e) {
// expected
}
}
public static void main(java.lang.String[] argList) {
junit.textui.TestRunner.run(FunctionTest.class);
}
}