android-fhir
android-fhir copied to clipboard
Add itemMedia extension support
Fixes #802
Description
Add support for [sdc-questionnaire-itemMedia](http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-itemMedia)
extension on question types. Render the referenced image and provide an AttachmentResolver interface(WIP)
Alternative(s) considered Have you considered any alternatives? And if so, why have you chosen the approach in this PR? Yes, other alternatives were considered but this is a simpler solution
Type Choose one: Feature
Screenshots (if applicable)
Checklist
- [x] I have read and acknowledged the Code of conduct
- [x] I have read How to Contribute
- [x] I have read the Developer's guide
- [x] I have signed the Google Individual CLA, or I am covered by my company's Corporate CLA
- [x] I have discussed my proposed solution with code owners in the linked issue(s) and we have agreed upon the general approach
- [x] I have run
./gradlew spotlessApply
and./gradlew spotlessCheck
to check my code follows the style guide of this project - [x] I have run
./gradlew check
and./gradlew connectedCheck
to test my changes locally - [x] I have built and run the reference app(s) to verify my change fixes the issue and/or does not break the reference app(s)
Duplicate of https://github.com/google/android-fhir/pull/807
Codecov Report
Merging #1377 (b06b582) into master (10ddb9b) will not change coverage. The diff coverage is
n/a
.
:exclamation: Current head b06b582 differs from pull request most recent head 5cf95f6. Consider uploading reports for the commit 5cf95f6 to get more accurate results
@@ Coverage Diff @@
## master #1377 +/- ##
==============================
==============================
Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.
@aditya-07 Kindly do another review, I already addressed all of the previous review feedback.
For the CI checks, I'm not sure why it's failing. The error it gives is not about failing test case.
cc @ekigamba @ndegwamartin
Tried to trigger the CI checks and got this error, it works locally though.
com.google.android.fhir.sync.SyncJobTest > sync time should update on every sync call FAILED
java.lang.IndexOutOfBoundsException at SyncJobTest.kt:215
@FikriMilano, are you still blocked on this PR? Is there any help you need? CC: @aditya-07
@Tarun-Bhardwaj thanks.
I'm no longer blocked, it's just sometimes the CI works sometimes it doesn't.
Also, I was trying to increase the code coverage, but it's quite difficult because some parts of the code keeps showing partial coverage, no matter how I wrote the test.
To sum up, this PR just need a review.
@FikriMilano Kindly change this to itemMedia
and log an error or show a toast for not supporting videos. We can have this implemented on another PR/issue.
I forgot about this as we were waiting for the change request to be approved https://github.com/google/android-fhir/issues/802#issuecomment-963983792
Sure, make sense
@jingtang10 this is ready for review
We found a few bugs when rendering the image, @ekigamba is here to check on it.
Image is able to render in edit text type questionnaire. But not for display and group type questionnaire.
I tried comparing each associated ViewHolderFactory but wasn't able to found a difference that cause the bug.
cc @jingtang10 @f-odhiambo
@FikriMilano It seems that the issue is the linear layout orientation for the display items. I changed the linear layout orientation to vertical
and I can now see the images.
I didn't notice, thanks @ekigamba
@jingtang10 @f-odhiambo @ekigamba This bug is fixed.
It's now able to show the image in string, display and group type questionnaire
@FikriMilano It seems you'll have to use a different layout for this widget or embed the header + error view inside a separate linear layout whose orientation is horizontal while the outer layout containing the QuestionnaireItemMediaView retains the vertical orientation. Does this make sense?
@ekigamba I think this does not matter, because originally using the horizontal
orientation, the group type won't be able to show the error message.
But, changing it to vertical
does enable the group type to show the error message.
So I suggest to keep this change
I think a refactor is needed for this PR. Given that the Attachment widget and itemAnswerMedia extension PR was merged, it will be nice if we can avoid duplication between these 3 PRs.
cc @f-odhiambo @jingtang10
@jingtang10 @omarismail94 this is ready for review
Is it a duplicate of https://github.com/google/android-fhir/pull/1749 ?
@delcroip no, that's item media for answers. This one is for questions.
Thanks @FikriMilano Do you know why this url is not used in that case ?
http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-itemMedia
(not sure why the above url is not used for answer too, I don't see the conceptual difference with http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-itemAnswerMedia)
@delcroip not really sure about that.
implementation between the 2 is a bit different though.
Thanks @FikriMilano Do you know why this url is not used in that case ? http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-itemMedia (not sure why the above url is not used for answer too, I don't see the conceptual difference with http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-itemAnswerMedia)
hi @delcroip. Please see this link http://hl7.org/fhir/uv/sdc/STU3/rendering.html#itemMedia.
I think itemMedia is about additional image/video/audio clips to help the health worker answer a specific question. and itemAnswerMedia is a something that accompanies specific answer options.
For example, if there is a question asking the health worker to carry out a test, there might be an itemMedia extension with an image to explain to the health worker how to do the test.
And if there're answer options (apple, pear, orange) to a question, each of the answer options might have an accompanying itemAnswerMedia (a picture of apple, a picture of pear, a picture of orange) to help the health worker pick the right option
Thanks @FikriMilano Do you know why this url is not used in that case ? http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-itemMedia (not sure why the above url is not used for answer too, I don't see the conceptual difference with http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-itemAnswerMedia)
hi @delcroip. Please see this link http://hl7.org/fhir/uv/sdc/STU3/rendering.html#itemMedia.
I think itemMedia is about additional image/video/audio clips to help the health worker answer a specific question. and itemAnswerMedia is a something that accompanies specific answer options.
For example, if there is a question asking the health worker to carry out a test, there might be an itemMedia extension with an image to explain to the health worker how to do the test.
And if there're answer options (apple, pear, orange) to a question, each of the answer options might have an accompanying itemAnswerMedia (a picture of apple, a picture of pear, a picture of orange) to help the health worker pick the right option
This remark is a detail, more for fhir guys (poke @brynrhodes ) I understand the different context, my point is that ItemMedia on a answer say that the media is on the answer, when on a item then the media is on the item. I simply fail to understand why two extensions are required for adding a media to an item or answer (a single ext could be applicable on item and answer)
Thanks @FikriMilano Do you know why this url is not used in that case ? http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-itemMedia (not sure why the above url is not used for answer too, I don't see the conceptual difference with http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-itemAnswerMedia)
hi @delcroip. Please see this link http://hl7.org/fhir/uv/sdc/STU3/rendering.html#itemMedia. I think itemMedia is about additional image/video/audio clips to help the health worker answer a specific question. and itemAnswerMedia is a something that accompanies specific answer options. For example, if there is a question asking the health worker to carry out a test, there might be an itemMedia extension with an image to explain to the health worker how to do the test. And if there're answer options (apple, pear, orange) to a question, each of the answer options might have an accompanying itemAnswerMedia (a picture of apple, a picture of pear, a picture of orange) to help the health worker pick the right option
This remark is a detail, more for fhir guys (poke @brynrhodes ) I understand the different context, my point is that ItemMedia on a answer say that the media is on the answer, when on a item then the media is on the item. I simply fail to understand why two extensions are required for adding a media to an item or answer (a single ext could be applicable on item and answer)
thanks @delcroip for explaining further your concern. i think there're probably pros/cons to the current approach and what you are proposing. let's move this discussion to the questionnaire stream on chat.fhir.org to get the actual decision makers involved. in the mean time let's stick to what's currently in the standard until things change.
@jingtang10 @shelaghm Created this ticket to track styling item media and see supported possibilities of customization https://github.com/google/android-fhir/issues/1874
hi @omarismail94 do you have an idea why this error happens in kokoro?
> Task :workflow:runFlank
Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.
You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
See https://docs.gradle.org/7.5.1/userguide/command_line_interface.html#sec:command_line_warnings
BUILD SUCCESSFUL in 5m 42s
10 actionable tasks: 3 executed, 7 up-to-date
Publishing build scan...
https://gradle.com/s/a5om7b7jgjqfw
5m 8s Test executions status: FINISHED:6, RUNNING:6 5m 13s Test executions status: FINISHED:6, RUNNING:6 5m 18s Test executions status: FINISHED:6, RUNNING:6 5m 23s Test executions status: FINISHED:6, RUNNING:6 5m 28s Test executions status: FINISHED:6, RUNNING:6 5m 33s Test executions status: FINISHED:6, RUNNING:6 5m 38s Test executions status: FINISHED:6, RUNNING:6 5m 43s Test executions status: FINISHED:6, RUNNING:6 5m 48s Test executions status: FINISHED:6, RUNNING:6 5m 53s Test executions status: FINISHED:6, RUNNING:6 5m 58s Test executions status: FINISHED:6, RUNNING:6 6m 3s Test executions status: FINISHED:6, RUNNING:6 6m 8s Test executions status: FINISHED:6, RUNNING:6 6m 13s Test executions status: FINISHED:6, RUNNING:6 6m 18s Test executions status: FINISHED:6, RUNNING:6 6m 24s Test executions status: FINISHED:7, RUNNING:5 6m 29s Test executions status: FINISHED:7, RUNNING:5 6m 34s Test executions status: FINISHED:8, RUNNING:4 6m 39s Test executions status: FINISHED:10, RUNNING:2 6m 44s Test executions status: FINISHED:10, RUNNING:2 6m 49s Test executions status: FINISHED:10, RUNNING:2 6m 54s Test executions status: FINISHED:10, RUNNING:2 6m 59s Test executions status: FINISHED:11, RUNNING:1 7m 4s Test executions status: FINISHED:12
7m 4s matrix-2b70wos590qss FINISHED
FetchArtifacts
Updating matrix file
Uploading [performanceMetrics.json] to https://console.developers.google.com/storage/browser/android-fhir-build-artifacts/prod/openhealthstack/android-fhir/gcp_ubuntu/presubmit/2228/20230215-233801/firebase/datacapture/matrix_0/...
CostReport
Physical devices
$0.33 for 4m
Uploading [CostReport.txt] to https://console.developers.google.com/storage/browser/android-fhir-build-artifacts/prod/openhealthstack/android-fhir/gcp_ubuntu/presubmit/2228/20230215-233801/firebase/datacapture/...
Uploading [MatrixResultsReport.txt] to https://console.developers.google.com/storage/browser/android-fhir-build-artifacts/prod/openhealthstack/android-fhir/gcp_ubuntu/presubmit/2228/20230215-233801/firebase/datacapture/...
Uploading [JUnitReport.xml] to https://console.developers.google.com/storage/browser/android-fhir-build-artifacts/prod/openhealthstack/android-fhir/gcp_ubuntu/presubmit/2228/20230215-233801/firebase/datacapture/...
MatrixResultsReport
0 / 1 (0.00%)
1 matrices failed
┌─────────┬──────────────────────┬────────────────────────────┬───────────────────────────────────┬───────────────────────────┬─────────────────────┐
│ OUTCOME │ MATRIX ID │ APP NAME │ TEST FILE NAME │ TEST AXIS VALUE │ TEST DETAILS │
├─────────┼──────────────────────┼────────────────────────────┼───────────────────────────────────┼───────────────────────────┼─────────────────────┤
│ failure │ matrix-2b70wos590qss │ demo-debug-androidTest.apk │ datacapture-debug-androidTest.apk │ Nexus6P-27-en_US-portrait │ 0 test cases failed │
│ failure │ matrix-2b70wos590qss │ demo-debug-androidTest.apk │ datacapture-debug-androidTest.apk │ Nexus6P-24-en_US-portrait │ 0 test cases failed │
│ failure │ matrix-2b70wos590qss │ demo-debug-androidTest.apk │ datacapture-debug-androidTest.apk │ oriole-31-en_US-portrait │ 0 test cases failed │
└─────────┴──────────────────────┴────────────────────────────┴───────────────────────────────────┴───────────────────────────┴─────────────────────┘
More details are available at:
https://console.firebase.google.com/project/android-fhir-instrumeted-tests/testlab/histories/bh.96901a7d2453dacf/matrices/8192783254353970039
Uploading [matrix_ids.json] to https://console.developers.google.com/storage/browser/android-fhir-build-artifacts/prod/openhealthstack/android-fhir/gcp_ubuntu/presubmit/2228/20230215-233801/firebase/datacapture/...
Matrices webLink
matrix-2b70wos590qss https://console.firebase.google.com/project/android-fhir-instrumeted-tests/testlab/histories/bh.96901a7d2453dacf/matrices/8192783254353970039
Actual shard times:
Shard 0: Expected: 0s, Actual: 0s, Diff: 0s
Total run duration: 7m 19s
- Preparation: 0m 2s
- Scheduling tests: 0m 10s
- Executing matrices: 7m 4s
> Task :datacapture:execFlank FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':datacapture:execFlank'.
> Process 'command '/usr/lib/jvm/java-11-openjdk-amd64/bin/java'' finished with non-zero exit value 10
@FikriMilano I looked at the logs, and the error I see is:
java.lang.RuntimeException: Unable to instantiate application com.google.android.fhir.datacapture.DataCaptureTestApplication package com.google.android.fhir.datacapture.test: java.lang.ClassNotFoundException: Didn't find class "com.google.android.fhir.datacapture.DataCaptureTestApplication"
where any changes made to that class by any chance?
@omarismail94 thank you so much, yes I delete that by mistake.
how did you get that error log? I can't found it on my end
@FikriMilano I got the logs in a way that can be made easier (not a priority rn). In the Kokoro logs, there are links to the videos at the bottom. For example:
https://storage.googleapis.com/android-fhir-build-artifacts/prod/openhealthstack/android-fhir/gcp_ubuntu/presubmit/2228/20230215-233801/firebase/datacapture/matrix_0/oriole-31-en_US-portrait-rerun_1/video.mp4
I just replaced the last part video.mp4
with logcat
:
https://storage.googleapis.com/android-fhir-build-artifacts/prod/openhealthstack/android-fhir/gcp_ubuntu/presubmit/2228/20230215-233801/firebase/datacapture/matrix_0/oriole-31-en_US-portrait-rerun_1/logcat
Reading the logs, you will find towards the end a line like this:
FATAL EXCEPTION: main
with the stack trace saying that the DataCaptureTestApplication class is missing!
I think if you ran ./gradlew connectedCheck
, you would have seen the same thing. ./gradlew connectedCheck
runs the unit tests, as well as the instrumentation tests. ./gradlew check
just runs the unit tests.
@omarismail94 thanks, that's very useful actually.
because, when I ran ./gradlew connectedCheck
it gave me this, and I can't find the error of a missing class:
> Task :benchmark:connectedReleaseAndroidTest
Starting 14 tests on Pixel_4_API_33(AVD) - 13
Feb 17, 2023 10:23:55 AM com.google.testing.platform.RunnerImpl run
SEVERE: Test execution failed with fatal error!
com.google.testing.platform.core.driver.TestDriverException: ErrorName: TEST_EXECUTION_FAILED
NameSpace: com.google.testing.platform
ErrorCode: 4002
Message: Test execution failed on test driver <com.google.testing.platform.runtime.android.driver.AndroidInstrumentationDriver>!Test failures could be due to various issues like incorrectly configuring the driver,timeouts, incorrect test environment etc. Check logs for more info.
at com.google.testing.platform.driver.TestDriverProxy.run(TestDriverProxy.kt:113)
at com.google.testing.platform.executor.SingleDeviceExecutor$execute$5.invoke(SingleDeviceExecutor.kt:87)
at com.google.testing.platform.executor.SingleDeviceExecutor$execute$5.invoke(SingleDeviceExecutor.kt:87)
at com.google.testing.platform.executor.SingleDeviceExecutor.runUnlessCancelled(SingleDeviceExecutor.kt:105)
at com.google.testing.platform.executor.SingleDeviceExecutor.execute(SingleDeviceExecutor.kt:87)
at com.google.testing.platform.RunnerImpl.run(RunnerImpl.kt:108)
at com.google.testing.platform.server.strategy.NonInteractiveServerStrategy$run$4.invoke(NonInteractiveServerStrategy.kt:80)
at com.google.testing.platform.server.strategy.NonInteractiveServerStrategy$run$4.invoke(NonInteractiveServerStrategy.kt:79)
at com.google.testing.platform.core.telemetry.common.noop.NoopDiagnosticsScope.recordEvent(NoopDiagnosticsScope.kt:35)
at com.google.testing.platform.core.telemetry.TelemetryKt.recordEvent(Telemetry.kt:66)
at com.google.testing.platform.server.strategy.NonInteractiveServerStrategy.run(NonInteractiveServerStrategy.kt:79)
at com.google.testing.platform.main.MainKt$main$4.invokeSuspend(Main.kt:67)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:274)
at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:85)
at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:59)
at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source)
at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking$default(Builders.kt:38)
at kotlinx.coroutines.BuildersKt.runBlocking$default(Unknown Source)
at com.google.testing.platform.main.MainKt.main(Main.kt:66)
at com.google.testing.platform.main.MainKt.main$default(Main.kt:34)
at com.google.testing.platform.main.MainKt.main(Main.kt)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
at java.base/java.lang.reflect.Method.invoke(Method.java:577)
at com.google.testing.platform.launcher.Launcher.main(Launcher.java:149)
Caused by: com.google.testing.platform.api.plugin.PluginException: Exception thrown during onAfterEach invocation of plugin com.android.tools.utp.plugins.host.additionaltestoutput.AndroidAdditionalTestOutputPlugin for test case A_JacksonMapperBenchmark#loadJsonMapper.
at com.google.testing.platform.plugin.PluginLifecycleKt.invokeOrThrow(PluginLifecycle.kt:216)
at com.google.testing.platform.plugin.PluginLifecycleKt.access$invokeOrThrow(PluginLifecycle.kt:1)
at com.google.testing.platform.plugin.PluginLifecycle$onAfterEach$1.invoke(PluginLifecycle.kt:134)
at com.google.testing.platform.plugin.PluginLifecycle$onAfterEach$1.invoke(PluginLifecycle.kt:128)
at com.google.testing.platform.core.telemetry.common.noop.NoopDiagnosticsScope.recordEvent(NoopDiagnosticsScope.kt:35)
at com.google.testing.platform.core.telemetry.TelemetryKt.recordEvent(Telemetry.kt:105)
at com.google.testing.platform.core.telemetry.TelemetryKt.recordEvent$default(Telemetry.kt:98)
at com.google.testing.platform.plugin.PluginLifecycle.onAfterEach(PluginLifecycle.kt:128)
at com.google.testing.platform.executor.SingleDeviceExecutor$execute$2.invoke(SingleDeviceExecutor.kt:79)
at com.google.testing.platform.executor.SingleDeviceExecutor$execute$2.invoke(SingleDeviceExecutor.kt:78)
at com.google.testing.platform.result.TestResultListenerManager.afterTest(TestResultListenerManager.kt:111)
at com.google.testing.platform.runtime.android.driver.AndroidInstrumentationDriver$InstrumentationListener.testEnded(AndroidInstrumentationDriver.kt:340)
at com.google.testing.platform.lib.adb.command.instrument.AmInstrumentationParser.reportTestEnded(AmInstrumentationParser.kt:311)
at com.google.testing.platform.lib.adb.command.instrument.AmInstrumentationParser.handleStatusCode(AmInstrumentationParser.kt:221)
at com.google.testing.platform.lib.adb.command.instrument.AmInstrumentationParser.parse(AmInstrumentationParser.kt:113)
at com.google.testing.platform.runtime.android.driver.AndroidInstrumentationDriver$runTestSuite$1.invoke(AndroidInstrumentationDriver.kt:248)
at com.google.testing.platform.runtime.android.driver.AndroidInstrumentationDriver$runTestSuite$1.invoke(AndroidInstrumentationDriver.kt:246)
at com.android.tools.utp.plugins.deviceprovider.ddmlib.DdmlibAndroidDeviceController$executeAsync$deferred$1$receiver$receiver$1.processNewLines(DdmlibAndroidDeviceController.kt:134)
at com.android.ddmlib.MultiLineReceiver.addOutput(MultiLineReceiver.java:104)
at com.android.ddmlib.AdbHelper.executeRemoteCommand(AdbHelper.java:704)
at com.android.ddmlib.AdbHelper.executeRemoteCommand(AdbHelper.java:468)
at com.android.ddmlib.internal.DeviceImpl.executeShellCommand(DeviceImpl.java:724)
at com.android.tools.utp.plugins.deviceprovider.ddmlib.DdmlibAndroidDevice.executeShellCommand(DdmlibAndroidDevice.kt)
at com.android.tools.utp.plugins.deviceprovider.ddmlib.DdmlibAndroidDeviceController$executeAsync$deferred$1.invokeSuspend(DdmlibAndroidDeviceController.kt:139)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:56)
at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:738)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)
Caused by: com.android.ddmlib.SyncException: Remote object doesn't exist!
at com.android.ddmlib.SyncService.pullFile(SyncService.java:341)
at com.android.ddmlib.internal.DeviceImpl.pullFile(DeviceImpl.java:1083)
at com.android.tools.utp.plugins.deviceprovider.ddmlib.DdmlibAndroidDevice.pullFile(DdmlibAndroidDevice.kt)
at com.android.tools.utp.plugins.deviceprovider.ddmlib.DdmlibAndroidDeviceController.pull(DdmlibAndroidDeviceController.kt:254)
at com.google.testing.platform.executor.DeviceControllerProxy$pull$2.invoke(DeviceControllerProxy.kt:82)
at com.google.testing.platform.executor.DeviceControllerProxy$pull$2.invoke(DeviceControllerProxy.kt:82)
at com.google.testing.platform.core.telemetry.common.noop.NoopDiagnosticsScope.recordEvent(NoopDiagnosticsScope.kt:35)
at com.google.testing.platform.core.telemetry.TelemetryKt.recordEvent(Telemetry.kt:66)
at com.google.testing.platform.executor.DeviceControllerProxy.pull(DeviceControllerProxy.kt:79)
at com.android.tools.utp.plugins.host.additionaltestoutput.AndroidAdditionalTestOutputPlugin.addBenchmarkFiles(AndroidAdditionalTestOutputPlugin.kt:163)
at com.android.tools.utp.plugins.host.additionaltestoutput.AndroidAdditionalTestOutputPlugin.addBenchmarkOutput(AndroidAdditionalTestOutputPlugin.kt:127)
at com.android.tools.utp.plugins.host.additionaltestoutput.AndroidAdditionalTestOutputPlugin.afterEach(AndroidAdditionalTestOutputPlugin.kt:95)
at com.google.testing.platform.plugin.PluginLifecycle$onAfterEach$1$mergedResult$2$1.invoke(PluginLifecycle.kt:140)
at com.google.testing.platform.plugin.PluginLifecycle$onAfterEach$1$mergedResult$2$1.invoke(PluginLifecycle.kt:138)
at com.google.testing.platform.plugin.PluginLifecycleKt$invokeOrThrow$1.invoke(PluginLifecycle.kt:213)
at com.google.testing.platform.plugin.PluginLifecycleKt$invokeOrThrow$1.invoke(PluginLifecycle.kt:212)
at com.google.testing.platform.core.telemetry.common.noop.NoopDiagnosticsScope.recordEvent(NoopDiagnosticsScope.kt:35)
at com.google.testing.platform.core.telemetry.TelemetryKt.recordEvent(Telemetry.kt:105)
at com.google.testing.platform.core.telemetry.TelemetryKt.recordEvent$default(Telemetry.kt:98)
at com.google.testing.platform.plugin.PluginLifecycleKt.invokeOrThrow(PluginLifecycle.kt:212)
... 29 more
Test results saved as file:/Users/fikrimilano/AndroidStudioProjects/android-fhir/benchmark/build/outputs/androidTest-results/connected/Pixel_4_API_33(AVD)%20-%2013/test-result.pb. Inspect these results in Android Studio by selecting Run > Import Tests From File from the menu bar and importing test-result.pb.
Platform error occurred when running the UTP test suite
> Task :benchmark:connectedReleaseAndroidTest FAILED
FAILURE: Build completed with 2 failures.
1: Task failed with an exception.
-----------
* What went wrong:
Execution failed for task ':benchmark:connectedReleaseAndroidTest'.
> There were failing tests. See the report at: file:///Users/fikrimilano/AndroidStudioProjects/android-fhir/benchmark/build/reports/androidTests/connected/index.html
* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
==============================================================================
2: Task failed with an exception.
-----------
* What went wrong:
java.lang.StackOverflowError (no error message)
* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
==============================================================================
* Get more help at https://help.gradle.org
Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.
You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
See https://docs.gradle.org/7.5.1/userguide/command_line_interface.html#sec:command_line_warnings
BUILD FAILED in 13s
115 actionable tasks: 1 executed, 114 up-to-date
@FikriMilano the stacktrace you posted seems to be coming from the benchmark
module:
:benchmark:connectedReleaseAndroidTest FAILED
Could you try running:
./gradlew :datacapture:connectedCheck
this will run the instrumentation tests for the datacapture library only!
@omarismail94 woah, yep that works, thanks a lot!