BaseBasicsTestCase.java revision e91ec2c1719ac56156909abeb69bd8f934632b8e
1cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes/*
2cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes * Copyright (C) 2015 The Android Open Source Project
3cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes *
4cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes * Licensed under the Apache License, Version 2.0 (the "License");
5cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes * you may not use this file except in compliance with the License.
6cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes * You may obtain a copy of the License at
7cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes *
8cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes *      http://www.apache.org/licenses/LICENSE-2.0
9cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes *
10cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes * Unless required by applicable law or agreed to in writing, software
11cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes * distributed under the License is distributed on an "AS IS" BASIS,
12cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes * See the License for the specific language governing permissions and
14cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes * limitations under the License.
15cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes */
16cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes
17cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banespackage android.support.v7.app;
18cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes
1924391daa4e5831395924e2f48df86e19294cc211Chris Banesimport org.junit.Test;
2024391daa4e5831395924e2f48df86e19294cc211Chris Banes
21e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banesimport android.os.Build;
22e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banesimport android.support.v7.appcompat.test.R;
23e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banesimport android.support.v7.custom.FitWindowsContentLayout;
24a37e9311de7ff4407104965ff66146f87e55ba5cKirill Grouchnikovimport android.support.v7.testutils.BaseTestActivity;
2524391daa4e5831395924e2f48df86e19294cc211Chris Banesimport android.support.v7.testutils.TestUtils;
26daea069fe33cc750bcb733ebcb6206d2dcedae76Chris Banesimport android.test.suitebuilder.annotation.SmallTest;
27e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banesimport android.view.View;
28e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banesimport android.view.WindowInsets;
29e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banes
30e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banesimport java.util.concurrent.atomic.AtomicBoolean;
31daea069fe33cc750bcb733ebcb6206d2dcedae76Chris Banes
3224391daa4e5831395924e2f48df86e19294cc211Chris Banesimport static org.junit.Assert.assertEquals;
3324391daa4e5831395924e2f48df86e19294cc211Chris Banesimport static org.junit.Assert.assertNotNull;
3424391daa4e5831395924e2f48df86e19294cc211Chris Banesimport static org.junit.Assert.assertNull;
35e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banesimport static org.junit.Assert.assertTrue;
36cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes
37cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banespublic abstract class BaseBasicsTestCase<A extends BaseTestActivity>
38cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes        extends BaseInstrumentationTestCase<A> {
39cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes
40cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes    protected BaseBasicsTestCase(Class<A> activityClass) {
41cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes        super(activityClass);
42cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes    }
43cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes
44cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes    @Test
45daea069fe33cc750bcb733ebcb6206d2dcedae76Chris Banes    @SmallTest
46cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes    public void testActionBarExists() {
47cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes        assertNotNull("ActionBar is not null", getActivity().getSupportActionBar());
48cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes    }
49cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes
50cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes    @Test
51daea069fe33cc750bcb733ebcb6206d2dcedae76Chris Banes    @SmallTest
52733d0b2acb07ede7455b9d020901a10586053923Chris Banes    public void testDefaultActionBarTitle() {
53cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes        assertEquals(getActivity().getTitle(), getActivity().getSupportActionBar().getTitle());
54cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes    }
55cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes
56cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes    @Test
57daea069fe33cc750bcb733ebcb6206d2dcedae76Chris Banes    @SmallTest
58cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes    public void testSetActionBarTitle() throws Throwable {
59cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes        final String newTitle = "hello";
60cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes        runTestOnUiThread(new Runnable() {
61cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes            @Override
62cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes            public void run() {
63cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes                getActivity().setTitle(newTitle);
64cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes                assertEquals("New title is set to ActionBar",
65cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes                        newTitle, getActivity().getSupportActionBar().getTitle());
66cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes            }
67cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes        });
68cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes    }
69733d0b2acb07ede7455b9d020901a10586053923Chris Banes
70733d0b2acb07ede7455b9d020901a10586053923Chris Banes    @Test
7124391daa4e5831395924e2f48df86e19294cc211Chris Banes    @SmallTest
72733d0b2acb07ede7455b9d020901a10586053923Chris Banes    public void testMenuInvalidationAfterDestroy() throws Throwable {
73733d0b2acb07ede7455b9d020901a10586053923Chris Banes        final A activity = getActivity();
7424391daa4e5831395924e2f48df86e19294cc211Chris Banes        // Reset to make sure that we don't have a menu currently
7524391daa4e5831395924e2f48df86e19294cc211Chris Banes        activity.reset();
7624391daa4e5831395924e2f48df86e19294cc211Chris Banes        assertNull(activity.getMenu());
77733d0b2acb07ede7455b9d020901a10586053923Chris Banes
7824391daa4e5831395924e2f48df86e19294cc211Chris Banes        // Now destroy the Activity
7924391daa4e5831395924e2f48df86e19294cc211Chris Banes        activity.finish();
8024391daa4e5831395924e2f48df86e19294cc211Chris Banes        TestUtils.waitForActivityDestroyed(activity);
81733d0b2acb07ede7455b9d020901a10586053923Chris Banes
8224391daa4e5831395924e2f48df86e19294cc211Chris Banes        // Now dispatch a menu invalidation and wait for an idle sync
8324391daa4e5831395924e2f48df86e19294cc211Chris Banes        activity.supportInvalidateOptionsMenu();
8424391daa4e5831395924e2f48df86e19294cc211Chris Banes        getInstrumentation().waitForIdleSync();
85733d0b2acb07ede7455b9d020901a10586053923Chris Banes
86733d0b2acb07ede7455b9d020901a10586053923Chris Banes        // Make sure that we don't have a menu given to use after being destroyed
87733d0b2acb07ede7455b9d020901a10586053923Chris Banes        assertNull(activity.getMenu());
88733d0b2acb07ede7455b9d020901a10586053923Chris Banes    }
89e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banes
90e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banes    @Test
91e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banes    @SmallTest
92e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banes    public void testFitSystemWindowsReachesContent() {
93e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banes        final FitWindowsContentLayout content =
94e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banes                (FitWindowsContentLayout) getActivity().findViewById(R.id.test_content);
95e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banes        assertNotNull(content);
96e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banes        assertTrue(content.getFitsSystemWindowsCalled());
97e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banes    }
98e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banes
99e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banes    @Test
100e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banes    @SmallTest
101e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banes    public void testOnApplyWindowInsetsReachesContent() {
102e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banes        if (Build.VERSION.SDK_INT < 21) {
103e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banes            // OnApplyWindowInsetsListener is only available on API 21+
104e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banes            return;
105e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banes        }
106e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banes
107e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banes        final View content = getActivity().findViewById(R.id.test_content);
108e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banes        assertNotNull(content);
109e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banes
110e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banes        final AtomicBoolean applyWindowInsetsCalled = new AtomicBoolean();
111e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banes        content.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() {
112e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banes            @Override
113e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banes            public WindowInsets onApplyWindowInsets(View view, WindowInsets windowInsets) {
114e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banes                applyWindowInsetsCalled.set(true);
115e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banes                return windowInsets;
116e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banes            }
117e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banes        });
118e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banes        assertTrue(applyWindowInsetsCalled.get());
119e91ec2c1719ac56156909abeb69bd8f934632b8eChris Banes    }
120cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes}
121