Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Coverage bug #211

Closed
wants to merge 16 commits into from
Closed

Coverage bug #211

wants to merge 16 commits into from

Conversation

alisonthemonster
Copy link
Owner

📜 Description

I've been slowly but surely getting the repo closer to being multi-module with code coverage and this is the last piece I'm stuck on!

I'm generating coverage for each module and trying to combine the results. But unit tests outside of the app module don't seem to be counting towards code coverage.
Screen Shot 2021-06-04 at 12 06 40 AM
I created this test module in order to try and isolate the problem and get it fixed. You can't see in this PR but in other branches I have going the coverage.ec files from instrumented test are counting towards coverage.

Does anyone see what I'm missing here? I've tried so many various things to get this working my head is spinning 💀

If you want to test this locally you can run ./gradlew jacocoFullReport and the report will be in the project level build folder.

@alisonthemonster alisonthemonster added bug Something isn't working help wanted Extra attention is needed in progress labels Jun 4, 2021
listexecution.each {
logger.lifecycle("execution directories ${it.path}")
}

Copy link
Owner Author

Choose a reason for hiding this comment

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

Here's the output of these logs:

main /home/circleci/src/app/src/main/java
main /home/circleci/src/coverage_example/src/main/java
source /home/circleci/src/app/src/main/java
source /home/circleci/src/coverage_example/src/main/java
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/bindingadapter/Visibility.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/timeline/TimelineEntryViewModel.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/timeline/TimelineViewModel.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/timeline/TimelineViewModel$addEntries$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/timeline/TimelineViewModel$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/timeline/TimelineViewModel$1$invokeSuspend$$inlined$collect$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/timeline/TimelineViewModelFactory.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/search/SearchFragmentDirections.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/search/SearchFragmentDirections$ActionSearchFragmentToEntryFragment.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/search/SearchFragmentDirections$Companion.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/search/SearchEntryViewModel.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/search/SearchFragment.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/search/SearchFragment$onViewCreated$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/search/SearchFragment$onViewCreated$1$invokeSuspend$$inlined$collect$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/search/SearchFragment$onViewCreated$2.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/search/SearchFragment$onViewCreated$2$invokeSuspend$$inlined$filter$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/search/SearchFragment$onViewCreated$2$invokeSuspend$$inlined$filter$1$2.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/search/SearchFragment$onViewCreated$2$invokeSuspend$$inlined$filter$1$2$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/search/SearchFragment$onViewCreated$2$invokeSuspend$$inlined$map$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/search/SearchFragment$onViewCreated$2$invokeSuspend$$inlined$map$1$2.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/search/SearchFragment$onViewCreated$2$invokeSuspend$$inlined$map$1$2$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/search/SearchFragment$onViewCreated$2$invokeSuspend$$inlined$flatMapLatest$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/search/SearchFragment$onViewCreated$2$4.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/search/SearchFragment$onViewCreated$3.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/search/SearchFragment$onViewCreated$4.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/search/SearchFragment$onViewCreated$5.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/search/SearchFragment$onViewCreated$6.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/search/SearchFragment$viewModel$2.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/search/SearchFragment$$special$$inlined$viewModels$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/search/SearchFragment$$special$$inlined$viewModels$2.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/search/SearchViewModel.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/search/SearchViewModelFactory.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/dialog/CelebrateDialogFragment.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/dialog/CelebrateDialogFragment$onViewCreated$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/dialog/CelebrateDialogFragment$onViewCreated$2.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/dialog/CelebrateDialogFragment$onViewCreated$3.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/dialog/CelebrateDialogFragment$Companion.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/entry/EntryFragmentArgs.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/entry/EntryFragmentArgs$Companion.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/entry/EntryFragment.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/entry/EntryFragment$onCreate$callback$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/entry/EntryFragment$onCreate$callback$1$handleOnBackPressed$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/entry/EntryFragment$onViewCreated$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/entry/EntryFragment$onViewCreated$2.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/entry/EntryFragment$onViewCreated$2$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/entry/EntryFragment$onViewCreated$3.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/entry/EntryFragment$onViewCreated$4.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/entry/EntryFragment$onViewCreated$4$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/entry/EntryFragment$onViewCreated$5.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/entry/EntryFragment$onViewCreated$5$invokeSuspend$$inlined$map$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/entry/EntryFragment$onViewCreated$5$invokeSuspend$$inlined$map$1$2.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/entry/EntryFragment$onViewCreated$5$invokeSuspend$$inlined$map$1$2$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/entry/EntryFragment$onViewCreated$5$2.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/entry/EntryFragment$invalidate$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/entry/EntryFragment$prepareWindow$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/entry/EntryFragment$showUnsavedEntryDialog$alertDialog$1$1$2.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/entry/EntryFragment$showUnsavedEntryDialog$$inlined$let$lambda$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/entry/EntryFragment$$special$$inlined$fragmentViewModel$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/entry/EntryFragment$$special$$inlined$fragmentViewModel$2.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/entry/EntryFragment$$special$$inlined$fragmentViewModel$2$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/entry/EntryFragment$$special$$inlined$navArgs$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/entry/EntryState.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/entry/EntryViewModel.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/entry/EntryViewModel$Factory.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/entry/EntryViewModel$changePrompt$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/entry/EntryViewModel$onTextChanged$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/entry/EntryViewModel$onTextChanged$1$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/entry/EntryViewModel$saveEntry$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/entry/EntryViewModel$saveEntry$1$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/entry/EntryViewModel$saveEntry$1$1$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/entry/EntryViewModel$setDate$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/entry/EntryViewModel$setDate$2.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/entry/EntryViewModel$setDate$2$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/entry/EntryViewModel$Companion.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/themes/ThemeFragment.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/themes/ThemeFragment$OnThemeSelectedListener.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/themes/ThemeFragment$onViewCreated$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/ui/themes/ThemeFragment$listener$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/repository/EntryRepository.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/repository/EntryRepositoryImpl.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/repository/EntryRepositoryImpl$searchEntries$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/repository/EntryRepositoryImpl$Companion.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/util/CustomTypefaceSpan.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/util/DateUtilKt.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/util/EditTextUtilsKt.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/util/EditTextUtilsKt$textChanges$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/util/EditTextUtilsKt$textChanges$1$listener$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/util/EditTextUtilsKt$textChanges$1$1.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/util/EditTextUtilsKt$textChanges$2.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/util/StatusBarUtilsKt.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/util/backups/RealCsvParser.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/util/backups/CsvParser.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/util/backups/CsvRecord.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/util/backups/CsvWriter.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/util/backups/FileExporter.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/util/backups/FileExporter$exportToCSV$2.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/util/backups/LocalExporter.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/util/backups/LocalExporter$exportEntriesToCsvFile$2.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/util/backups/CloudProvider.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/GratitudeApplication.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/journal/gratitude/com/gratitudejournal/GratitudeApplicationKt.class
class directories /home/circleci/src/app/build/tmp/kotlin-classes/debug/META-INF/app_debug.kotlin_module
class directories /home/circleci/src/app/build/intermediates/javac/debug/classes/journal/gratitude/com/gratitudejournal/ui/entry/EntryViewModel_Factory_Impl.class
class directories /home/circleci/src/app/build/intermediates/javac/debug/classes/journal/gratitude/com/gratitudejournal/ui/entry/EntryViewModel_Factory.class
class directories /home/circleci/src/app/build/intermediates/javac/debug/classes/journal/gratitude/com/gratitudejournal/ui/timeline/TimelineViewModel_Factory.class
class directories /home/circleci/src/app/build/intermediates/javac/debug/classes/journal/gratitude/com/gratitudejournal/ui/search/SearchViewModel_Factory.class
class directories /home/circleci/src/app/build/intermediates/javac/debug/classes/journal/gratitude/com/gratitudejournal/ui/search/SearchFragment_MembersInjector.class
class directories /home/circleci/src/app/build/intermediates/javac/debug/classes/journal/gratitude/com/gratitudejournal/repository/EntryRepositoryImpl_Factory.class
class directories /home/circleci/src/app/build/intermediates/javac/debug/classes/journal/gratitude/com/gratitudejournal/GratitudeApplication_MembersInjector.class
class directories /home/circleci/src/app/build/intermediates/javac/debug/classes/journal/gratitude/com/gratitudejournal/DataBinderMapperImpl$InnerBrLookup.class
class directories /home/circleci/src/app/build/intermediates/javac/debug/classes/journal/gratitude/com/gratitudejournal/DataBinderMapperImpl$InnerLayoutIdLookup.class
class directories /home/circleci/src/app/build/intermediates/javac/debug/classes/journal/gratitude/com/gratitudejournal/DataBinderMapperImpl.class
class directories /home/circleci/src/app/build/intermediates/javac/debug/classes/androidx/databinding/DataBinderMapperImpl.class
class directories /home/circleci/src/coverage_example/build/tmp/kotlin-classes/debug/com/presently/coverage_example/KotlinClass.class
class directories /home/circleci/src/coverage_example/build/tmp/kotlin-classes/debug/META-INF/coverage_example_debug.kotlin_module
class directories /home/circleci/src/coverage_example/build/intermediates/javac/debug/classes/com/presently/coverage_example/JavaClass.class
execution directories /home/circleci/src/app/build/outputs/code-coverage/connected/coverage.ec

