/* * Copyright (C) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.support.lifecycle; import static android.support.v4.app.FragmentManager.FragmentLifecycleCallbacks; import static com.android.support.lifecycle.testapp.LiveDataTestActivity.LIVE_DATA_VALUE; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import android.os.Bundle; import android.support.test.filters.SmallTest; import android.support.test.rule.ActivityTestRule; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import com.android.support.lifecycle.testapp.LiveDataTestActivity; import org.junit.Assert; import org.junit.Rule; import org.junit.Test; @SmallTest public class LiveDataTransactionTest { @Rule public ActivityTestRule mActivityTestRule = new ActivityTestRule<>(LiveDataTestActivity.class); private boolean mVisited; @Test public void transactionInOnStateChanged() throws Throwable { LiveDataTestActivity activity = mActivityTestRule.getActivity(); activity.getSupportFragmentManager().registerFragmentLifecycleCallbacks( new FragmentLifecycleCallbacks() { @Override public void onFragmentCreated(FragmentManager fm, Fragment f, Bundle savedInstanceState) { } }, true); mActivityTestRule.runOnUiThread(() -> { assertThat(activity.fragmentsNumber, /** 2^MAX_DEPTH - 1 */ is(31)); activity.viewModel.liveData.observe(activity, s -> Assert.fail("savedInstance state triggered an update")); }); LiveDataTestActivity newActivity = TestUtils.recreateActivity(activity, mActivityTestRule); TestUtils.waitTillResumed(newActivity, mActivityTestRule); mActivityTestRule.runOnUiThread(() -> { newActivity.viewModel.liveData.observe(newActivity, s -> { assertThat(s, is(LIVE_DATA_VALUE)); mVisited = true; }); assertThat(newActivity.fragmentsNumber, /** 2 * (2^MAX_DEPTH - 1) + 1 */is(63)); assertThat(mVisited, is(true)); }); } }