blob: 7810a83b5f4a0760e1243b6b4decc73f9304c29e [file] [log] [blame]
/*
* Copyright (C) 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.android.apps.common.testing.ui.espresso.base;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.sameInstance;
import com.google.android.apps.common.testing.ui.espresso.AmbiguousViewMatcherException;
import com.google.android.apps.common.testing.ui.espresso.NoMatchingViewException;
import com.google.android.apps.common.testing.ui.espresso.ViewFinder;
import android.test.InstrumentationTestCase;
import android.test.UiThreadTest;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.TextView;
import org.hamcrest.Matchers;
import javax.inject.Provider;
/** Unit tests for {@link ViewFinderImpl}. */
public class ViewFinderImplTest extends InstrumentationTestCase {
private Provider<View> testViewProvider;
private RelativeLayout testView;
private View child1;
private View child2;
private View child3;
private View child4;
private View nestedChild;
@Override
public void setUp() throws Exception {
super.setUp();
testView = new RelativeLayout(getInstrumentation().getTargetContext());
child1 = new TextView(getInstrumentation().getTargetContext());
child1.setId(1);
child2 = new TextView(getInstrumentation().getTargetContext());
child2.setId(2);
child3 = new TextView(getInstrumentation().getTargetContext());
child3.setId(3);
child4 = new TextView(getInstrumentation().getTargetContext());
child4.setId(4);
nestedChild = new TextView(getInstrumentation().getTargetContext());
nestedChild.setId(5);
RelativeLayout nestingLayout = new RelativeLayout(getInstrumentation().getTargetContext());
nestingLayout.addView(nestedChild);
testView.addView(child1);
testView.addView(child2);
testView.addView(nestingLayout);
testView.addView(child3);
testView.addView(child4);
testViewProvider = new Provider<View>() {
@Override
public View get() {
return testView;
}
@Override
public String toString() {
return "of(" + testView + ")";
}
};
}
@UiThreadTest
public void testGetView_present() {
ViewFinder finder = new ViewFinderImpl(sameInstance(nestedChild), testViewProvider);
assertThat(finder.getView(), sameInstance(nestedChild));
}
@UiThreadTest
public void testGetView_missing() {
ViewFinder finder = new ViewFinderImpl(Matchers.<View>nullValue(), testViewProvider);
try {
finder.getView();
fail("No children should pass that matcher!");
} catch (NoMatchingViewException expected) {}
}
@UiThreadTest
public void testGetView_multiple() {
ViewFinder finder = new ViewFinderImpl(Matchers.<View>notNullValue(), testViewProvider);
try {
finder.getView();
fail("All nodes hit that matcher!");
} catch (AmbiguousViewMatcherException expected) {}
}
public void testFind_offUiThread() {
ViewFinder finder = new ViewFinderImpl(sameInstance(nestedChild), testViewProvider);
try {
finder.getView();
fail("not on main thread, should die.");
} catch (IllegalStateException expected) {}
}
}