Copy link
Owner Author

Choose a reason for hiding this comment

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

I notice that there's only one execution directory here, wonder if thats whats wrong 👀

Copy link
Owner Author

Choose a reason for hiding this comment

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

When I run locally I see the execution files I expect:

execution directories /../Presently/app/build/jacoco/testDebugUnitTest.exec
execution directories /../Presently/coverage_example/build/jacoco/testDebugUnitTest.exec

So I don't think thats the issue

@alisonthemonster
Copy link
Owner Author

In the end removing the coverage block in the library module's build.gradle did the trick. I have no idea why...

@alisonthemonster
Copy link
Owner Author

This won't work because we need to have testCoverageEnabled true for FTL to generate the coverage.ec files we need 🤔

@alisonthemonster
Copy link
Owner Author

Inspired by this blog post, I figured out a way to have FTL generate coverage.ec files and for my jacoco gradle task to still work!

If I'm assembling the app for FTL I added the flag for coverage, which will set testCoverageEnabled to true. When I'm running my gradle jacoco task that value will be set to false. Still doesn't get down to the bottom of why this is happening, but it finally unblocks me!

@alisonthemonster alisonthemonster removed help wanted Extra attention is needed in progress labels Jun 5, 2021
@alisonthemonster alisonthemonster deleted the coverage-testing branch August 5, 2021 05:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant