blob: a2082e2d208cfc9afb2bbb2524a81085de7d3bd8 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.vr.util;
import static org.chromium.chrome.browser.vr.VrTestFramework.POLL_CHECK_INTERVAL_SHORT_MS;
import static org.chromium.chrome.browser.vr.VrTestFramework.POLL_TIMEOUT_SHORT_MS;
import org.chromium.base.ThreadUtils;
import org.chromium.chrome.browser.infobar.InfoBar;
import org.chromium.chrome.browser.vr.TestFramework;
import org.chromium.chrome.test.util.InfoBarUtil;
import org.chromium.content.browser.test.util.Criteria;
import org.chromium.content.browser.test.util.CriteriaHelper;
import java.util.List;
import java.util.concurrent.Callable;
/**
* Class containing utility functions for interacting with InfoBars at
* a high level.
*/
public class VrInfoBarUtils {
public enum Button { PRIMARY, SECONDARY }
;
/**
* Determines whether InfoBars are present in the current activity.
* @param framework The TestFramework to get the current activity from
* @return True if there are any InfoBars present, false otherwise
*/
@SuppressWarnings("unchecked")
public static boolean isInfoBarPresent(TestFramework framework) {
List<InfoBar> infoBars = framework.getRule().getInfoBars();
return infoBars != null && !infoBars.isEmpty();
}
/**
* Clicks on either the primary or secondary button of the first InfoBar
* in the activity.
* @param button Which button to click
* @param framework The TestFramework to get the current activity from
*/
@SuppressWarnings("unchecked")
public static void clickInfoBarButton(final Button button, TestFramework framework) {
if (!isInfoBarPresent(framework)) return;
final List<InfoBar> infoBars = framework.getRule().getInfoBars();
ThreadUtils.runOnUiThreadBlocking(new Runnable() {
@Override
public void run() {
switch (button) {
case PRIMARY:
InfoBarUtil.clickPrimaryButton(infoBars.get(0));
break;
default:
InfoBarUtil.clickSecondaryButton(infoBars.get(0));
}
}
});
InfoBarUtil.waitUntilNoInfoBarsExist(framework.getRule().getInfoBars());
}
/**
* Clicks on the close button of the first InfoBar in the activity.
* @param framework The TestFramework to get the current activity from
*/
@SuppressWarnings("unchecked")
public static void clickInfobarCloseButton(TestFramework framework) {
if (!isInfoBarPresent(framework)) return;
final List<InfoBar> infoBars = framework.getRule().getInfoBars();
ThreadUtils.runOnUiThreadBlocking(new Runnable() {
@Override
public void run() {
InfoBarUtil.clickCloseButton(infoBars.get(0));
}
});
InfoBarUtil.waitUntilNoInfoBarsExist(framework.getRule().getInfoBars());
}
/**
* Determines is there is any InfoBar present in the given View hierarchy.
* @param framework The TestFramework that will be used to get the current activity/view from
* @param present Whether an InfoBar should be present.
*/
public static void expectInfoBarPresent(final TestFramework framework, boolean present) {
CriteriaHelper.pollUiThread(Criteria.equals(present, new Callable<Boolean>() {
@Override
public Boolean call() {
return isInfoBarPresent(framework);
}
}), POLL_TIMEOUT_SHORT_MS, POLL_CHECK_INTERVAL_SHORT_MS);
}
}