Skip to content

Use TestExecutionListener for ConsoleLog and FailFast#6875

Merged
jpelgrom merged 6 commits into
mainfrom
feature/test_platform_listener
May 26, 2026
Merged

Use TestExecutionListener for ConsoleLog and FailFast#6875
jpelgrom merged 6 commits into
mainfrom
feature/test_platform_listener

Conversation

@TimoPtr
Copy link
Copy Markdown
Member

@TimoPtr TimoPtr commented May 21, 2026

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 TestExecutionListener https://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 HomeAssistantApplication it is using the DefaultFailFastHandler and crashing the app since the handler is set after the onCreate of 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

  • New or updated tests have been added to cover the changes following the testing guidelines.
  • The code follows the project's code style and best_practices.
  • The changes have been thoroughly tested, and edge cases have been considered.
  • Changes are backward compatible whenever feasible. Any breaking changes are documented in the changelog for users and/or in the code for developers depending on the relevance.

Copilot AI review requested due to automatic review settings May 21, 2026 10:20
@TimoPtr TimoPtr requested a review from jpelgrom May 21, 2026 10:20
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 for FailFast handling in :common and :app unit tests
  • Remove ConsoleLogRule / ConsoleLogExtension and FailFastRule / FailFastExtension usage from tests, adjusting rule ordering where needed
  • Ensure junit-platform-launcher is 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

@TimoPtr TimoPtr force-pushed the feature/test_platform_listener branch from 5ff416b to 774ae07 Compare May 26, 2026 13:43
@jpelgrom
Copy link
Copy Markdown
Member

Thanks for the improvement! Caught me once so nice to have this 'automatically' now, lowering the barrier.

@jpelgrom jpelgrom enabled auto-merge (squash) May 26, 2026 20:23
@jpelgrom jpelgrom merged commit d1cf241 into main May 26, 2026
36 of 37 checks passed
@jpelgrom jpelgrom deleted the feature/test_platform_listener branch May 26, 2026 20:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants