1d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banes/* 2d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banes * Copyright (C) 2016 The Android Open Source Project 3d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banes * 4d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banes * Licensed under the Apache License, Version 2.0 (the "License"); 5d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banes * you may not use this file except in compliance with the License. 6d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banes * You may obtain a copy of the License at 7d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banes * 8d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banes * http://www.apache.org/licenses/LICENSE-2.0 9d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banes * 10d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banes * Unless required by applicable law or agreed to in writing, software 11d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banes * distributed under the License is distributed on an "AS IS" BASIS, 12d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banes * See the License for the specific language governing permissions and 14d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banes * limitations under the License. 15d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banes */ 16d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banes 17d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banespackage android.support.design.widget; 18d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banes 19f50e3efaeccb3e7c424591d09376bec7d440ec8cChris Banesimport static android.support.design.testutils.FloatingActionButtonActions.hideThenShow; 201711e8729c1b901b73f530e87b7c9cc9370f33beChris Banesimport static android.support.design.testutils.FloatingActionButtonActions.setBackgroundTintColor; 211711e8729c1b901b73f530e87b7c9cc9370f33beChris Banesimport static android.support.design.testutils.FloatingActionButtonActions.setImageResource; 22ee63e6890156724477092fbfaba18b726a47710eChris Banesimport static android.support.design.testutils.FloatingActionButtonActions.setLayoutGravity; 23a1de3eef9bb5ef90d00a23c65f13e1fc83254455Chris Banesimport static android.support.design.testutils.FloatingActionButtonActions.setSize; 24f50e3efaeccb3e7c424591d09376bec7d440ec8cChris Banesimport static android.support.design.testutils.FloatingActionButtonActions.showThenHide; 25d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banesimport static android.support.design.testutils.TestUtilsMatchers.withFabBackgroundFill; 26ee63e6890156724477092fbfaba18b726a47710eChris Banesimport static android.support.design.testutils.TestUtilsMatchers.withFabContentAreaOnMargins; 27a1de3eef9bb5ef90d00a23c65f13e1fc83254455Chris Banesimport static android.support.design.testutils.TestUtilsMatchers.withFabContentHeight; 28f50e3efaeccb3e7c424591d09376bec7d440ec8cChris Banesimport static android.support.design.widget.DesignViewActions.setVisibility; 29d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banesimport static android.support.test.espresso.Espresso.onView; 30d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banesimport static android.support.test.espresso.assertion.ViewAssertions.matches; 31f50e3efaeccb3e7c424591d09376bec7d440ec8cChris Banesimport static android.support.test.espresso.matcher.ViewMatchers.isDisplayed; 32d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banesimport static android.support.test.espresso.matcher.ViewMatchers.withId; 33d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banes 341558fe2581a3a9aa802e6c8f4255fb97c4e79074Chris Banesimport static org.hamcrest.Matchers.not; 351558fe2581a3a9aa802e6c8f4255fb97c4e79074Chris Banes 361711e8729c1b901b73f530e87b7c9cc9370f33beChris Banesimport android.graphics.Color; 37d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banesimport android.support.design.test.R; 38d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banesimport android.support.design.testutils.TestUtils; 39d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banesimport android.test.suitebuilder.annotation.SmallTest; 40ee63e6890156724477092fbfaba18b726a47710eChris Banesimport android.view.Gravity; 41f50e3efaeccb3e7c424591d09376bec7d440ec8cChris Banesimport android.view.View; 42d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banes 43d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banesimport org.junit.Test; 44d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banes 451711e8729c1b901b73f530e87b7c9cc9370f33beChris Banes@SmallTest 46d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banespublic class FloatingActionButtonTest 47d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banes extends BaseInstrumentationTestCase<FloatingActionButtonActivity> { 48d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banes 49d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banes public FloatingActionButtonTest() { 50d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banes super(FloatingActionButtonActivity.class); 51d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banes } 52d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banes 53d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banes @Test 541711e8729c1b901b73f530e87b7c9cc9370f33beChris Banes public void testDefaultBackgroundTint() { 551711e8729c1b901b73f530e87b7c9cc9370f33beChris Banes final int colorAccent = TestUtils.getThemeAttrColor( 561711e8729c1b901b73f530e87b7c9cc9370f33beChris Banes mActivityTestRule.getActivity(), R.attr.colorAccent); 571711e8729c1b901b73f530e87b7c9cc9370f33beChris Banes onView(withId(R.id.fab_standard)) 581711e8729c1b901b73f530e87b7c9cc9370f33beChris Banes .check(matches(withFabBackgroundFill(colorAccent))); 59d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banes } 60d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banes 61d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banes @Test 621711e8729c1b901b73f530e87b7c9cc9370f33beChris Banes public void testSetTintOnDefaultBackgroundTint() { 631711e8729c1b901b73f530e87b7c9cc9370f33beChris Banes onView(withId(R.id.fab_standard)) 641711e8729c1b901b73f530e87b7c9cc9370f33beChris Banes .perform(setBackgroundTintColor(Color.GREEN)) 651711e8729c1b901b73f530e87b7c9cc9370f33beChris Banes .check(matches(withFabBackgroundFill(Color.GREEN))); 66d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banes } 67d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banes 681711e8729c1b901b73f530e87b7c9cc9370f33beChris Banes @Test 691711e8729c1b901b73f530e87b7c9cc9370f33beChris Banes public void testDeclaredBackgroundTint() { 701711e8729c1b901b73f530e87b7c9cc9370f33beChris Banes onView(withId(R.id.fab_tint)) 711711e8729c1b901b73f530e87b7c9cc9370f33beChris Banes .check(matches(withFabBackgroundFill(Color.MAGENTA))); 721711e8729c1b901b73f530e87b7c9cc9370f33beChris Banes } 731711e8729c1b901b73f530e87b7c9cc9370f33beChris Banes 741711e8729c1b901b73f530e87b7c9cc9370f33beChris Banes @Test 751711e8729c1b901b73f530e87b7c9cc9370f33beChris Banes public void testSetTintOnDeclaredBackgroundTint() { 761711e8729c1b901b73f530e87b7c9cc9370f33beChris Banes onView(withId(R.id.fab_tint)) 771711e8729c1b901b73f530e87b7c9cc9370f33beChris Banes .perform(setBackgroundTintColor(Color.GREEN)) 781711e8729c1b901b73f530e87b7c9cc9370f33beChris Banes .check(matches(withFabBackgroundFill(Color.GREEN))); 791711e8729c1b901b73f530e87b7c9cc9370f33beChris Banes } 801711e8729c1b901b73f530e87b7c9cc9370f33beChris Banes 811711e8729c1b901b73f530e87b7c9cc9370f33beChris Banes @Test 821711e8729c1b901b73f530e87b7c9cc9370f33beChris Banes public void setVectorDrawableSrc() { 831711e8729c1b901b73f530e87b7c9cc9370f33beChris Banes onView(withId(R.id.fab_standard)) 841711e8729c1b901b73f530e87b7c9cc9370f33beChris Banes .perform(setImageResource(R.drawable.vector_icon)); 85d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banes } 86d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banes 87a1de3eef9bb5ef90d00a23c65f13e1fc83254455Chris Banes @Test 88a1de3eef9bb5ef90d00a23c65f13e1fc83254455Chris Banes public void testSetMiniSize() { 89a1de3eef9bb5ef90d00a23c65f13e1fc83254455Chris Banes final int miniSize = mActivityTestRule.getActivity().getResources() 90a1de3eef9bb5ef90d00a23c65f13e1fc83254455Chris Banes .getDimensionPixelSize(R.dimen.fab_mini_height); 91a1de3eef9bb5ef90d00a23c65f13e1fc83254455Chris Banes 92a1de3eef9bb5ef90d00a23c65f13e1fc83254455Chris Banes onView(withId(R.id.fab_standard)) 93a1de3eef9bb5ef90d00a23c65f13e1fc83254455Chris Banes .perform(setSize(FloatingActionButton.SIZE_MINI)) 94a1de3eef9bb5ef90d00a23c65f13e1fc83254455Chris Banes .check(matches(withFabContentHeight(miniSize))); 95a1de3eef9bb5ef90d00a23c65f13e1fc83254455Chris Banes } 96a1de3eef9bb5ef90d00a23c65f13e1fc83254455Chris Banes 97a1de3eef9bb5ef90d00a23c65f13e1fc83254455Chris Banes @Test 98a1de3eef9bb5ef90d00a23c65f13e1fc83254455Chris Banes public void testSetSizeToggle() { 99a1de3eef9bb5ef90d00a23c65f13e1fc83254455Chris Banes final int miniSize = mActivityTestRule.getActivity().getResources() 100a1de3eef9bb5ef90d00a23c65f13e1fc83254455Chris Banes .getDimensionPixelSize(R.dimen.fab_mini_height); 101a1de3eef9bb5ef90d00a23c65f13e1fc83254455Chris Banes final int normalSize = mActivityTestRule.getActivity().getResources() 102a1de3eef9bb5ef90d00a23c65f13e1fc83254455Chris Banes .getDimensionPixelSize(R.dimen.fab_normal_height); 103a1de3eef9bb5ef90d00a23c65f13e1fc83254455Chris Banes 104a1de3eef9bb5ef90d00a23c65f13e1fc83254455Chris Banes onView(withId(R.id.fab_standard)) 105a1de3eef9bb5ef90d00a23c65f13e1fc83254455Chris Banes .perform(setSize(FloatingActionButton.SIZE_MINI)) 106a1de3eef9bb5ef90d00a23c65f13e1fc83254455Chris Banes .check(matches(withFabContentHeight(miniSize))); 107a1de3eef9bb5ef90d00a23c65f13e1fc83254455Chris Banes 108a1de3eef9bb5ef90d00a23c65f13e1fc83254455Chris Banes onView(withId(R.id.fab_standard)) 109a1de3eef9bb5ef90d00a23c65f13e1fc83254455Chris Banes .perform(setSize(FloatingActionButton.SIZE_NORMAL)) 110a1de3eef9bb5ef90d00a23c65f13e1fc83254455Chris Banes .check(matches(withFabContentHeight(normalSize))); 111a1de3eef9bb5ef90d00a23c65f13e1fc83254455Chris Banes } 112a1de3eef9bb5ef90d00a23c65f13e1fc83254455Chris Banes 113ee63e6890156724477092fbfaba18b726a47710eChris Banes @Test 114ee63e6890156724477092fbfaba18b726a47710eChris Banes public void testOffset() { 115ee63e6890156724477092fbfaba18b726a47710eChris Banes onView(withId(R.id.fab_standard)) 116ee63e6890156724477092fbfaba18b726a47710eChris Banes .perform(setLayoutGravity(Gravity.LEFT | Gravity.TOP)) 117ee63e6890156724477092fbfaba18b726a47710eChris Banes .check(matches(withFabContentAreaOnMargins(Gravity.LEFT | Gravity.TOP))); 118ee63e6890156724477092fbfaba18b726a47710eChris Banes 119ee63e6890156724477092fbfaba18b726a47710eChris Banes onView(withId(R.id.fab_standard)) 120ee63e6890156724477092fbfaba18b726a47710eChris Banes .perform(setLayoutGravity(Gravity.RIGHT | Gravity.BOTTOM)) 121ee63e6890156724477092fbfaba18b726a47710eChris Banes .check(matches(withFabContentAreaOnMargins(Gravity.RIGHT | Gravity.BOTTOM))); 122ee63e6890156724477092fbfaba18b726a47710eChris Banes } 123ee63e6890156724477092fbfaba18b726a47710eChris Banes 124f50e3efaeccb3e7c424591d09376bec7d440ec8cChris Banes @Test 125f50e3efaeccb3e7c424591d09376bec7d440ec8cChris Banes public void testHideShow() { 126f50e3efaeccb3e7c424591d09376bec7d440ec8cChris Banes onView(withId(R.id.fab_standard)) 127f50e3efaeccb3e7c424591d09376bec7d440ec8cChris Banes .perform(setVisibility(View.VISIBLE)) 128f50e3efaeccb3e7c424591d09376bec7d440ec8cChris Banes .perform(hideThenShow(FloatingActionButtonImpl.SHOW_HIDE_ANIM_DURATION)) 129f50e3efaeccb3e7c424591d09376bec7d440ec8cChris Banes .check(matches(isDisplayed())); 130f50e3efaeccb3e7c424591d09376bec7d440ec8cChris Banes } 131f50e3efaeccb3e7c424591d09376bec7d440ec8cChris Banes 132f50e3efaeccb3e7c424591d09376bec7d440ec8cChris Banes @Test 133f50e3efaeccb3e7c424591d09376bec7d440ec8cChris Banes public void testShowHide() { 134f50e3efaeccb3e7c424591d09376bec7d440ec8cChris Banes onView(withId(R.id.fab_standard)) 135f50e3efaeccb3e7c424591d09376bec7d440ec8cChris Banes .perform(setVisibility(View.GONE)) 136f50e3efaeccb3e7c424591d09376bec7d440ec8cChris Banes .perform(showThenHide(FloatingActionButtonImpl.SHOW_HIDE_ANIM_DURATION)) 137f50e3efaeccb3e7c424591d09376bec7d440ec8cChris Banes .check(matches(not(isDisplayed()))); 138f50e3efaeccb3e7c424591d09376bec7d440ec8cChris Banes } 139f50e3efaeccb3e7c424591d09376bec7d440ec8cChris Banes 140d95e0bb0271ae59387dd9d2ca402ad6f39d789d2Chris Banes} 141