calabash-android 0.4.0.pre6 → 0.4.0.pre7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. data/bin/calabash-android +7 -0
  2. data/bin/calabash-android-build.rb +1 -1
  3. data/bin/calabash-android-console.rb +1 -1
  4. data/bin/calabash-android-run.rb +1 -1
  5. data/calabash-android.gemspec +1 -0
  6. data/irbrc +2 -0
  7. data/lib/calabash-android/helpers.rb +4 -2
  8. data/lib/calabash-android/lib/TestServer.apk +0 -0
  9. data/lib/calabash-android/operations.rb +31 -22
  10. data/lib/calabash-android/version.rb +1 -1
  11. data/test-server/instrumentation-backend/.classpath +0 -1
  12. data/test-server/instrumentation-backend/antlr/UIQuery.g +11 -2
  13. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/Command.java +4 -3
  14. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/FranklyResult.java +95 -0
  15. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/Result.java +7 -1
  16. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/HttpServer.java +15 -23
  17. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/location/FakeGPSLocation.java +13 -10
  18. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/CalabashChromeClient.java +136 -36
  19. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/DumpBodyHtml.java +38 -18
  20. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/DumpHtml.java +38 -16
  21. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/EnterTextByCssSelector.java +94 -66
  22. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/ExecuteAsyncJavascript.java +55 -33
  23. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/ExecuteJavascript.java +54 -31
  24. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/JavaScriptOperation.java +44 -0
  25. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/PressByCssSelector.java +52 -27
  26. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/QueryHelper.java +39 -32
  27. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/ScrollTo.java +56 -41
  28. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/SetPropertyByCssSelector.java +50 -25
  29. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/SetText.java +19 -22
  30. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/CompletedFuture.java +40 -0
  31. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/InvocationOperation.java +201 -0
  32. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/Operation.java +7 -0
  33. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/PropertyOperation.java +56 -0
  34. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/Query.java +144 -72
  35. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/UIQuery.tokens +15 -12
  36. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/UIQueryResultVoid.java +22 -0
  37. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ViewMapper.java +38 -11
  38. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/antlr/UIQueryLexer.java +226 -109
  39. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/antlr/UIQueryParser.java +237 -84
  40. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/PartialFutureList.java +100 -0
  41. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryAST.java +1 -1
  42. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryASTClassName.java +26 -22
  43. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryASTWith.java +170 -102
  44. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryEvaluator.java +54 -155
  45. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryUtils.java +97 -2
  46. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryVisibility.java +32 -0
  47. metadata +27 -5
  48. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/Query.java +0 -24
  49. data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/Touch.java +0 -44
  50. data/test-server/instrumentation-backend/tests/sh/calaba/instrumentationbackend/query/tests/UIQueryTest.java +0 -134
@@ -1,137 +1,72 @@
1
1
  package sh.calaba.instrumentationbackend.query.ast;
2
2
 
3
- import java.io.IOException;
4
- import java.lang.reflect.Method;
5
3
  import java.util.ArrayList;
6
- import java.util.Collections;
7
- import java.util.HashMap;
8
4
  import java.util.List;
9
- import java.util.Map;
10
5
 
11
- import org.antlr.runtime.ANTLRStringStream;
12
- import org.antlr.runtime.CommonTokenStream;
13
- import org.antlr.runtime.RecognitionException;
14
- import org.antlr.runtime.tree.CommonTree;
15
-
16
- import sh.calaba.instrumentationbackend.query.antlr.UIQueryLexer;
17
- import sh.calaba.instrumentationbackend.query.antlr.UIQueryParser;
18
- import sh.calaba.org.codehaus.jackson.map.ObjectMapper;
6
+ import sh.calaba.instrumentationbackend.query.Operation;
7
+ import sh.calaba.instrumentationbackend.query.UIQueryResultVoid;
8
+ import sh.calaba.instrumentationbackend.query.ViewMapper;
19
9
 
