calabash-android 0.4.0.pre4 → 0.4.0.pre5
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.
- data/bin/calabash-android-console.rb +1 -3
- data/lib/calabash-android/helpers.rb +1 -0
- data/lib/calabash-android/lib/TestServer.apk +0 -0
- data/lib/calabash-android/operations.rb +27 -7
- data/lib/calabash-android/version.rb +1 -1
- data/test-server/instrumentation-backend/AndroidManifest.xml +1 -1
- data/test-server/instrumentation-backend/antlr/UIQuery.g +21 -3
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/Query.java +3 -1
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/antlr/UIQueryLexer.java +54 -59
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/antlr/UIQueryParser.java +58 -40
- metadata +1 -2
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/antlr/UIQuery.tokens +0 -10
@@ -5,9 +5,7 @@ def calabash_console(app_path = nil)
|
|
5
5
|
ENV["TEST_SERVER_PORT"] = "34777"
|
6
6
|
end
|
7
7
|
|
8
|
-
|
9
|
-
ENV["IRBRC"] = File.join(File.dirname(__FILE__), '..', 'irbrc')
|
10
|
-
end
|
8
|
+
ENV["IRBRC"] = File.join(File.dirname(__FILE__), '..', 'irbrc')
|
11
9
|
|
12
10
|
unless ENV["PACKAGE_NAME"]
|
13
11
|
ENV["PACKAGE_NAME"] = package_name(app_path)
|
@@ -116,6 +116,7 @@ def fingerprint_from_apk(app_path)
|
|
116
116
|
end
|
117
117
|
|
118
118
|
def extract_md5_fingerprint(fingerprints)
|
119
|
+
fingerprints = fingerprints.gsub("\xA0", "")
|
119
120
|
m = fingerprints.scan(/MD5\s*:\s*((?:\h\h:){15}\h\h)/).flatten
|
120
121
|
raise "No MD5 fingerprint found:\n #{fingerprints}" if m.empty?
|
121
122
|
m.first
|
Binary file
|
@@ -23,7 +23,7 @@ module Operations
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def macro(txt)
|
26
|
-
if self.respond_to
|
26
|
+
if self.respond_to?(:step)
|
27
27
|
step(txt)
|
28
28
|
else
|
29
29
|
Then(txt)
|
@@ -57,7 +57,7 @@ module Operations
|
|
57
57
|
default_device.clear_app_data
|
58
58
|
end
|
59
59
|
|
60
|
-
def start_test_server_in_background
|
60
|
+
def start_test_server_in_background(options={})
|
61
61
|
default_device.start_test_server_in_background()
|
62
62
|
end
|
63
63
|
|
@@ -86,7 +86,7 @@ module Operations
|
|
86
86
|
value = nil
|
87
87
|
begin
|
88
88
|
Timeout::timeout(timeout) do
|
89
|
-
until value = block.call
|
89
|
+
until (value = block.call)
|
90
90
|
sleep 0.3
|
91
91
|
end
|
92
92
|
end
|
@@ -313,14 +313,30 @@ module Operations
|
|
313
313
|
raise "Could not clear data" unless system(cmd)
|
314
314
|
end
|
315
315
|
|
316
|
-
def start_test_server_in_background
|
316
|
+
def start_test_server_in_background(options={})
|
317
317
|
raise "Will not start test server because of previous failures." if Cucumber.wants_to_quit
|
318
318
|
|
319
319
|
if keyguard_enabled?
|
320
320
|
wake_up
|
321
321
|
end
|
322
322
|
|
323
|
-
|
323
|
+
env_options = {:target_package => options[:target_package] || ENV["PACKAGE_NAME"],
|
324
|
+
:main_activity => options[:main_activity] || ENV["MAIN_ACTIVITY"],
|
325
|
+
:debug => options[:debug] || false,
|
326
|
+
:class => options[:class] || "sh.calaba.instrumentationbackend.InstrumentationBackend"}
|
327
|
+
|
328
|
+
cmd_arr = [adb_command, "shell am instrument"]
|
329
|
+
|
330
|
+
env_options.each_pair do |key, val|
|
331
|
+
cmd_arr << "-e"
|
332
|
+
cmd_arr << key.to_s
|
333
|
+
cmd_arr << val.to_s
|
334
|
+
end
|
335
|
+
|
336
|
+
cmd_arr << "sh.calaba.android.test/sh.calaba.instrumentationbackend.CalabashInstrumentationTestRunner"
|
337
|
+
|
338
|
+
cmd = cmd_arr.join(" ")
|
339
|
+
|
324
340
|
log "Starting test server using:"
|
325
341
|
log cmd
|
326
342
|
raise "Could not execute command to start test server" unless system("#{cmd} 2>&1")
|
@@ -453,12 +469,16 @@ module Operations
|
|
453
469
|
ni
|
454
470
|
end
|
455
471
|
|
472
|
+
def element_does_not_exist(uiquery)
|
473
|
+
query(uiquery).empty?
|
474
|
+
end
|
475
|
+
|
456
476
|
def element_exists(uiquery)
|
457
|
-
|
477
|
+
not element_does_not_exist(uiquery)
|
458
478
|
end
|
459
479
|
|
460
480
|
def view_with_mark_exists(expected_mark)
|
461
|
-
element_exists( "view marked:'#{expected_mark}'" )
|
481
|
+
element_exists( "android.view.View marked:'#{expected_mark}'" )
|
462
482
|
end
|
463
483
|
|
464
484
|
def check_element_exists( query )
|
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
<uses-sdk android:minSdkVersion="6" />
|
8
8
|
|
9
|
-
<application android:label="CalabashTestServer" >
|
9
|
+
<application android:label="CalabashTestServer" android:debuggable="true">
|
10
10
|
<uses-library android:name="android.test.runner" />
|
11
11
|
<uses-library android:name="com.google.android.maps" android:required="false" />
|
12
12
|
</application>
|
@@ -12,6 +12,24 @@ options {
|
|
12
12
|
package sh.calaba.instrumentationbackend.query.antlr;
|
13
13
|
}
|
14
14
|
|
15
|
+
@members {
|
16
|
+
public String getErrorMessage(RecognitionException e, String[] tokenNames)
|
17
|
+
{
|
18
|
+
List stack = getRuleInvocationStack(e, this.getClass().getName());
|
19
|
+
String msg = null;
|
20
|
+
if ( e instanceof NoViableAltException ) {
|
21
|
+
NoViableAltException nvae = (NoViableAltException)e;
|
22
|
+
msg = " no viable alt; token="+e.token+" (decision="+nvae.decisionNumber+" state "+nvae.stateNumber+")"+" decision=<<"+nvae.grammarDecisionDescription+">>";
|
23
|
+
}
|
24
|
+
else {
|
25
|
+
msg = super.getErrorMessage(e, tokenNames);
|
26
|
+
}
|
27
|
+
return stack+" "+msg;
|
28
|
+
}
|
29
|
+
public String getTokenErrorDisplay(Token t) {
|
30
|
+
return t.toString();
|
31
|
+
}
|
32
|
+
}
|
15
33
|
|
16
34
|
query : expr (WHITE! expr)*
|
17
35
|
;
|
@@ -43,16 +61,16 @@ NAME : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*
|
|
43
61
|
;
|
44
62
|
|
45
63
|
STRING
|
46
|
-
: '\'' ( ESC_SEQ | ~('\\'|'
|
64
|
+
: '\'' ( ESC_SEQ | ~('\\'|'\'') )* '\''
|
47
65
|
;
|
48
66
|
|
49
|
-
WHITE : ' '
|
67
|
+
WHITE : ' '+ ;
|
50
68
|
fragment
|
51
69
|
HEX_DIGIT : ('0'..'9'|'a'..'f'|'A'..'F') ;
|
52
70
|
|
53
71
|
fragment
|
54
72
|
ESC_SEQ
|
55
|
-
: '\\' ('b'|'t'|'n'|'f'|'r'|'\
|
73
|
+
: '\\' ('b'|'t'|'n'|'f'|'r'|'\''|'\\')
|
56
74
|
| UNICODE_ESC
|
57
75
|
| OCTAL_ESC
|
58
76
|
;
|
data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/Query.java
CHANGED
@@ -90,7 +90,9 @@ public class Query {
|
|
90
90
|
Set<View> parents = new HashSet<View>(8);
|
91
91
|
for (View v : allVisibleViews())
|
92
92
|
{
|
93
|
-
|
93
|
+
View parent = viewFetcher.getTopParent(v);
|
94
|
+
System.out.println(parent);
|
95
|
+
parents.add(parent);
|
94
96
|
}
|
95
97
|
List<View> results = new ArrayList<View>();
|
96
98
|
results.addAll(parents);
|
@@ -1,4 +1,4 @@
|
|
1
|
-
// $ANTLR 3.4 antlr/UIQuery.g 2012-12-
|
1
|
+
// $ANTLR 3.4 antlr/UIQuery.g 2012-12-27 13:48:21
|
2
2
|
|
3
3
|
package sh.calaba.instrumentationbackend.query.antlr;
|
4
4
|
|
@@ -44,13 +44,13 @@ public class UIQueryLexer extends Lexer {
|
|
44
44
|
try {
|
45
45
|
int _type = QUALIFIED_NAME;
|
46
46
|
int _channel = DEFAULT_TOKEN_CHANNEL;
|
47
|
-
// antlr/UIQuery.g:
|
48
|
-
// antlr/UIQuery.g:
|
47
|
+
// antlr/UIQuery.g:43:16: ( NAME ( '.' NAME )+ )
|
48
|
+
// antlr/UIQuery.g:43:18: NAME ( '.' NAME )+
|
49
49
|
{
|
50
50
|
mNAME();
|
51
51
|
|
52
52
|
|
53
|
-
// antlr/UIQuery.g:
|
53
|
+
// antlr/UIQuery.g:43:23: ( '.' NAME )+
|
54
54
|
int cnt1=0;
|
55
55
|
loop1:
|
56
56
|
do {
|
@@ -64,7 +64,7 @@ public class UIQueryLexer extends Lexer {
|
|
64
64
|
|
65
65
|
switch (alt1) {
|
66
66
|
case 1 :
|
67
|
-
// antlr/UIQuery.g:
|
67
|
+
// antlr/UIQuery.g:43:24: '.' NAME
|
68
68
|
{
|
69
69
|
match('.');
|
70
70
|
|
@@ -100,8 +100,8 @@ public class UIQueryLexer extends Lexer {
|
|
100
100
|
try {
|
101
101
|
int _type = FILTER_COLON;
|
102
102
|
int _channel = DEFAULT_TOKEN_CHANNEL;
|
103
|
-
// antlr/UIQuery.g:
|
104
|
-
// antlr/UIQuery.g:
|
103
|
+
// antlr/UIQuery.g:47:15: ( ':' )
|
104
|
+
// antlr/UIQuery.g:47:17: ':'
|
105
105
|
{
|
106
106
|
match(':');
|
107
107
|
|
@@ -121,10 +121,10 @@ public class UIQueryLexer extends Lexer {
|
|
121
121
|
try {
|
122
122
|
int _type = INT;
|
123
123
|
int _channel = DEFAULT_TOKEN_CHANNEL;
|
124
|
-
// antlr/UIQuery.g:
|
125
|
-
// antlr/UIQuery.g:
|
124
|
+
// antlr/UIQuery.g:51:5: ( ( '0' .. '9' )+ )
|
125
|
+
// antlr/UIQuery.g:51:7: ( '0' .. '9' )+
|
126
126
|
{
|
127
|
-
// antlr/UIQuery.g:
|
127
|
+
// antlr/UIQuery.g:51:7: ( '0' .. '9' )+
|
128
128
|
int cnt2=0;
|
129
129
|
loop2:
|
130
130
|
do {
|
@@ -179,7 +179,7 @@ public class UIQueryLexer extends Lexer {
|
|
179
179
|
try {
|
180
180
|
int _type = BOOL;
|
181
181
|
int _channel = DEFAULT_TOKEN_CHANNEL;
|
182
|
-
// antlr/UIQuery.g:
|
182
|
+
// antlr/UIQuery.g:54:6: ( 'true' | 'false' )
|
183
183
|
int alt3=2;
|
184
184
|
int LA3_0 = input.LA(1);
|
185
185
|
|
@@ -198,7 +198,7 @@ public class UIQueryLexer extends Lexer {
|
|
198
198
|
}
|
199
199
|
switch (alt3) {
|
200
200
|
case 1 :
|
201
|
-
// antlr/UIQuery.g:
|
201
|
+
// antlr/UIQuery.g:54:8: 'true'
|
202
202
|
{
|
203
203
|
match("true");
|
204
204
|
|
@@ -207,7 +207,7 @@ public class UIQueryLexer extends Lexer {
|
|
207
207
|
}
|
208
208
|
break;
|
209
209
|
case 2 :
|
210
|
-
// antlr/UIQuery.g:
|
210
|
+
// antlr/UIQuery.g:54:17: 'false'
|
211
211
|
{
|
212
212
|
match("false");
|
213
213
|
|
@@ -231,7 +231,7 @@ public class UIQueryLexer extends Lexer {
|
|
231
231
|
try {
|
232
232
|
int _type = NIL;
|
233
233
|
int _channel = DEFAULT_TOKEN_CHANNEL;
|
234
|
-
// antlr/UIQuery.g:
|
234
|
+
// antlr/UIQuery.g:57:5: ( 'nil' | 'null' )
|
235
235
|
int alt4=2;
|
236
236
|
int LA4_0 = input.LA(1);
|
237
237
|
|
@@ -261,7 +261,7 @@ public class UIQueryLexer extends Lexer {
|
|
261
261
|
}
|
262
262
|
switch (alt4) {
|
263
263
|
case 1 :
|
264
|
-
// antlr/UIQuery.g:
|
264
|
+
// antlr/UIQuery.g:57:7: 'nil'
|
265
265
|
{
|
266
266
|
match("nil");
|
267
267
|
|
@@ -270,7 +270,7 @@ public class UIQueryLexer extends Lexer {
|
|
270
270
|
}
|
271
271
|
break;
|
272
272
|
case 2 :
|
273
|
-
// antlr/UIQuery.g:
|
273
|
+
// antlr/UIQuery.g:57:15: 'null'
|
274
274
|
{
|
275
275
|
match("null");
|
276
276
|
|
@@ -294,8 +294,8 @@ public class UIQueryLexer extends Lexer {
|
|
294
294
|
try {
|
295
295
|
int _type = NAME;
|
296
296
|
int _channel = DEFAULT_TOKEN_CHANNEL;
|
297
|
-
// antlr/UIQuery.g:
|
298
|
-
// antlr/UIQuery.g:
|
297
|
+
// antlr/UIQuery.g:60:7: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' )* )
|
298
|
+
// antlr/UIQuery.g:60:9: ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' )*
|
299
299
|
{
|
300
300
|
if ( (input.LA(1) >= 'A' && input.LA(1) <= 'Z')||input.LA(1)=='_'||(input.LA(1) >= 'a' && input.LA(1) <= 'z') ) {
|
301
301
|
input.consume();
|
@@ -307,7 +307,7 @@ public class UIQueryLexer extends Lexer {
|
|
307
307
|
}
|
308
308
|
|
309
309
|
|
310
|
-
// antlr/UIQuery.g:
|
310
|
+
// antlr/UIQuery.g:60:33: ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' )*
|
311
311
|
loop5:
|
312
312
|
do {
|
313
313
|
int alt5=2;
|
@@ -357,37 +357,28 @@ public class UIQueryLexer extends Lexer {
|
|
357
357
|
try {
|
358
358
|
int _type = STRING;
|
359
359
|
int _channel = DEFAULT_TOKEN_CHANNEL;
|
360
|
-
// antlr/UIQuery.g:
|
361
|
-
// antlr/UIQuery.g:
|
360
|
+
// antlr/UIQuery.g:64:5: ( '\\'' ( ESC_SEQ |~ ( '\\\\' | '\\'' ) )* '\\'' )
|
361
|
+
// antlr/UIQuery.g:64:8: '\\'' ( ESC_SEQ |~ ( '\\\\' | '\\'' ) )* '\\''
|
362
362
|
{
|
363
363
|
match('\'');
|
364
364
|
|
365
|
-
// antlr/UIQuery.g:
|
365
|
+
// antlr/UIQuery.g:64:13: ( ESC_SEQ |~ ( '\\\\' | '\\'' ) )*
|
366
366
|
loop6:
|
367
367
|
do {
|
368
368
|
int alt6=3;
|
369
369
|
int LA6_0 = input.LA(1);
|
370
370
|
|
371
|
-
if ( (LA6_0=='
|
372
|
-
int LA6_1 = input.LA(2);
|
373
|
-
|
374
|
-
if ( ((LA6_1 >= '\u0000' && LA6_1 <= '!')||(LA6_1 >= '#' && LA6_1 <= '\uFFFF')) ) {
|
375
|
-
alt6=2;
|
376
|
-
}
|
377
|
-
|
378
|
-
|
379
|
-
}
|
380
|
-
else if ( (LA6_0=='\\') ) {
|
371
|
+
if ( (LA6_0=='\\') ) {
|
381
372
|
alt6=1;
|
382
373
|
}
|
383
|
-
else if ( ((LA6_0 >= '\u0000' && LA6_0 <= '
|
374
|
+
else if ( ((LA6_0 >= '\u0000' && LA6_0 <= '&')||(LA6_0 >= '(' && LA6_0 <= '[')||(LA6_0 >= ']' && LA6_0 <= '\uFFFF')) ) {
|
384
375
|
alt6=2;
|
385
376
|
}
|
386
377
|
|
387
378
|
|
388
379
|
switch (alt6) {
|
389
380
|
case 1 :
|
390
|
-
// antlr/UIQuery.g:
|
381
|
+
// antlr/UIQuery.g:64:15: ESC_SEQ
|
391
382
|
{
|
392
383
|
mESC_SEQ();
|
393
384
|
|
@@ -395,9 +386,9 @@ public class UIQueryLexer extends Lexer {
|
|
395
386
|
}
|
396
387
|
break;
|
397
388
|
case 2 :
|
398
|
-
// antlr/UIQuery.g:
|
389
|
+
// antlr/UIQuery.g:64:25: ~ ( '\\\\' | '\\'' )
|
399
390
|
{
|
400
|
-
if ( (input.LA(1) >= '\u0000' && input.LA(1) <= '
|
391
|
+
if ( (input.LA(1) >= '\u0000' && input.LA(1) <= '&')||(input.LA(1) >= '(' && input.LA(1) <= '[')||(input.LA(1) >= ']' && input.LA(1) <= '\uFFFF') ) {
|
401
392
|
input.consume();
|
402
393
|
}
|
403
394
|
else {
|
@@ -434,10 +425,11 @@ public class UIQueryLexer extends Lexer {
|
|
434
425
|
try {
|
435
426
|
int _type = WHITE;
|
436
427
|
int _channel = DEFAULT_TOKEN_CHANNEL;
|
437
|
-
// antlr/UIQuery.g:
|
438
|
-
// antlr/UIQuery.g:
|
428
|
+
// antlr/UIQuery.g:67:9: ( ( ' ' )+ )
|
429
|
+
// antlr/UIQuery.g:67:11: ( ' ' )+
|
439
430
|
{
|
440
|
-
// antlr/UIQuery.g:
|
431
|
+
// antlr/UIQuery.g:67:11: ( ' ' )+
|
432
|
+
int cnt7=0;
|
441
433
|
loop7:
|
442
434
|
do {
|
443
435
|
int alt7=2;
|
@@ -450,7 +442,7 @@ public class UIQueryLexer extends Lexer {
|
|
450
442
|
|
451
443
|
switch (alt7) {
|
452
444
|
case 1 :
|
453
|
-
// antlr/UIQuery.g:
|
445
|
+
// antlr/UIQuery.g:67:11: ' '
|
454
446
|
{
|
455
447
|
match(' ');
|
456
448
|
|
@@ -458,8 +450,12 @@ public class UIQueryLexer extends Lexer {
|
|
458
450
|
break;
|
459
451
|
|
460
452
|
default :
|
461
|
-
break loop7;
|
453
|
+
if ( cnt7 >= 1 ) break loop7;
|
454
|
+
EarlyExitException eee =
|
455
|
+
new EarlyExitException(7, input);
|
456
|
+
throw eee;
|
462
457
|
}
|
458
|
+
cnt7++;
|
463
459
|
} while (true);
|
464
460
|
|
465
461
|
|
@@ -477,7 +473,7 @@ public class UIQueryLexer extends Lexer {
|
|
477
473
|
// $ANTLR start "HEX_DIGIT"
|
478
474
|
public final void mHEX_DIGIT() throws RecognitionException {
|
479
475
|
try {
|
480
|
-
// antlr/UIQuery.g:
|
476
|
+
// antlr/UIQuery.g:70:11: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )
|
481
477
|
// antlr/UIQuery.g:
|
482
478
|
{
|
483
479
|
if ( (input.LA(1) >= '0' && input.LA(1) <= '9')||(input.LA(1) >= 'A' && input.LA(1) <= 'F')||(input.LA(1) >= 'a' && input.LA(1) <= 'f') ) {
|
@@ -503,13 +499,12 @@ public class UIQueryLexer extends Lexer {
|
|
503
499
|
// $ANTLR start "ESC_SEQ"
|
504
500
|
public final void mESC_SEQ() throws RecognitionException {
|
505
501
|
try {
|
506
|
-
// antlr/UIQuery.g:
|
502
|
+
// antlr/UIQuery.g:74:5: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\'' | '\\\\' ) | UNICODE_ESC | OCTAL_ESC )
|
507
503
|
int alt8=3;
|
508
504
|
int LA8_0 = input.LA(1);
|
509
505
|
|
510
506
|
if ( (LA8_0=='\\') ) {
|
511
507
|
switch ( input.LA(2) ) {
|
512
|
-
case '\"':
|
513
508
|
case '\'':
|
514
509
|
case '\\':
|
515
510
|
case 'b':
|
@@ -556,11 +551,11 @@ public class UIQueryLexer extends Lexer {
|
|
556
551
|
}
|
557
552
|
switch (alt8) {
|
558
553
|
case 1 :
|
559
|
-
// antlr/UIQuery.g:
|
554
|
+
// antlr/UIQuery.g:74:9: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\'' | '\\\\' )
|
560
555
|
{
|
561
556
|
match('\\');
|
562
557
|
|
563
|
-
if ( input.LA(1)=='\
|
558
|
+
if ( input.LA(1)=='\''||input.LA(1)=='\\'||input.LA(1)=='b'||input.LA(1)=='f'||input.LA(1)=='n'||input.LA(1)=='r'||input.LA(1)=='t' ) {
|
564
559
|
input.consume();
|
565
560
|
}
|
566
561
|
else {
|
@@ -573,7 +568,7 @@ public class UIQueryLexer extends Lexer {
|
|
573
568
|
}
|
574
569
|
break;
|
575
570
|
case 2 :
|
576
|
-
// antlr/UIQuery.g:
|
571
|
+
// antlr/UIQuery.g:75:9: UNICODE_ESC
|
577
572
|
{
|
578
573
|
mUNICODE_ESC();
|
579
574
|
|
@@ -581,7 +576,7 @@ public class UIQueryLexer extends Lexer {
|
|
581
576
|
}
|
582
577
|
break;
|
583
578
|
case 3 :
|
584
|
-
// antlr/UIQuery.g:
|
579
|
+
// antlr/UIQuery.g:76:9: OCTAL_ESC
|
585
580
|
{
|
586
581
|
mOCTAL_ESC();
|
587
582
|
|
@@ -601,7 +596,7 @@ public class UIQueryLexer extends Lexer {
|
|
601
596
|
// $ANTLR start "OCTAL_ESC"
|
602
597
|
public final void mOCTAL_ESC() throws RecognitionException {
|
603
598
|
try {
|
604
|
-
// antlr/UIQuery.g:
|
599
|
+
// antlr/UIQuery.g:81:5: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) )
|
605
600
|
int alt9=3;
|
606
601
|
int LA9_0 = input.LA(1);
|
607
602
|
|
@@ -652,7 +647,7 @@ public class UIQueryLexer extends Lexer {
|
|
652
647
|
}
|
653
648
|
switch (alt9) {
|
654
649
|
case 1 :
|
655
|
-
// antlr/UIQuery.g:
|
650
|
+
// antlr/UIQuery.g:81:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' )
|
656
651
|
{
|
657
652
|
match('\\');
|
658
653
|
|
@@ -689,7 +684,7 @@ public class UIQueryLexer extends Lexer {
|
|
689
684
|
}
|
690
685
|
break;
|
691
686
|
case 2 :
|
692
|
-
// antlr/UIQuery.g:
|
687
|
+
// antlr/UIQuery.g:82:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' )
|
693
688
|
{
|
694
689
|
match('\\');
|
695
690
|
|
@@ -716,7 +711,7 @@ public class UIQueryLexer extends Lexer {
|
|
716
711
|
}
|
717
712
|
break;
|
718
713
|
case 3 :
|
719
|
-
// antlr/UIQuery.g:
|
714
|
+
// antlr/UIQuery.g:83:9: '\\\\' ( '0' .. '7' )
|
720
715
|
{
|
721
716
|
match('\\');
|
722
717
|
|
@@ -745,8 +740,8 @@ public class UIQueryLexer extends Lexer {
|
|
745
740
|
// $ANTLR start "UNICODE_ESC"
|
746
741
|
public final void mUNICODE_ESC() throws RecognitionException {
|
747
742
|
try {
|
748
|
-
// antlr/UIQuery.g:
|
749
|
-
// antlr/UIQuery.g:
|
743
|
+
// antlr/UIQuery.g:88:5: ( '\\\\' 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT )
|
744
|
+
// antlr/UIQuery.g:88:9: '\\\\' 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT
|
750
745
|
{
|
751
746
|
match('\\');
|
752
747
|
|
@@ -851,12 +846,12 @@ public class UIQueryLexer extends Lexer {
|
|
851
846
|
|
852
847
|
protected DFA10 dfa10 = new DFA10(this);
|
853
848
|
static final String DFA10_eotS =
|
854
|
-
"\1\
|
855
|
-
"\1\13\1\uffff\1\26\1\uffff\1\30";
|
849
|
+
"\1\uffff\1\13\2\uffff\3\13\2\uffff\2\13\2\uffff\5\13\1\26\1\13\1"+
|
850
|
+
"\30\1\13\1\uffff\1\26\1\uffff\1\30";
|
856
851
|
static final String DFA10_eofS =
|
857
852
|
"\32\uffff";
|
858
853
|
static final String DFA10_minS =
|
859
|
-
"\1\
|
854
|
+
"\1\40\1\56\2\uffff\3\56\2\uffff\2\56\2\uffff\11\56\1\uffff\1\56"+
|
860
855
|
"\1\uffff\1\56";
|
861
856
|
static final String DFA10_maxS =
|
862
857
|
"\2\172\2\uffff\3\172\2\uffff\2\172\2\uffff\11\172\1\uffff\1\172"+
|
@@ -867,8 +862,8 @@ public class UIQueryLexer extends Lexer {
|
|
867
862
|
static final String DFA10_specialS =
|
868
863
|
"\32\uffff}>";
|
869
864
|
static final String[] DFA10_transitionS = {
|
870
|
-
"\1\7\10\uffff\12\3\1\2\6\uffff\32\6\4\uffff\1\6
|
871
|
-
"\1\4\7\6\1\5\5\6\1\1\6\6",
|
865
|
+
"\1\10\6\uffff\1\7\10\uffff\12\3\1\2\6\uffff\32\6\4\uffff\1\6"+
|
866
|
+
"\1\uffff\5\6\1\4\7\6\1\5\5\6\1\1\6\6",
|
872
867
|
"\1\14\1\uffff\12\12\7\uffff\32\12\4\uffff\1\12\1\uffff\21\12"+
|
873
868
|
"\1\11\10\12",
|
874
869
|
"",
|
@@ -1,4 +1,4 @@
|
|
1
|
-
// $ANTLR 3.4 antlr/UIQuery.g 2012-12-
|
1
|
+
// $ANTLR 3.4 antlr/UIQuery.g 2012-12-27 13:48:21
|
2
2
|
|
3
3
|
package sh.calaba.instrumentationbackend.query.antlr;
|
4
4
|
|
@@ -58,6 +58,24 @@ public TreeAdaptor getTreeAdaptor() {
|
|
58
58
|
public String getGrammarFileName() { return "antlr/UIQuery.g"; }
|
59
59
|
|
60
60
|
|
61
|
+
public String getErrorMessage(RecognitionException e, String[] tokenNames)
|
62
|
+
{
|
63
|
+
List stack = getRuleInvocationStack(e, this.getClass().getName());
|
64
|
+
String msg = null;
|
65
|
+
if ( e instanceof NoViableAltException ) {
|
66
|
+
NoViableAltException nvae = (NoViableAltException)e;
|
67
|
+
msg = " no viable alt; token="+e.token+" (decision="+nvae.decisionNumber+" state "+nvae.stateNumber+")"+" decision=<<"+nvae.grammarDecisionDescription+">>";
|
68
|
+
}
|
69
|
+
else {
|
70
|
+
msg = super.getErrorMessage(e, tokenNames);
|
71
|
+
}
|
72
|
+
return stack+" "+msg;
|
73
|
+
}
|
74
|
+
public String getTokenErrorDisplay(Token t) {
|
75
|
+
return t.toString();
|
76
|
+
}
|
77
|
+
|
78
|
+
|
61
79
|
public static class query_return extends ParserRuleReturnScope {
|
62
80
|
CommonTree tree;
|
63
81
|
public Object getTree() { return tree; }
|
@@ -65,7 +83,7 @@ public TreeAdaptor getTreeAdaptor() {
|
|
65
83
|
|
66
84
|
|
67
85
|
// $ANTLR start "query"
|
68
|
-
// antlr/UIQuery.g:
|
86
|
+
// antlr/UIQuery.g:34:1: query : expr ( WHITE ! expr )* ;
|
69
87
|
public final UIQueryParser.query_return query() throws RecognitionException {
|
70
88
|
UIQueryParser.query_return retval = new UIQueryParser.query_return();
|
71
89
|
retval.start = input.LT(1);
|
@@ -82,20 +100,20 @@ public TreeAdaptor getTreeAdaptor() {
|
|
82
100
|
CommonTree WHITE2_tree=null;
|
83
101
|
|
84
102
|
try {
|
85
|
-
// antlr/UIQuery.g:
|
86
|
-
// antlr/UIQuery.g:
|
103
|
+
// antlr/UIQuery.g:34:7: ( expr ( WHITE ! expr )* )
|
104
|
+
// antlr/UIQuery.g:34:9: expr ( WHITE ! expr )*
|
87
105
|
{
|
88
106
|
root_0 = (CommonTree)adaptor.nil();
|
89
107
|
|
90
108
|
|
91
|
-
pushFollow(
|
109
|
+
pushFollow(FOLLOW_expr_in_query53);
|
92
110
|
expr1=expr();
|
93
111
|
|
94
112
|
state._fsp--;
|
95
113
|
|
96
114
|
adaptor.addChild(root_0, expr1.getTree());
|
97
115
|
|
98
|
-
// antlr/UIQuery.g:
|
116
|
+
// antlr/UIQuery.g:34:14: ( WHITE ! expr )*
|
99
117
|
loop1:
|
100
118
|
do {
|
101
119
|
int alt1=2;
|
@@ -108,11 +126,11 @@ public TreeAdaptor getTreeAdaptor() {
|
|
108
126
|
|
109
127
|
switch (alt1) {
|
110
128
|
case 1 :
|
111
|
-
// antlr/UIQuery.g:
|
129
|
+
// antlr/UIQuery.g:34:15: WHITE ! expr
|
112
130
|
{
|
113
|
-
WHITE2=(Token)match(input,WHITE,
|
131
|
+
WHITE2=(Token)match(input,WHITE,FOLLOW_WHITE_in_query56);
|
114
132
|
|
115
|
-
pushFollow(
|
133
|
+
pushFollow(FOLLOW_expr_in_query59);
|
116
134
|
expr3=expr();
|
117
135
|
|
118
136
|
state._fsp--;
|
@@ -159,7 +177,7 @@ public TreeAdaptor getTreeAdaptor() {
|
|
159
177
|
|
160
178
|
|
161
179
|
// $ANTLR start "expr"
|
162
|
-
// antlr/UIQuery.g:
|
180
|
+
// antlr/UIQuery.g:38:1: expr : ( className | filter ) ;
|
163
181
|
public final UIQueryParser.expr_return expr() throws RecognitionException {
|
164
182
|
UIQueryParser.expr_return retval = new UIQueryParser.expr_return();
|
165
183
|
retval.start = input.LT(1);
|
@@ -174,13 +192,13 @@ public TreeAdaptor getTreeAdaptor() {
|
|
174
192
|
|
175
193
|
|
176
194
|
try {
|
177
|
-
// antlr/UIQuery.g:
|
178
|
-
// antlr/UIQuery.g:
|
195
|
+
// antlr/UIQuery.g:38:6: ( ( className | filter ) )
|
196
|
+
// antlr/UIQuery.g:38:8: ( className | filter )
|
179
197
|
{
|
180
198
|
root_0 = (CommonTree)adaptor.nil();
|
181
199
|
|
182
200
|
|
183
|
-
// antlr/UIQuery.g:
|
201
|
+
// antlr/UIQuery.g:38:8: ( className | filter )
|
184
202
|
int alt2=2;
|
185
203
|
int LA2_0 = input.LA(1);
|
186
204
|
|
@@ -213,9 +231,9 @@ public TreeAdaptor getTreeAdaptor() {
|
|
213
231
|
}
|
214
232
|
switch (alt2) {
|
215
233
|
case 1 :
|
216
|
-
// antlr/UIQuery.g:
|
234
|
+
// antlr/UIQuery.g:38:9: className
|
217
235
|
{
|
218
|
-
pushFollow(
|
236
|
+
pushFollow(FOLLOW_className_in_expr77);
|
219
237
|
className4=className();
|
220
238
|
|
221
239
|
state._fsp--;
|
@@ -225,9 +243,9 @@ public TreeAdaptor getTreeAdaptor() {
|
|
225
243
|
}
|
226
244
|
break;
|
227
245
|
case 2 :
|
228
|
-
// antlr/UIQuery.g:
|
246
|
+
// antlr/UIQuery.g:38:21: filter
|
229
247
|
{
|
230
|
-
pushFollow(
|
248
|
+
pushFollow(FOLLOW_filter_in_expr81);
|
231
249
|
filter5=filter();
|
232
250
|
|
233
251
|
state._fsp--;
|
@@ -271,7 +289,7 @@ public TreeAdaptor getTreeAdaptor() {
|
|
271
289
|
|
272
290
|
|
273
291
|
// $ANTLR start "className"
|
274
|
-
// antlr/UIQuery.g:
|
292
|
+
// antlr/UIQuery.g:41:1: className : ( NAME ^| QUALIFIED_NAME ^) ;
|
275
293
|
public final UIQueryParser.className_return className() throws RecognitionException {
|
276
294
|
UIQueryParser.className_return retval = new UIQueryParser.className_return();
|
277
295
|
retval.start = input.LT(1);
|
@@ -286,13 +304,13 @@ public TreeAdaptor getTreeAdaptor() {
|
|
286
304
|
CommonTree QUALIFIED_NAME7_tree=null;
|
287
305
|
|
288
306
|
try {
|
289
|
-
// antlr/UIQuery.g:
|
290
|
-
// antlr/UIQuery.g:
|
307
|
+
// antlr/UIQuery.g:41:13: ( ( NAME ^| QUALIFIED_NAME ^) )
|
308
|
+
// antlr/UIQuery.g:41:17: ( NAME ^| QUALIFIED_NAME ^)
|
291
309
|
{
|
292
310
|
root_0 = (CommonTree)adaptor.nil();
|
293
311
|
|
294
312
|
|
295
|
-
// antlr/UIQuery.g:
|
313
|
+
// antlr/UIQuery.g:41:17: ( NAME ^| QUALIFIED_NAME ^)
|
296
314
|
int alt3=2;
|
297
315
|
int LA3_0 = input.LA(1);
|
298
316
|
|
@@ -311,9 +329,9 @@ public TreeAdaptor getTreeAdaptor() {
|
|
311
329
|
}
|
312
330
|
switch (alt3) {
|
313
331
|
case 1 :
|
314
|
-
// antlr/UIQuery.g:
|
332
|
+
// antlr/UIQuery.g:41:18: NAME ^
|
315
333
|
{
|
316
|
-
NAME6=(Token)match(input,NAME,
|
334
|
+
NAME6=(Token)match(input,NAME,FOLLOW_NAME_in_className99);
|
317
335
|
NAME6_tree =
|
318
336
|
(CommonTree)adaptor.create(NAME6)
|
319
337
|
;
|
@@ -323,9 +341,9 @@ public TreeAdaptor getTreeAdaptor() {
|
|
323
341
|
}
|
324
342
|
break;
|
325
343
|
case 2 :
|
326
|
-
// antlr/UIQuery.g:
|
344
|
+
// antlr/UIQuery.g:41:26: QUALIFIED_NAME ^
|
327
345
|
{
|
328
|
-
QUALIFIED_NAME7=(Token)match(input,QUALIFIED_NAME,
|
346
|
+
QUALIFIED_NAME7=(Token)match(input,QUALIFIED_NAME,FOLLOW_QUALIFIED_NAME_in_className104);
|
329
347
|
QUALIFIED_NAME7_tree =
|
330
348
|
(CommonTree)adaptor.create(QUALIFIED_NAME7)
|
331
349
|
;
|
@@ -369,7 +387,7 @@ public TreeAdaptor getTreeAdaptor() {
|
|
369
387
|
|
370
388
|
|
371
389
|
// $ANTLR start "filter"
|
372
|
-
// antlr/UIQuery.g:
|
390
|
+
// antlr/UIQuery.g:45:1: filter : NAME FILTER_COLON ^ ( INT | STRING | BOOL | NIL ) ;
|
373
391
|
public final UIQueryParser.filter_return filter() throws RecognitionException {
|
374
392
|
UIQueryParser.filter_return retval = new UIQueryParser.filter_return();
|
375
393
|
retval.start = input.LT(1);
|
@@ -386,20 +404,20 @@ public TreeAdaptor getTreeAdaptor() {
|
|
386
404
|
CommonTree set10_tree=null;
|
387
405
|
|
388
406
|
try {
|
389
|
-
// antlr/UIQuery.g:
|
390
|
-
// antlr/UIQuery.g:
|
407
|
+
// antlr/UIQuery.g:45:8: ( NAME FILTER_COLON ^ ( INT | STRING | BOOL | NIL ) )
|
408
|
+
// antlr/UIQuery.g:45:10: NAME FILTER_COLON ^ ( INT | STRING | BOOL | NIL )
|
391
409
|
{
|
392
410
|
root_0 = (CommonTree)adaptor.nil();
|
393
411
|
|
394
412
|
|
395
|
-
NAME8=(Token)match(input,NAME,
|
413
|
+
NAME8=(Token)match(input,NAME,FOLLOW_NAME_in_filter129);
|
396
414
|
NAME8_tree =
|
397
415
|
(CommonTree)adaptor.create(NAME8)
|
398
416
|
;
|
399
417
|
adaptor.addChild(root_0, NAME8_tree);
|
400
418
|
|
401
419
|
|
402
|
-
FILTER_COLON9=(Token)match(input,FILTER_COLON,
|
420
|
+
FILTER_COLON9=(Token)match(input,FILTER_COLON,FOLLOW_FILTER_COLON_in_filter131);
|
403
421
|
FILTER_COLON9_tree =
|
404
422
|
(CommonTree)adaptor.create(FILTER_COLON9)
|
405
423
|
;
|
@@ -449,15 +467,15 @@ public TreeAdaptor getTreeAdaptor() {
|
|
449
467
|
|
450
468
|
|
451
469
|
|
452
|
-
public static final BitSet
|
453
|
-
public static final BitSet
|
454
|
-
public static final BitSet
|
455
|
-
public static final BitSet
|
456
|
-
public static final BitSet
|
457
|
-
public static final BitSet
|
458
|
-
public static final BitSet
|
459
|
-
public static final BitSet
|
460
|
-
public static final BitSet
|
461
|
-
public static final BitSet
|
470
|
+
public static final BitSet FOLLOW_expr_in_query53 = new BitSet(new long[]{0x0000000000008002L});
|
471
|
+
public static final BitSet FOLLOW_WHITE_in_query56 = new BitSet(new long[]{0x0000000000001200L});
|
472
|
+
public static final BitSet FOLLOW_expr_in_query59 = new BitSet(new long[]{0x0000000000008002L});
|
473
|
+
public static final BitSet FOLLOW_className_in_expr77 = new BitSet(new long[]{0x0000000000000002L});
|
474
|
+
public static final BitSet FOLLOW_filter_in_expr81 = new BitSet(new long[]{0x0000000000000002L});
|
475
|
+
public static final BitSet FOLLOW_NAME_in_className99 = new BitSet(new long[]{0x0000000000000002L});
|
476
|
+
public static final BitSet FOLLOW_QUALIFIED_NAME_in_className104 = new BitSet(new long[]{0x0000000000000002L});
|
477
|
+
public static final BitSet FOLLOW_NAME_in_filter129 = new BitSet(new long[]{0x0000000000000040L});
|
478
|
+
public static final BitSet FOLLOW_FILTER_COLON_in_filter131 = new BitSet(new long[]{0x0000000000002510L});
|
479
|
+
public static final BitSet FOLLOW_set_in_filter134 = new BitSet(new long[]{0x0000000000000002L});
|
462
480
|
|
463
481
|
}
|
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.
|
4
|
+
version: 0.4.0.pre5
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -374,7 +374,6 @@ files:
|
|
374
374
|
- test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/QueryResult.java
|
375
375
|
- test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/UIQuery.tokens
|
376
376
|
- test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ViewMapper.java
|
377
|
-
- test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/antlr/UIQuery.tokens
|
378
377
|
- test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/antlr/UIQueryLexer.java
|
379
378
|
- test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/antlr/UIQueryParser.java
|
380
379
|
- test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/query/ast/InvalidUIQueryException.java
|