calabash-android 0.4.22.pre4 → 0.5.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (93) hide show
  1. checksums.yaml +4 -4
  2. data/bin/calabash-android +66 -45
  3. data/lib/calabash-android/calabash_steps.rb +0 -8
  4. data/lib/calabash-android/canned_steps.md +2 -30
  5. data/lib/calabash-android/lib/TestServer.apk +0 -0
  6. data/lib/calabash-android/operations.rb +199 -23
  7. data/lib/calabash-android/removed_actions.txt +52 -0
  8. data/lib/calabash-android/steps/assert_steps.rb +9 -24
  9. data/lib/calabash-android/steps/check_box_steps.rb +2 -2
  10. data/lib/calabash-android/steps/context_menu_steps.rb +11 -4
  11. data/lib/calabash-android/steps/date_picker_steps.rb +2 -2
  12. data/lib/calabash-android/steps/enter_text_steps.rb +13 -13
  13. data/lib/calabash-android/steps/l10n_steps.rb +5 -5
  14. data/lib/calabash-android/steps/map_steps.rb +12 -12
  15. data/lib/calabash-android/steps/navigation_steps.rb +12 -12
  16. data/lib/calabash-android/steps/press_button_steps.rb +16 -12
  17. data/lib/calabash-android/steps/progress_steps.rb +19 -22
  18. data/lib/calabash-android/steps/search_steps.rb +2 -2
  19. data/lib/calabash-android/steps/spinner_steps.rb +10 -2
  20. data/lib/calabash-android/steps/time_picker_steps.rb +2 -2
  21. data/lib/calabash-android/version.rb +1 -1
  22. data/lib/calabash-android/wait_helpers.rb +29 -1
  23. data/test-server/instrumentation-backend/antlr/UIQuery.g +11 -11
  24. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/CalabashInstrumentationTestRunner.java +3 -2
  25. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/InstrumentationBackend.java +9 -4
  26. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/Result.java +16 -12
  27. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/application/Backdoor.java +55 -0
  28. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/gestures/LongPressCoordinate.java +19 -2
  29. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/JavaScriptExecuter.java +105 -0
  30. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/QueryHelper.java +27 -30
  31. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ViewMapper.java +27 -18
  32. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/ComparisonOperator.java +7 -1
  33. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryASTPredicate.java +16 -4
  34. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryASTWith.java +13 -6
  35. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryUtils.java +94 -48
  36. metadata +5 -59
  37. data/lib/calabash-android/steps/additions_manual_steps.rb +0 -11
  38. data/lib/calabash-android/steps/app_steps.rb +0 -10
  39. data/lib/calabash-android/steps/list_steps.rb +0 -41
  40. data/lib/calabash-android/steps/rotation_steps.rb +0 -7
  41. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/button/PressButtonNumber.java +0 -22
  42. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/button/PressButtonText.java +0 -27
  43. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/button/PressImageButtonDescription.java +0 -39
  44. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/button/PressImageButtonNumber.java +0 -22
  45. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/button/WaitForButton.java +0 -47
  46. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/checkbox/ToggleCheckboxNumber.java +0 -22
  47. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/contextmenu/LongPressText.java +0 -22
  48. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/contextmenu/LongPressTextAndSelectFromMenuById.java +0 -26
  49. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/contextmenu/LongPressTextAndSelectFromMenuByIndex.java +0 -22
  50. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/contextmenu/LongPressTextAndSelectFromMenuByText.java +0 -26
  51. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/helpers/InspectCurrentDialog.java +0 -76
  52. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/list/GetListData.java +0 -85
  53. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/list/GetListItemProperties.java +0 -194
  54. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/list/GetListItemText.java +0 -136
  55. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/list/LongPressListItems.java +0 -22
  56. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/list/PressListItems.java +0 -22
  57. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/scrolling/ScrollDown.java +0 -22
  58. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/scrolling/ScrollUp.java +0 -22
  59. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/search/EnterQueryByIndex.java +0 -29
  60. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/softkey/SelectFromMenuByText.java +0 -24
  61. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/spinner/GetSelectedSpinnerItemText.java +0 -36
  62. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/spinner/SelectSpinnerItemByContentDescription.java +0 -43
  63. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/AssertGridViewContainsNoDuplicates.java +0 -72
  64. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/AssertText.java +0 -31
  65. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/AssertTextOfSpecificTextViewByContentDescription.java +0 -32
  66. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/ClearTextById.java +0 -30
  67. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/ClearTextByIndex.java +0 -22
  68. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/ClearTextFieldByContentDescription.java +0 -33
  69. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/ClickOnText.java +0 -22
  70. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/EnterTextByContentDescription.java +0 -32
  71. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/EnterTextById.java +0 -33
  72. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/EnterTextByIndex.java +0 -22
  73. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/text/GetTextById.java +0 -42
  74. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/AssertViewProperty.java +0 -141
  75. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/ClickOnViewByDescription.java +0 -46
  76. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/ClickOnViewById.java +0 -56
  77. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/GetViewProperty.java +0 -101
  78. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/HasView.java +0 -31
  79. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/IsEnabled.java +0 -30
  80. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/LongPressOnViewById.java +0 -34
  81. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/Press.java +0 -89
  82. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/view/SelectTab.java +0 -110
  83. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/Wait.java +0 -24
  84. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForDialogClose.java +0 -21
  85. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForProgress.java +0 -47
  86. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForScreen.java +0 -54
  87. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForTab.java +0 -108
  88. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForText.java +0 -37
  89. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForView.java +0 -43
  90. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/wait/WaitForViewById.java +0 -58
  91. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/JavaScriptOperation.java +0 -44
  92. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/PressByCssSelector.java +0 -70
  93. 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.contextmenu;
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 LongPressTextAndSelectFromMenuByIndex implements Action {
10
-
11
- @Override
12
- public Result execute(String... args) {
13
- InstrumentationBackend.solo.clickLongOnTextAndPress(args[0], Integer.parseInt(args[1]) - 1);
14
- return Result.successResult();
15
- }
16
-
17
- @Override
18
- public String key() {
19
- return "press_long_on_text_and_select_with_index";
20
- }
21
-
22
- }
@@ -1,26 +0,0 @@
1
- package sh.calaba.instrumentationbackend.actions.contextmenu;
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
-
9
-
10
- public class LongPressTextAndSelectFromMenuByText implements Action {
11
-
12
- @Override
13
- public Result execute(String... args) {
14
-
15
- InstrumentationBackend.solo.clickLongOnText(args[0]);
16
- TestHelpers.wait(1);
17
- InstrumentationBackend.solo.clickOnText(args[1]);
18
- return Result.successResult();
19
- }
20
-
21
- @Override
22
- public String key() {
23
- return "press_long_on_text_and_select_with_text";
24
- }
25
-
26
- }
@@ -1,76 +0,0 @@
1
- package sh.calaba.instrumentationbackend.actions.helpers;
2
-
3
-
4
- import sh.calaba.instrumentationbackend.InstrumentationBackend;
5
- import sh.calaba.instrumentationbackend.Result;
6
- import sh.calaba.instrumentationbackend.actions.Action;
7
- import android.view.View;
8
- import android.widget.Button;
9
- import android.widget.EditText;
10
- import android.widget.FrameLayout;
11
- import android.widget.LinearLayout;
12
- import android.widget.RelativeLayout;
13
- import android.widget.ScrollView;
14
- import android.widget.Spinner;
15
- import android.widget.TextView;
16
-
17
- import com.jayway.android.robotium.solo.Solo;
18
-
19
- /**
20
- * Command is inspecting the current dialog and returns a list of details about the current
21
- * displayed UI items.
22
- *
23
- * @author Dominik Dary
24
- *
25
- */
26
- public class InspectCurrentDialog implements Action {
27
-
28
- @Override
29
- public Result execute(String... args) {
30
- Solo solo = InstrumentationBackend.solo;
31
- StringBuffer viewInfo = new StringBuffer();
32
- viewInfo.append("<views activity='" + solo.getCurrentActivity().getComponentName() + "'>");
33
- for (View view : solo.getViews()) {
34
- if ((view instanceof RelativeLayout) || (view instanceof LinearLayout)
35
- || (view instanceof ScrollView) || (view instanceof FrameLayout)) {
36
- // for automation are this ui elements normally not so interesting
37
- continue;
38
- }
39
- viewInfo.append("<view>");
40
- viewInfo.append("<type>" + view.getClass().getSimpleName() + "</type>");
41
-
42
- try {
43
- viewInfo.append("<name>"
44
- + InstrumentationBackend.solo.getCurrentActivity().getResources()
45
- .getResourceName(view.getId()) + "</name>");
46
-
47
- } catch (Exception e) {
48
- // in case the resource name cannot be identified
49
- viewInfo.append("<name></name>");
50
- }
51
-
52
- if (view instanceof TextView) {
53
- viewInfo.append("<textViewText>" + ((TextView) view).getText() + "</textViewText>");
54
- } else if (view instanceof Button) {
55
- viewInfo.append("<buttonText>" + ((Button) view).getText() + "</buttonText>");
56
- } else if (view instanceof Spinner) {
57
- viewInfo.append("<spinnerText>" + ((Spinner) view).getSelectedItem() + "</spinnerText>");
58
- } else if (view instanceof EditText) {
59
- viewInfo.append("<editText>" + ((EditText) view).getText() + "</editText>");
60
- }
61
-
62
- viewInfo.append("</view>");
63
- }
64
-
65
- viewInfo.append("</views>");
66
- Result result = new Result(true);
67
- result.addBonusInformation(viewInfo.toString());
68
- return result;
69
- }
70
-
71
- @Override
72
- public String key() {
73
- return "inspect_current_dialog";
74
- }
75
-
76
- }
@@ -1,85 +0,0 @@
1
- package sh.calaba.instrumentationbackend.actions.list;
2
-
3
- import java.util.ArrayList;
4
-
5
- import sh.calaba.instrumentationbackend.InstrumentationBackend;
6
- import sh.calaba.instrumentationbackend.Result;
7
- import sh.calaba.instrumentationbackend.actions.Action;
8
- import android.widget.ListView;
9
-
10
- /**
11
- * Provides access to a list through its adapter.
12
- *
13
- * args:
14
- * <ul>
15
- * <li>1-based list index (first list is used if not specified)</li>
16
- * </ul>
17
- *
18
- * eg: (all items of the 1st list) <code>performAction( 'get_list_data' )</code>
19
- * eg: (all items of the 2nd list) <code>performAction( 'get_list_data', 2 )</code>
20
- *
21
- * @return <code>bonusInformation</code>: a JSON-formatted Array<String> that is an
22
- * Array of objects with a single property "value". The value of this property is generated by calling
23
- * <code>list.getAdapter().getItem().toString()</code>, so make sure you implement the toString() method
24
- * on the objects that go to the adapter AND that it returns a value valid for JSON.
25
- *
26
- * In ruby we can then parse the response:
27
- * <pre>
28
- * result = performAction('get_list_data')
29
- * bonusInfo = result['bonusInformation'][0]
30
- * JSON.parse(bonusInfo).each do |item|
31
- * puts "#{item["value"]}"
32
- * end
33
- * </pre>
34
- *
35
- * @author Juan Delgado (juan@ustwo.co.uk)
36
- */
37
-
38
- public class GetListData implements Action {
39
-
40
- @Override
41
- public Result execute(String... args) {
42
-
43
- int listIndex;
44
-
45
- if( args.length == 0 ) {
46
- listIndex = 0;
47
- } else {
48
- listIndex = (Integer.parseInt(args[0]) - 1);
49
- }
50
-
51
- ArrayList<ListView> listViews = InstrumentationBackend.solo.getCurrentViews(ListView.class);
52
-
53
- if( listViews == null || listViews.size() <= listIndex ) {
54
- return new Result(false, "Could not find list #" + (listIndex + 1));
55
- }
56
-
57
- ListView list = listViews.get(listIndex);
58
- Result result = new Result(true);
59
-
60
- StringBuilder json = new StringBuilder("[");
61
-
62
- int count = list.getAdapter().getCount();
63
- for( int i = 0; i < count; i++ ) {
64
- json.append("{\"value\": \"");
65
- json.append(list.getAdapter().getItem(i).toString());
66
- json.append("\"},");
67
- }
68
-
69
- if(count > 0)
70
- {
71
- json.deleteCharAt( json.length() - 1 ); // remove the last comma
72
- }
73
-
74
- json.append("]");
75
-
76
- result.addBonusInformation(json.toString());
77
-
78
- return result;
79
- }
80
-
81
- @Override
82
- public String key() {
83
- return "get_list_data";
84
- }
85
- }
@@ -1,194 +0,0 @@
1
- package sh.calaba.instrumentationbackend.actions.list;
2
-
3
- import java.lang.reflect.Method;
4
- import java.util.ArrayList;
5
-
6
- import sh.calaba.instrumentationbackend.InstrumentationBackend;
7
- import sh.calaba.instrumentationbackend.Result;
8
- import sh.calaba.instrumentationbackend.actions.Action;
9
- import android.graphics.drawable.ColorDrawable;
10
- import android.graphics.drawable.Drawable;
11
- import android.view.View;
12
- import android.view.ViewGroup;
13
- import android.widget.ListView;
14
- import android.widget.TableRow;
15
- import android.widget.TextView;
16
-
17
- /**
18
- * args:
19
- * <ul>
20
- * <li>1-based list index (first list is used if not specified)</li>
21
- * <li>1-based row index (returns all rows if &lt;=0 or not specified)</li>
22
- * </ul>
23
- *
24
- * eg: (all items of 1st list) <code>performAction( 'get_list_item_properties' )</code>
25
- * eg: (all items of 2nd list) <code>performAction( 'get_list_item_properties', '2' )</code>
26
- * eg: (1st item of 2nd list) <code>performAction( 'get_list_item_properties', '2' , '1' )</code>
27
- *
28
- * @return <code>bonusInformation</code> contain an array of Strings, one for each row in the list (or only for the specified row):
29
- * eg: {[{"id":"title", "text":"My Title", "compoundDrawables":["left"]}, {"id":"subtitle", "text":"Another text field for the same list item"}]}
30
- *
31
- *
32
- * In ruby, we can then parse the response:
33
- * <pre>
34
- * response_table = result['bonusInformation']
35
- * response_table.each_with_index do | row_data, index |
36
- * row_data = JSON.parse( row_data )
37
- * response_table[index] = row_data
38
- * end
39
- * </pre>
40
- *
41
- * @author Nicholas Albion
42
- */
43
- public class GetListItemProperties implements Action {
44
-
45
- @Override
46
- public Result execute(String... args) {
47
- int listIndex;
48
- int rowIndex = -1;
49
-
50
- if( args.length == 0 ) {
51
- listIndex = 0;
52
- } else {
53
- if( args.length > 1 ) {
54
- rowIndex = (Integer.parseInt(args[1]) - 1);
55
- }
56
- listIndex = (Integer.parseInt(args[0]) - 1);
57
- }
58
-
59
-
60
- ArrayList<ListView> listViews = InstrumentationBackend.solo.getCurrentViews(ListView.class);
61
- if( listViews == null || listViews.size() <= listIndex ) {
62
- return new Result(false, "Could not find list #" + (listIndex + 1));
63
- }
64
-
65
- ListView list = listViews.get(listIndex);
66
- Result result = new Result(true);
67
-
68
- if( rowIndex < 0 ) {
69
- int count = list.getChildCount();
70
- for( int i = 0; i < count; i++ ) {
71
- result.addBonusInformation( getListItemString( list.getChildAt(i) ) );
72
- }
73
- } else {
74
- result.addBonusInformation( getListItemString( list.getChildAt(rowIndex) ) );
75
- }
76
-
77
- return result;
78
- }
79
-
80
- /**
81
- * @return <code>bonusInformation</code> contain an array of Strings, one for each row in the list (or only for the specified row):
82
- * eg: {[{"id":"title", "text":"My Title", "compoundDrawables":{"left":"drawable_id"}}, {"id":"subtitle", "text":"Another text field for the same list item"}]}
83
- */
84
- private String getListItemString( View row ) {
85
- StringBuilder json = new StringBuilder("{");
86
-
87
- if( row instanceof TextView ) {
88
- addViewInfo( json, (TextView)row );
89
- } else if( row instanceof ViewGroup ) {
90
- addViewInfo( json, (ViewGroup)row );
91
- }
92
-
93
- json.append('}');
94
- return json.toString();
95
- }
96
-
97
- private void addViewInfo( StringBuilder json, TextView view ) {
98
- int resId = view.getId();
99
- String resIdName = view.getResources().getResourceEntryName(resId);
100
-
101
- json.append("\"id\":\"").append(resIdName).append("\", \"text\":\"").append( ((TextView)view).getText() ).append("\"");
102
-
103
- json.append(", \"color\":").append( view.getCurrentTextColor() );
104
- Drawable background = view.getBackground();
105
- if( background instanceof ColorDrawable ) {
106
- try {
107
- // As pointed out by kbielenberg, ColorDrawable.getColor() was only added in level 11/Android 3/Honeycomb
108
- Method getColor = ColorDrawable.class.getMethod("getColor");
109
- Integer color = (Integer)getColor.invoke(background);
110
- json.append(", \"background\":").append( color );
111
- } catch (Exception e) {}
112
- }
113
-
114
- StringBuilder compoundStr = new StringBuilder();
115
- Drawable[] compoundDrawables = view.getCompoundDrawables(); // left, top, right, and bottom
116
- if( compoundDrawables[0] != null ) {
117
- compoundStr.append("\"left\"");
118
- }
119
- if( compoundDrawables[1] != null ) {
120
- if( compoundStr.length() != 0 ) {
121
- compoundStr.append(',');
122
- }
123
- compoundStr.append("\"top\"");
124
- }
125
- if( compoundDrawables[2] != null ) {
126
- if( compoundStr.length() != 0 ) {
127
- compoundStr.append(',');
128
- }
129
- compoundStr.append("\"right\"");
130
- }
131
- if( compoundDrawables[3] != null ) {
132
- if( compoundStr.length() != 0 ) {
133
- compoundStr.append(',');
134
- }
135
- compoundStr.append("\"bottom\"");
136
- }
137
- if( compoundStr.length() != 0 ) {
138
- json.append(", \"compoundDrawables\":[").append(compoundStr).append(']');
139
- }
140
- }
141
-
142
- private void addViewInfo( StringBuilder json, TableRow tableRow ) {
143
- json.append("\"cells\":[");
144
-
145
- int count = tableRow.getVirtualChildCount();
146
- for( int i = 0; i < count; i++ ) {
147
- if( i != 0 ) {
148
- json.append(", ");
149
- }
150
- json.append("{\"column\":").append(i).append(", ");
151
-
152
- View view = tableRow.getVirtualChildAt(i);
153
- if( view instanceof TextView ) {
154
- addViewInfo( json, (TextView)view );
155
- } else if( view instanceof ViewGroup ) {
156
- addViewInfo( json, (ViewGroup)view );
157
- }
158
-
159
- json.append('}');
160
- }
161
-
162
- json.append(']');
163
- }
164
-
165
- private void addViewInfo( StringBuilder json, ViewGroup viewGroup ) {
166
- json.append("\"children\":[");
167
-
168
- int count = viewGroup.getChildCount();
169
- for( int i = 0; i < count; i++ ) {
170
- if( i != 0 ) {
171
- json.append(", ");
172
- }
173
- json.append('{');
174
-
175
- View view = viewGroup.getChildAt(i);
176
- if( view instanceof TextView ) {
177
- addViewInfo( json, (TextView)view );
178
- } else if( view instanceof TableRow ) {
179
- addViewInfo( json, (TableRow)view );
180
- } else if( view instanceof ViewGroup ) {
181
- addViewInfo( json, (ViewGroup)view );
182
- }
183
-
184
- json.append('}');
185
- }
186
-
187
- json.append(']');
188
- }
189
-
190
- @Override
191
- public String key() {
192
- return "get_list_item_properties";
193
- }
194
- }
@@ -1,136 +0,0 @@
1
- package sh.calaba.instrumentationbackend.actions.list;
2
-
3
- import java.util.ArrayList;
4
-
5
- import sh.calaba.instrumentationbackend.InstrumentationBackend;
6
- import sh.calaba.instrumentationbackend.Result;
7
- import sh.calaba.instrumentationbackend.actions.Action;
8
- import android.util.Log;
9
- import android.view.View;
10
- import android.view.ViewGroup;
11
- import android.widget.ListView;
12
- import android.widget.TableRow;
13
- import android.widget.TextView;
14
-
15
- /**
16
- * args:
17
- * <ul>
18
- * <li>1-based list index (first list is used if not specified)</li>
19
- * <li>1-based row index (returns all rows if &lt;=0 or not specified)</li>
20
- * </ul>
21
- *
22
- * eg: (all items of 1st list) <code>performAction( 'get_list_item_text' )</code>
23
- * eg: (all items of 2nd list) <code>performAction( 'get_list_item_text', '2' )</code>
24
- * eg: (1st item of 2nd list) <code>performAction( 'get_list_item_text', '2' , '1' )</code>
25
- *
26
- * @return <code>bonusInformation</code> contain an array of Strings, one for each row in the list (or only for the specified row):
27
- * eg: {"title":"My Title", "subtitle":"Another text field for the same list item"}
28
- *
29
- *
30
- * In ruby, we can then parse the response:
31
- * <pre>
32
- * response_table = result['bonusInformation']
33
- * response_table.each_with_index do | row_data, index |
34
- * row_data = JSON.parse( row_data )
35
- * response_table[index] = row_data
36
- * end
37
- * </pre>
38
- *
39
- * @author Nicholas Albion
40
- */
41
- public class GetListItemText implements Action {
42
-
43
- @Override
44
- public Result execute(String... args) {
45
- int listIndex;
46
- int rowIndex = -1;
47
-
48
- if( args.length == 0 ) {
49
- listIndex = 0;
50
- } else {
51
- if( args.length > 1 ) {
52
- rowIndex = (Integer.parseInt(args[1]) - 1);
53
- }
54
- listIndex = (Integer.parseInt(args[0]) - 1);
55
- }
56
-
57
-
58
- ArrayList<ListView> listViews = InstrumentationBackend.solo.getCurrentViews(ListView.class);
59
- Log.d("GetListItemText", "Found " + listViews.size() + " list views");
60
- if( listViews == null || listViews.size() <= listIndex ) {
61
- return new Result(false, "Could not find list #" + (listIndex + 1));
62
- }
63
-
64
- ListView list = listViews.get(listIndex);
65
- Result result = new Result(true);
66
-
67
- if( rowIndex < 0 ) {
68
- int count = list.getChildCount();
69
- Log.d("GetListItemText", "Found " + count + " list items");
70
- for( int i = 0; i < count; i++ ) {
71
- result.addBonusInformation( getListItemString( list.getChildAt(i) ) );
72
- }
73
- } else {
74
- result.addBonusInformation( getListItemString( list.getChildAt(rowIndex) ) );
75
- }
76
-
77
- return result;
78
- }
79
-
80
- /**
81
- * @return <code>bonusInformation</code> contain an array of Strings, one for each row in the list (or only for the specified row):
82
- * eg: {"title":"My Title", "subtitle":"Another text field for the same list item"}
83
- */
84
- private String getListItemString( View row ) {
85
- StringBuilder json = new StringBuilder("{");
86
-
87
- if( row instanceof TextView ) {
88
- addViewInfo( json, (TextView)row );
89
- } else if( row instanceof ViewGroup ) {
90
- addViewInfo( json, (ViewGroup)row );
91
- }
92
-
93
- json.deleteCharAt( json.length() - 1 ); // remove the last comma
94
- json.append('}');
95
- return json.toString();
96
- }
97
-
98
- private void addViewInfo( StringBuilder json, TextView view ) {
99
- int resId = view.getId();
100
- String resIdName = view.getResources().getResourceEntryName(resId);
101
-
102
- //json.append("\"id\":\"").append(resIdName).append("\", \"text:\"").append( ((TextView)row).getText() ).append("\"");
103
- json.append('"').append(resIdName).append("\":\"").append( ((TextView)view).getText() ).append("\",");
104
- }
105
-
106
- private void addViewInfo( StringBuilder json, TableRow tableRow ) {
107
- int count = tableRow.getVirtualChildCount();
108
- for( int i = 0; i < count; i++ ) {
109
- View view = tableRow.getVirtualChildAt(i);
110
- if( view instanceof TextView ) {
111
- addViewInfo( json, (TextView)view );
112
- } else if( view instanceof ViewGroup ) {
113
- addViewInfo( json, (ViewGroup)view );
114
- }
115
- }
116
- }
117
-
118
- private void addViewInfo( StringBuilder json, ViewGroup viewGroup ) {
119
- int count = viewGroup.getChildCount();
120
- for( int i = 0; i < count; i++ ) {
121
- View view = viewGroup.getChildAt(i);
122
- if( view instanceof TextView ) {
123
- addViewInfo( json, (TextView)view );
124
- } else if( view instanceof TableRow ) {
125
- addViewInfo( json, (TableRow)view );
126
- } else if( view instanceof ViewGroup ) {
127
- addViewInfo( json, (ViewGroup)view );
128
- }
129
- }
130
- }
131
-
132
- @Override
133
- public String key() {
134
- return "get_list_item_text";
135
- }
136
- }