calabash-cucumber 0.19.0 → 0.19.1
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 +4 -4
- data/dylibs/libCalabashDyn.dylib +0 -0
- data/dylibs/libCalabashDynSim.dylib +0 -0
- data/lib/calabash-cucumber/console_helpers.rb +3 -1
- data/lib/calabash-cucumber/device.rb +2 -1
- data/lib/calabash-cucumber/failure_helpers.rb +7 -3
- data/lib/calabash-cucumber/http/http.rb +1 -1
- data/lib/calabash-cucumber/keyboard_helpers.rb +46 -176
- data/lib/calabash-cucumber/launcher.rb +1 -1
- data/lib/calabash-cucumber/map.rb +17 -8
- data/lib/calabash-cucumber/uia.rb +11 -2
- data/lib/calabash-cucumber/version.rb +2 -2
- data/scripts/.irbrc +3 -2
- data/staticlib/calabash.framework.zip +0 -0
- data/staticlib/libFrankCalabash.a +0 -0
- metadata +19 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 025464e725f8c4d6ff249aaf250a6685896a75f6
|
4
|
+
data.tar.gz: 37858349091f137c9888024cd77cbb856c60c41d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c635ff3050323a9233fedc5a000eb7ba3ece0d93fa7708d6365c89a38b55757794bf9fa311e276e5406cac166b87cf7930adeab1d9a5c1d02618356415972cda
|
7
|
+
data.tar.gz: 62dd3aa71a22c78c10ec5377a53277af29701cfa291941ce03db779505f6f9eaeb316b7d1d8aac16d20b95cddc8a10b6a7ece2b865c1309091f5176ddb4ee903
|
data/dylibs/libCalabashDyn.dylib
CHANGED
Binary file
|
Binary file
|
@@ -279,7 +279,9 @@ Please report this issue.
|
|
279
279
|
str_id = data["id"] ? "[id:#{RunLoop::Color.blue(data["id"])}] " : ""
|
280
280
|
str_label = data["label"] ? "[label:#{RunLoop::Color.green(data["label"])}] " : ""
|
281
281
|
str_text = data["value"] ? "[text:#{RunLoop::Color.magenta(data["value"])}] " : ""
|
282
|
-
|
282
|
+
str_node_type = data["nodeType"] ? "[nodeType:#{RunLoop::Color.red(data["nodeType"])}] " : ""
|
283
|
+
|
284
|
+
output("#{str_type}#{str_id}#{str_label}#{str_text}#{str_node_type}", indentation)
|
283
285
|
output("\n", indentation)
|
284
286
|
end
|
285
287
|
end
|
@@ -51,7 +51,12 @@ module Calabash
|
|
51
51
|
def screenshot_embed(options={:prefix => nil, :name => nil, :label => nil})
|
52
52
|
path = screenshot(options)
|
53
53
|
filename = options[:label] || File.basename(path)
|
54
|
-
embed
|
54
|
+
if self.respond_to?(:embed)
|
55
|
+
embed(path, 'image/png', filename)
|
56
|
+
else
|
57
|
+
RunLoop.log_info2("Embed is not available in this context. Will not embed.")
|
58
|
+
end
|
59
|
+
true
|
55
60
|
end
|
56
61
|
|
57
62
|
# Generates a screenshot of the app UI by calling screenshot_embed and raises an error.
|
@@ -82,7 +87,6 @@ module Calabash
|
|
82
87
|
def fail(msg='Error. Check log for details.', options={:prefix => nil, :name => nil, :label => nil})
|
83
88
|
screenshot_and_raise(msg, options)
|
84
89
|
end
|
85
|
-
|
86
90
|
end
|
87
91
|
end
|
88
|
-
end
|
92
|
+
end
|
@@ -66,7 +66,7 @@ module Calabash
|
|
66
66
|
|
67
67
|
begin
|
68
68
|
success, body = self.ping_app
|
69
|
-
RunLoop.log_debug("Connected to
|
69
|
+
RunLoop.log_debug("Connected to Calabash Server on try: #{try + 1} of #{max_retry_count}")
|
70
70
|
return success, body if success
|
71
71
|
rescue => e
|
72
72
|
last_error = e
|
@@ -229,17 +229,8 @@ module Calabash
|
|
229
229
|
return if opts[:skip]
|
230
230
|
|
231
231
|
screenshot = opts[:screenshot]
|
232
|
-
|
233
|
-
msg =
|
234
|
-
if screenshot
|
235
|
-
screenshot_and_raise msg
|
236
|
-
else
|
237
|
-
raise msg
|
238
|
-
end
|
239
|
-
end
|
240
|
-
|
241
|
-
if split_keyboard_visible? and uia_not_available?
|
242
|
-
msg = 'cannot type on a split keyboard without launching with Instruments'
|
232
|
+
if !keyboard_visible?
|
233
|
+
msg = "No visible keyboard."
|
243
234
|
if screenshot
|
244
235
|
screenshot_and_raise msg
|
245
236
|
else
|
@@ -291,46 +282,32 @@ module Calabash
|
|
291
282
|
_ensure_can_enter_text({:screenshot => should_screenshot,
|
292
283
|
:skip => (not should_screenshot)})
|
293
284
|
|
294
|
-
if
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
code = UIA_SUPPORTED_CHARS[chr]
|
299
|
-
|
300
|
-
unless code
|
301
|
-
raise "typing character '#{chr}' is not yet supported when running with Instruments"
|
302
|
-
end
|
285
|
+
if chr.length == 1
|
286
|
+
uia_type_string_raw chr
|
287
|
+
else
|
288
|
+
code = UIA_SUPPORTED_CHARS[chr]
|
303
289
|
|
304
|
-
|
305
|
-
|
306
|
-
# on numeric keyboards, it is actually a button on the
|
307
|
-
# keyboard and not a key
|
308
|
-
if code.eql?(UIA_SUPPORTED_CHARS['Delete'])
|
309
|
-
js_tap_delete = "(function() {"\
|
310
|
-
"var deleteElement = uia.keyboard().elements().firstWithName('Delete');"\
|
311
|
-
"deleteElement = deleteElement.isValid() ? deleteElement : uia.keyboard().elements().firstWithName('delete');"\
|
312
|
-
"deleteElement.tap();"\
|
313
|
-
"})();"
|
314
|
-
uia(js_tap_delete)
|
315
|
-
else
|
316
|
-
uia_type_string_raw(code)
|
317
|
-
end
|
290
|
+
unless code
|
291
|
+
raise "typing character '#{chr}' is not yet supported when running with Instruments"
|
318
292
|
end
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
293
|
+
|
294
|
+
# on iOS 6, the Delete char code is _not_ \b
|
295
|
+
# on iOS 7, the Delete char code is \b on non-numeric keyboards
|
296
|
+
# on numeric keyboards, it is actually a button on the
|
297
|
+
# keyboard and not a key
|
298
|
+
if code.eql?(UIA_SUPPORTED_CHARS['Delete'])
|
299
|
+
js_tap_delete = "(function() {"\
|
300
|
+
"var deleteElement = uia.keyboard().elements().firstWithName('Delete');"\
|
301
|
+
"deleteElement = deleteElement.isValid() ? deleteElement : uia.keyboard().elements().firstWithName('delete');"\
|
302
|
+
"deleteElement.tap();"\
|
303
|
+
"})();"
|
304
|
+
uia(js_tap_delete)
|
305
|
+
else
|
306
|
+
uia_type_string_raw(code)
|
332
307
|
end
|
333
308
|
end
|
309
|
+
# noinspection RubyStringKeysInHashInspection
|
310
|
+
res = {'results' => []}
|
334
311
|
|
335
312
|
if ENV['POST_ENTER_KEYBOARD']
|
336
313
|
w = ENV['POST_ENTER_KEYBOARD'].to_f
|
@@ -349,19 +326,9 @@ module Calabash
|
|
349
326
|
# @raise [RuntimeError] if the text cannot be typed.
|
350
327
|
def keyboard_enter_text(text)
|
351
328
|
_ensure_can_enter_text
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
uia_type_string(text, text_before)
|
356
|
-
else
|
357
|
-
text.each_char do |ch|
|
358
|
-
begin
|
359
|
-
keyboard_enter_char(ch, {:should_screenshot => false})
|
360
|
-
rescue
|
361
|
-
_search_keyplanes_and_enter_char(ch)
|
362
|
-
end
|
363
|
-
end
|
364
|
-
end
|
329
|
+
text_before = _text_from_first_responder()
|
330
|
+
text_before = text_before.gsub("\n","\\n") if text_before
|
331
|
+
uia_type_string(text, text_before)
|
365
332
|
end
|
366
333
|
|
367
334
|
# @!visibility private
|
@@ -406,14 +373,9 @@ module Calabash
|
|
406
373
|
# @param [String] text the text to enter
|
407
374
|
def fast_enter_text(text)
|
408
375
|
_ensure_can_enter_text
|
409
|
-
|
410
|
-
uia_set_responder_value(text)
|
411
|
-
else
|
412
|
-
keyboard_enter_text(text)
|
413
|
-
end
|
376
|
+
uia_set_responder_value(text)
|
414
377
|
end
|
415
378
|
|
416
|
-
|
417
379
|
# Touches the keyboard action key.
|
418
380
|
#
|
419
381
|
# The action key depends on the keyboard. Some examples include:
|
@@ -528,13 +490,8 @@ module Calabash
|
|
528
490
|
#
|
529
491
|
# @raise [RuntimeError] if the device is not an iPad
|
530
492
|
def dismiss_ipad_keyboard
|
531
|
-
screenshot_and_raise
|
532
|
-
|
533
|
-
if uia_available?
|
534
|
-
send_uia_command({:command => "#{_query_uia_hide_keyboard_button}.tap()"})
|
535
|
-
else
|
536
|
-
touch(_query_for_keyboard_mode_key)
|
537
|
-
end
|
493
|
+
screenshot_and_raise "Cannot dismiss keyboard on iPhone" if device_family_iphone?
|
494
|
+
send_uia_command({:command => "#{_query_uia_hide_keyboard_button}.tap()"})
|
538
495
|
|
539
496
|
opts = {:timeout_message => 'keyboard did not disappear'}
|
540
497
|
wait_for(opts) do
|
@@ -553,78 +510,12 @@ module Calabash
|
|
553
510
|
# @raise [RuntimeError] when the device is not an iPad
|
554
511
|
# @raise [RuntimeError] the app was not launched with instruments
|
555
512
|
def _point_for_ipad_keyboard_mode_key
|
556
|
-
raise
|
557
|
-
raise 'cannot detect keyboard mode key without launching with instruments' unless uia_available?
|
513
|
+
raise "The keyboard mode does not exist on the on the iphone" if device_family_iphone?
|
558
514
|
res = send_uia_command({:command => "#{_query_uia_hide_keyboard_button}.rect()"})
|
559
515
|
origin = res['value']['origin']
|
560
516
|
{:x => origin['x'], :y => origin['y']}
|
561
517
|
end
|
562
518
|
|
563
|
-
# @!visibility private
|
564
|
-
# Returns a query string for touching one of the options that appears when
|
565
|
-
# the iPad mode key is touched and held.
|
566
|
-
#
|
567
|
-
# The mode key is also know as the 'Hide keyboard' key.
|
568
|
-
#
|
569
|
-
# @note
|
570
|
-
# This is only available when running outside of instruments.
|
571
|
-
#
|
572
|
-
# @param [Symbol] top_or_bottom can be one of `{:top | :bottom}`
|
573
|
-
# @param [Symbol] mode `{:docked | :undocked | :skipped}`
|
574
|
-
#
|
575
|
-
# @raise [RuntimeError] the device is not an iPad
|
576
|
-
# @raise [RuntimeError] the app was not launched with instruments
|
577
|
-
# @raise [RuntimeError] the method is passed invalid arguments
|
578
|
-
def _query_for_touch_for_keyboard_mode_option(top_or_bottom, mode)
|
579
|
-
raise 'the keyboard mode does not exist on the iphone' if device_family_iphone?
|
580
|
-
|
581
|
-
if uia_available?
|
582
|
-
raise "UIA is available, use '_point_for_keyboard_mode_key' instead"
|
583
|
-
end
|
584
|
-
|
585
|
-
valid = [:top, :bottom]
|
586
|
-
unless valid.include? top_or_bottom
|
587
|
-
raise "expected '#{top_or_bottom}' to be one of '#{valid}'"
|
588
|
-
end
|
589
|
-
|
590
|
-
valid = [:split, :undocked, :docked]
|
591
|
-
unless valid.include? mode
|
592
|
-
raise "expected '#{mode}' to be one of '#{valid}'"
|
593
|
-
end
|
594
|
-
|
595
|
-
hash = {:split => {:top => 'Merge',
|
596
|
-
:bottom => 'Dock and Merge'},
|
597
|
-
:undocked => {:top => 'Dock',
|
598
|
-
:bottom => 'Split'},
|
599
|
-
:docked => {:top => 'Undock',
|
600
|
-
:bottom => 'Split'}}
|
601
|
-
mark = hash[mode][top_or_bottom]
|
602
|
-
"label marked:'#{mark}'"
|
603
|
-
end
|
604
|
-
|
605
|
-
# @!visibility private
|
606
|
-
# Returns a query for touching the iPad keyboard mode key.
|
607
|
-
#
|
608
|
-
# The mode key is also know as the 'Hide keyboard' key.
|
609
|
-
#
|
610
|
-
# @note
|
611
|
-
# This is only available when running outside of instruments. Use
|
612
|
-
# ` _point_for_ipad_keyboard_mode_key` when the app is _not_ launched
|
613
|
-
# with instruments.
|
614
|
-
#
|
615
|
-
# raises an error when
|
616
|
-
# * the device is not an iPad
|
617
|
-
# * the app was launched with Instruments i.e. there is a <tt>run_loop</tt>
|
618
|
-
def _query_for_keyboard_mode_key
|
619
|
-
raise 'cannot detect keyboard mode key on iphone' if device_family_iphone?
|
620
|
-
if uia_available?
|
621
|
-
raise "UIA is available, use '_point_for_keyboard_mode_key' instead"
|
622
|
-
end
|
623
|
-
qstr = "view:'UIKBKeyView'"
|
624
|
-
idx = query(qstr).count - 1
|
625
|
-
"#{qstr} index:#{idx}"
|
626
|
-
end
|
627
|
-
|
628
519
|
# @!visibility private
|
629
520
|
# Touches the bottom option on the popup dialog that is presented when the
|
630
521
|
# the iPad keyboard `mode` key is touched and held.
|
@@ -633,19 +524,12 @@ module Calabash
|
|
633
524
|
#
|
634
525
|
# The `mode` key allows the user to undock, dock, or split the keyboard.
|
635
526
|
def _touch_bottom_keyboard_mode_row
|
636
|
-
|
637
|
-
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
uia_pan_offset(start_pt, end_pt, {})
|
643
|
-
else
|
644
|
-
pan(_query_for_keyboard_mode_key, nil, {:duration => 1.0})
|
645
|
-
touch(_query_for_touch_for_keyboard_mode_option(:bottom, mode))
|
646
|
-
sleep(0.5)
|
647
|
-
end
|
648
|
-
2.times { sleep(0.5) }
|
527
|
+
start_pt = _point_for_ipad_keyboard_mode_key
|
528
|
+
# there are 10 pt btw the key and the popup and the row is 50 pt
|
529
|
+
y_offset = 10 + 25
|
530
|
+
end_pt = {:x => (start_pt[:x] - 40), :y => (start_pt[:y] - y_offset)}
|
531
|
+
uia_pan_offset(start_pt, end_pt, {})
|
532
|
+
sleep(1.0)
|
649
533
|
end
|
650
534
|
|
651
535
|
# Touches the top option on the popup dialog that is presented when the
|
@@ -655,23 +539,15 @@ module Calabash
|
|
655
539
|
#
|
656
540
|
# The `mode` key allows the user to undock, dock, or split the keyboard.
|
657
541
|
def _touch_top_keyboard_mode_row
|
658
|
-
|
659
|
-
|
660
|
-
|
661
|
-
|
662
|
-
|
663
|
-
|
664
|
-
|
665
|
-
|
666
|
-
|
667
|
-
end_pt = {:x => (start_pt[:x] - x_offset), :y => (start_pt[:y] - y_offset)}
|
668
|
-
uia_pan_offset(start_pt, end_pt, {:duration => 1.0})
|
669
|
-
else
|
670
|
-
pan(_query_for_keyboard_mode_key, nil, {})
|
671
|
-
touch(_query_for_touch_for_keyboard_mode_option(:top, mode))
|
672
|
-
sleep(0.5)
|
673
|
-
end
|
674
|
-
2.times { sleep(0.5) }
|
542
|
+
start_pt = _point_for_ipad_keyboard_mode_key
|
543
|
+
# there are 10 pt btw the key and the popup and each row is 50 pt
|
544
|
+
# NB: no amount of offsetting seems to allow touching the top row
|
545
|
+
# when the keyboard is split
|
546
|
+
|
547
|
+
x_offset = 40
|
548
|
+
y_offset = 10 + 50 + 25
|
549
|
+
end_pt = {:x => (start_pt[:x] - x_offset), :y => (start_pt[:y] - y_offset)}
|
550
|
+
uia_pan_offset(start_pt, end_pt, {:duration => 1.0})
|
675
551
|
end
|
676
552
|
|
677
553
|
# Ensures that the iPad keyboard is docked.
|
@@ -847,9 +723,6 @@ module Calabash
|
|
847
723
|
#
|
848
724
|
# @raise [RuntimeError] if the app was not launched with instruments
|
849
725
|
def uia_keyboard_visible?
|
850
|
-
unless uia_available?
|
851
|
-
screenshot_and_raise 'only available if there is a run_loop i.e. the app was launched with Instruments'
|
852
|
-
end
|
853
726
|
res = uia_query_windows(:keyboard)
|
854
727
|
not res.eql?(':nil')
|
855
728
|
end
|
@@ -865,9 +738,6 @@ module Calabash
|
|
865
738
|
#
|
866
739
|
# @raise [RuntimeError] if the app was not launched with instruments
|
867
740
|
def uia_wait_for_keyboard(opts={})
|
868
|
-
unless uia_available?
|
869
|
-
screenshot_and_raise 'only available if there is a run_loop i.e. the app was launched with Instruments'
|
870
|
-
end
|
871
741
|
default_opts = {:timeout => 10,
|
872
742
|
:retry_frequency => 0.1,
|
873
743
|
:post_timeout => 0.5}
|
@@ -82,7 +82,7 @@ module Calabash
|
|
82
82
|
else
|
83
83
|
msg << "Not attached to instruments."
|
84
84
|
msg << "Start your app with `start_test_server_in_background`"
|
85
|
-
msg << "If
|
85
|
+
msg << "If your app is already running, try `console_attach`"
|
86
86
|
end
|
87
87
|
msg.join("\n")
|
88
88
|
end
|
@@ -82,20 +82,23 @@ module Calabash
|
|
82
82
|
:arguments => method_args
|
83
83
|
}
|
84
84
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
85
|
+
route = {:method => :post, :path => "map"}
|
86
|
+
parameters = {:query => query,
|
87
|
+
:operation => operation_map}
|
88
|
+
body = self.map_factory.http(route, parameters)
|
89
|
+
|
90
|
+
hash = JSON.parse(body)
|
91
|
+
if hash["outcome"] != "SUCCESS"
|
89
92
|
message = %Q[
|
90
93
|
map #{query}, #{method_name} failed for:
|
91
94
|
|
92
|
-
reason: #{
|
93
|
-
details: #{
|
95
|
+
reason: #{hash["reason"]}
|
96
|
+
details: #{hash["details"]}
|
94
97
|
]
|
95
|
-
|
98
|
+
self.map_factory.screenshot_and_raise(message)
|
96
99
|
end
|
97
100
|
|
98
|
-
|
101
|
+
hash
|
99
102
|
end
|
100
103
|
|
101
104
|
# Asserts the result of a calabash `map` call and raises an error with
|
@@ -139,6 +142,12 @@ details: #{res["details"]}
|
|
139
142
|
Map.new.screenshot_and_raise msg
|
140
143
|
end
|
141
144
|
end
|
145
|
+
|
146
|
+
private
|
147
|
+
|
148
|
+
def self.map_factory
|
149
|
+
Map.new
|
150
|
+
end
|
142
151
|
end
|
143
152
|
end
|
144
153
|
end
|
@@ -12,11 +12,20 @@ module Calabash
|
|
12
12
|
# @param {String} command the JavaScript snippet to execute
|
13
13
|
# @return {Object} the result returned by the UIA process
|
14
14
|
def uia(command, options={})
|
15
|
+
raise ArgumentError, "Please supply :command" unless command
|
16
|
+
|
15
17
|
# UIA only makes sense if there is a run loop
|
16
18
|
launcher = Calabash::Cucumber::Launcher.launcher_if_used
|
17
19
|
run_loop = launcher && launcher.active? && launcher.run_loop
|
18
|
-
|
19
|
-
|
20
|
+
|
21
|
+
# Automatically attach in the calabash console
|
22
|
+
if !run_loop && defined?(IRB)
|
23
|
+
RunLoop.log_debug("Attaching to current instruments process...")
|
24
|
+
launcher = Calabash::Cucumber::Launcher.new
|
25
|
+
Calabash::Cucumber::Launcher.attach
|
26
|
+
run_loop = launcher.run_loop
|
27
|
+
RunLoop.log_debug("Attached!")
|
28
|
+
end
|
20
29
|
|
21
30
|
strategy = run_loop[:uia_strategy]
|
22
31
|
case strategy
|
@@ -3,10 +3,10 @@ module Calabash
|
|
3
3
|
|
4
4
|
# @!visibility public
|
5
5
|
# The Calabash iOS gem version.
|
6
|
-
VERSION = "0.19.
|
6
|
+
VERSION = "0.19.1"
|
7
7
|
|
8
8
|
# @!visibility public
|
9
9
|
# The minimum required version of the Calabash embedded server.
|
10
|
-
MIN_SERVER_VERSION = "0.19.
|
10
|
+
MIN_SERVER_VERSION = "0.19.1"
|
11
11
|
end
|
12
12
|
end
|
data/scripts/.irbrc
CHANGED
@@ -34,8 +34,9 @@ IRB.conf[:HISTORY_FILE] = ".irb-history"
|
|
34
34
|
|
35
35
|
begin
|
36
36
|
require "pry"
|
37
|
-
Pry.config.history.should_save =
|
38
|
-
Pry.config.history.should_load =
|
37
|
+
Pry.config.history.should_save = true
|
38
|
+
Pry.config.history.should_load = true
|
39
|
+
Pry.config.history.file = ".pry-history"
|
39
40
|
require "pry-nav"
|
40
41
|
rescue LoadError => _
|
41
42
|
|
Binary file
|
Binary file
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: calabash-cucumber
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.19.
|
4
|
+
version: 0.19.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Karl Krukow
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-05-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cucumber
|
@@ -132,7 +132,7 @@ dependencies:
|
|
132
132
|
requirements:
|
133
133
|
- - ">="
|
134
134
|
- !ruby/object:Gem::Version
|
135
|
-
version: 2.1.
|
135
|
+
version: 2.1.2
|
136
136
|
- - "<"
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '3.0'
|
@@ -142,7 +142,7 @@ dependencies:
|
|
142
142
|
requirements:
|
143
143
|
- - ">="
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version: 2.1.
|
145
|
+
version: 2.1.2
|
146
146
|
- - "<"
|
147
147
|
- !ruby/object:Gem::Version
|
148
148
|
version: '3.0'
|
@@ -314,6 +314,20 @@ dependencies:
|
|
314
314
|
- - ">="
|
315
315
|
- !ruby/object:Gem::Version
|
316
316
|
version: '0'
|
317
|
+
- !ruby/object:Gem::Dependency
|
318
|
+
name: listen
|
319
|
+
requirement: !ruby/object:Gem::Requirement
|
320
|
+
requirements:
|
321
|
+
- - '='
|
322
|
+
- !ruby/object:Gem::Version
|
323
|
+
version: 3.0.6
|
324
|
+
type: :development
|
325
|
+
prerelease: false
|
326
|
+
version_requirements: !ruby/object:Gem::Requirement
|
327
|
+
requirements:
|
328
|
+
- - '='
|
329
|
+
- !ruby/object:Gem::Version
|
330
|
+
version: 3.0.6
|
317
331
|
- !ruby/object:Gem::Dependency
|
318
332
|
name: growl
|
319
333
|
requirement: !ruby/object:Gem::Requirement
|
@@ -449,7 +463,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
449
463
|
version: '0'
|
450
464
|
requirements: []
|
451
465
|
rubyforge_project:
|
452
|
-
rubygems_version: 2.5.
|
466
|
+
rubygems_version: 2.5.1
|
453
467
|
signing_key:
|
454
468
|
specification_version: 4
|
455
469
|
summary: Client for calabash-ios-server for automated functional testing on iOS
|