4

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.

capo11
  • 790
  • 3
  • 11
  • 32

2 Answers2

7

I've solved it by changing the definition to

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

This is working for me.

Emilio Hoffmann
  • 274
  • 2
  • 11