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