calabash-cucumber 0.9.63 → 0.9.65

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/Gemfile.lock CHANGED
@@ -1,12 +1,12 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- calabash-cucumber (0.9.62)
4
+ calabash-cucumber (0.9.65)
5
5
  CFPropertyList
6
6
  cucumber
7
7
  json
8
8
  net-http-persistent
9
- sim_launcher
9
+ sim_launcher (= 0.4.1.pre2)
10
10
  slowhandcuke
11
11
 
12
12
  GEM
@@ -32,7 +32,7 @@ GEM
32
32
  rack-protection (1.2.0)
33
33
  rack
34
34
  rake (0.9.2.2)
35
- sim_launcher (0.3.8)
35
+ sim_launcher (0.4.1.pre2)
36
36
  sinatra
37
37
  sinatra (1.3.2)
38
38
  rack (~> 1.3, >= 1.3.6)
@@ -19,7 +19,7 @@ Gem::Specification.new do |s|
19
19
  s.add_dependency( "cucumber" )
20
20
  s.add_dependency( "json" )
21
21
  s.add_dependency( "CFPropertyList" )
22
- s.add_dependency( "sim_launcher" )
22
+ s.add_dependency( "sim_launcher", "0.3.8")
23
23
  s.add_dependency( "slowhandcuke" )
24
24
  s.add_dependency( "net-http-persistent" )
25
25
 
