calabash-android 0.4.19.pre1 → 0.4.19.pre2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fc390e245e5b9be8eb0ae9d5a6cb6cbe0a01a44d
4
- data.tar.gz: 533f881055f03da5ef544bb7fb9343715a4b7218
3
+ metadata.gz: 00ae1ecac8ab3e1399cda4706404382dff6a455b
4
+ data.tar.gz: b4670156a2737a79759ba4e855e0a6c30bd29ff1
5
5
  SHA512:
6
- metadata.gz: a4d48a41c066bf1842e1fa31c21ca61d389700d06776882c678428381125b2d97f1833b5ddfd5939b0690d6956f0619ce6de3f4ba4468bd899b8416e940ef0cb
7
- data.tar.gz: 2280fe20ead2d488704d0cd306cb03dbbf9dc596781ff6c259a3dac1bbf0fe855ddb7ab9d2fdaff0c129308cc01e4b01e2b2123d602631e8dc1526d144a1b226
6
+ metadata.gz: cff1e932b04d5f78010e1ff07b6fa2ca7a3de1f0864f4b538d4bdfbebfa97c5f70fd817da1a122f9ce5ad60425a95f20d9f56b9e21526e6a6585d905f050a7fb
7
+ data.tar.gz: 850e99a1f0a184e7c5f848237ed7110cf55151e624cb540a941d903ee1ad4f3920c0e53839020c5dd32a01fe88e901d781d5f8731d1567fc880bac46fce19380
@@ -1,3 +1,4 @@
1
+
1
2
  WAIT_TIMEOUT = (ENV['WAIT_TIMEOUT'] || 30).to_f
2
3
  STEP_PAUSE = (ENV['STEP_PAUSE'] || 0.5).to_f
3
4
 
@@ -17,3 +18,5 @@ require 'calabash-android/steps/screenshot_steps'
17
18
  require 'calabash-android/steps/search_steps'
18
19
  require 'calabash-android/steps/spinner_steps'
19
20
  require 'calabash-android/steps/time_picker_steps'
21
+ require 'calabash-android/steps/list_steps'
22
+
@@ -91,7 +91,7 @@ def fingerprint_from_apk(app_path)
91
91
  raise "No RSA file found in META-INF. Cannot proceed." if rsa_files.empty?
92
92
  raise "More than one RSA file found in META-INF. Cannot proceed." if rsa_files.length > 1
93
93
 
94
- cmd = "#{Env.keytool_path} -v -printcert -file \"#{rsa_files.first}\""
94
+ cmd = "#{Env.keytool_path} -v -printcert -J'-Dfile.encoding=utf-8' -file \"#{rsa_files.first}\""
95
95
  log cmd
96
96
  fingerprints = `#{cmd}`
97
97
  md5_fingerprint = extract_md5_fingerprint(fingerprints)
@@ -3,7 +3,7 @@ class JavaKeystore
3
3
  def initialize(location, keystore_alias, password)
4
4
  raise "No such file #{location}" unless File.exists?(File.expand_path(location))
5
5
 
6
- keystore_data = system_with_stdout_on_success(Env.keytool_path, '-list', '-v', '-alias', keystore_alias, '-keystore', location, '-storepass', password)
6
+ keystore_data = system_with_stdout_on_success(Env.keytool_path, '-list', '-v', '-alias', keystore_alias, '-keystore', location, '-storepass', password, '-J-Dfile.encoding=utf-8')
7
7
  if keystore_data.nil?
8
8
  error = "Could not list certificates in keystore. Probably because the password was incorrect."
9
9
  @errors = [{:message => error}]
@@ -275,7 +275,7 @@ module Operations
275
275
  raise "Empty result from TestServer" if result.chomp.empty?
276
276
  result = JSON.parse(result)
277
277
  if not result["success"] then
278
- raise "Step unsuccessful: #{result["message"]}"
278
+ raise "Action '#{action}' unsuccessful: #{result["message"]}"
279
279
  end
280
280
  result
281
281
  end
@@ -729,11 +729,9 @@ module Operations
729
729
 
730
730
  def set_text(uiquery, txt)
731
731
  raise "Currently queries are only supported for webviews" unless uiquery.start_with? "webView"
732
-
733
732
  uiquery.slice!(0, "webView".length)
734
733
  if uiquery =~ /(css|xpath):\s*(.*)/
735
734
  r = performAction("set_text", $1, $2, txt)
736
- JSON.parse(r["message"])
737
735
  else
