calabash-android 0.4.19.pre1 → 0.4.19.pre2

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 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