Use TestExecutionListener for ConsoleLog and FailFast#6875
Merged
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
This PR updates the unit-test infrastructure to avoid JVM crashes caused by FailFast’s default handler and to standardize Timber console logging across the entire test JVM by registering JUnit Platform TestExecutionListeners via ServiceLoader. This fits into the codebase by making test execution more resilient and removing boilerplate JUnit rules/extensions from individual tests.
Changes:
- Register a JUnit Platform listener for Timber console logging (shared via
:testing-unit) and listeners forFailFasthandling in:commonand:appunit tests - Remove
ConsoleLogRule/ConsoleLogExtensionandFailFastRule/FailFastExtensionusage from tests, adjusting rule ordering where needed - Ensure
junit-platform-launcheris available on unit test compile/runtime classpaths (and update lockfiles accordingly)
Reviewed changes
Copilot reviewed 112 out of 112 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| wear/src/test/kotlin/io/homeassistant/companion/android/ApplicationModuleTest.kt | Removes ConsoleLogRule usage, leaving only the Hilt rule |
| wear/gradle.lockfile | Updates junit-platform-launcher to be present on unit test compile classpath |
| testing-unit/src/main/resources/META-INF/services/org.junit.platform.launcher.TestExecutionListener | Registers the console log JUnit Platform listener via ServiceLoader |
| testing-unit/src/main/kotlin/io/homeassistant/companion/android/testing/unit/ConsoleLogTree.kt | Removes the old JUnit4 rule / JUnit5 extension based console logging implementation |
| testing-unit/src/main/kotlin/io/homeassistant/companion/android/testing/unit/ConsoleLogPlatformListener.kt | Adds a JUnit Platform listener that plants a Timber tree for console logging |
| testing-unit/gradle.lockfile | Locks junit-platform-launcher for this module |
| testing-unit/build.gradle.kts | Adds junit-platform-launcher dependency so the listener can compile |
| microwakeword/gradle.lockfile | Updates junit-platform-launcher to be present on unit test compile classpath |
| common/src/test/resources/META-INF/services/org.junit.platform.launcher.TestExecutionListener | Registers FailFastPlatformListener for :common unit tests |
| common/src/test/kotlin/io/homeassistant/companion/android/common/util/VoiceAudioRecorderTest.kt | Removes ConsoleLogExtension usage |
| common/src/test/kotlin/io/homeassistant/companion/android/common/util/ResyncRegistrationWorkerTest.kt | Removes ConsoleLogExtension usage |
| common/src/test/kotlin/io/homeassistant/companion/android/common/util/PlatformTestSupportJUnitJupiterTest.kt | Adds coverage ensuring listeners are active and FailFast handler resets between Jupiter tests |
| common/src/test/kotlin/io/homeassistant/companion/android/common/util/PlatformTestSupportJUnit4Test.kt | Adds coverage ensuring listeners are active and FailFast handler resets between Vintage tests |
| common/src/test/kotlin/io/homeassistant/companion/android/common/util/MessagingTokenTest.kt | Removes ConsoleLogExtension usage |
| common/src/test/kotlin/io/homeassistant/companion/android/common/util/LifecycleExtTest.kt | Removes ConsoleLogExtension usage from @ExtendWith list |
| common/src/test/kotlin/io/homeassistant/companion/android/common/util/FailFastTest.kt | Removes FailFastExtension usage |
| common/src/test/kotlin/io/homeassistant/companion/android/common/util/FailFastPlatformListener.kt | Adds JUnit Platform listener that installs a test-safe FailFast handler per test |
| common/src/test/kotlin/io/homeassistant/companion/android/common/util/FailFastExtension.kt | Removes the old JUnit4 rule / JUnit5 extension approach for FailFast handler cleanup |
| common/src/test/kotlin/io/homeassistant/companion/android/common/util/AudioUrlPlayerTest.kt | Removes ConsoleLogExtension usage from @ExtendWith list |
| common/src/test/kotlin/io/homeassistant/companion/android/common/util/AppVersionTest.kt | Removes ConsoleLogExtension usage |
| common/src/test/kotlin/io/homeassistant/companion/android/common/sensors/AudioSensorManagerTest.kt | Removes ConsoleLogRule usage |
| common/src/test/kotlin/io/homeassistant/companion/android/common/LocalStorageImplTest.kt | Removes ConsoleLogExtension usage |
| common/src/test/kotlin/io/homeassistant/companion/android/common/data/websocket/impl/WebSocketRepositoryImplTest.kt | Removes ConsoleLogExtension usage |
| common/src/test/kotlin/io/homeassistant/companion/android/common/data/websocket/impl/WebSocketCoreImplTest.kt | Removes ConsoleLogExtension and FailFastExtension usage |
| common/src/test/kotlin/io/homeassistant/companion/android/common/data/websocket/impl/entities/CompressedEntityTest.kt | Removes ConsoleLogExtension usage |
| common/src/test/kotlin/io/homeassistant/companion/android/common/data/servers/ServerManagerImplTest.kt | Removes ConsoleLogExtension usage |
| common/src/test/kotlin/io/homeassistant/companion/android/common/data/servers/ServerConnectionStateProviderImplTest.kt | Removes ConsoleLogExtension usage |
| common/src/test/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepositoryImplTest.kt | Removes ConsoleLogExtension usage |
| common/src/test/kotlin/io/homeassistant/companion/android/common/data/network/NetworkChangeObserverImplTest.kt | Removes ConsoleLogExtension usage |
| common/src/test/kotlin/io/homeassistant/companion/android/common/data/integration/impl/entities/RegisterDeviceRequestTest.kt | Removes ConsoleLogExtension usage |
| common/src/test/kotlin/io/homeassistant/companion/android/common/data/integration/EntityTest.kt | Removes ConsoleLogExtension usage |
| common/src/test/kotlin/io/homeassistant/companion/android/common/data/authentication/ServerRegistrationRepositoryTest.kt | Removes ConsoleLogExtension usage |
| common/src/test/kotlin/io/homeassistant/companion/android/common/assist/AssistViewModelBaseTest.kt | Removes ConsoleLogExtension usage from @ExtendWith list |
| common/gradle.lockfile | Updates junit-platform-launcher to be present on unit test compile classpath |
| build-logic/convention/src/main/kotlin/AndroidCommonConventionPlugin.kt | Adds testCompileOnly/testRuntimeOnly for junit-platform-launcher to support platform listeners |
| automotive/gradle.lockfile | Updates junit-platform-launcher to be present on unit test compile classpath |
| app/src/test/resources/META-INF/services/org.junit.platform.launcher.TestExecutionListener | Registers FailFastPlatformListener for :app unit tests |
| app/src/test/kotlin/io/homeassistant/companion/android/widgets/entity/EntityWidgetTest.kt | Removes ConsoleLogRule usage |
| app/src/test/kotlin/io/homeassistant/companion/android/widgets/BaseGlanceEntityWidgetReceiverTest.kt | Removes ConsoleLogExtension and FailFastExtension usage |
| app/src/test/kotlin/io/homeassistant/companion/android/webview/WebViewPresenterImplTest.kt | Removes ConsoleLogExtension usage |
| app/src/test/kotlin/io/homeassistant/companion/android/webview/insecure/BlockInsecureViewModelTest.kt | Removes ConsoleLogExtension from @ExtendWith list |
| app/src/test/kotlin/io/homeassistant/companion/android/webview/insecure/BlockInsecureScreenTest.kt | Removes ConsoleLogRule usage and reorders remaining rules |
| app/src/test/kotlin/io/homeassistant/companion/android/webview/addto/EntityAddToHandlerTest.kt | Removes ConsoleLogExtension/FailFastExtension and per-test FailFast handler override |
| app/src/test/kotlin/io/homeassistant/companion/android/util/HAWebViewClientTest.kt | Removes ConsoleLogExtension from @ExtendWith list |
| app/src/test/kotlin/io/homeassistant/companion/android/util/HAWebChromeClientTest.kt | Removes ConsoleLogExtension usage |
| app/src/test/kotlin/io/homeassistant/companion/android/util/FailFastPlatformListener.kt | Adds JUnit Platform listener that installs a test-safe FailFast handler per test |
| app/src/test/kotlin/io/homeassistant/companion/android/util/FailFastExtension.kt | Removes the old JUnit4 rule / JUnit5 extension approach for FailFast handler cleanup |
| app/src/test/kotlin/io/homeassistant/companion/android/util/DataUriDownloadManagerTest.kt | Removes ConsoleLogRule usage |
| app/src/test/kotlin/io/homeassistant/companion/android/util/compose/HAAppTest.kt | Removes ConsoleLogRule usage and reorders remaining rules |
| app/src/test/kotlin/io/homeassistant/companion/android/util/compose/entity/EntityPickerTest.kt | Removes ConsoleLogRule usage and reorders remaining rules |
| app/src/test/kotlin/io/homeassistant/companion/android/settings/wear/SettingsWearViewModelTest.kt | Removes ConsoleLogExtension usage |
| app/src/test/kotlin/io/homeassistant/companion/android/settings/wear/SettingsWearRepositoryTest.kt | Removes ConsoleLogExtension/FailFastExtension and per-test FailFast handler override |
| app/src/test/kotlin/io/homeassistant/companion/android/settings/developer/location/LocationTrackingViewModelTest.kt | Removes ConsoleLogExtension from @ExtendWith list |
| app/src/test/kotlin/io/homeassistant/companion/android/settings/assist/AssistSettingsViewModelTest.kt | Removes ConsoleLogExtension from @ExtendWith list |
| app/src/test/kotlin/io/homeassistant/companion/android/settings/assist/AssistConfigManagerTest.kt | Removes FailFastExtension usage |
| app/src/test/kotlin/io/homeassistant/companion/android/sensors/RequestAccurateLocationReceiverTest.kt | Removes ConsoleLogRule usage |
| app/src/test/kotlin/io/homeassistant/companion/android/sensors/HealthConnectSensorManagerTest.kt | Removes ConsoleLogExtension usage |
| app/src/test/kotlin/io/homeassistant/companion/android/onboarding/welcome/WelcomeScreenTest.kt | Removes ConsoleLogRule usage and reorders remaining rules |
| app/src/test/kotlin/io/homeassistant/companion/android/onboarding/WearOnboardingNavigationTest.kt | Removes ConsoleLogRule usage and reorders remaining rules |
| app/src/test/kotlin/io/homeassistant/companion/android/onboarding/wearmtls/WearMTLSViewModelTest.kt | Removes ConsoleLogExtension usage |
| app/src/test/kotlin/io/homeassistant/companion/android/onboarding/wearmtls/WearMTLSScreenTest.kt | Removes ConsoleLogRule usage and reorders remaining rules |
| app/src/test/kotlin/io/homeassistant/companion/android/onboarding/sethomenetwork/SetHomeNetworkScreenTest.kt | Removes ConsoleLogRule usage and reorders remaining rules |
| app/src/test/kotlin/io/homeassistant/companion/android/onboarding/serverdiscovery/ServerDiscoveryViewModelTest.kt | Removes ConsoleLogExtension usage |
| app/src/test/kotlin/io/homeassistant/companion/android/onboarding/serverdiscovery/ServerDiscoveryScreenTest.kt | Removes ConsoleLogRule usage and reorders remaining rules |
| app/src/test/kotlin/io/homeassistant/companion/android/onboarding/serverdiscovery/navigation/ServerDiscoveryNavigationTest.kt | Adjusts rule order after ConsoleLogRule removal in base class |
| app/src/test/kotlin/io/homeassistant/companion/android/onboarding/serverdiscovery/HomeAssistantSearcherImplTest.kt | Removes ConsoleLogExtension/FailFastExtension usage |
| app/src/test/kotlin/io/homeassistant/companion/android/onboarding/nameyourdevice/NameYourDeviceViewModelTest.kt | Removes ConsoleLogExtension from @ExtendWith list |
| app/src/test/kotlin/io/homeassistant/companion/android/onboarding/nameyourdevice/NameYourDeviceScreenTest.kt | Removes ConsoleLogRule usage and reorders remaining rules |
| app/src/test/kotlin/io/homeassistant/companion/android/onboarding/nameyourdevice/NameYourDeviceNavigationTest.kt | Removes ConsoleLogRule usage and reorders remaining rules |
| app/src/test/kotlin/io/homeassistant/companion/android/onboarding/manualserver/ManualServerScreenTest.kt | Removes ConsoleLogRule usage and reorders remaining rules |
| app/src/test/kotlin/io/homeassistant/companion/android/onboarding/locationsharing/LocationSharingViewModelTest.kt | Removes ConsoleLogExtension from @ExtendWith list |
| app/src/test/kotlin/io/homeassistant/companion/android/onboarding/locationsharing/LocationSharingScreenTest.kt | Removes ConsoleLogRule usage and reorders remaining rules |
| app/src/test/kotlin/io/homeassistant/companion/android/onboarding/locationforsecureconnection/LocationForSecureConnectionViewModelTest.kt | Removes ConsoleLogExtension from @ExtendWith list |
| app/src/test/kotlin/io/homeassistant/companion/android/onboarding/locationforsecureconnection/LocationForSecureConnectionScreenTest.kt | Removes ConsoleLogRule usage and reorders remaining rules |
| app/src/test/kotlin/io/homeassistant/companion/android/onboarding/localfirst/LocalFirstScreenTest.kt | Removes ConsoleLogRule usage and reorders remaining rules |
| app/src/test/kotlin/io/homeassistant/companion/android/onboarding/connection/ConnectionViewModelTest.kt | Removes ConsoleLogExtension from @ExtendWith list |
| app/src/test/kotlin/io/homeassistant/companion/android/onboarding/connection/ConnectionScreenTest.kt | Removes ConsoleLogRule usage and reorders remaining rules |
| app/src/test/kotlin/io/homeassistant/companion/android/onboarding/connection/ConnectionNavigationTest.kt | Removes ConsoleLogRule usage and reorders remaining rules |
| app/src/test/kotlin/io/homeassistant/companion/android/onboarding/BaseOnboardingNavigationTest.kt | Removes ConsoleLogRule usage and reorders remaining rules |
| app/src/test/kotlin/io/homeassistant/companion/android/nfc/views/TagReaderScreenTest.kt | Removes ConsoleLogRule usage and reorders remaining rules |
| app/src/test/kotlin/io/homeassistant/companion/android/nfc/TagReaderViewModelTest.kt | Removes ConsoleLogExtension from @ExtendWith list |
| app/src/test/kotlin/io/homeassistant/companion/android/launch/link/LinkHandlerTest.kt | Removes FailFastRule and per-test FailFast handler override |
| app/src/test/kotlin/io/homeassistant/companion/android/launch/LaunchViewModelTest.kt | Removes ConsoleLogExtension from @ExtendWith list |
| app/src/test/kotlin/io/homeassistant/companion/android/launch/LaunchActivityTest.kt | Removes ConsoleLogRule usage |
| app/src/test/kotlin/io/homeassistant/companion/android/frontend/url/FrontendUrlManagerTest.kt | Removes ConsoleLogExtension usage |
| app/src/test/kotlin/io/homeassistant/companion/android/frontend/session/ServerSessionManagerTest.kt | Removes ConsoleLogExtension from @ExtendWith list |
| app/src/test/kotlin/io/homeassistant/companion/android/frontend/permissions/PermissionManagerTest.kt | Removes ConsoleLogExtension/FailFastExtension usage |
| app/src/test/kotlin/io/homeassistant/companion/android/frontend/navigation/FrontendEventHandlerTest.kt | Removes ConsoleLogRule usage and reorders remaining rules |
| app/src/test/kotlin/io/homeassistant/companion/android/frontend/js/FrontendJsBridgeTest.kt | Removes ConsoleLogExtension/FailFastExtension usage |
| app/src/test/kotlin/io/homeassistant/companion/android/frontend/handler/FrontendMessageHandlerTest.kt | Removes ConsoleLogExtension usage |
| app/src/test/kotlin/io/homeassistant/companion/android/frontend/gesture/FrontendGestureHandlerTest.kt | Removes ConsoleLogExtension usage |
| app/src/test/kotlin/io/homeassistant/companion/android/frontend/FrontendViewModelTest.kt | Removes ConsoleLogExtension usage |
| app/src/test/kotlin/io/homeassistant/companion/android/frontend/FrontendScreenTest.kt | Removes ConsoleLogRule usage and reorders remaining rules |
| app/src/test/kotlin/io/homeassistant/companion/android/frontend/filechooser/FileChooserManagerTest.kt | Removes ConsoleLogExtension usage |
| app/src/test/kotlin/io/homeassistant/companion/android/frontend/externalbus/outgoing/OutgoingExternalBusMessageTest.kt | Removes ConsoleLogExtension usage |
| app/src/test/kotlin/io/homeassistant/companion/android/frontend/externalbus/outgoing/CommandMessageTest.kt | Removes ConsoleLogExtension usage |
| app/src/test/kotlin/io/homeassistant/companion/android/frontend/exoplayer/FrontendExoPlayerManagerTest.kt | Removes ConsoleLogExtension usage |
| app/src/test/kotlin/io/homeassistant/companion/android/frontend/error/FrontendConnectionErrorScreenTest.kt | Removes ConsoleLogRule usage and reorders remaining rules |
| app/src/test/kotlin/io/homeassistant/companion/android/frontend/download/FrontendDownloadManagerTest.kt | Removes ConsoleLogExtension usage |
| app/src/test/kotlin/io/homeassistant/companion/android/frontend/dialog/SimpleConfirmDialogTest.kt | Removes ConsoleLogRule usage |
| app/src/test/kotlin/io/homeassistant/companion/android/frontend/dialog/HttpAuthDialogTest.kt | Removes ConsoleLogRule usage and reorders remaining rules |
| app/src/test/kotlin/io/homeassistant/companion/android/frontend/dialog/FrontendDialogManagerTest.kt | Removes ConsoleLogExtension usage |
| app/src/test/kotlin/io/homeassistant/companion/android/frontend/CheckLocationDisabledUseCaseTest.kt | Removes ConsoleLogExtension usage |
| app/src/test/kotlin/io/homeassistant/companion/android/frontend/auth/HttpAuthManagerTest.kt | Removes ConsoleLogExtension usage |
| app/src/test/kotlin/io/homeassistant/companion/android/assist/wakeword/WakeWordListenerTest.kt | Removes ConsoleLogExtension usage |
| app/src/test/kotlin/io/homeassistant/companion/android/assist/service/AssistVoiceInteractionSessionTest.kt | Removes ConsoleLogRule usage |
| app/src/test/kotlin/io/homeassistant/companion/android/assist/service/AssistVoiceInteractionSessionServiceTest.kt | Removes ConsoleLogRule usage |
| app/src/test/kotlin/io/homeassistant/companion/android/assist/service/AssistVoiceInteractionServiceTest.kt | Removes ConsoleLogRule usage |
| app/src/test/kotlin/io/homeassistant/companion/android/assist/service/AssistRecognitionServiceTest.kt | Removes ConsoleLogRule usage |
| app/src/test/kotlin/io/homeassistant/companion/android/assist/AssistViewModelTest.kt | Removes ConsoleLogExtension from @ExtendWith list |
| app/src/test/kotlin/io/homeassistant/companion/android/ApplicationModuleTest.kt | Removes ConsoleLogRule usage |
| app/gradle.lockfile | Updates junit-platform-launcher to be present on unit test compile classpath |
This reverts commit c5bedf7.
5ff416b to
774ae07
Compare
jpelgrom
approved these changes
May 26, 2026
Member
|
Thanks for the improvement! Caught me once so nice to have this 'automatically' now, lowering the barrier. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Multiple times we had crash of the test engine because of FailFast, it is happening when FailFast is trigger without a proper handler for test set up using the Junit rule/extension. This PR replace the need of a rule/extension by using a
TestExecutionListenerhttps://docs.junit.org/5.0.3/api/org/junit/platform/launcher/TestExecutionListener.html that works for both JUnit jupiter and JUnit 4 (vintage) that is apply to all our tests. I've decided also to do the same for the ConsoleLog.The most important part of the PR is in the first commit the second one is simply removing all the usages of the rules/extensions.
We found out a timing issue where if FailFast is triggered in
HomeAssistantApplicationit is using theDefaultFailFastHandlerand crashing the app since the handler is set after theonCreateof the application is called. This PR address this by settings the handler at the runner level (duplicated between :app and :wear), so now an issue will only fail the test and not crash the app allowing better reporting.You can see the issue https://emulator.wtf/o/a09ee3e1-05c8-4736-8790-c62326837a36/r/30b31c99-a72a-4904-b9f8-f52317c69209/j/79fc70b1-de09-429c-aadf-93bf2f0967a1?key=moYsRl9GO8Lttjtg6pebEDSjL89-Ne4USvXbmK4L
Checklist