738
736
  raise "Invalid query #{uiquery}"
739
737
  end
@@ -5,12 +5,13 @@
5
5
  Then /^I should see following list:$/ do | expected_table |
6
6
  result = performAction('get_list_item_text')
7
7
  response_table = result['bonusInformation']
8
- response_table.each_with_index do | row_data, index |
8
+ response_table_array = []
9
+ response_table.each do | row_data|
9
10
  row_data = JSON.parse( row_data )
10
- response_table[index] = row_data
11
+ tmpArray = [row_data.values.first]
12
+ response_table_array.push(tmpArray)
11
13
  end
12
-
13
- expected_table.diff!(response_table)
14
+ expected_table.diff!(response_table_array)
14
15
  end
15
16
 
16
17
  # Note: This step is currently intended as more of an example rather than a rock-solid, well-tested step.
@@ -1,5 +1,5 @@
1
1
  module Calabash
2
2
  module Android
3
- VERSION = "0.4.19.pre1"
3
+ VERSION = "0.4.19.pre2"
4
4
  end
5
5
  end
@@ -36,6 +36,10 @@
36
36
  {
37
37
  res.href = object.href;
38
38
  }
39
+ if (object.hasOwnProperty('value'))
40
+ {
41
+ res.value = object.value || '';
42
+ }
39
43
  res.html = object.outerHTML || '';
40
44
  res.textContent = object.textContent;
41
45
  return res;
@@ -1,49 +1,49 @@
1
1
  (function () {
2
- function simulateKeyEvent(elem, character) {
3
- var ch = character.charCodeAt(0);
4
-
5
- var evt;
6
- evt = document.createEvent('KeyboardEvent');
7
- evt.initKeyboardEvent('keydown', true, true, window, 0, 0, 0, 0, 0, ch);
8
- elem.dispatchEvent(evt);
9
-
10
- evt = document.createEvent('KeyboardEvent');
11
- evt.initKeyboardEvent('keyup', true, true, window, 0, 0, 0, 0, 0, ch);
12
- elem.dispatchEvent(evt);
13
- evt = document.createEvent('KeyboardEvent');
14
- evt.initKeyboardEvent('keypress', true, true, window, 0, 0, 0, 0, 0, ch);
15
- elem.dispatchEvent(evt);
16
- }
17
-
18
-
19
- function enterTextIntoInputField(elem, text) {
20
- elem.value = "";
21
- for (var i = 0; i < text.length; i++) {
22
- var ch = text.charAt(i);
23
- elem.value += ch;
24
- simulateKeyEvent(elem, ch);
25
- }
26
- }
27
-
28
-
29
- function fireHTMLEvent(elem, eventName) {
30
- var evt = document.createEvent("HTMLEvents");
31
- evt.initEvent(eventName, true, true );
32
- return !elem.dispatchEvent(evt);
33
- }
34
-
35
- function selectInputField(elem) {
36
- elem.click();
37
- elem.focus();
38
- }
39
-
40
-
41
- function deselectInputField(elem) {
42
- fireHTMLEvent(elem, 'change');
43
- fireHTMLEvent(elem, 'blur');
44
- }
45
-
46
-
2
+ function simulateKeyEvent(elem, character) {
3
+ var ch = character.charCodeAt(0);
4
+
5
+ var evt;
6
+ evt = document.createEvent('KeyboardEvent');
7
+ evt.initKeyboardEvent('keydown', true, true, window, 0, 0, 0, 0, 0, ch);
8
+ elem.dispatchEvent(evt);
9
+
10
+ evt = document.createEvent('KeyboardEvent');
11
+ evt.initKeyboardEvent('keyup', true, true, window, 0, 0, 0, 0, 0, ch);
12
+ elem.dispatchEvent(evt);
13
+ evt = document.createEvent('KeyboardEvent');
14
+ evt.initKeyboardEvent('keypress', true, true, window, 0, 0, 0, 0, 0, ch);
15
+ elem.dispatchEvent(evt);
16
+ }
17
+
18
+
19
+ function enterTextIntoInputField(elem, text) {
20
+ elem.value = "";
21
+ for (var i = 0; i < text.length; i++) {
22
+ var ch = text.charAt(i);
23
+ elem.value += ch;
24
+ simulateKeyEvent(elem, ch);
25
+ }
26
+ }
27
+
28
+
29
+ function fireHTMLEvent(elem, eventName) {
30
+ var evt = document.createEvent("HTMLEvents");
31
+ evt.initEvent(eventName, true, true );
32
+ return !elem.dispatchEvent(evt);
33
+ }
34
+
35
+ function selectInputField(elem) {
36
+ elem.click();
37
+ elem.focus();
38
+ }
39
+
40
+
41
+ function deselectInputField(elem) {
42
+ fireHTMLEvent(elem, 'change');
43
+ fireHTMLEvent(elem, 'blur');
44
+ }
45
+
46
+
47
47
  /** David Mark's isHostMethod function,
48
48
  * http://peter.michaux.ca/articles/feature-detection-state-of-the-art-browser-scripting
49
49
  * Modified to use strict equality
@@ -72,7 +72,7 @@
72
72
  }
73
73
  else if (object instanceof Node)//TODO: support for frames!
74
74
  {
75
- res = {}
75
+ res = {};
76
76
  if (isHostMethod(object,'getBoundingClientRect'))
77
77
  {
78
78
  res['rect'] = object.getBoundingClientRect();
@@ -81,6 +81,9 @@
81
81
  res.nodeName = object.nodeName;
82
82
  res.id = object.id || '';
83
83
  res['class'] = object.className || '';
84
+ if (object.hasOwnProperty('value')) {
85
+ res.value = object.value;
86
+ }
84
87
  res.html = object.outerHTML || '';
85
88
  res.nodeValue = object.nodeValue;
86
89
  }
@@ -102,23 +105,26 @@
102
105
  }
103
106
  return res;
104
107
  }
105
-
108
+
106
109
  ///TODO: no support for now frames
107
110
  //idea would be map XPath across window.frames
108
111
  //must take care of visibility questions
109
112
 
110
113
  try
111
- {
112
- var exp = JSON.parse('%@')/* dynamic */,
113
- el,
114
- text = '%@',
115
- i,N;
116
-
117
- el=document.elementFromPoint(exp.rect.left, exp.rect.top);
114
+ {
115
+ var exp = JSON.parse('%@')/* dynamic */,
116
+ el,
117
+ text = '%@',
118
+ i,N;
119
+
120
+ el=document.elementFromPoint(exp.rect.left + exp.rect.width / 2, exp.rect.top + exp.rect.height / 2);
121
+ if(exp.id){
122
+ el = document.getElementById(exp.id);
123
+ }
118
124
  if (/input/i.test(el.tagName))
119
125
  {
120
- selectInputField(el);
121
- enterTextIntoInputField(el, text);
126
+ selectInputField(el);
127
+ enterTextIntoInputField(el, text);
122
128
  }
123
129
  else
124
130
  {
@@ -130,4 +136,4 @@
130
136
  return JSON.stringify({error:'Exception while running query: '+exp, details:e.toString()})
131
137
  }
132
138
  return JSON.stringify(toJSON(el));
133
- })();
139
+ })();
@@ -8,6 +8,7 @@ import java.util.List;
8
8
  import java.util.Map;