@@ -0,0 +1,374 @@
1
+ WAIT_TIMEOUT = ENV['WAIT_TIMEOUT'] || 30
2
+ STEP_PAUSE = (ENV['STEP_PAUSE'] || 0.5).to_f
3
+
4
+ Given /^(my|the) app is running$/ do |_|
5
+ #no-op exists for backwards compatibility
6
+ end
7
+
8
+
9
+ # -- Touch --#
10
+ Then /^I (?:press|touch) on screen (\d+) from the left and (\d+) from the top$/ do |x, y|
11
+ touch(nil, {:offset => {:x => x.to_i, :y => y.to_i}})
12
+ sleep(STEP_PAUSE)
13
+ end
14
+
15
+ Then /^I (?:press|touch) "([^\"]*)"$/ do |name|
16
+ touch("view marked:'#{name}'")
17
+ sleep(STEP_PAUSE)
18
+ end
19
+
20
+ Then /^I (?:press|touch) (\d+)% right and (\d+)% down from "([^\"]*)" $/ do |x,y,name|
21
+ raise "This step is not yet implemented on iOS"
22
+ end
23
+
24
+ Then /^I (?:press|touch) button number (\d+)$/ do |index|
25
+ index = index.to_i
26
+ screenshot_and_raise "Index should be positive (was: #{index})" if (index<=0)
27
+ touch("button index:#{index-1}")
28
+ sleep(STEP_PAUSE)
29
+ end
30
+
31
+ Then /^I (?:press|touch) the "([^\"]*)" button$/ do |name|
32
+ touch("button marked:'#{name}'")
33
+ sleep(STEP_PAUSE)
34
+ end
35
+
36
+ Then /^I (?:press|touch) the "([^\"]*)" (?:input|text) field$/ do |name|
37
+ touch("textField placeholder:'#{name}'")
38
+ sleep(STEP_PAUSE)
39
+ end
40
+
41
+ #Note in tables views: this means visible cell index!
42
+ Then /^I (?:press|touch) list item number (\d+)$/ do |index|
43
+ index = index.to_i
44
+ screenshot_and_raise "Index should be positive (was: #{index})" if (index<=0)
45
+ touch("tableViewCell index:#{index-1}")
46
+ sleep(STEP_PAUSE)
47
+ end
48
+
49
+ Then /^I toggle the switch$/ do
50
+ touch("switch")
51
+ sleep(STEP_PAUSE)
52
+ end
53
+
54
+ Then /^I toggle the "([^\"]*)" switch$/ do |name|
55
+ touch("switch marked:'#{name}'")
56
+ sleep(STEP_PAUSE)
57
+ end
58
+
59
+ Then /^I touch (?:the)? user location$/ do
60
+ touch("view:'MKUserLocationView'")
61
+ sleep(STEP_PAUSE)
62
+ end
63
+
64
+ Then /^I (?:touch|press) (?:done|search)$/ do
65
+ done
66
+ sleep(STEP_PAUSE)
67
+ end
68
+
69
+
70
+ ## -- Entering text -- ##
71
+ Then /^I enter "([^\"]*)" into the "([^\"]*)" (?:text|input) field$/ do |text_to_type, field_name|
72
+ set_text("textField placeholder:'#{field_name}'", text_to_type)
73
+ sleep(STEP_PAUSE)
74
+ end
75
+
76
+ # alias
77
+ Then /^I fill in "([^\"]*)" with "([^\"]*)"$/ do |text_field, text_to_type|
78
+ macro %Q|I enter "#{text_to_type}" into the "#{text_field}" text field|
79
+ end
80
+
81
+ Then /^I use the native keyboard to enter "([^\"]*)" into the "([^\"]*)" (?:text|input) field$/ do |text_to_type, field_name|
82
+ raise "Native keyboard entering is not yet implemented on iOS"
83
+ end
84
+
85
+ Then /^I fill in text fields as follows:$/ do |table|
86
+ table.hashes.each do |row|
87
+ macro %Q|I enter "#{row['text']}" into the "#{row['field']}" text field|
88
+ end
89
+ end
90
+
91
+ Then /^I enter "([^\"]*)" into (?:input|text) field number (\d+)$/ do |text, index|
92
+ index = index.to_i
93
+ screenshot_and_raise "Index should be positive (was: #{index})" if (index<=0)
94
+ set_text("textField index:#{index-1}",text)
95
+ end
96
+
97
+ Then /^I use the native keyboard to enter "([^\"]*)" into (?:input|text) field number (\d+)$/ do |text, index|
98
+ raise "Native keyboard entering is not yet implemented on iOS"
99
+ end
100
+
101
+
102
+ When /^I clear "([^\"]*)"$/ do |name|
103
+ macro %Q|I enter "" into the "#{name}" text field|
104
+ end
105
+
106
+ Then /^I clear (?:input|text) field number (\d+)$/ do |index|
107
+ index = index.to_i
108
+ screenshot_and_raise "Index should be positive (was: #{index})" if (index<=0)
109
+ set_text("textField index:#{index-1}","")
110
+ end
111
+
112
+ # -- See -- #
113
+ Then /^I wait to see "([^\"]*)"$/ do |expected_mark|
114
+ wait_for(WAIT_TIMEOUT) { view_with_mark_exists( expected_mark ) }
115
+ end
116
+
117
+ Then /^I wait until I don't see "([^\"]*)"$/ do |expected_mark|
118
+ sleep 1## wait for previous screen to disappear
119
+ wait_for(WAIT_TIMEOUT) { not element_exists( "view marked:'#{expected_mark}'" )}
120
+ end
121
+
122
+ Then /^I wait to not see "([^\"]*)"$/ do |expected_mark|
123
+ macro %Q|I wait until I don't see "#{expected_mark}"|
124
+ end
125
+
126
+ Then /^I wait for "([^\"]*)" to appear$/ do |name|
127
+ macro %Q|I wait to see "#{name}"|
128
+ end
129
+
130
+ Then /^I wait for the "([^\"]*)" button to appear$/ do |name|
131
+ wait_for(WAIT_TIMEOUT) { element_exists( "button marked:'#{name}'" ) }
132
+ end
133
+
134
+
135
+ Then /^I wait to see a navigation bar titled "([^\"]*)"$/ do |expected_mark|
136
+ wait_for(WAIT_TIMEOUT) do
137
+ query('navigationItemView', :accessibilityLabel).include?(expected_mark)
138
+ end
139
+ end
140
+
141
+ Then /^I wait for the "([^\"]*)" (?:input|text) field$/ do |placeholder|
142
+ wait_for(WAIT_TIMEOUT) { element_exists( "textField placeholder:'#{placeholder}'") }
143
+ end
144
+
145
+ Then /^I wait for (\d+) (?:input|text) field(?:s)?$/ do |count|
146
+ count = count.to_i
147
+ wait_for(WAIT_TIMEOUT) { query(:textField).count >= count }
148
+ end
149
+
150
+
151
+ Then /^I wait$/ do
152
+ sleep 2
153
+ end
154
+
155
+ Then /^I wait and wait$/ do
156
+ sleep 4
157
+ end
158
+
159
+ Then /^I wait and wait and wait...$/ do
160
+ sleep 10
161
+ end
162
+
163
+ When /^I wait for ([\d\.]+) second(?:s)?$/ do |num_seconds|
164
+ num_seconds = num_seconds.to_f
165
+ sleep num_seconds
166
+ end
167
+
168
+
169
+ Then /^I go back$/ do
170
+ touch("navigationItemButtonView first")
171
+ sleep(STEP_PAUSE)
172
+ end
173
+
174
+ Then /^(?:I\s)?take (?:picture|screenshot)$/ do
175
+ sleep(STEP_PAUSE)
176
+ screenshot
177
+ end
178
+
179
+ Then /^I swipe (left|right|up|down)$/ do |dir|
180
+ swipe(dir)
181
+ sleep(STEP_PAUSE)
182
+ end
183
+
184
+ Then /^I swipe (left|right|up|down) on number (\d+)$/ do |dir, index|
185
+ index = index.to_i
186
+ screenshot_and_raise "Index should be positive (was: #{index})" if (index<=0)
187
+ swipe(dir, {:query => "scrollView index:#{index-1}"})
188
+ sleep(STEP_PAUSE)
189
+ end
190
+
191
+ Then /^I swipe (left|right|up|down) on number (\d+) at x (\d+) and y (\d+)$/ do |dir, index, x, y|
192
+ index = index.to_i
193
+ screenshot_and_raise "Index should be positive (was: #{index})" if (index<=0)
194
+ swipe(dir, {:offset => {:x => x.to_i, :y => y.to_i}, :query => "scrollView index:#{index-1}"})
195
+ sleep(STEP_PAUSE)
196
+ end
197
+
198
+ Then /^I swipe (left|right|up|down) on "([^\"]*)"$/ do |dir, mark|
199
+ swipe(dir, {:query => "view marked:'#{mark}'"})
200
+ sleep(STEP_PAUSE)
201
+ end
202
+
203
+ Then /^I swipe on cell number (\d+)$/ do |index|
204
+ index = index.to_i
205
+ screenshot_and_raise "Index should be positive (was: #{index})" if (index<=0)
206
+ cell_swipe({:query => "tableViewCell index:#{index-1}"})
207
+ sleep(STEP_PAUSE)
208
+ end
209
+
210
+
211
+ ##pinch##
212
+ Then /^I pinch to zoom (in|out)$/ do |in_out|
213
+ pinch(in_out)
214
+ sleep(STEP_PAUSE)
215
+ end
216
+
217
+ Then /^I pinch to zoom (in|out) on "([^\"]*)"$/ do |in_out, name|
218
+ pinch(in_out,{:query => "view marked:'#{name}'"})
219
+ sleep(STEP_PAUSE)
220
+ end
221
+
222
+ # Note "up/left/right" seems to be missing on the web page
223
+ Then /^I scroll (left|right|up|down)$/ do |dir|
224
+ scroll("scrollView index:0", dir)
225
+ sleep(STEP_PAUSE)
226
+ end
227
+
228
+ Then /^I scroll (left|right|up|down) on "([^\"]*)"$/ do |dir,name|
229
+ scroll("view marked:'#{name}'", dir)
230
+ sleep(STEP_PAUSE)
231
+ end
232
+
233
+
234
+
235
+ ### Playback ###
236
+ Then /^I playback recording "([^\"]*)"$/ do |filename|
237
+ playback(filename)
238
+ sleep(STEP_PAUSE)
239
+ end
240
+
241
+ Then /^I playback recording "([^\"]*)" on "([^\"]*)"$/ do |filename, name|
242
+ playback(filename, {:query => "view marked:'#{name}'"})
243
+ sleep(STEP_PAUSE)
244
+ end
245
+
246
+ Then /^I playback recording "([^\"]*)" on "([^\"]*)" with offset (\d+),(\d+)$/ do |filename, name, x, y|
247
+ x = x.to_i
248
+ y = y.to_i
249
+ playback(filename, {:query => "view marked:'#{name}'", :offset => {:x => x, :y => y}})
250
+ sleep(STEP_PAUSE)
251
+ end
252
+
253
+ Then /^I reverse playback recording "([^\"]*)"$/ do |filename|
254
+ playback(filename, {:reverse => true})
255
+ sleep(STEP_PAUSE)
256
+ end
257
+
258
+ Then /^I reverse playback recording "([^\"]*)" on "([^\"]*)"$/ do |filename, name|
259
+ playback(filename, {:query => "view marked:'#{name}'",:reverse => true})
260
+ sleep(STEP_PAUSE)
261
+ end
262
+
263
+ Then /^I reverse playback recording "([^\"]*)" on "([^\"]*)" with offset (\d+),(\d+)$/ do |filename, name, x, y|
264
+ x = x.to_i
265
+ y = y.to_i
266
+ playback(filename, {:query => "view marked:'#{name}'", :offset => {:x => x, :y => y},:reverse => true})
267
+ sleep(STEP_PAUSE)
268
+ end
269
+
270
+
271
+ ### Device orientation ###
272
+ Then /^I rotate device (left|right)$/ do |dir|
273
+ dir = dir.to_sym
274
+ rotate(dir)
275
+ sleep(5)#SERVO wait
276
+ end
277
+
278
+ Then /^I send app to background for (\d+) seconds$/ do |secs|
279
+ secs = secs.to_f
280
+ background(secs)
281
+ sleep(secs+10)
282
+ end
283
+
284
+ ### Assertions ###
285
+ Then /^I should see "([^\"]*)"$/ do |expected_mark|
286
+ res = (element_exists( "view marked:'#{expected_mark}'" ) or
287
+ element_exists( "view text:'#{expected_mark}'"))
288
+ if not res
289
+ screenshot_and_raise "No element found with mark or text: #{expected_mark}"
290
+ end
291
+ end
292
+
293
+ Then /^I should not see "([^\"]*)"$/ do |expected_mark|
294
+ res = query("view marked:'#{expected_mark}'")
295
+ res.concat query("view text:'#{expected_mark}'")
296
+ unless res.empty?
297
+ screenshot_and_raise "Expected no element with text nor accessibilityLabel: #{expected_mark}, found #{res.join(", ")}"
298
+ end
299
+ end
300
+
301
+ Then /^I should see a "([^\"]*)" button$/ do |expected_mark|
302
+ check_element_exists("button marked:'#{expected_mark}'")
303
+ end
304
+ Then /^I should not see a "([^\"]*)" button$/ do |expected_mark|
305
+ check_element_does_not_exist("button marked:'#{expected_mark}'")
306
+ end
307
+
308
+ Then /^I don't see the text "([^\"]*)"$/ do |text|
309
+ macro %Q|I should not see "#{text}"|
310
+ end
311
+ Then /^I don't see the "([^\"]*)"$/ do |text|
312
+ macro %Q|I should not see "#{text}"|
313
+ end
314
+
315
+ Then /^I see the text "([^\"]*)"$/ do |text|
316
+ macro %Q|I should see "#{text}"|
317
+ end
318
+ Then /^I see the "([^\"]*)"$/ do |text|
319
+ macro %Q|I should see "#{text}"|
320
+ end
321
+
322
+ Then /^I (?:should)? see text starting with "([^\"]*)"$/ do |text|
323
+ res = query("view {text BEGINSWITH '#{text}'}").empty?
324
+ if res
325
+ screenshot_and_raise "No text found starting with: #{text}"
326
+ end
327
+ end
328
+
329
+ Then /^I (?:should)? see text containing "([^\"]*)"$/ do |text|
330
+ res = query("view {text LIKE '*#{text}*'}").empty?
331
+ if res
332
+ screenshot_and_raise "No text found containing: #{text}"
333
+ end
334
+ end
335
+
336
+ Then /^I (?:should)? see text ending with "([^\"]*)"$/ do |text|
337
+ res = query("view {text ENDSWITH '#{text}'}").empty?
338
+ if res
339
+ screenshot_and_raise "No text found ending with: #{text}"
340
+ end
341
+ end
342
+
343
+ Then /^I see (\d+) (?:input|text) field(?:s)?$/ do |count|
344
+ count = count.to_i
345
+ cnt = query(:textField).count
346
+ if cnt < count
347
+ screenshot_and_raise "Expected at least #{count} text/input fields, found #{cnt}"
348
+ end
349
+ end
350
+
351
+ Then /^I should see a "([^\"]*)" (?:input|text) field$/ do |expected_mark|
352
+ res = element_exists("textField placeholder:'#{expected_mark}'") or
353
+ element_exists("textField marked:'#{expected_mark}'")
354
+ unless res
355
+ screenshot_and_raise "Expected textfield with placeholder or accessibilityLabel: #{txt}"
356
+ end
357
+ end
358
+
359
+ Then /^I should not see a "([^\"]*)" (?:input|text) field$/ do |expected_mark|
360
+ res = query("textField placeholder:'#{expected_mark}'")
361
+ res.concat query("textField marked:'#{expected_mark}'")
362
+ unless res.empty?
363
+ screenshot_and_raise "Expected no textfield with placeholder nor accessibilityLabel: #{txt}, found #{res}"
364
+ end
365
+ end
366
+
367
+
368
+ Then /^I should see a map$/ do
369
+ check_element_exists("view:'MKMapView'")
370
+ end
371
+
372
+ Then /^I should see (?:the)? user location$/ do
373
+ check_element_exists("view:'MKUserLocationView'")
374
+ end
@@ -1,374 +1 @@
1
- WAIT_TIMEOUT = ENV['WAIT_TIMEOUT'] || 30
2
- STEP_PAUSE = (ENV['STEP_PAUSE'] || 0.5).to_f
3
-
4
- Given /^(my|the) app is running$/ do |_|
5
- #no-op exists for backwards compatibility
6
- end
7
-
8
-
9
- # -- Touch --#
10
- Then /^I (?:press|touch) on screen (\d+) from the left and (\d+) from the top$/ do |x, y|
11
- touch(nil, {:offset => {:x => x.to_i, :y => y.to_i}})
12
- sleep(STEP_PAUSE)
13
- end
14
-
15
- Then /^I (?:press|touch) "([^\"]*)"$/ do |name|
16
- touch("view marked:'#{name}'")
17
- sleep(STEP_PAUSE)
18
- end
19
-
20
- Then /^I (?:press|touch) (\d+)% right and (\d+)% down from "([^\"]*)" $/ do |x,y,name|
21
- raise "This step is not yet implemented on iOS"
22
- end
23
-
24
- Then /^I (?:press|touch) button number (\d+)$/ do |index|
25
- index = index.to_i
26
- screenshot_and_raise "Index should be positive (was: #{index})" if (index<=0)
27
- touch("button index:#{index-1}")
28
- sleep(STEP_PAUSE)
29
- end
30
-
31
- Then /^I (?:press|touch) the "([^\"]*)" button$/ do |name|
32
- touch("button marked:'#{name}'")
33
- sleep(STEP_PAUSE)
34
- end
35
-
36
- Then /^I (?:press|touch) the "([^\"]*)" (?:input|text) field$/ do |name|
37
- touch("textField placeholder:'#{name}'")
38
- sleep(STEP_PAUSE)
39
- end
40
-
41
- #Note in tables views: this means visible cell index!
42
- Then /^I (?:press|touch) list item number (\d+)$/ do |index|
43
- index = index.to_i
44
- screenshot_and_raise "Index should be positive (was: #{index})" if (index<=0)
45
- touch("tableViewCell index:#{index-1}")
46
- sleep(STEP_PAUSE)
47
- end
48
-
49
- Then /^I toggle the switch$/ do
50
- touch("switch")
51
- sleep(STEP_PAUSE)
52
- end
53
-
54
- Then /^I toggle the "([^\"]*)" switch$/ do |name|
55
- touch("switch marked:'#{name}'")
56
- sleep(STEP_PAUSE)
57
- end
58
-
59
- Then /^I touch (?:the)? user location$/ do
60
- touch("view:'MKUserLocationView'")
61
- sleep(STEP_PAUSE)
62
- end
63
-
64
- Then /^I (?:touch|press) (?:done|search)$/ do
65
- done
66
- sleep(STEP_PAUSE)
67
- end
68
-
69
-
70
- ## -- Entering text -- ##
71
- Then /^I enter "([^\"]*)" into the "([^\"]*)" (?:text|input) field$/ do |text_to_type, field_name|
72
- set_text("textField placeholder:'#{field_name}'", text_to_type)
73
- sleep(STEP_PAUSE)
74
- end
75
-
76
- # alias
77
- Then /^I fill in "([^\"]*)" with "([^\"]*)"$/ do |text_field, text_to_type|
78
- macro %Q|I enter "#{text_to_type}" into the "#{text_field}" text field|
79
- end
80
-
81
- Then /^I use the native keyboard to enter "([^\"]*)" into the "([^\"]*)" (?:text|input) field$/ do |text_to_type, field_name|
82
- raise "Native keyboard entering is not yet implemented on iOS"
83
- end
84
-
85
- Then /^I fill in text fields as follows:$/ do |table|
86
- table.hashes.each do |row|
87
- macro %Q|I enter "#{row['text']}" into the "#{row['field']}" text field|
88
- end
89
- end
90
-
91
- Then /^I enter "([^\"]*)" into (?:input|text) field number (\d+)$/ do |text, index|
92
- index = index.to_i
93
- screenshot_and_raise "Index should be positive (was: #{index})" if (index<=0)
94
- set_text("textField index:#{index-1}",text)
95
- end
96
-
97
- Then /^I use the native keyboard to enter "([^\"]*)" into (?:input|text) field number (\d+)$/ do |text, index|
98
- raise "Native keyboard entering is not yet implemented on iOS"
99
- end
100
-
101
-
102
- When /^I clear "([^\"]*)"$/ do |name|
103
- macro %Q|I enter "" into the "#{name}" text field|
104
- end
105
-
106
- Then /^I clear (?:input|text) field number (\d+)$/ do |index|
107
- index = index.to_i
108
- screenshot_and_raise "Index should be positive (was: #{index})" if (index<=0)
109
- set_text("textField index:#{index-1}","")
110
- end
111
-
112
- # -- See -- #
113
- Then /^I wait to see "([^\"]*)"$/ do |expected_mark|
114
- wait_for(WAIT_TIMEOUT) { view_with_mark_exists( expected_mark ) }
115
- end
116
-
117
- Then /^I wait until I don't see "([^\"]*)"$/ do |expected_mark|
118
- sleep 1## wait for previous screen to disappear
119
- wait_for(WAIT_TIMEOUT) { not element_exists( "view marked:'#{expected_mark}'" )}
120
- end
121
-
122
- Then /^I wait to not see "([^\"]*)"$/ do |expected_mark|
123
- macro %Q|I wait until I don't see "#{expected_mark}"|
124
- end
125
-
126
- Then /^I wait for "([^\"]*)" to appear$/ do |name|
127
- macro %Q|I wait to see "#{name}"|
128
- end
129
-
130
- Then /^I wait for the "([^\"]*)" button to appear$/ do |name|
131
- wait_for(WAIT_TIMEOUT) { element_exists( "button marked:'#{name}'" ) }
132
- end
133
-
134
-
135
- Then /^I wait to see a navigation bar titled "([^\"]*)"$/ do |expected_mark|
136
- wait_for(WAIT_TIMEOUT) do
137
- query('navigationItemView', :accessibilityLabel).include?(expected_mark)
138
- end
139
- end
140
-
141
- Then /^I wait for the "([^\"]*)" (?:input|text) field$/ do |placeholder|
142
- wait_for(WAIT_TIMEOUT) { element_exists( "textField placeholder:'#{placeholder}'") }
143
- end
144
-
145
- Then /^I wait for (\d+) (?:input|text) field(?:s)?$/ do |count|
146
- count = count.to_i
147
- wait_for(WAIT_TIMEOUT) { query(:textField).count >= count }
148
- end
149
-
150
-
151
- Then /^I wait$/ do
152
- sleep 2
153
- end
154
-
155
- Then /^I wait and wait$/ do
156
- sleep 4
157
- end
158
-
159
- Then /^I wait and wait and wait...$/ do
160
- sleep 10
161
- end
162
-
163
- When /^I wait for ([\d\.]+) second(?:s)?$/ do |num_seconds|
164
- num_seconds = num_seconds.to_f
165
- sleep num_seconds
166
- end
167
-
168
-
169
- Then /^I go back$/ do
170
- touch("navigationItemButtonView first")
171
- sleep(STEP_PAUSE)
172
- end
173
-
174
- Then /^(?:I\s)?take (?:picture|screenshot)$/ do
175
- sleep(STEP_PAUSE)
176
- screenshot
177
- end
178
-
179
- Then /^I swipe (left|right|up|down)$/ do |dir|
180
- swipe(dir)
181
- sleep(STEP_PAUSE)
182
- end
183
-
184
- Then /^I swipe (left|right|up|down) on number (\d+)$/ do |dir, index|
185
- index = index.to_i
186
- screenshot_and_raise "Index should be positive (was: #{index})" if (index<=0)
187
- swipe(dir, {:query => "scrollView index:#{index-1}"})
188
- sleep(STEP_PAUSE)
189
- end
190
-
191
- Then /^I swipe (left|right|up|down) on number (\d+) at x (\d+) and y (\d+)$/ do |dir, index, x, y|
192
- index = index.to_i
193
- screenshot_and_raise "Index should be positive (was: #{index})" if (index<=0)
194
- swipe(dir, {:offset => {:x => x.to_i, :y => y.to_i}, :query => "scrollView index:#{index-1}"})
195
- sleep(STEP_PAUSE)
196
- end
197
-
198
- Then /^I swipe (left|right|up|down) on "([^\"]*)"$/ do |dir, mark|
199
- swipe(dir, {:query => "view marked:'#{mark}'"})
200
- sleep(STEP_PAUSE)
201
- end
202
-
203
- Then /^I swipe on cell number (\d+)$/ do |index|
204
- index = index.to_i
205
- screenshot_and_raise "Index should be positive (was: #{index})" if (index<=0)
206
- cell_swipe({:query => "tableViewCell index:#{index-1}"})
207
- sleep(STEP_PAUSE)
208
- end
209
-
210
-
211
- ##pinch##
212
- Then /^I pinch to zoom (in|out)$/ do |in_out|
213
- pinch(in_out)
214
- sleep(STEP_PAUSE)
215
- end
216
-
217
- Then /^I pinch to zoom (in|out) on "([^\"]*)"$/ do |in_out, name|
218
- pinch(in_out,{:query => "view marked:'#{name}'"})
219
- sleep(STEP_PAUSE)
220
- end
221
-
222
- # Note "up/left/right" seems to be missing on the web page
223
- Then /^I scroll (left|right|up|down)$/ do |dir|
224
- scroll("scrollView index:0", dir)
225
- sleep(STEP_PAUSE)
226
- end
227
-
228
- Then /^I scroll (left|right|up|down) on "([^\"]*)"$/ do |dir,name|
229
- scroll("view marked:'#{name}'", dir)
230
- sleep(STEP_PAUSE)
231
- end
232
-
233
-
234
-
235
- ### Playback ###
236
- Then /^I playback recording "([^\"]*)"$/ do |filename|
237
- playback(filename)
238
- sleep(STEP_PAUSE)
239
- end
240
-
241
- Then /^I playback recording "([^\"]*)" on "([^\"]*)"$/ do |filename, name|
242
- playback(filename, {:query => "view marked:'#{name}'"})
243
- sleep(STEP_PAUSE)
244
- end
245
-
246
- Then /^I playback recording "([^\"]*)" on "([^\"]*)" with offset (\d+),(\d+)$/ do |filename, name, x, y|
247
- x = x.to_i
248
- y = y.to_i
249
- playback(filename, {:query => "view marked:'#{name}'", :offset => {:x => x, :y => y}})
250
- sleep(STEP_PAUSE)
251
- end
252
-
253
- Then /^I reverse playback recording "([^\"]*)"$/ do |filename|
254
- playback(filename, {:reverse => true})
255
- sleep(STEP_PAUSE)
256
- end
257
-
258
- Then /^I reverse playback recording "([^\"]*)" on "([^\"]*)"$/ do |filename, name|
259
- playback(filename, {:query => "view marked:'#{name}'",:reverse => true})
260
- sleep(STEP_PAUSE)
261
- end
262
-
263
- Then /^I reverse playback recording "([^\"]*)" on "([^\"]*)" with offset (\d+),(\d+)$/ do |filename, name, x, y|
264
- x = x.to_i
265
- y = y.to_i
266
- playback(filename, {:query => "view marked:'#{name}'", :offset => {:x => x, :y => y},:reverse => true})
267
- sleep(STEP_PAUSE)
268
- end
269
-
270
-
271
- ### Device orientation ###
272
- Then /^I rotate device (left|right)$/ do |dir|
273
- dir = dir.to_sym
274
- rotate(dir)
275
- sleep(5)#SERVO wait
276
- end
277
-
278
- Then /^I send app to background for (\d+) seconds$/ do |secs|
279
- secs = secs.to_f
280
- background(secs)
281
- sleep(secs+10)
282
- end
283
-
284
- ### Assertions ###
285
- Then /^I should see "([^\"]*)"$/ do |expected_mark|
286
- res = (element_exists( "view marked:'#{expected_mark}'" ) or
287
- element_exists( "view text:'#{expected_mark}'"))
288
- if not res
289
- screenshot_and_raise "No element found with mark or text: #{expected_mark}"
290
- end
291
- end
292
-
293
- Then /^I should not see "([^\"]*)"$/ do |expected_mark|
294
- res = query("view marked:'#{expected_mark}'")
295
- res.concat query("view text:'#{expected_mark}'")
296
- unless res.empty?
297
- screenshot_and_raise "Expected no element with text nor accessibilityLabel: #{expected_mark}, found #{res.join(", ")}"
298
- end
299
- end
300
-
301
- Then /^I should see a "([^\"]*)" button$/ do |expected_mark|
302
- check_element_exists("button marked:'#{expected_mark}'")
303
- end
304
- Then /^I should not see a "([^\"]*)" button$/ do |expected_mark|
305
- check_element_does_not_exist("button marked:'#{expected_mark}'")
306
- end
307
-
308
- Then /^I don't see the text "([^\"]*)"$/ do |text|
309
- macro %Q|I should not see "#{text}"|
310
- end
311
- Then /^I don't see the "([^\"]*)"$/ do |text|
312
- macro %Q|I should not see "#{text}"|
313
- end
314
-
315
- Then /^I see the text "([^\"]*)"$/ do |text|
316
- macro %Q|I should see "#{text}"|
317
- end
318
- Then /^I see the "([^\"]*)"$/ do |text|
319
- macro %Q|I should see "#{text}"|
320
- end
321
-
322
- Then /^I (?:should)? see text starting with "([^\"]*)"$/ do |text|
323
- res = query("view {text BEGINSWITH '#{text}'}").empty?
324
- if res
325
- screenshot_and_raise "No text found starting with: #{text}"
326
- end
327
- end
328
-
329
- Then /^I (?:should)? see text containing "([^\"]*)"$/ do |text|
330
- res = query("view {text LIKE '*#{text}*'}").empty?
331
- if res
332
- screenshot_and_raise "No text found containing: #{text}"
333
- end
334
- end
335
-
336
- Then /^I (?:should)? see text ending with "([^\"]*)"$/ do |text|
337
- res = query("view {text ENDSWITH '#{text}'}").empty?
338
- if res
339
- screenshot_and_raise "No text found ending with: #{text}"
340
- end
341
- end
342
-
343
- Then /^I see (\d+) (?:input|text) field(?:s)?$/ do |count|
344
- count = count.to_i
345
- cnt = query(:textField).count
346
- if cnt < count
347
- screenshot_and_raise "Expected at least #{count} text/input fields, found #{cnt}"
348
- end
349
- end
350
-
351
- Then /^I should see a "([^\"]*)" (?:input|text) field$/ do |expected_mark|
352
- res = element_exists("textField placeholder:'#{expected_mark}'") or
353
- element_exists("textField marked:'#{expected_mark}'")
354
- unless res
355
- screenshot_and_raise "Expected textfield with placeholder or accessibilityLabel: #{txt}"
356
- end
357
- end
358
-
359
- Then /^I should not see a "([^\"]*)" (?:input|text) field$/ do |expected_mark|
360
- res = query("textField placeholder:'#{expected_mark}'")
361
- res.concat query("textField marked:'#{expected_mark}'")
362
- unless res.empty?
363
- screenshot_and_raise "Expected no textfield with placeholder nor accessibilityLabel: #{txt}, found #{res}"
364
- end
365
- end
366
-
367
-
368
- Then /^I should see a map$/ do
369
- check_element_exists("view:'MKMapView'")
370
- end
371
-
372
- Then /^I should see (?:the)? user location$/ do
373
- check_element_exists("view:'MKUserLocationView'")
374
- end
1
+ require File.join(File.dirname(__FILE__),'..','..','features','step_definitions',"calabash_steps")
@@ -1,6 +1,6 @@
1
1
  module Calabash
