1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
|
/* Copyright (c) 2019 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 org.junit.Test;
import static org.junit.Assert.*;
public class DefaultMethodInvocationTest {
private final static MixedDirectTestLibrary lib = new DefaultMethodInvocationTest.MixedDirectTestLibrary();
private final static MixedDirectTestLibrary2 lib2 = new DefaultMethodInvocationTest.MixedDirectTestLibrary2();
public static interface MixedTestLibrary extends Library {
public MixedTestLibrary INSTANCE = Native.load("testlib", MixedTestLibrary.class);
String returnStringArgument(String s);
default String returnHello(String name) {
return returnStringArgument("Hello " + name);
}
}
public static class MixedDirectTestLibrary implements MixedTestLibrary {
@Override
public native String returnStringArgument(String s);
static {
Native.register("testlib");
}
}
public static class MixedDirectTestLibrary2 implements MixedTestLibrary {
@Override
public native String returnStringArgument(String s);
@Override
public String returnHello(String name) {
return "Greetings " + name;
}
static {
Native.register("testlib");
}
}
@Test
public void testBoundMethodInvoke() {
assertEquals("world", MixedTestLibrary.INSTANCE.returnStringArgument("world"));
}
@Test
public void testDefaultMethodInvoke() {
assertEquals("Hello world", MixedTestLibrary.INSTANCE.returnHello("world"));
}
@Test
public void testDirectBoundMethodInvoke() {
assertEquals("world", lib.returnStringArgument("world"));
}
@Test
public void testDirectDefaultMethodInvoke() {
assertEquals("Hello world", lib.returnHello("world"));
}
@Test
public void testDefaultMethodCanBeOverriden() {
assertEquals("Greetings world", lib2.returnHello("world"));
}
}
|