From 9c20cb23441b697fc3364c6332ede7dedcb80527 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Bl=C3=A4sing?= Date: Sat, 1 Sep 2018 19:38:51 +0200 Subject: [PATCH] Update CHANGE.md and simplify and enhance NativeMappedTest --- CHANGES.md | 2 +- test/com/sun/jna/NativeMappedTestClass.java | 26 ----- .../sun/jna/NativedMappedConverterTest.java | 37 ------ test/com/sun/jna/NativedMappedTest.java | 108 ++++++++++++++++++ 4 files changed, 109 insertions(+), 64 deletions(-) delete mode 100644 test/com/sun/jna/NativeMappedTestClass.java delete mode 100644 test/com/sun/jna/NativedMappedConverterTest.java create mode 100644 test/com/sun/jna/NativedMappedTest.java diff --git a/CHANGES.md b/CHANGES.md index 2467a54fa5..bfa1bba0d2 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -31,10 +31,10 @@ Features * [#997](https://github.com/java-native-access/jna/issues/997): Added `Sysinfo` structure and function to `c.s.j.platform.linux.LibC` - [@dbwiddis](https://github.com/dbwiddis). * [#1001](https://github.com/java-native-access/jna/pull/1001): Added overloads to `c.s.j.platform.win32.Advapi32Util` methods which allow the caller to specify `samDesiredExtra` to request additional registry key security and access rights - [@camw](https://github.com/camw). * [#1007](https://github.com/java-native-access/jna/pull/1007): Added OSGi export of Solaris package - [@swimmesberger](https://github.com/swimmesberger). +* [#1003](https://github.com/java-native-access/jna/pull/1003): Allow `NativeMapped` to be used with enums - [@koraktor](https://github.com/koraktor). Bug Fixes --------- -* [#1003](https://github.com/java-native-access/jna/pull/1003): Allow `NativeMapped` to be used with enums - [@koraktor](https://github.com/koraktor) * [#652](https://github.com/java-native-access/jna/issues/652): Dead Lock in class initialization - [@matthiasblaesing](https://github.com/matthiasblaesing). * [#843](https://github.com/java-native-access/jna/pull/843): Correctly bind `com.sun.jna.platform.win32.SecBufferDesc` and add convenience binding as `com.sun.jna.platform.win32.SspiUtil.ManagedSecBufferDesc`. Bind SSPI functions `InitializeSecurityContext`, `AcceptSecurityContext`, `QueryCredentialsAttributes`, `QuerySecurityPackageInfo`, `EncryptMessage`, `DecryptMessage`, `MakeSignature`, `VerifySignature` in `com.sun.jna.platform.win32.Secur32` - [@matthiasblaesing](https://github.com/matthiasblaesing). * [#863](https://github.com/java-native-access/jna/pull/863): Fix ARM softfloat/hardfloat detection by modifying armSoftFloat condition in ELFAnalyser. Before this fix a softfloat binary could be misdetected as hardfloat. - [@kunkun26](https://github.com/kunkun26). diff --git a/test/com/sun/jna/NativeMappedTestClass.java b/test/com/sun/jna/NativeMappedTestClass.java deleted file mode 100644 index 74e12f9016..0000000000 --- a/test/com/sun/jna/NativeMappedTestClass.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.sun.jna; - -class NativeMappedTestClass implements NativeMapped { - - private String name; - - public NativeMappedTestClass() {} - - @Override - public Object fromNative(Object nativeValue, FromNativeContext context) { - NativeMappedTestClass object = new NativeMappedTestClass(); - object.name = (String) nativeValue; - - return object; - } - - @Override - public Object toNative() { - return name; - } - - @Override - public Class nativeType() { - return String.class; - } -} diff --git a/test/com/sun/jna/NativedMappedConverterTest.java b/test/com/sun/jna/NativedMappedConverterTest.java deleted file mode 100644 index 0f72b2fd13..0000000000 --- a/test/com/sun/jna/NativedMappedConverterTest.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.sun.jna; - -import junit.framework.TestCase; - -public class NativedMappedConverterTest extends TestCase { - - public void testDefaultValueForClass() { - NativeMappedConverter converter = new NativeMappedConverter(NativeMappedTestClass.class); - - assertTrue(converter.defaultValue() instanceof NativeMappedTestClass); - } - - public void testDefaultValueForEnum() { - NativeMappedConverter converter = new NativeMappedConverter(TestEnum.class); - - assertSame(converter.defaultValue(), TestEnum.VALUE1); - } - - private enum TestEnum implements NativeMapped { VALUE1, VALUE2; - - @Override - public Object fromNative(Object nativeValue, FromNativeContext context) { - return values()[(Integer) nativeValue]; - } - - @Override - public Object toNative() { - return ordinal(); - } - - @Override - public Class nativeType() { - return Integer.class; - } - } - -} diff --git a/test/com/sun/jna/NativedMappedTest.java b/test/com/sun/jna/NativedMappedTest.java new file mode 100644 index 0000000000..357f6b1474 --- /dev/null +++ b/test/com/sun/jna/NativedMappedTest.java @@ -0,0 +1,108 @@ +/* Copyright (c) 2018 Sebastian Staudt, Matthias Bläsing, 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 static junit.framework.TestCase.assertEquals; + +public class NativedMappedTest extends TestCase { + + public void testDefaultValueForClass() { + NativeMappedConverter converter = new NativeMappedConverter(NativeMappedTestClass.class); + + assertTrue(converter.defaultValue() instanceof NativeMappedTestClass); + } + + public void testDefaultValueForEnum() { + NativeMappedConverter converter = new NativeMappedConverter(TestEnum.class); + + assertSame(converter.defaultValue(), TestEnum.VALUE1); + } + + public static interface EnumerationTestLibrary extends Library { + TestEnum returnInt32Argument(TestEnum arg); + + @Structure.FieldOrder({"field"}) + class MinTestStructure extends Structure { + public TestEnum field; + } + MinTestStructure testStructurePointerArgument(MinTestStructure s); + } + + public void testEnumConversion() throws Exception { + EnumerationTestLibrary lib = Native.load("testlib", EnumerationTestLibrary.class); + assertEquals("Enumeration improperly converted", TestEnum.VALUE1, lib.returnInt32Argument(TestEnum.VALUE1)); + assertEquals("Enumeration improperly converted", TestEnum.VALUE2, lib.returnInt32Argument(TestEnum.VALUE2)); + EnumerationTestLibrary.MinTestStructure struct = new EnumerationTestLibrary.MinTestStructure(); + struct.field = TestEnum.VALUE1; + assertEquals("Enumeration in structure improperly converted", TestEnum.VALUE1, lib.testStructurePointerArgument(struct).field); + struct.field = TestEnum.VALUE2; + assertEquals("Enumeration in structure improperly converted", TestEnum.VALUE2, lib.testStructurePointerArgument(struct).field); + } + + public enum TestEnum implements NativeMapped { + VALUE1, VALUE2; + + @Override + public Object fromNative(Object nativeValue, FromNativeContext context) { + return values()[(Integer) nativeValue]; + } + + @Override + public Object toNative() { + return ordinal(); + } + + @Override + public Class nativeType() { + return Integer.class; + } + } + + public static class NativeMappedTestClass implements NativeMapped { + + private String name; + + public NativeMappedTestClass() { + } + + @Override + public Object fromNative(Object nativeValue, FromNativeContext context) { + NativeMappedTestClass object = new NativeMappedTestClass(); + object.name = (String) nativeValue; + + return object; + } + + @Override + public Object toNative() { + return name; + } + + @Override + public Class nativeType() { + return String.class; + } + } +}