19ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes/*
29ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes * Copyright (C) 2016 The Android Open Source Project
39ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes *
49ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes * Licensed under the Apache License, Version 2.0 (the "License");
59ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes * you may not use this file except in compliance with the License.
69ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes * You may obtain a copy of the License at
79ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes *
89ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes *      http://www.apache.org/licenses/LICENSE-2.0
99ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes *
109ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes * Unless required by applicable law or agreed to in writing, software
119ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes * distributed under the License is distributed on an "AS IS" BASIS,
129ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes * See the License for the specific language governing permissions and
149ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes * limitations under the License.
159ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes */
169ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes
179ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banespackage android.support.design.testutils;
189ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes
199ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banesimport static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom;
209ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes
219ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banesimport android.support.design.widget.TextInputLayout;
229ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banesimport android.support.test.espresso.UiController;
239ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banesimport android.support.test.espresso.ViewAction;
249ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banesimport android.support.v4.widget.DrawerLayout;
259ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banesimport android.view.View;
269ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes
279ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banesimport org.hamcrest.Matcher;
289ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes
299ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banespublic class TextInputLayoutActions {
309ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes
319ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes    public static ViewAction setErrorEnabled(final boolean enabled) {
329ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes        return new ViewAction() {
339ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes            @Override
349ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes            public Matcher<View> getConstraints() {
359ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes                return isAssignableFrom(TextInputLayout.class);
369ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes            }
379ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes
389ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes            @Override
399ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes            public String getDescription() {
409ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes                return "Enables/disables the error";
419ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes            }
429ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes
439ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes            @Override
449ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes            public void perform(UiController uiController, View view) {
459ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes                uiController.loopMainThreadUntilIdle();
469ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes
479ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes                TextInputLayout layout = (TextInputLayout) view;
489ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes                layout.setErrorEnabled(enabled);
499ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes
509ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes                uiController.loopMainThreadUntilIdle();
519ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes            }
529ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes        };
539ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes    }
549ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes
559ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes    public static ViewAction setError(final CharSequence error) {
569ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes        return new ViewAction() {
579ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes            @Override
589ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes            public Matcher<View> getConstraints() {
599ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes                return isAssignableFrom(TextInputLayout.class);
609ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes            }
619ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes
629ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes            @Override
639ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes            public String getDescription() {
649ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes                return "Sets the error";
659ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes            }
669ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes
679ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes            @Override
689ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes            public void perform(UiController uiController, View view) {
699ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes                uiController.loopMainThreadUntilIdle();
709ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes
719ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes                TextInputLayout layout = (TextInputLayout) view;
729ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes                layout.setError(error);
739ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes
749ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes                uiController.loopMainThreadUntilIdle();
759ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes            }
769ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes        };
779ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes    }
789ba4dbeb02db9c222f39f77b9a335d9deabde98fChris Banes}
79