I'm not exactly sure what is relevant here in the error, but when trying to use shadowOf
on either bluetooth manager or bluetooth adapter I get similar errors.
@RunWith(AndroidJUnit4::class)
class DefaultBluetoothDataSourceTest {
@Test
fun test_shadowBluetoothAdapter_v1()
{
val context : Context = ApplicationProvider.getApplicationContext()
val manager = context.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
val adapter = manager.adapter
val shadowBluetoothAdapter = shadowOf(adapter)
}
@Test
fun test_shadowBluetoothAdapter_v2()
{
val shadowBluetoothAdapter = shadowOf(BluetoothAdapter.getDefaultAdapter())
}
}
08-18 23:19:45.880 26582 26619 I TestRunner: started: test_shadowBluetoothAdapter_v1(com.xenetix.p2kmbs.bluetooth.DefaultBluetoothDataSourceTest)
08-18 23:19:45.903 26582 26619 W .bluetooth.test: Accessing hidden field Ljava/lang/invoke/MethodHandles$Lookup;->IMPL_LOOKUP:Ljava/lang/invoke/MethodHandles$Lookup; (blocked, reflection, denied)
08-18 23:19:45.903 26582 26619 E TestRunner: failed: test_shadowBluetoothAdapter_v1(com.xenetix.p2kmbs.bluetooth.DefaultBluetoothDataSourceTest)
08-18 23:19:45.903 26582 26619 E TestRunner: ----- begin exception -----
08-18 23:19:45.905 26582 26619 E TestRunner: java.lang.ExceptionInInitializerError
08-18 23:19:45.905 26582 26619 E TestRunner: at org.robolectric.shadow.api.Shadow.extract(Shadow.java:25)
08-18 23:19:45.905 26582 26619 E TestRunner: at org.robolectric.Shadows.shadowOf(Shadows.java:1393)
08-18 23:19:45.905 26582 26619 E TestRunner: at com.xenetix.p2kmbs.bluetooth.DefaultBluetoothDataSourceTest.test_shadowBluetoothAdapter_v1(DefaultBluetoothDataSourceTest.kt:41)
08-18 23:19:45.905 26582 26619 E TestRunner: at java.lang.reflect.Method.invoke(Native Method)
08-18 23:19:45.905 26582 26619 E TestRunner: at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
08-18 23:19:45.905 26582 26619 E TestRunner: at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
08-18 23:19:45.905 26582 26619 E TestRunner: at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
08-18 23:19:45.905 26582 26619 E TestRunner: at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
08-18 23:19:45.905 26582 26619 E TestRunner: at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
08-18 23:19:45.905 26582 26619 E TestRunner: at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
08-18 23:19:45.905 26582 26619 E TestRunner: at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
08-18 23:19:45.905 26582 26619 E TestRunner: at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
08-18 23:19:45.905 26582 26619 E TestRunner: at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
08-18 23:19:45.905 26582 26619 E TestRunner: at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
08-18 23:19:45.905 26582 26619 E TestRunner: at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
08-18 23:19:45.905 26582 26619 E TestRunner: at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
08-18 23:19:45.905 26582 26619 E TestRunner: at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
08-18 23:19:45.905 26582 26619 E TestRunner: at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
08-18 23:19:45.905 26582 26619 E TestRunner: at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
08-18 23:19:45.905 26582 26619 E TestRunner: at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
08-18 23:19:45.905 26582 26619 E TestRunner: at androidx.test.ext.junit.runners.AndroidJUnit4.run(AndroidJUnit4.java:162)
08-18 23:19:45.905 26582 26619 E TestRunner: at org.junit.runners.Suite.runChild(Suite.java:128)
08-18 23:19:45.905 26582 26619 E TestRunner: at org.junit.runners.Suite.runChild(Suite.java:27)
08-18 23:19:45.905 26582 26619 E TestRunner: at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
08-18 23:19:45.905 26582 26619 E TestRunner: at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
08-18 23:19:45.905 26582 26619 E TestRunner: at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
08-18 23:19:45.905 26582 26619 E TestRunner: at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
08-18 23:19:45.905 26582 26619 E TestRunner: at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
08-18 23:19:45.905 26582 26619 E TestRunner: at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
08-18 23:19:45.905 26582 26619 E TestRunner: at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
08-18 23:19:45.905 26582 26619 E TestRunner: at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
08-18 23:19:45.905 26582 26619 E TestRunner: at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
08-18 23:19:45.905 26582 26619 E TestRunner: at androidx.test.internal.runner.TestExecutor.execute(TestExecutor.java:67)
08-18 23:19:45.905 26582 26619 E TestRunner: at androidx.test.internal.runner.TestExecutor.execute(TestExecutor.java:58)
08-18 23:19:45.905 26582 26619 E TestRunner: at androidx.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:446)
08-18 23:19:45.905 26582 26619 E TestRunner: at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2361)
08-18 23:19:45.905 26582 26619 E TestRunner: Caused by: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
08-18 23:19:45.905 26582 26619 E TestRunner: at org.robolectric.shadow.api.Shadow.<clinit>(Shadow.java:15)
08-18 23:19:45.905 26582 26619 E TestRunner: ... 36 more
08-18 23:19:45.905 26582 26619 E TestRunner: Caused by: java.lang.reflect.InvocationTargetException
08-18 23:19:45.905 26582 26619 E TestRunner: at java.lang.reflect.Constructor.newInstance0(Native Method)
08-18 23:19:45.905 26582 26619 E TestRunner: at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
08-18 23:19:45.905 26582 26619 E TestRunner: at org.robolectric.shadow.api.Shadow.<clinit>(Shadow.java:13)
08-18 23:19:45.905 26582 26619 E TestRunner: ... 36 more
08-18 23:19:45.905 26582 26619 E TestRunner: Caused by: java.lang.LinkageError: No field IMPL_LOOKUP in class Ljava/lang/invoke/MethodHandles$Lookup; (declaration of 'java.lang.invoke.MethodHandles$Lookup' appears in /apex/com.android.art/javalib/core-oj.jar)
08-18 23:19:45.905 26582 26619 E TestRunner: at org.robolectric.internal.bytecode.ProxyMaker.<clinit>(ProxyMaker.java:73)
08-18 23:19:45.905 26582 26619 E TestRunner: at org.robolectric.internal.bytecode.ShadowImpl.<init>(ShadowImpl.java:9)
08-18 23:19:45.905 26582 26619 E TestRunner: ... 39 more
08-18 23:19:45.905 26582 26619 E TestRunner: Caused by: java.lang.NoSuchFieldException: No field IMPL_LOOKUP in class Ljava/lang/invoke/MethodHandles$Lookup; (declaration of 'java.lang.invoke.MethodHandles$Lookup' appears in /apex/com.android.art/javalib/core-oj.jar)
08-18 23:19:45.905 26582 26619 E TestRunner: at java.lang.Class.getDeclaredField(Native Method)
08-18 23:19:45.905 26582 26619 E TestRunner: at org.robolectric.internal.bytecode.ProxyMaker.getTrustedLookup(ProxyMaker.java:87)
08-18 23:19:45.905 26582 26619 E TestRunner: at org.robolectric.internal.bytecode.ProxyMaker.<clinit>(ProxyMaker.java:59)
08-18 23:19:45.905 26582 26619 E TestRunner: ... 40 more
08-18 23:19:45.905 26582 26619 E TestRunner: ----- end exception -----
08-18 23:19:45.907 26582 26619 I TestRunner: finished: test_shadowBluetoothAdapter_v1(com.xenetix.p2kmbs.bluetooth.DefaultBluetoothDataSourceTest)
java.lang.ExceptionInInitializerError
at org.robolectric.shadow.api.Shadow.extract(Shadow.java:25)
at org.robolectric.Shadows.shadowOf(Shadows.java:1393)
at com.xenetix.p2kmbs.bluetooth.DefaultBluetoothDataSourceTest.test_shadowBluetoothAdapter_v1(DefaultBluetoothDataSourceTest.kt:41)
... 32 trimmed
Caused by: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at org.robolectric.shadow.api.Shadow.<clinit>(Shadow.java:15)
... 36 more
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
at org.robolectric.shadow.api.Shadow.<clinit>(Shadow.java:13)
... 36 more
Caused by: java.lang.LinkageError: No field IMPL_LOOKUP in class Ljava/lang/invoke/MethodHandles$Lookup; (declaration of 'java.lang.invoke.MethodHandles$Lookup' appears in /apex/com.android.art/javalib/core-oj.jar)
at org.robolectric.internal.bytecode.ProxyMaker.<clinit>(ProxyMaker.java:73)
at org.robolectric.internal.bytecode.ShadowImpl.<init>(ShadowImpl.java:9)
... 39 more
Caused by: java.lang.NoSuchFieldException: No field IMPL_LOOKUP in class Ljava/lang/invoke/MethodHandles$Lookup; (declaration of 'java.lang.invoke.MethodHandles$Lookup' appears in /apex/com.android.art/javalib/core-oj.jar)
at java.lang.Class.getDeclaredField(Native Method)
at org.robolectric.internal.bytecode.ProxyMaker.getTrustedLookup(ProxyMaker.java:87)
at org.robolectric.internal.bytecode.ProxyMaker.<clinit>(ProxyMaker.java:59)
... 40 more
I was using https://github.com/robolectric/robolectric/blob/master/robolectric/src/test/java/org/robolectric/shadows/ShadowBluetoothAdapterTest.java as a reference to begin writing my own tests that rely on BluetoothAdapter / BluetoothManager / BluetoothDevice.
In gradle, I tried setting my target sdk / compile sdk to match the one in the robolectric repo (sdk 33).