18524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets/* 28524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets * Copyright (C) 2017 The Android Open Source Project 38524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets * 48524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets * Licensed under the Apache License, Version 2.0 (the "License"); 58524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets * you may not use this file except in compliance with the License. 68524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets * You may obtain a copy of the License at 78524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets * 88524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets * http://www.apache.org/licenses/LICENSE-2.0 98524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets * 108524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets * Unless required by applicable law or agreed to in writing, software 118524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets * distributed under the License is distributed on an "AS IS" BASIS, 128524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets * See the License for the specific language governing permissions and 148524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets * limitations under the License. 158524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets */ 168524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets 178524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinetspackage com.android.support.lifecycle; 188524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets 198524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinetsimport static android.support.v4.app.FragmentManager.FragmentLifecycleCallbacks; 208524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets 218524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinetsimport static com.android.support.lifecycle.testapp.LiveDataTestActivity.LIVE_DATA_VALUE; 228524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets 238524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinetsimport static org.hamcrest.MatcherAssert.assertThat; 248524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinetsimport static org.hamcrest.Matchers.is; 258524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets 268524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinetsimport android.os.Bundle; 278524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinetsimport android.support.test.filters.SmallTest; 288524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinetsimport android.support.test.rule.ActivityTestRule; 298524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinetsimport android.support.v4.app.Fragment; 308524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinetsimport android.support.v4.app.FragmentManager; 318524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets 328524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinetsimport com.android.support.lifecycle.testapp.LiveDataTestActivity; 338524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets 348524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinetsimport org.junit.Assert; 358524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinetsimport org.junit.Rule; 368524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinetsimport org.junit.Test; 378524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets 388524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets@SmallTest 398524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinetspublic class LiveDataTransactionTest { 408524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets 418524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets @Rule 428524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets public ActivityTestRule<LiveDataTestActivity> mActivityTestRule = 438524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets new ActivityTestRule<>(LiveDataTestActivity.class); 448524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets 458524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets private boolean mVisited; 468524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets 478524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets @Test 488524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets public void transactionInOnStateChanged() throws Throwable { 498524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets LiveDataTestActivity activity = mActivityTestRule.getActivity(); 508524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets 518524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets activity.getSupportFragmentManager().registerFragmentLifecycleCallbacks( 528524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets new FragmentLifecycleCallbacks() { 538524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets @Override 548524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets public void onFragmentCreated(FragmentManager fm, Fragment f, 558524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets Bundle savedInstanceState) { 568524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets } 578524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets }, true); 588524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets mActivityTestRule.runOnUiThread(() -> { 598524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets assertThat(activity.fragmentsNumber, /** 2^MAX_DEPTH - 1 */ is(31)); 608524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets activity.viewModel.liveData.observe(activity, 618524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets s -> Assert.fail("savedInstance state triggered an update")); 628524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets }); 638524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets LiveDataTestActivity newActivity = TestUtils.recreateActivity(activity, 648524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets mActivityTestRule); 658524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets TestUtils.waitTillResumed(newActivity, mActivityTestRule); 668524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets mActivityTestRule.runOnUiThread(() -> { 678524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets newActivity.viewModel.liveData.observe(newActivity, 688524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets s -> { 698524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets assertThat(s, is(LIVE_DATA_VALUE)); 708524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets mVisited = true; 718524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets }); 728524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets assertThat(newActivity.fragmentsNumber, /** 2 * (2^MAX_DEPTH - 1) + 1 */is(63)); 738524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets assertThat(mVisited, is(true)); 748524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets }); 758524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets } 768524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets 778524c13c97e2c80d270b03f97f8eac5fbd585c5aSergey Vasilinets} 78