it.tidalwave.bluebill.mobile.android.impl.TestHelperNoTouch Maven / Gradle / Ivy
The newest version!
/***********************************************************************************************************************
*
* blueBill Mobile - Android - open source birding
* Copyright (C) 2009-2011 by Tidalwave s.a.s. (http://www.tidalwave.it)
*
***********************************************************************************************************************
*
* 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.
*
***********************************************************************************************************************
*
* WWW: http://bluebill.tidalwave.it/mobile
* SCM: https://java.net/hg/bluebill-mobile~android-src
*
**********************************************************************************************************************/
package it.tidalwave.bluebill.mobile.android.impl;
import android.app.Instrumentation;
import android.test.ActivityInstrumentationTestCase2;
import android.view.KeyEvent;
import android.view.View;
import android.widget.ImageButton;
import android.widget.ListView;
import com.jayway.android.robotium.solo.Solo;
import it.tidalwave.bluebill.mobile.android.TestHelper;
import java.util.regex.Pattern;
import javax.annotation.Nonnegative;
import javax.annotation.Nonnull;
/***********************************************************************************************************************
*
* @author Fabrizio Giudici
* @version $Id$
*
**********************************************************************************************************************/
public class TestHelperNoTouch extends TestHelper
{
/*******************************************************************************************************************
*
*
******************************************************************************************************************/
public TestHelperNoTouch (final @Nonnull ActivityInstrumentationTestCase2 instrumentationTestCase,
final @Nonnull Solo solo)
{
super(instrumentationTestCase, solo);
}
/*******************************************************************************************************************
*
*
******************************************************************************************************************/
@Override
public void clickOnImageButtonById (final int id)
{
final ImageButton button = (ImageButton)solo.getCurrentActivity().findViewById(id);
if (button == null)
{
throw new AssertionError("Cannot find button #" + id + " on " + solo.getCurrentActivity());
}
solo.sleep(generalDelay);
requestFocus(button);
instrumentationTestCase.sendKeys(KeyEvent.KEYCODE_DPAD_CENTER);
}
/*******************************************************************************************************************
*
*
******************************************************************************************************************/
@Override
public void clickOnListView (final @Nonnull ListView listView, final @Nonnull String text)
{
requestFocus(listView);
final Pattern pattern = Pattern.compile(text);
if (true) // scroll down
{
final Instrumentation instrumentation = instrumentationTestCase.getInstrumentation();
do
{
instrumentationTestCase.sendKeys(KeyEvent.KEYCODE_DPAD_DOWN);
instrumentation.waitForIdleSync();
solo.sleep(generalDelay);
}
while (!pattern.matcher(listView.getSelectedItem().toString()).matches());
}
else // immediate click - doesn't work, doesn't put the focus in the proper place
{
// requestFocus(targetChild);
}
press(KeyEvent.KEYCODE_DPAD_CENTER);
}
/*******************************************************************************************************************
*
*
******************************************************************************************************************/
@Override
public void clickOnListView (final @Nonnull ListView listView, final @Nonnegative int index)
{
requestFocus(listView);
final View targetChild = listView.getChildAt(index);
if (true) // scroll down
{
final Instrumentation instrumentation = instrumentationTestCase.getInstrumentation();
for (int i = 0; i < index; i++)
{
instrumentationTestCase.sendKeys(KeyEvent.KEYCODE_DPAD_DOWN);
instrumentation.waitForIdleSync();
solo.sleep(generalDelay);
System.err.println(" " + targetChild + " / FOCUS " + listView.getSelectedView() + " / " + listView.getSelectedItem() + " / " + listView.getSelectedItemId());
}
press(KeyEvent.KEYCODE_DPAD_CENTER);
}
else // immediate click - doesn't work, doesn't put the focus in the proper place
{
requestFocus(targetChild);
press(KeyEvent.KEYCODE_DPAD_CENTER);
}
}
/*******************************************************************************************************************
*
*
******************************************************************************************************************/
@Override
public void confirmDialog()
{
// FIXME: assert that there's a dialog
// FIXME: find the Ok button first!
solo.sleep(500);
press(KeyEvent.KEYCODE_DPAD_CENTER);
}
}