calabash-android 0.4.22.pre4 → 0.5.0.pre1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/calabash-android +66 -45
- data/lib/calabash-android/calabash_steps.rb +0 -8
- data/lib/calabash-android/canned_steps.md +2 -30
- data/lib/calabash-android/lib/TestServer.apk +0 -0
- data/lib/calabash-android/operations.rb +199 -23
- data/lib/calabash-android/removed_actions.txt +52 -0
- data/lib/calabash-android/steps/assert_steps.rb +9 -24
- data/lib/calabash-android/steps/check_box_steps.rb +2 -2
- data/lib/calabash-android/steps/context_menu_steps.rb +11 -4
- data/lib/calabash-android/steps/date_picker_steps.rb +2 -2
- data/lib/calabash-android/steps/enter_text_steps.rb +13 -13
- data/lib/calabash-android/steps/l10n_steps.rb +5 -5
- data/lib/calabash-android/steps/map_steps.rb +12 -12
- data/lib/calabash-android/steps/navigation_steps.rb +12 -12
- data/lib/calabash-android/steps/press_button_steps.rb +16 -12
- data/lib/calabash-android/steps/progress_steps.rb +19 -22
- data/lib/calabash-android/steps/search_steps.rb +2 -2
- data/lib/calabash-android/steps/spinner_steps.rb +10 -2
- data/lib/calabash-android/steps/time_picker_steps.rb +2 -2
- data/lib/calabash-android/version.rb +1 -1
- data/lib/calabash-android/wait_helpers.rb +29 -1
- data/test-server/instrumentation-backend/antlr/UIQuery.g +11 -11
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/CalabashInstrumentationTestRunner.java +3 -2
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/InstrumentationBackend.java +9 -4
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/Result.java +16 -12
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/application/Backdoor.java +55 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/gestures/LongPressCoordinate.java +19 -2
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/JavaScriptExecuter.java +105 -0
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/QueryHelper.java +27 -30
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ViewMapper.java +27 -18
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/ComparisonOperator.java +7 -1
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryASTPredicate.java +16 -4
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryASTWith.java +13 -6
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryUtils.java +94 -48
- metadata +5 -59
- data/lib/calabash-android/steps/additions_manual_steps.rb +0 -11
- data/lib/calabash-android/steps/app_steps.rb +0 -10
- data/lib/calabash-android/steps/list_steps.rb +0 -41
- data/lib/calabash-android/steps/rotation_steps.rb +0 -7
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/button/PressButtonNumber.java +0 -22
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/button/PressButtonText.java +0 -27
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/button/PressImageButtonDescription.java +0 -39
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/button/PressImageButtonNumber.java +0 -22
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/button/WaitForButton.java +0 -47
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/checkbox/ToggleCheckboxNumber.java +0 -22
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/contextmenu/LongPressText.java +0 -22
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/contextmenu/LongPressTextAndSelectFromMenuById.java +0 -26
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/contextmenu/LongPressTextAndSelectFromMenuByIndex.java +0 -22
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/contextmenu/LongPressTextAndSelectFromMenuByText.java +0 -26
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/helpers/InspectCurrentDialog.java +0 -76
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/list/GetListData.java +0 -85
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/list/GetListItemProperties.java +0 -194
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/list/GetListItemText.java +0 -136
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/list/LongPressListItems.java +0 -22
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/list/PressListItems.java +0 -22
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/scrolling/ScrollDown.java +0 -22
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/scrolling/ScrollUp.java +0 -22
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/search/EnterQueryByIndex.java +0 -29
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/softkey/SelectFromMenuByText.java +0 -24
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/spinner/GetSelectedSpinnerItemText.java +0 -36
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/spinner/SelectSpinnerItemByContentDescription.java +0 -43
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/AssertGridViewContainsNoDuplicates.java +0 -72
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/AssertText.java +0 -31
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/AssertTextOfSpecificTextViewByContentDescription.java +0 -32
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/ClearTextById.java +0 -30
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/ClearTextByIndex.java +0 -22
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/ClearTextFieldByContentDescription.java +0 -33
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/ClickOnText.java +0 -22
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/EnterTextByContentDescription.java +0 -32
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/EnterTextById.java +0 -33
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/EnterTextByIndex.java +0 -22
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/GetTextById.java +0 -42
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/AssertViewProperty.java +0 -141
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/ClickOnViewByDescription.java +0 -46
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/ClickOnViewById.java +0 -56
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/GetViewProperty.java +0 -101
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/HasView.java +0 -31
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/IsEnabled.java +0 -30
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/LongPressOnViewById.java +0 -34
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/Press.java +0 -89
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/SelectTab.java +0 -110
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/Wait.java +0 -24
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForDialogClose.java +0 -21
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForProgress.java +0 -47
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForScreen.java +0 -54
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForTab.java +0 -108
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForText.java +0 -37
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForView.java +0 -43
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForViewById.java +0 -58
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/JavaScriptOperation.java +0 -44
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/PressByCssSelector.java +0 -70
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/SetText.java +0 -64
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
package sh.calaba.instrumentationbackend.actions.text;
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import sh.calaba.instrumentationbackend.InstrumentationBackend;
|
|
5
|
-
import sh.calaba.instrumentationbackend.Result;
|
|
6
|
-
import sh.calaba.instrumentationbackend.actions.Action;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
public class ClickOnText implements Action {
|
|
10
|
-
|
|
11
|
-
@Override
|
|
12
|
-
public Result execute(String... args) {
|
|
13
|
-
InstrumentationBackend.solo.clickOnText(args[0]);
|
|
14
|
-
return Result.successResult();
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
@Override
|
|
18
|
-
public String key() {
|
|
19
|
-
return "click_on_text";
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
package sh.calaba.instrumentationbackend.actions.text;
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import sh.calaba.instrumentationbackend.InstrumentationBackend;
|
|
5
|
-
import sh.calaba.instrumentationbackend.Result;
|
|
6
|
-
import sh.calaba.instrumentationbackend.TestHelpers;
|
|
7
|
-
import sh.calaba.instrumentationbackend.actions.Action;
|
|
8
|
-
import android.view.View;
|
|
9
|
-
import android.widget.EditText;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
public class EnterTextByContentDescription implements Action {
|
|
13
|
-
|
|
14
|
-
@Override
|
|
15
|
-
public Result execute(String... args) {
|
|
16
|
-
View view = TestHelpers.getTextViewByDescription(args[1]);
|
|
17
|
-
if(view == null) {
|
|
18
|
-
return new Result(false, "No view found with content description: '" + args[1] + "'");
|
|
19
|
-
} else if (!(view instanceof EditText)) {
|
|
20
|
-
return new Result(false, "Expected EditText found: '" + view.getClass() + "'");
|
|
21
|
-
} else {
|
|
22
|
-
InstrumentationBackend.solo.enterText((EditText)view, args[0]);
|
|
23
|
-
return Result.successResult();
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
@Override
|
|
28
|
-
public String key() {
|
|
29
|
-
return "enter_text_into_named_field";
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
package sh.calaba.instrumentationbackend.actions.text;
|
|
2
|
-
|
|
3
|
-
import android.view.View;
|
|
4
|
-
import android.widget.EditText;
|
|
5
|
-
import sh.calaba.instrumentationbackend.InstrumentationBackend;
|
|
6
|
-
import sh.calaba.instrumentationbackend.Result;
|
|
7
|
-
import sh.calaba.instrumentationbackend.TestHelpers;
|
|
8
|
-
import sh.calaba.instrumentationbackend.actions.Action;
|
|
9
|
-
|
|
10
|
-
public class EnterTextById implements Action {
|
|
11
|
-
|
|
12
|
-
@Override
|
|
13
|
-
public Result execute(String... args) {
|
|
14
|
-
if(args[1] == null) {
|
|
15
|
-
return Result.failedResult("Input text cannot be null");
|
|
16
|
-
}
|
|
17
|
-
View view = TestHelpers.getViewById(args[1]);
|
|
18
|
-
if(view == null) {
|
|
19
|
-
return new Result(false, "No view found with id: '" + args[1] + "'");
|
|
20
|
-
} else if (!(view instanceof EditText)) {
|
|
21
|
-
return new Result(false, "Expected EditText found: '" + view.getClass() + "'");
|
|
22
|
-
} else {
|
|
23
|
-
InstrumentationBackend.solo.enterText((EditText)view, args[0]);
|
|
24
|
-
return Result.successResult();
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
@Override
|
|
29
|
-
public String key() {
|
|
30
|
-
return "enter_text_into_id_field";
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
package sh.calaba.instrumentationbackend.actions.text;
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import sh.calaba.instrumentationbackend.InstrumentationBackend;
|
|
5
|
-
import sh.calaba.instrumentationbackend.Result;
|
|
6
|
-
import sh.calaba.instrumentationbackend.actions.Action;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
public class EnterTextByIndex implements Action {
|
|
10
|
-
|
|
11
|
-
@Override
|
|
12
|
-
public Result execute(String... args) {
|
|
13
|
-
InstrumentationBackend.solo.enterText(Integer.parseInt(args[1]) - 1, args[0]);
|
|
14
|
-
return Result.successResult();
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
@Override
|
|
18
|
-
public String key() {
|
|
19
|
-
return "enter_text_into_numbered_field";
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
package sh.calaba.instrumentationbackend.actions.text;
|
|
2
|
-
|
|
3
|
-
import sh.calaba.instrumentationbackend.Result;
|
|
4
|
-
import sh.calaba.instrumentationbackend.TestHelpers;
|
|
5
|
-
import sh.calaba.instrumentationbackend.actions.Action;
|
|
6
|
-
import android.view.View;
|
|
7
|
-
import android.widget.TextView;
|
|
8
|
-
|
|
9
|
-
public class GetTextById implements Action {
|
|
10
|
-
|
|
11
|
-
@Override
|
|
12
|
-
public Result execute(String... args) {
|
|
13
|
-
String idArgument = args[0];
|
|
14
|
-
final View theView = TestHelpers.getViewById(idArgument);
|
|
15
|
-
|
|
16
|
-
if (null == theView) {
|
|
17
|
-
return notFoundResult(idArgument);
|
|
18
|
-
} else if (!(theView instanceof TextView)) {
|
|
19
|
-
return foundButNotATextViewResult(idArgument, theView);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
return new Result(true, textOf(theView));
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
@Override
|
|
26
|
-
public String key() {
|
|
27
|
-
return "get_text_by_id";
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
private String textOf(final View theView) {
|
|
31
|
-
return ((TextView)theView).getText().toString();
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
private Result foundButNotATextViewResult(String idArgument, final View theView) {
|
|
35
|
-
return Result.failedResult(String.format("Found View with id %s but it is a %s not a %s", idArgument, theView.getClass().getName(), TextView.class.getName()));
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
private Result notFoundResult(String idArgument) {
|
|
39
|
-
return Result.failedResult(String.format("View with id %s was not found.", idArgument));
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
}
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
package sh.calaba.instrumentationbackend.actions.view;
|
|
2
|
-
|
|
3
|
-
import java.lang.reflect.InvocationTargetException;
|
|
4
|
-
import java.lang.reflect.Method;
|
|
5
|
-
|
|
6
|
-
import android.graphics.Bitmap;
|
|
7
|
-
import android.graphics.drawable.BitmapDrawable;
|
|
8
|
-
import android.graphics.drawable.Drawable;
|
|
9
|
-
import android.graphics.drawable.DrawableContainer;
|
|
10
|
-
import android.util.Log;
|
|
11
|
-
import android.view.View;
|
|
12
|
-
import android.widget.TextView;
|
|
13
|
-
import sh.calaba.instrumentationbackend.Result;
|
|
14
|
-
import sh.calaba.instrumentationbackend.TestHelpers;
|
|
15
|
-
import sh.calaba.instrumentationbackend.actions.Action;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* eg: performAction( 'assert_view_property', 'my_view', 'visibility', 'visible' ) // or invisible/gone
|
|
20
|
-
* eg: performAction( 'assert_view_property', 'my_view', 'drawable', 'expected_id' )
|
|
21
|
-
* eg: performAction( 'assert_view_property', 'my_view', 'compoundDrawables', 'left', 'expected_id' )
|
|
22
|
-
*
|
|
23
|
-
* @author Nicholas Albion
|
|
24
|
-
*/
|
|
25
|
-
public class AssertViewProperty extends GetViewProperty implements Action {
|
|
26
|
-
private static final String TAG = "assert_view_property";
|
|
27
|
-
|
|
28
|
-
@Override
|
|
29
|
-
protected Result getPropertyValue( String propertyName, View view, String[] args ) throws NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
|
|
30
|
-
if( "compoundDrawables".equals(propertyName) ) {
|
|
31
|
-
if( view instanceof TextView ) {
|
|
32
|
-
// performAction( 'get_view_property', 'my_view', 'compoundDrawables', 'left', 'expected_id'
|
|
33
|
-
String expected_id = args[3];
|
|
34
|
-
int pos;
|
|
35
|
-
if( "top".equals(args[2]) ) {
|
|
36
|
-
pos = 1;
|
|
37
|
-
} else if( "right".equals(args[2]) ) {
|
|
38
|
-
pos = 2;
|
|
39
|
-
} else if( "bottom".equals(args[2]) ) {
|
|
40
|
-
pos = 3;
|
|
41
|
-
} else {
|
|
42
|
-
pos = 0;
|
|
43
|
-
}
|
|
44
|
-
Drawable[] drawables = ((TextView)view).getCompoundDrawables(); // [left, top, right, bottom]
|
|
45
|
-
Drawable actualDrawable = drawables[pos];
|
|
46
|
-
Drawable expectedDrawable = TestHelpers.getDrawableById(expected_id);
|
|
47
|
-
return assertSameDrawables( propertyName + ", " + args[2], expectedDrawable, actualDrawable );
|
|
48
|
-
} else {
|
|
49
|
-
throw new IllegalArgumentException("compoundDrawables is only supported for subclasses of TextView, not " + view.getClass().getName());
|
|
50
|
-
}
|
|
51
|
-
} else {
|
|
52
|
-
return super.getPropertyValue(propertyName, view, args);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* @param propertyName
|
|
58
|
-
* @param propertyValue
|
|
59
|
-
* @param args
|
|
60
|
-
* @return successResult if <code>propertyValue</code> is equal to <code>args[2]</code>
|
|
61
|
-
* otherwise provides a descriptive message and the expected and actual values in the <code>bonusInformation</code>
|
|
62
|
-
*/
|
|
63
|
-
@Override
|
|
64
|
-
protected Result processProperty( String propertyName, Object propertyValue, String[] args ) {
|
|
65
|
-
String expected = args[2];
|
|
66
|
-
String value;
|
|
67
|
-
if( propertyValue == null ) {
|
|
68
|
-
if( expected == null || "null".equals(expected) ) {
|
|
69
|
-
return Result.successResult();
|
|
70
|
-
}
|
|
71
|
-
value = "null";
|
|
72
|
-
} else if( "drawable".equals(propertyName) ) {
|
|
73
|
-
Drawable actualDrawable = (Drawable)propertyValue; // ((ImageButton)view).getDrawable();
|
|
74
|
-
if( actualDrawable instanceof DrawableContainer ) {
|
|
75
|
-
actualDrawable = ((DrawableContainer)actualDrawable).getCurrent();
|
|
76
|
-
}
|
|
77
|
-
Drawable expectedDrawable = TestHelpers.getDrawableById(expected);
|
|
78
|
-
return assertSameDrawables( propertyName, expectedDrawable, actualDrawable );
|
|
79
|
-
} else {
|
|
80
|
-
value = propertyValue.toString();
|
|
81
|
-
if( value.equals(expected) ) {
|
|
82
|
-
return Result.successResult();
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
Result result = new Result(false, "For " + propertyName + " expected " + expected + " but was actually " + value);
|
|
86
|
-
result.addBonusInformation( expected );
|
|
87
|
-
result.addBonusInformation( value );
|
|
88
|
-
return result;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
private Result assertSameDrawables( String propertyName, Drawable expectedDrawable, Drawable actualDrawable ) {
|
|
92
|
-
if( sameDrawables( expectedDrawable, actualDrawable) ) {
|
|
93
|
-
return Result.successResult();
|
|
94
|
-
} else {
|
|
95
|
-
Result result = new Result(false, "For " + propertyName + " expected " + expectedDrawable + " but was actually " + actualDrawable);
|
|
96
|
-
result.addBonusInformation( expectedDrawable == null ? "null" : expectedDrawable.toString() );
|
|
97
|
-
result.addBonusInformation( actualDrawable == null ? "null" : actualDrawable.toString() );
|
|
98
|
-
return result;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
private boolean sameDrawables( Drawable expected, Drawable actual ) {
|
|
103
|
-
if( expected.equals(actual) ) {
|
|
104
|
-
return true;
|
|
105
|
-
}
|
|
106
|
-
if( expected instanceof DrawableContainer ) {
|
|
107
|
-
expected = ((DrawableContainer)expected).getCurrent();
|
|
108
|
-
}
|
|
109
|
-
if( actual instanceof DrawableContainer ) {
|
|
110
|
-
actual = ((DrawableContainer)actual).getCurrent();
|
|
111
|
-
}
|
|
112
|
-
if( (expected instanceof BitmapDrawable) && (actual instanceof BitmapDrawable) ) {
|
|
113
|
-
Bitmap expectedBitmap = ((BitmapDrawable)expected).getBitmap();
|
|
114
|
-
Bitmap actualBitmap = ((BitmapDrawable)actual).getBitmap();
|
|
115
|
-
try {
|
|
116
|
-
// As pointed out by kbielenberg, Bitmap.sameAs() was only added in level 12/Android 3.1/Honeycomb MR1
|
|
117
|
-
Method sameAs = Bitmap.class.getMethod("sameAs", Bitmap.class);
|
|
118
|
-
return (Boolean)sameAs.invoke( expectedBitmap, actualBitmap );
|
|
119
|
-
} catch (Exception e) {
|
|
120
|
-
if( expectedBitmap.getWidth() != actualBitmap.getWidth() ) { return false; }
|
|
121
|
-
if( expectedBitmap.getHeight() != actualBitmap.getHeight() ) { return false; }
|
|
122
|
-
if( expectedBitmap.getConfig() != actualBitmap.getConfig() ) { return false; }
|
|
123
|
-
boolean bitmapsEqual = expectedBitmap.equals(actualBitmap);
|
|
124
|
-
if( !bitmapsEqual ) {
|
|
125
|
-
Log.i(TAG, "Bitmaps are not equal");
|
|
126
|
-
}
|
|
127
|
-
boolean drawablesEqual = expected.equals(actual);
|
|
128
|
-
if( !drawablesEqual ) {
|
|
129
|
-
Log.i(TAG, "Drawables are not equal");
|
|
130
|
-
}
|
|
131
|
-
return bitmapsEqual && drawablesEqual;
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
return false;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
@Override
|
|
138
|
-
public String key() {
|
|
139
|
-
return "assert_view_property";
|
|
140
|
-
}
|
|
141
|
-
}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
package sh.calaba.instrumentationbackend.actions.view;
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import sh.calaba.instrumentationbackend.InstrumentationBackend;
|
|
5
|
-
import sh.calaba.instrumentationbackend.Result;
|
|
6
|
-
import sh.calaba.instrumentationbackend.TestHelpers;
|
|
7
|
-
import sh.calaba.instrumentationbackend.actions.Action;
|
|
8
|
-
import android.view.View;
|
|
9
|
-
|
|
10
|
-
/*
|
|
11
|
-
* Warning: Unlike most other actions this action will allow you to click on views that are not visible.
|
|
12
|
-
*/
|
|
13
|
-
public class ClickOnViewByDescription implements Action {
|
|
14
|
-
|
|
15
|
-
@Override
|
|
16
|
-
public Result execute(String... args) {
|
|
17
|
-
final View view = TestHelpers.getViewByDescription(args[0]);
|
|
18
|
-
|
|
19
|
-
if(view == null) {
|
|
20
|
-
return new Result(false, "Could not find view with description: '" + args[0] + "'");
|
|
21
|
-
}
|
|
22
|
-
try {
|
|
23
|
-
System.out.println("Clicking on view: " + view.getClass());
|
|
24
|
-
InstrumentationBackend.solo.clickOnView(view);
|
|
25
|
-
return Result.successResult();
|
|
26
|
-
} catch(junit.framework.AssertionFailedError e) {
|
|
27
|
-
System.out.println("solo.clickOnView failed - using fallback");
|
|
28
|
-
if (view.isClickable()) {
|
|
29
|
-
InstrumentationBackend.solo.getCurrentActivity().runOnUiThread(new Runnable() {
|
|
30
|
-
public void run() {
|
|
31
|
-
view.performClick();
|
|
32
|
-
}
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
return Result.successResult();
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
@Override
|
|
40
|
-
public String key() {
|
|
41
|
-
return "click_on_view_by_description";
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
package sh.calaba.instrumentationbackend.actions.view;
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import sh.calaba.instrumentationbackend.InstrumentationBackend;
|
|
5
|
-
import sh.calaba.instrumentationbackend.Result;
|
|
6
|
-
import sh.calaba.instrumentationbackend.TestHelpers;
|
|
7
|
-
import sh.calaba.instrumentationbackend.actions.Action;
|
|
8
|
-
import android.view.View;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
/*
|
|
12
|
-
* Warning: Unlike most other actions this action will allow you to click on views that are not visible.
|
|
13
|
-
*/
|
|
14
|
-
public class ClickOnViewById implements Action {
|
|
15
|
-
|
|
16
|
-
@Override
|
|
17
|
-
public Result execute(String... args) {
|
|
18
|
-
final View view = TestHelpers.getViewById(args[0]);
|
|
19
|
-
|
|
20
|
-
if(view == null) {
|
|
21
|
-
return new Result(false, "Could not find view with id: '" + args[0] + "'");
|
|
22
|
-
}
|
|
23
|
-
try {
|
|
24
|
-
System.out.println("Clicking on view: " + view.getClass());
|
|
25
|
-
System.out.println(view.getLeft());
|
|
26
|
-
System.out.println(view.getTop());
|
|
27
|
-
System.out.println(view.getWidth());
|
|
28
|
-
System.out.println(view.getHeight());
|
|
29
|
-
int[] xy = new int[2];
|
|
30
|
-
|
|
31
|
-
view.getLocationOnScreen(xy);
|
|
32
|
-
System.out.println(xy[0]);
|
|
33
|
-
System.out.println(xy[1]);
|
|
34
|
-
|
|
35
|
-
InstrumentationBackend.solo.clickOnView(view);
|
|
36
|
-
} catch(junit.framework.AssertionFailedError e) {
|
|
37
|
-
System.out.println("solo.clickOnView failed - using fallback");
|
|
38
|
-
if (view.isClickable()) {
|
|
39
|
-
InstrumentationBackend.solo.getCurrentActivity().runOnUiThread(new Runnable() {
|
|
40
|
-
public void run() {
|
|
41
|
-
view.performClick();
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
return Result.successResult();
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
@Override
|
|
50
|
-
public String key() {
|
|
51
|
-
return "click_on_view_by_id";
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
package sh.calaba.instrumentationbackend.actions.view;
|
|
2
|
-
|
|
3
|
-
import java.lang.reflect.InvocationTargetException;
|
|
4
|
-
import java.lang.reflect.Method;
|
|
5
|
-
|
|
6
|
-
import sh.calaba.instrumentationbackend.Result;
|
|
7
|
-
import sh.calaba.instrumentationbackend.actions.Action;
|
|
8
|
-
import sh.calaba.instrumentationbackend.actions.wait.WaitForViewById;
|
|
9
|
-
import android.view.View;
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* eg: performAction( 'get_view_property', 'my_view', 'visibility') => visible, invisible or gone
|
|
13
|
-
*
|
|
14
|
-
* @see AssertViewProperty
|
|
15
|
-
* @author Nicholas Albion
|
|
16
|
-
*/
|
|
17
|
-
public class GetViewProperty extends WaitForViewById implements Action {
|
|
18
|
-
|
|
19
|
-
@Override
|
|
20
|
-
public Result execute(String... args) {
|
|
21
|
-
String viewId = args[0];
|
|
22
|
-
|
|
23
|
-
try {
|
|
24
|
-
View view = getViewById(viewId, 60000);
|
|
25
|
-
if( view != null ) {
|
|
26
|
-
String propertyName = args[1];
|
|
27
|
-
return getPropertyValue(propertyName, view, args);
|
|
28
|
-
} else {
|
|
29
|
-
return new Result(false, "Timed out while waiting for view with id:'" + viewId + "'");
|
|
30
|
-
}
|
|
31
|
-
} catch( Exception e ) {
|
|
32
|
-
return Result.fromThrowable(e);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* @param propertyName
|
|
38
|
-
* @param view
|
|
39
|
-
* @param args - used by {@link AssertViewProperty#getPropertyValue}
|
|
40
|
-
* @return
|
|
41
|
-
* @throws NoSuchMethodException
|
|
42
|
-
* @throws IllegalArgumentException
|
|
43
|
-
* @throws IllegalAccessException
|
|
44
|
-
* @throws InvocationTargetException
|
|
45
|
-
*/
|
|
46
|
-
protected Result getPropertyValue( String propertyName, View view, String[] args ) throws NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
|
|
47
|
-
if( "visibility".equals(propertyName) ) {
|
|
48
|
-
String value;
|
|
49
|
-
|
|
50
|
-
switch( view.getVisibility() ) {
|
|
51
|
-
case View.VISIBLE:
|
|
52
|
-
value = "visible";
|
|
53
|
-
break;
|
|
54
|
-
case View.INVISIBLE:
|
|
55
|
-
value = "invisible";
|
|
56
|
-
break;
|
|
57
|
-
case View.GONE:
|
|
58
|
-
value = "gone";
|
|
59
|
-
break;
|
|
60
|
-
default:
|
|
61
|
-
value = Integer.toString(view.getVisibility());
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
return new Result( true, value );
|
|
65
|
-
} else {
|
|
66
|
-
// resort to reflection
|
|
67
|
-
Class<? extends View> clazz = view.getClass();
|
|
68
|
-
Method method = null;
|
|
69
|
-
try {
|
|
70
|
-
String methodName = propertyName;
|
|
71
|
-
method = clazz.getMethod( methodName );
|
|
72
|
-
} catch( NoSuchMethodException e ) {
|
|
73
|
-
try {
|
|
74
|
-
String methodName = "get" + Character.toUpperCase(propertyName.charAt(0)) + propertyName.substring(1);
|
|
75
|
-
method = clazz.getMethod( methodName );
|
|
76
|
-
} catch( NoSuchMethodException e2 ) {
|
|
77
|
-
String methodName = "is" + Character.toUpperCase(propertyName.charAt(0)) + propertyName.substring(1);
|
|
78
|
-
method = clazz.getMethod( methodName );
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
Object valueObj = method.invoke(view);
|
|
82
|
-
return processProperty( propertyName, valueObj, args );
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* @param propertyName
|
|
88
|
-
* @param propertyValue
|
|
89
|
-
* @param args - used by {@link AssertViewProperty#getPropertyValue}
|
|
90
|
-
* @return a successful result with the requested property as the <code>message</code> field
|
|
91
|
-
*/
|
|
92
|
-
protected Result processProperty( String propertyName, Object propertyValue, String[] args ) {
|
|
93
|
-
String message = (propertyValue == null) ? "null" : propertyValue.toString();
|
|
94
|
-
return new Result( true, message );
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
@Override
|
|
98
|
-
public String key() {
|
|
99
|
-
return "get_view_property";
|
|
100
|
-
}
|
|
101
|
-
}
|