Skip to content

Commit

Permalink
Update CHANGE.md and simplify and enhance NativeMappedTest
Browse files Browse the repository at this point in the history
  • Loading branch information
matthiasblaesing committed Sep 1, 2018
1 parent 155d8ae commit 9c20cb2
Show file tree
Hide file tree
Showing 4 changed files with 109 additions and 64 deletions.
2 changes: 1 addition & 1 deletion CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -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).
Expand Down
26 changes: 0 additions & 26 deletions test/com/sun/jna/NativeMappedTestClass.java

This file was deleted.

37 changes: 0 additions & 37 deletions test/com/sun/jna/NativedMappedConverterTest.java

This file was deleted.

108 changes: 108 additions & 0 deletions test/com/sun/jna/NativedMappedTest.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
}

0 comments on commit 9c20cb2

Please sign in to comment.