/* 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; import com.sun.jna.ptr.ByteByReference; import com.sun.jna.ptr.DoubleByReference; import com.sun.jna.ptr.FloatByReference; import com.sun.jna.ptr.IntByReference; import com.sun.jna.ptr.LongByReference; import com.sun.jna.ptr.NativeLongByReference; import com.sun.jna.ptr.PointerByReference; import com.sun.jna.ptr.ShortByReference; /** Exercise a range of native methods. * * @author twall@users.sf.net */ public class ByReferenceArgumentsTest extends TestCase { public static interface TestLibrary extends Library { void incrementInt8ByReference(ByteByReference b); void incrementInt16ByReference(ShortByReference s); void incrementInt32ByReference(IntByReference i); void incrementNativeLongByReference(NativeLongByReference l); void incrementInt64ByReference(LongByReference l); void complementFloatByReference(FloatByReference f); void complementDoubleByReference(DoubleByReference d); void setPointerByReferenceNull(PointerByReference p); } TestLibrary lib; @Override protected void setUp() { lib = Native.loadLibrary("testlib", TestLibrary.class); } @Override protected void tearDown() { lib = null; } public void testByteByReference() { ByteByReference bref = new ByteByReference(); lib.incrementInt8ByReference(bref); assertEquals("Byte argument not modified", 1, bref.getValue()); } public void testShortByReference() { ShortByReference sref = new ShortByReference(); lib.incrementInt16ByReference(sref); assertEquals("Short argument not modified", 1, sref.getValue()); } public void testIntByReference() { IntByReference iref = new IntByReference(); lib.incrementInt32ByReference(iref); assertEquals("Int argument not modified", 1, iref.getValue()); } public void testNativeLongByReference() { NativeLongByReference iref = new NativeLongByReference(); lib.incrementNativeLongByReference(iref); assertEquals("Native long argument not modified", new NativeLong(1), iref.getValue()); } public void testLongByReference() { LongByReference lref = new LongByReference(); lib.incrementInt64ByReference(lref); assertEquals("Long argument not modified", 1, lref.getValue()); } public void testFloatByReference() { FloatByReference fref = new FloatByReference(1f); lib.complementFloatByReference(fref); assertEquals("Float argument not modified", -1f, fref.getValue(), 0.0); } public void testDoubleByReference() { DoubleByReference dref = new DoubleByReference(1d); lib.complementDoubleByReference(dref); assertEquals("Int argument not modified", -1d, dref.getValue(), 0.0); } public void testPointerByReference() { PointerByReference pref = new PointerByReference(); assertNull("Default pointer should be null", pref.getValue()); pref = new PointerByReference(new Memory(16)); assertNotNull("Explicit pointer should not be null", pref.getValue()); lib.setPointerByReferenceNull(pref); assertNull("Default pointer should be NULL after call", pref.getValue()); } public static void main(java.lang.String[] argList) { junit.textui.TestRunner.run(ByReferenceArgumentsTest.class); } }