androidtestingdata-bindingandroid-espressogoogle-codelab

Problems to sets the fragment from a FragmentScenario to be used from DataBindingIdlingResource


I'm following this Google Codelab and at the page 8 (Task: End-to-End Testing with Data Binding), at step 8 (Write DataBindingIdlingResource) you have to create a file called DataBindingIdlingResource.kt.

class DataBindingIdlingResource : IdlingResource {
    [...]
}

private fun View.getBinding(): ViewDataBinding? = DataBindingUtil.getBinding(this)

/**
 * Sets the activity from an [ActivityScenario] to be used from [DataBindingIdlingResource].
 */
fun DataBindingIdlingResource.monitorActivity(
    activityScenario: ActivityScenario<out FragmentActivity>
) {
    activityScenario.onActivity {
        this.activity = it
    }
}

/**
 * Sets the fragment from a [FragmentScenario] to be used from [DataBindingIdlingResource].
 */
fun DataBindingIdlingResource.monitorFragment(fragmentScenario: FragmentScenario<out Fragment>) {
    fragmentScenario.onFragment {
        this.activity = it.requireActivity()
    }
}

The problem: is the last function fun DataBindingIdlingResource.monitorFragment because fragmentScenario.onFragment provides only onFragment(action: Nothing) and not onFragment {}.

How Can I solve this issue? Thanks.


Solution

  • fun DataBindingIdlingResource.monitorFragment(fragmentScenario: FragmentScenario<Fragment>) {
      fragmentScenario.onFragment { fragment ->
          this.activity = fragment.requireActivity()
      }
    }
    

    This is working for me.