2
2
  module Cucumber
3
- VERSION = "0.9.63"
3
+ VERSION = "0.9.65"
4
4
  FRAMEWORK_VERSION = "0.9.63"
5
5
  end
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: calabash-cucumber
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.63
4
+ version: 0.9.65
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-12 00:00:00.000000000 Z
12
+ date: 2012-06-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: cucumber
16
- requirement: &70095560796720 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70095560796720
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: json
27
- requirement: &70095560795080 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ! '>='
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: '0'
33
38
  type: :runtime
34
39
  prerelease: false
35
- version_requirements: *70095560795080
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: CFPropertyList
38
- requirement: &70095560793620 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ! '>='
@@ -43,21 +53,31 @@ dependencies:
43
53
  version: '0'
44
54
  type: :runtime
45
55
  prerelease: false
46
- version_requirements: *70095560793620
47
- - !ruby/object:Gem::Dependency
48
- name: sim_launcher
49
- requirement: &70095560792800 !ruby/object:Gem::Requirement
56
+ version_requirements: !ruby/object:Gem::Requirement
50
57
  none: false
51
58
  requirements:
52
59
  - - ! '>='
53
60
  - !ruby/object:Gem::Version
54
61
  version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: sim_launcher
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - '='
68
+ - !ruby/object:Gem::Version
69
+ version: 0.3.8
55
70
  type: :runtime
