Using inRoot to target non-default windows
https://code.google.com/p/android-test-kit/wiki/EspressoSamples#Using_inRoot_to_target_non-default_windows
onView(withText("South China Sea"))
.inRoot(withDecorView(not(is(getActivity().getWindow().getDecorView()))))
.perform(click());
上記の方法でもToast表示のチェックは行えますが、「non-default windows」であってToastの指定ではありません。
ということで、自作してしまいましょう。
ToastはWindowManager.LayoutParams.TYPE_TOASTというパラメータを持っています。
これは表示するLayerを指定するものです。
次はToast Layerを指定するMatcherのサンプルプログラムです。
/**
* Matcher that is Toast window.
*/
public static Matcher<Root> isToast() {
return new TypeSafeMatcher<Root>() {
@Override
public void describeTo(Description description) {
description.appendText("is toast");
}
@Override
public boolean matchesSafely(Root root) {
int type = root.getWindowLayoutParams().get().type;
if ((type == WindowManager.LayoutParams.TYPE_TOAST)) {
IBinder windowToken = root.getDecorView().getWindowToken();
IBinder appToken = root.getDecorView().getApplicationWindowToken();
if (windowToken == appToken) {
// windowToken == appToken means this window isn't contained by any other windows.
// if it was a window for an activity, it would have TYPE_BASE_APPLICATION.
return true;
}
}
return false;
}
};
}

