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