calabash-android 0.4.0.pre4 → 0.4.0.pre5
Sign up to get free protection for your applications and to get access to all the features.
- 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
|