9
9
 
10
10
  import sh.calaba.instrumentationbackend.json.JSONUtils;
11
+ import sh.calaba.instrumentationbackend.query.QueryResult;
11
12
 
12
13
  /**
13
14
  * Represents a response in the Frankly protocol.
@@ -23,66 +24,59 @@ public class FranklyResult {
23
24
  final String reason;
24
25
  final String detail;
25
26
  @SuppressWarnings("rawtypes")
26
- final List results;
27
+ final QueryResult result;
27
28
 
28
29
 
29
30
  @SuppressWarnings({ "rawtypes" })
30
- public FranklyResult(boolean success, List results, String reason,
31
- String detail) {
31
+ public FranklyResult(boolean success, QueryResult result, String reason, String detail) {
32
32
  super();
33
33
  this.success = success;
34
- this.results = results;
34
+ this.result = result;
35
35
  this.reason = reason;
36
36
  this.detail = detail;
37
37
  }
38
38
 
39
39
  public static FranklyResult fromThrowable(Throwable t) {
40
40
  CharArrayWriter caw = new CharArrayWriter();
41
- t.printStackTrace(new PrintWriter(caw));
42
- return new FranklyResult(false,Collections.EMPTY_LIST,t.getMessage(),caw.toString());
41
+ t.printStackTrace(new PrintWriter(caw));
42
+
43
+ return new FranklyResult(false, null, t.getMessage(),caw.toString());
43
44
  }
44
45
 
45
46
  public static FranklyResult emptyResult() {
46
- return new FranklyResult(true,Collections.EMPTY_LIST,null,null);
47
+ return new FranklyResult(true, null, null,null);
47
48
  }
48
49
 
49
50
  public static FranklyResult failedResult(String message,String detail) {
50
- return new FranklyResult(false,Collections.EMPTY_LIST,message,detail);
51
+ return new FranklyResult(false, null, message,detail);
51
52
  }
52
53
 
53
54
  public String asJson() {
54
55
  return JSONUtils.asJson(asMap());
55
56
  }
56
57
 
57
- public Map<String,Object> asMap()
58
+ public Map<String, Object> asMap()
58
59
  {
59
- Map<String,Object> result = new HashMap<String, Object>();
60
- result.put("outcome", this.success ? "SUCCESS" : "ERROR");
60
+ Map<String,Object> map = new HashMap<String, Object>();
61
+ map.put("outcome", success ? "SUCCESS" : "ERROR");
61
62
 
62
- if (this.success)
63
+ if (success)
63
64
  {
64
- result.put("results",this.results);
65
+ map.put("results", result.asList());
65
66
  }
66
67
  else
67
68
  {
68
- result.put("reason", this.reason);
69
- if (this.detail != null)
69
+ map.put("reason", reason);
70
+ if (detail != null)
70
71
  {
71
- result.put("detail", this.detail);
72
+ map.put("detail", detail);
72
73
  }
73
74
  }
74
- return result;
75
- }
76
-
77
- @Override
78
- public String toString()
79
- {
80
- return "FranklyResult [success=" + success + ", reason=" + reason
81
- + ", details=" + detail + ", results=" + results + "]";
75
+ return map;
82
76
  }
83
77
 
84
78
  @SuppressWarnings("rawtypes")
85
- public static FranklyResult successResult(List result) {
79
+ public static FranklyResult successResult(QueryResult result) {
86
80
  return new FranklyResult(true, result, null,null);
87
81
  }
88
82
  }
@@ -20,6 +20,7 @@ import sh.calaba.instrumentationbackend.InstrumentationBackend;
20
20
  import sh.calaba.instrumentationbackend.Result;
21
21
  import sh.calaba.instrumentationbackend.json.JSONUtils;
22
22
  import sh.calaba.instrumentationbackend.query.Query;
23
+ import sh.calaba.instrumentationbackend.query.QueryResult;
23
24
  import sh.calaba.org.codehaus.jackson.map.ObjectMapper;
24
25
  import android.graphics.Bitmap;
25
26
  import android.util.Log;
@@ -124,6 +125,7 @@ public class HttpServer extends NanoHTTPD {
124
125
  Map command = mapper.readValue(commandString, Map.class);
125
126
 
126
127
  String uiQuery = (String) command.get("query");
128
+ uiQuery = uiQuery.trim();
127
129
  Map op = (Map) command.get("operation");
128
130
  @SuppressWarnings("unused") //TODO: support other methods, e.g., flash
129
131
  String methodName = (String) op.get("method_name");
@@ -132,7 +134,7 @@ public class HttpServer extends NanoHTTPD {
132
134
  //For now we only support query
133
135
 
134
136
 
135
- List queryResult = new Query(uiQuery,arguments).executeQuery();
137
+ QueryResult queryResult = new Query(uiQuery,arguments).executeQuery();
136
138
 
137
139
  return new NanoHTTPD.Response(HTTP_OK, "application/json;charset=utf-8",
138
140
  FranklyResult.successResult(queryResult).asJson());
@@ -8,6 +8,8 @@ import sh.calaba.instrumentationbackend.InstrumentationBackend;
8
8
  import sh.calaba.instrumentationbackend.Result;
9
9
  import sh.calaba.instrumentationbackend.actions.Action;
10
10
  import sh.calaba.instrumentationbackend.actions.Actions;
11
+ import sh.calaba.instrumentationbackend.query.QueryResult;
12
+
11
13
  import android.test.TouchUtils;
12
14
  import android.webkit.WebView;
13
15
 
@@ -71,11 +73,11 @@ public class ScrollTo implements Action {
71
73
 
72
74
  @SuppressWarnings({ "rawtypes", "unchecked" })
73
75
  private int getCenterY(String uiQuery, WebView webView) {
74
- List queryResult = new sh.calaba.instrumentationbackend.query.Query(uiQuery).executeQuery();
76
+ QueryResult queryResult = new sh.calaba.instrumentationbackend.query.Query(uiQuery).executeQuery();
75
77
  if (queryResult.isEmpty()) {
76
78
  throw new RuntimeException("Query found no elements");
77
79
  }
78
- final Map<String, Object> firstVisibleRectangle = QueryHelper.findFirstVisibleRectangle(queryResult);
80
+ final Map<String, Object> firstVisibleRectangle = QueryHelper.findFirstVisibleRectangle(queryResult.asList());
79
81
 
80
82
  return Math.round((Float)firstVisibleRectangle.get("center_y"));
81
83
  }
@@ -1,12 +1,15 @@
1
1
  package sh.calaba.instrumentationbackend.actions.webview;
2
2
 
3
3
 
4
- import java.util.List;
4
+ import android.webkit.WebView;
5
+
5
6
  import java.util.Map;
7
+ import java.util.concurrent.Callable;
6
8
 
7
9
  import sh.calaba.instrumentationbackend.Result;
8
10
  import sh.calaba.instrumentationbackend.actions.Action;
9
- import sh.calaba.instrumentationbackend.actions.webview.CalabashChromeClient.WebFuture;
11
+ import sh.calaba.instrumentationbackend.query.QueryResult;
12
+ import sh.calaba.instrumentationbackend.query.ast.UIQueryUtils;
10
13
 
11
14
 
12
15
  public class SetText implements Action {
@@ -19,29 +22,43 @@ public class SetText implements Action {
19
22
  @SuppressWarnings({ "rawtypes", "unchecked"})
20
23
  @Override
21
24
  public Result execute(final String... args) {
22
- final String uiQuery = "android.webkit.WebView " + args[0] + ":'"+ args[1] + "'";
23
- List queryResult = new sh.calaba.instrumentationbackend.query.Query(uiQuery).executeQuery();
24
- if (queryResult.isEmpty()) {
25
- throw new RuntimeException("No element found");
26
- }
27
- Map<String, Object> firstElement = QueryHelper.findFirstVisibleElement(queryResult);
28
- //TODO: Hack! Should be serialized instead of removed
29
- CalabashChromeClient client = CalabashChromeClient.findAndPrepareWebViews().get(0);
30
- firstElement.remove("class");
31
- firstElement.remove("webView");
32
- firstElement.remove("html");
33
- String firstElementJson = QueryHelper.toJsonString(firstElement);
34
-
35
- WebFuture result = QueryHelper.executeAsyncJavascriptInWebviews(client.getWebView(),"set_text.js", firstElementJson, args[2]);
36
-
37
- return new Result(true,result.getAsString());
38
- }
39
-
40
- @Override
41
- public String key() {
42
- return "set_text";
43
- }
44
-
45
-
46
-
47
- }
25
+ String query = args[1];
26
+ if (!query.startsWith("'")) {
27
+ query = "'" + query;
28
+ }
29
+ if (!query.endsWith("'")) {
30
+ query = query + "'";
31
+ }
32
+
33
+ final String uiQuery = "android.webkit.WebView " + args[0] + ":" + query;
34
+ QueryResult queryResult = new sh.calaba.instrumentationbackend.query.Query(uiQuery).executeQuery();
35
+ if (queryResult.isEmpty()) {
36
+ return Result.failedResult("No element found: " + query);
37
+ }
38
+ Map<String, Object> firstElement = QueryHelper.findFirstVisibleElement(queryResult.getResult());
39
+ firstElement.remove("class");
40
+ firstElement.remove("html");
41
+ final WebView webView = (WebView) firstElement.remove("webView");
42
+
43
+ final String firstElementJson = QueryHelper.toJsonString(firstElement);
44
+
45
+
46
+ Map<String, Object> result = (Map<String, Object>) UIQueryUtils.evaluateSyncInMainThread(new Callable() {
47
+ @Override
48
+ public Object call() throws Exception {
49
+ return QueryHelper.executeAsyncJavascriptInWebviews(webView, "set_text.js", firstElementJson, args[2]);
50
+ }
51
+ });
52
+
53
+ if (result.containsKey("error")) {
54
+ return Result.failedResult(result.get("details").toString());
55
+ }
56
+ return new Result(true);
57
+ }
58
+
59
+ @Override
60
+ public String key() {
61
+ return "set_text";
62
+ }
63
+
64
+ }
@@ -47,8 +47,7 @@ public class Query {
47
47
  this.operations = args;
48
48
  }
49
49
 
50
- @SuppressWarnings("rawtypes")
51
- public List executeQuery() {
50
+ public QueryResult executeQuery() {
52
51
  return UIQueryEvaluator.evaluateQueryWithOptions(parseQuery(this.queryString), rootViews(), parseOperations(this.operations));
53
52
  }
54
53
 
@@ -1,6 +1,7 @@
1
1
  package sh.calaba.instrumentationbackend.query;
2
2
 
3
3
  import java.io.IOException;
4
+ import java.util.ArrayList;
4
5
  import java.util.List;
5
6
 
6
7
  import sh.calaba.org.codehaus.jackson.map.ObjectMapper;
@@ -14,6 +15,9 @@ public class QueryResult {
14
15
  this.result = result;
15
16
  }
16
17
 
18
+ public boolean isEmpty() {
19
+ return result.isEmpty();
20
+ }
17
21
 
18
22
  public String asJson() {
19
23
  ObjectMapper mapper = new ObjectMapper();
@@ -24,4 +28,18 @@ public class QueryResult {
24
28
  throw new RuntimeException("Could not convert result to json", e);
25
29
  }
26
30
  }
31
+
32
+ public List getResult() {
33
+ return result;
34
+ }
35
+
36
+
37
+ public List asList() {
38
+ List<Object> finalResult = new ArrayList(result.size());
39
+ for (Object o : result) {
40
+ finalResult.add(ViewMapper.mapView(o));
41
+ }
42
+ return finalResult;
43
+ }
44
+
27
45
  }
@@ -4,50 +4,20 @@ import java.util.ArrayList;
4
4
  import java.util.List;
5
5
 
6
6
  import sh.calaba.instrumentationbackend.query.Operation;
7
+ import sh.calaba.instrumentationbackend.query.QueryResult;
7
8
  import sh.calaba.instrumentationbackend.query.UIQueryResultVoid;
8
9
  import sh.calaba.instrumentationbackend.query.ViewMapper;
9
10
 
10
11
  public class UIQueryEvaluator {
11
12
 
12
13
  @SuppressWarnings({ "rawtypes" })
13
- public static List evaluateQueryWithOptions(List<UIQueryAST> query, List inputViews,
14
- List<Operation> operations) {
15
-
16
- long before = System.currentTimeMillis();
17
-
14
+ public static QueryResult evaluateQueryWithOptions(List<UIQueryAST> query, List inputViews, List<Operation> operations) {
18
15
  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
16
  List result = applyOperations(views, operations);
27
-
28
- after = System.currentTimeMillis();
29
- action = "ApplyOperations";
30
- System.out.println(action+ " took: "+ (after-before) + "ms");
31
-
32
- before = System.currentTimeMillis();
33
-
34
- List finalResult = mapViews(result);
35
-
36
- after = System.currentTimeMillis();
37
- action = "MapViews";
38
- return finalResult;
17
+ return new QueryResult(result);
39
18
  }
40
19
 
41
20
 
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));
47
- }
48
- return finalResult;
49
- }
50
-
51
21
 
52
22
  @SuppressWarnings({ "rawtypes", "unchecked" })
53
23
  public static List applyOperations(List views, List<Operation> operations) {
@@ -194,10 +194,8 @@ public class UIQueryUtils {
194
194
  }
195
195
 
196
196
  @SuppressWarnings({ "rawtypes", "unchecked" })
197
- public static Future evaluateAsyncInMainThread(final Callable callable)
198
- throws Exception {
199
-
200
-
197
+ public static Future evaluateAsyncInMainThread(final Callable callable) throws Exception {
198
+
201
199
  final AtomicReference<Future> result = new AtomicReference<Future>();
202
200
  final AtomicReference<Exception> errorResult = new AtomicReference<Exception>();
203
201
 
@@ -248,10 +246,8 @@ public class UIQueryUtils {
248
246
  new TypeReference<List<HashMap<String, Object>>>() {
249
247
  });
250
248
  for (Map<String, Object> data : parsedResult) {
251
- Map<String, Object> rect = (Map<String, Object>) data
252
- .get("rect");
253
- Map<String, Object> updatedRect = QueryHelper
254
- .translateRectToScreenCoordinates(webView, rect);
249
+ Map<String, Object> rect = (Map<String, Object>) data.get("rect");
250
+ Map<String, Object> updatedRect = QueryHelper.translateRectToScreenCoordinates(webView, rect);
255
251
  data.put("rect", updatedRect);
256
252
  data.put("webView", webView);
257
253
  }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: calabash-android
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.19.pre1
4
+ version: 0.4.19.pre2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonas Maturana Larsen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-15 00:00:00.000000000 Z
11
+ date: 2014-01-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cucumber