20
10
  public class UIQueryEvaluator {
21
-
22
- private static class UIQueryResultVoid {
23
- public static final UIQueryResultVoid instance = new UIQueryResultVoid();
11
+
12
+ @SuppressWarnings({ "rawtypes" })
13
+ public static List evaluateQueryWithOptions(List<UIQueryAST> query, List inputViews,
14
+ List<Operation> operations) {
24
15
 
25
- private UIQueryResultVoid() {}
26
-
27
- @SuppressWarnings({ "rawtypes", "unchecked" })
28
- public String asJSON(String methodName, Object receiver) {
29
- ObjectMapper mapper = new ObjectMapper();
16
+ long before = System.currentTimeMillis();
17
+
18
+ List views = evaluateQueryForPath(query, inputViews);
19
+
20
+ long after = System.currentTimeMillis();
21
+ String action = "EvaluateQuery";
22
+ System.out.println(action+ " took: "+ (after-before) + "ms");
23
+
24
+ before = System.currentTimeMillis();
25
+
26
+ List result = applyOperations(views, operations);
27
+
28
+ after = System.currentTimeMillis();
29
+ action = "ApplyOperations";
30
+ System.out.println(action+ " took: "+ (after-before) + "ms");
30
31
 
31
- try {
32
- Map map = new HashMap();
33
- map.put("error","Unable to invoke method");
34
- map.put("methodName",methodName);
35
- map.put("receiverClass", receiver.getClass().getName());
36
- map.put("receiverString",receiver.toString());
37
- return mapper.writeValueAsString(map);
38
- } catch (IOException e) {
39
- throw new RuntimeException("Could not convert result to json",e);
40
- }
41
- }
32
+ before = System.currentTimeMillis();
33
+
34
+ List finalResult = mapViews(result);
35
+
36
+ after = System.currentTimeMillis();
37
+ action = "MapViews";
38
+ return finalResult;
39
+ }
42
40
 
43
- @SuppressWarnings({ "rawtypes", "unchecked" })
44
- public Object asJSON(String methodName, Object receiver,String errorMessage) {
45
- ObjectMapper mapper = new ObjectMapper();
46
41
 
47
- try {
48
- Map map = new HashMap();
49
- map.put("error",errorMessage);
50
- map.put("methodName",methodName);
51
- map.put("receiverClass", receiver.getClass().getName());
52
- map.put("receiverString",receiver.toString());
53
- return mapper.writeValueAsString(map);
54
- } catch (IOException e) {
55
- throw new RuntimeException("Could not convert result to json",e);
56
- }
42
+ @SuppressWarnings({ "unchecked", "rawtypes" })
43
+ public static List mapViews(List result) {
44
+ List finalResult = new ArrayList(result.size());
45
+ for (Object o : result) {
46
+ finalResult.add(ViewMapper.mapView(o));
57
47
  }
48
+ return finalResult;
58
49
  }
59
50
 
60
- @SuppressWarnings({ "rawtypes" })
61
- public static List evaluateQuery(String query, List inputViews) {
62
- return evaluateQueryForPath(parseQuery(query), inputViews);
63
- }
64
51
 
65
52
  @SuppressWarnings({ "rawtypes", "unchecked" })
66
- public static List evaluateQueryWithOptions(String query, List inputViews,
67
- List options) {
68
-
69
- long before = System.currentTimeMillis();
70
- List views = evaluateQueryForPath(parseQuery(query), inputViews);
71
- long after = System.currentTimeMillis();
72
- String action = "EvaluateQueryNoOptions";
73
- System.out.println(action+ " took: "+ (after-before) + "ms");
74
-
75
-
76
-
53
+ public static List applyOperations(List views, List<Operation> operations) {
77
54
  List result = views;
78
- for (Object methodNameObj : options) {
79
- String propertyName = (String) methodNameObj;
80
- List nextResult = new ArrayList(views.size());
81
- for (Object o : result) {
55
+ for(Operation op : operations) {
56
+ List nextResult = new ArrayList(result.size());
57
+ for (Object obj : result) {
82
58
  try {
83
-
84
- before = System.currentTimeMillis();
85
-
86
- Method m = UIQueryUtils.hasProperty(o, propertyName);
87
- after = System.currentTimeMillis();
88
- action = "HasProperty";
89
- System.out.println(action+ " took: "+ (after-before) + "ms");
90
-
91
-
92
- if (m != null) {
93
- nextResult.add(m.invoke(o));
94
- }
95
- else
96
- {
97
- nextResult.add(UIQueryResultVoid.instance.asJSON(propertyName,o,"NO accessor for "+propertyName));
98
- }
99
-
59
+ nextResult.add(op.apply(obj));
100
60
  } catch (Exception e) {
101
- System.out.println(e.getMessage());
102
- nextResult.add(UIQueryResultVoid.instance.asJSON(propertyName,o));
103
- }
61
+ e.printStackTrace();
62
+ nextResult.add(UIQueryResultVoid.instance.asMap(op.getName(), obj, e.getMessage()));
63
+ }
104
64
  }
105
65
  result = nextResult;
106
66
  }
107
67
  return result;
108
-
109
68
  }
110
69
 
111
- @SuppressWarnings("unchecked")
112
- public static List<UIQueryAST> parseQuery(String query) {
113
- UIQueryLexer lexer = new UIQueryLexer(new ANTLRStringStream(query));
114
- UIQueryParser parser = new UIQueryParser(new CommonTokenStream(lexer));
115
-
116
- UIQueryParser.query_return q;
117
- try {
118
- q = parser.query();
119
- } catch (RecognitionException e) {
120
- // TODO Auto-generated catch block
121
- throw new InvalidUIQueryException(e.getMessage());
122
- }
123
- if (q == null) {
124
- throw new InvalidUIQueryException(query);
125
- }
126
- CommonTree rootNode = (CommonTree) q.getTree();
127
- List<CommonTree> queryPath = rootNode.getChildren();
128
-
129
- if (queryPath == null || queryPath.isEmpty()) {
130
- queryPath = Collections.singletonList(rootNode);
131
- }
132
-
133
- return mapUIQueryFromAstNodes(queryPath);
134
- }
135
70
 
136
71
  @SuppressWarnings("rawtypes")
137
72
  private static List evaluateQueryForPath(List<UIQueryAST> queryPath,
@@ -139,26 +74,23 @@ public class UIQueryEvaluator {
139
74
 
140
75
  List currentResult = inputViews;
141
76
  UIQueryDirection currentDirection = UIQueryDirection.DESCENDANT;
77
+ UIQueryVisibility currentVisibility = UIQueryVisibility.VISIBLE;
78
+
142
79
  for (UIQueryAST step : queryPath) {
143
80
  if (isDirection(step)) {
144
81
  currentDirection = directionFromAst(step);
145
- } else {
146
- System.out.println(step);
147
- long before = System.currentTimeMillis();
148
-
149
-
150
- currentResult = step.evaluateWithViewsAndDirection(
151
- currentResult, currentDirection);
152
- long after = System.currentTimeMillis();
153
- String action = "EvaluateQueryNoOptions" + step.toString();
154
- System.out.println(action+ " took: "+ (after-before) + "ms");
155
-
82
+ }
83
+ else if (step instanceof UIQueryVisibility) {
84
+ currentVisibility = (UIQueryVisibility) step;
85
+ }
86
+ else {
87
+ currentResult = step.evaluateWithViews(currentResult, currentDirection,currentVisibility);
156
88
  }
157
89
 
158
90
  }
159
91
  return currentResult;
160
92
  }
161
-
93
+
162
94
  public static UIQueryDirection directionFromAst(UIQueryAST step) {
163
95
  // TODO Auto-generated method stub
164
96
  return null;
@@ -168,38 +100,5 @@ public class UIQueryEvaluator {
168
100
  // TODO Auto-generated method stub
169
101
  return false;
170
102
  }
171
-
172
- public static List<UIQueryAST> mapUIQueryFromAstNodes(List<CommonTree> nodes) {
173
- List<UIQueryAST> mapped = new ArrayList<UIQueryAST>(nodes.size());
174
- for (CommonTree t : nodes) {
175
- mapped.add(uiQueryFromAst(t));
176
- }
177
- return mapped;
178
- }
179
-
180
- public static UIQueryAST uiQueryFromAst(CommonTree step) {
181
- String stepType = UIQueryParser.tokenNames[step.getType()];
182
- switch (step.getType()) {
183
- case UIQueryParser.QUALIFIED_NAME:
184
- try {
185
- return new UIQueryASTClassName(Class.forName(step.getText()));
186
- } catch (ClassNotFoundException e) {
187
- // TODO Auto-generated catch block
188
- throw new InvalidUIQueryException("Qualified class name: "
189
- + step.getText() + " not found. (" + e.getMessage()
190
- + ")");
191
- }
192
- case UIQueryParser.NAME:
193
- return new UIQueryASTClassName(step.getText());
194
-
195
- case UIQueryParser.FILTER_COLON:
196
- return UIQueryASTWith.fromAST(step);
197
- default:
198
- throw new InvalidUIQueryException("Unknown query: " + stepType
199
- + " with text: " + step.getText());
200
-
201
- }
202
-
203
- }
204
-
103
+
205
104
  }
@@ -1,12 +1,27 @@
1
1
  package sh.calaba.instrumentationbackend.query.ast;
2
2
 
3
+ import static sh.calaba.instrumentationbackend.InstrumentationBackend.viewFetcher;
4
+
3
5
  import java.lang.reflect.InvocationTargetException;
4
6
  import java.lang.reflect.Method;
5
7
  import java.util.ArrayList;
6
8
  import java.util.Collections;
9
+ import java.util.HashMap;
7
10
  import java.util.List;
11
+ import java.util.Map;
12
+ import java.util.concurrent.Callable;
13
+ import java.util.concurrent.Future;
14
+ import java.util.concurrent.TimeUnit;
15
+ import java.util.concurrent.atomic.AtomicReference;
8
16
 
17
+ import sh.calaba.instrumentationbackend.InstrumentationBackend;
18
+ import sh.calaba.instrumentationbackend.actions.webview.QueryHelper;
19
+ import sh.calaba.instrumentationbackend.query.CompletedFuture;
20
+ import sh.calaba.org.codehaus.jackson.map.ObjectMapper;
21
+ import sh.calaba.org.codehaus.jackson.type.TypeReference;
22
+ import android.content.res.Resources.NotFoundException;
9
23
  import android.view.View;
24
+ import android.webkit.WebView;
10
25
 
11
26
  public class UIQueryUtils {
12
27
  @SuppressWarnings({ "unchecked", "rawtypes" })
@@ -128,8 +143,88 @@ public class UIQueryUtils {
128
143
  }
129
144
 
130
145
  public static boolean isVisible(Object v) {
131
- if (!(v instanceof View)) { return true; }
132
- return ((View) v).isShown();
146
+ if (!(v instanceof View)) { return true; }
147
+ View view = (View) v;
148
+ return view.isShown() && viewFetcher.isViewSufficientlyShown(view);
133
149
  }
150
+
151
+ public static String getId(View view) {
152
+ try {
153
+ return InstrumentationBackend.solo.getCurrentActivity()
154
+ .getResources().getResourceEntryName(view.getId());
134
155
 
156
+ }
157
+ catch (NotFoundException e) {}
158
+ return null;
159
+ }
160
+
161
+ @SuppressWarnings("rawtypes")
162
+ public static Future evaluateAsyncInMainThread(final Callable callable) throws Exception {
163
+ final AtomicReference<Future> result = new AtomicReference<Future>();
164
+ final AtomicReference<Exception> errorResult = new AtomicReference<Exception>();
165
+
166
+ InstrumentationBackend.instrumentation.runOnMainSync(new Runnable() {
167
+ @SuppressWarnings("unchecked")
168
+ public void run() {
169
+ try {
170
+ Object res = callable.call();
171
+ if (res instanceof Future) {
172
+ result.set((Future) res);
173
+ }
174
+ else {
175
+ result.set(new CompletedFuture(res));
176
+ }
177
+ } catch (Exception e) {
178
+ errorResult.set(e);
179
+ }
180
+ }
181
+ });
182
+ if (result.get() == null) {
183
+ throw errorResult.get();
184
+ }
185
+ return result.get();
186
+ }
187
+
188
+ @SuppressWarnings("rawtypes")
189
+ public static Object evaluateSyncInMainThread(Callable callable) {
190
+ try {
191
+ return evaluateAsyncInMainThread(callable).get(10, TimeUnit.SECONDS);
192
+ } catch (RuntimeException e) {
193
+ throw e;
194
+ }
195
+ catch (Exception e) {
196
+ e.printStackTrace();
197
+ throw new RuntimeException(e);
198
+ }
199
+ }
200
+
201
+ @SuppressWarnings({ "unchecked", "rawtypes" })
202
+ public static List<Map<String, Object>> mapWebViewJsonResponse(final String jsonResponse, final WebView webView) {
203
+ return (List<Map<String, Object>>) evaluateSyncInMainThread(new Callable() {
204
+
205
+ @Override
206
+ public Object call() throws Exception {
207
+ List<Map<String, Object>> parsedResult;
208
+ try {
209
+ parsedResult = new ObjectMapper()
210
+ .readValue(
211
+ jsonResponse,
212
+ new TypeReference<List<HashMap<String, Object>>>() {
213
+ });
214
+ for (Map<String,Object> data : parsedResult) {
215
+ Map<String,Object> rect = (Map<String, Object>) data.get("rect");
216
+ Map <String,Object> updatedRect = QueryHelper.translateRectToScreenCoordinates(webView, rect);
217
+ data.put("rect", updatedRect);
218
+ data.put("webView", webView);
219
+ }
220
+ return parsedResult;
221
+ } catch (Exception e) {
222
+ e.printStackTrace();
223
+ throw new RuntimeException(e);
224
+ }
225
+ }
226
+ });
227
+
228
+ }
229
+
135
230
  }
@@ -0,0 +1,32 @@
1
+ package sh.calaba.instrumentationbackend.query.ast;
2
+
3
+ import java.util.ArrayList;
4
+ import java.util.List;
5
+
6
+ public enum UIQueryVisibility implements UIQueryAST {
7
+ ALL {
8
+ @Override
9
+ @SuppressWarnings("rawtypes")
10
+ public List evaluateWithViews(List inputViews,
11
+ UIQueryDirection direction, UIQueryVisibility self) {
12
+ return inputViews;
13
+ }
14
+ },
15
+
16
+
17
+ VISIBLE {
18
+ @Override
19
+ @SuppressWarnings({ "rawtypes", "unchecked" })
20
+ public List evaluateWithViews(List inputViews,
21
+ UIQueryDirection direction, UIQueryVisibility self) {
22
+ List filtered = new ArrayList(inputViews.size());
23
+ for (Object o : inputViews) {
24
+ if (UIQueryUtils.isVisible(o)) {
25
+ filtered.add(o);
26
+ }
27
+ }
28
+ return filtered;
29
+ }
30
+ };
31
+
32
+ }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: calabash-android
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0.pre6
4
+ version: 0.4.0.pre7
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-27 00:00:00.000000000 Z
12
+ date: 2013-01-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: cucumber
@@ -91,6 +91,22 @@ dependencies:
91
91
  - - ! '>='
92
92
  - !ruby/object:Gem::Version
93
93
  version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: awesome_print
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :runtime
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
94
110
  description: ! 'calabash-android drives tests for native and hybrid Android apps. '
95
111
  email:
96
112
  - jonas@lesspainful.com
@@ -266,6 +282,7 @@ files:
266
282
  - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/CalabashInstrumentationTestRunner.java
267
283
  - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/ClearAppData.java
268
284
  - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/Command.java
285
+ - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/FranklyResult.java
269
286
  - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/InstrumentationBackend.java
270
287
  - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/Result.java
271
288
  - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/TestHelpers.java
@@ -363,26 +380,32 @@ files:
363
380
  - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/ExecuteJavascript.java
364
381
  - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/GetLoadProgress.java
365
382
  - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/GetUrl.java
383
+ - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/JavaScriptOperation.java
366
384
  - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/PressByCssSelector.java
367
- - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/Query.java
368
385
  - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/QueryHelper.java
369
386
  - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/ScrollTo.java
370
387
  - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/SetPropertyByCssSelector.java
371
388
  - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/SetText.java
372
- - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/webview/Touch.java
389
+ - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/CompletedFuture.java
390
+ - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/InvocationOperation.java
391
+ - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/Operation.java
392
+ - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/PropertyOperation.java
373
393
  - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/Query.java
374
394
  - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/QueryResult.java
375
395
  - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/UIQuery.tokens
396
+ - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/UIQueryResultVoid.java
376
397
  - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ViewMapper.java
377
398
  - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/antlr/UIQueryLexer.java
378
399
  - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/antlr/UIQueryParser.java
379
400
  - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/InvalidUIQueryException.java
401
+ - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/PartialFutureList.java
380
402
  - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryAST.java
381
403
  - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryASTClassName.java
382
404
  - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryASTWith.java
383
405
  - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryDirection.java
384
406
  - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryEvaluator.java
385
407
  - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryUtils.java
408
+ - test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/UIQueryVisibility.java
386
409
  - test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/Base64Variant.java
387
410
  - test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/Base64Variants.java
388
411
  - test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/FormatSchema.java
@@ -789,7 +812,6 @@ files:
789
812
  - test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/TokenBuffer.java
790
813
  - test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/VersionUtil.java
791
814
  - test-server/instrumentation-backend/src/sh/calaba/org/codehaus/jackson/util/package-info.java
792
- - test-server/instrumentation-backend/tests/sh/calaba/instrumentationbackend/query/tests/UIQueryTest.java
793
815
  - test-server/calabash-js/src/calabash.js
794
816
  - test-server/calabash-js/src/set_text.js
795
817
  - lib/calabash-android/lib/TestServer.apk