Skip to content

Commit

Permalink
Test for default methods on interface
Browse files Browse the repository at this point in the history
See jnr#249.
  • Loading branch information
headius committed Jun 14, 2021
1 parent 78f5cf3 commit db01751
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 2 deletions.
17 changes: 17 additions & 0 deletions src/test/java/jnr/ffi/InvocationTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
import org.junit.BeforeClass;
import org.junit.Test;

import java.lang.invoke.MethodHandles;

import static org.junit.Assert.assertEquals;

/**
Expand All @@ -31,6 +33,14 @@ public static interface TestLib {
int ret_int32_t(int i);
}

public static interface TestLibWithDefault {
static final MethodHandles.Lookup lookup = MethodHandles.lookup();
int ret_int32_t(int i);
default int doesNotExist(int i) {
return ret_int32_t(i);
}
}

static TestLib testlib;

@BeforeClass
Expand All @@ -44,4 +54,11 @@ public void hammer() throws Throwable {
assertEquals(i, testlib.ret_int32_t(i));
}
}

@Test
public void testDefault() throws Throwable {
TestLibWithDefault withDefault = TstUtil.loadTestLib(TestLibWithDefault.class, TestLibWithDefault.lookup);

assertEquals(testlib.ret_int32_t(1234), withDefault.doesNotExist(1234));
}
}
14 changes: 12 additions & 2 deletions src/test/java/jnr/ffi/TstUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

import jnr.ffi.provider.FFIProvider;

import java.lang.invoke.MethodHandles;
import java.nio.ByteBuffer;
import java.util.Collections;
import java.util.Map;
Expand All @@ -42,11 +43,20 @@ public static interface HelperLib {
}

public static <T> T loadTestLib(Class<T> interfaceClass) {
return loadTestLib(interfaceClass, (MethodHandles.Lookup) null);
}

public static <T> T loadTestLib(Class<T> interfaceClass, MethodHandles.Lookup lookup) {
final Map<LibraryOption, ?> options = Collections.emptyMap();
return loadTestLib(interfaceClass, options);
return loadTestLib(interfaceClass, lookup, options);
}

public static <T> T loadTestLib(Class<T> interfaceClass, Map<LibraryOption, ?> options) {
LibraryLoader<T> loader = (provider != null ? provider : FFIProvider.getSystemProvider()).createLibraryLoader(interfaceClass);
return loadTestLib(interfaceClass, null, options);
}

public static <T> T loadTestLib(Class<T> interfaceClass, MethodHandles.Lookup lookup, Map<LibraryOption, ?> options) {
LibraryLoader<T> loader = (provider != null ? provider : FFIProvider.getSystemProvider()).createLibraryLoader(interfaceClass, lookup);

loader.library(libname);
for (Map.Entry<LibraryOption, ?> option : options.entrySet()) {
Expand Down

0 comments on commit db01751

Please sign in to comment.