TestUtils.java revision b085e34beddf631062d0e2503911ef4a33152c06
1b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets/* 2b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets * Copyright (C) 2016 The Android Open Source Project 3b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets * 4b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets * Licensed under the Apache License, Version 2.0 (the "License"); 5b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets * you may not use this file except in compliance with the License. 6b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets * You may obtain a copy of the License at 7b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets * 8b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets * http://www.apache.org/licenses/LICENSE-2.0 9b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets * 10b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets * Unless required by applicable law or agreed to in writing, software 11b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets * distributed under the License is distributed on an "AS IS" BASIS, 12b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets * See the License for the specific language governing permissions and 14b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets * limitations under the License. 15b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets */ 16b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets 17b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinetspackage com.android.support.lifecycle.state; 18b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets 19b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinetsimport android.app.Instrumentation; 20b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinetsimport android.app.Instrumentation.ActivityMonitor; 21b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinetsimport android.support.test.InstrumentationRegistry; 22b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinetsimport android.support.test.rule.UiThreadTestRule; 23b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinetsimport android.support.v4.app.FragmentManager; 24b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets 25b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinetsimport com.android.support.lifecycle.testapp.MainActivity; 26b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets 27b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinetspublic class TestUtils { 28b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets 29b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets private static final long TIMEOUT_MS = 2000; 30b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets 31b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets static MainActivity recreateActivity(final MainActivity activity, UiThreadTestRule rule) 32b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets throws Throwable { 33b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets ActivityMonitor monitor = new ActivityMonitor( 34b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets MainActivity.class.getCanonicalName(), null, false); 35b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation(); 36b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets instrumentation.addMonitor(monitor); 37b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets rule.runOnUiThread(() -> activity.recreate()); 38b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets MainActivity result = (MainActivity) monitor.waitForActivityWithTimeout(TIMEOUT_MS); 39b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets if (result == null) { 40b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets throw new RuntimeException("Timeout. Failed to recreate an activity"); 41b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets } 42b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets return result; 43b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets } 44b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets 45b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets static void stopRetainingInstanceIn(FragmentManager fragmentManager) { 46b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets fragmentManager.findFragmentByTag(StateProviders.HOLDER_TAG).setRetainInstance(false); 47b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets } 48b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets 49b085e34beddf631062d0e2503911ef4a33152c06Sergey Vasilinets} 50