/* Copyright (c) 2007 Wayne Meissner, 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 java.util.Arrays; import java.util.List; import junit.framework.TestCase; import com.sun.jna.VarArgsTest.TestLibrary.TestStructure; public class VarArgsTest extends TestCase { final int MAGIC32 = 0x12345678; public static interface TestLibrary extends Library { public static class TestStructure extends Structure { public int magic = 0; @Override protected List<String> getFieldOrder() { return Arrays.asList("magic"); } } public int addVarArgs(String fmt, Number... args); public String returnStringVarArgs(String fmt, Object... args); public void modifyStructureVarArgs(String fmt, Object arg1, Object... args); public String returnStringVarArgs2(String... args); } TestLibrary lib; @Override protected void setUp() { lib = Native.loadLibrary("testlib", TestLibrary.class); } @Override protected void tearDown() { lib = null; } public void testIntVarArgs() { int arg1 = 1; int arg2 = 2; assertEquals("32-bit integer varargs not added correctly", arg1 + arg2, lib.addVarArgs("dd", Integer.valueOf(arg1), Integer.valueOf(arg2))); } public void testShortVarArgs() { short arg1 = 1; short arg2 = 2; assertEquals("16-bit integer varargs not added correctly", arg1 + arg2, lib.addVarArgs("dd", Short.valueOf(arg1), Short.valueOf(arg2))); } public void testLongVarArgs() { short arg1 = 1; short arg2 = 2; assertEquals("64-bit integer varargs not added correctly", arg1 + arg2, lib.addVarArgs("ll", Long.valueOf(arg1), Long.valueOf(arg2))); } public void testFloatVarArgs() { float arg1 = 1; float arg2 = 2; assertEquals("float varargs not added correctly", (int)arg1 + (int)arg2, lib.addVarArgs("ff", Float.valueOf(arg1), Float.valueOf(arg2))); } public void testDoubleVarArgs() { double arg1 = 1; double arg2 = 2; assertEquals("double varargs not added correctly", (int)arg1 + (int)arg2, lib.addVarArgs("gg", Double.valueOf(arg1), Double.valueOf(arg2))); } public void testStringVarArgs() { Object[] args = new Object[] { "Test" }; assertEquals("Did not return correct string", args[0], lib.returnStringVarArgs("", args)); } public void testStringVarArgsFull() { Object[] args = new Object[] { "Test" }; assertEquals("Did not return correct string", args[0], lib.returnStringVarArgs2("", "Test")); } public void testAppendNullToVarargs() { Number[] args = new Number[] { Integer.valueOf(1) }; assertEquals("No trailing NULL was appended to varargs list", 1, lib.addVarArgs("dd", args)); } public void testModifyStructureInVarargs() { TestStructure arg1 = new TestStructure(); TestStructure[] varargs = new TestStructure[] { new TestStructure() }; lib.modifyStructureVarArgs("ss", arg1, varargs[0]); assertEquals("Structure memory not read in fixed arg w/varargs", MAGIC32, arg1.magic); assertEquals("Structure memory not read in varargs", MAGIC32, varargs[0].magic); } public static void main(String[] args) { junit.textui.TestRunner.run(VarArgsTest.class); } }