56
71
  prerelease: false
57
- version_requirements: *70095560792800
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - '='
76
+ - !ruby/object:Gem::Version
77
+ version: 0.3.8
58
78
  - !ruby/object:Gem::Dependency
59
79
  name: slowhandcuke
60
- requirement: &70095560791720 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
61
81
  none: false
62
82
  requirements:
63
83
  - - ! '>='
@@ -65,10 +85,15 @@ dependencies:
65
85
  version: '0'
66
86
  type: :runtime
67
87
  prerelease: false
68
- version_requirements: *70095560791720
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
69
94
  - !ruby/object:Gem::Dependency
70
95
  name: net-http-persistent
71
- requirement: &70095560948020 !ruby/object:Gem::Requirement
96
+ requirement: !ruby/object:Gem::Requirement
72
97
  none: false
73
98
  requirements:
74
99
  - - ! '>='
@@ -76,7 +101,12 @@ dependencies:
76
101
  version: '0'
77
102
  type: :runtime
78
103
  prerelease: false
79
- version_requirements: *70095560948020
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
80
110
  description: calabash-cucumber drives tests for native iOS apps. You must link your
81
111
  app with calabash-ios-server framework to execute tests.
82
112
  email:
@@ -109,6 +139,7 @@ files:
109
139
  - features-skeleton/support/env.rb
110
140
  - features-skeleton/support/hooks.rb
111
141
  - features-skeleton/support/launch.rb
142
+ - features/step_definitions/calabash_steps.rb
112
143
  - lib/calabash-cucumber.rb
113
144
  - lib/calabash-cucumber/calabash_steps.rb
114
145
  - lib/calabash-cucumber/color_helper.rb
@@ -205,8 +236,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
205
236
  version: '0'
206
237
  requirements: []
207
238
  rubyforge_project:
208
- rubygems_version: 1.8.11
239
+ rubygems_version: 1.8.23
209
240
  signing_key:
210
241
  specification_version: 3
211
242
  summary: Client for calabash-ios-server for automated functional testing on iOS
212
- test_files: []
243
+ test_files:
244
+ - features/step_definitions/calabash_steps.rb