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