calabash-cucumber 0.14.3 → 0.15.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/dylibs/libCalabashDyn.dylib +0 -0
- data/dylibs/libCalabashDynSim.dylib +0 -0
- data/features-skeleton/support/01_launch.rb +1 -1
- data/lib/calabash-cucumber/core.rb +48 -10
- data/lib/calabash-cucumber/ipad_1x_2x.rb +4 -1
- data/lib/calabash-cucumber/keyboard_helpers.rb +18 -0
- data/lib/calabash-cucumber/launcher.rb +22 -8
- data/lib/calabash-cucumber/map.rb +43 -35
- data/lib/calabash-cucumber/rotation_helpers.rb +4 -12
- data/lib/calabash-cucumber/utils/logging.rb +1 -1
- data/lib/calabash-cucumber/version.rb +2 -2
- data/staticlib/calabash.framework.zip +0 -0
- data/staticlib/libFrankCalabash.a +0 -0
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1162678765d96a589e12bdf06d092d2f0eba972a
|
4
|
+
data.tar.gz: 4c68a868778d5fac3f875a2c709c1329e4330791
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: da411ca25785cad3d76cbc52745708a9af974d1aed3d9d855e0231afb6d21486ec71a9ff9f980bf25c2bdad61742d244695c9f799e763f42f12328c3f82a8335
|
7
|
+
data.tar.gz: 0cca1e98616a717243bb4727e64ce41a2befaecc9f6fc6b54f5421723ff696c53435b42e986daa43a72bb55387f177058233119af367b80989d43cb62ac55c56
|
data/dylibs/libCalabashDyn.dylib
CHANGED
Binary file
|
Binary file
|
@@ -5,7 +5,7 @@
|
|
5
5
|
# When running calabash-ios tests at #
|
6
6
|
# www.xamarin.com/test-cloud #
|
7
7
|
# the methods invoked by #
|
8
|
-
# CalabashLauncher are
|
8
|
+
# CalabashLauncher are overridden. #
|
9
9
|
# It will automatically ensure #
|
10
10
|
# running on device, installing apps #
|
11
11
|
# etc. #
|
@@ -336,12 +336,27 @@ module Calabash
|
|
336
336
|
# @option options {Hash} :offset (nil) optional offset to touch point. Offset supports an `:x` and `:y` key
|
337
337
|
# and causes the touch to be offset with `(x,y)` relative to the center (`center + (offset[:x], offset[:y])`).
|
338
338
|
# @option options {String} :query (nil) if specified, the swipe will be made relative to this query.
|
339
|
+
# @option options [Symbol] :force (nil) Indicates the force of the swipe.
|
340
|
+
# Valid values are :strong, :normal, :light.
|
341
|
+
#
|
339
342
|
# @return {Array<Hash>,String} array containing the serialized version of the touched view if `options[:query]` is given.
|
340
343
|
def swipe(dir, options={})
|
344
|
+
merged_options = options.dup
|
345
|
+
|
346
|
+
# I don't understand why the :status_bar_orientation value is being overwritten
|
341
347
|
unless uia_available?
|
342
|
-
|
348
|
+
merged_options[:status_bar_orientation] = status_bar_orientation
|
349
|
+
end
|
350
|
+
|
351
|
+
force = merged_options[:force]
|
352
|
+
if force
|
353
|
+
unless [:light, :strong, :normal].include?(force)
|
354
|
+
raise ArgumentError,
|
355
|
+
"Expected :force option '#{force}' to be :light, :strong, or :normal"
|
356
|
+
end
|
343
357
|
end
|
344
|
-
|
358
|
+
|
359
|
+
launcher.actions.swipe(dir.to_sym, merged_options)
|
345
360
|
end
|
346
361
|
|
347
362
|
|
@@ -393,9 +408,17 @@ module Calabash
|
|
393
408
|
# @note this is implemented by calling the Obj-C `setContentOffset:animated:` method and can do things users cant.
|
394
409
|
#
|
395
410
|
# @param {String} uiquery query describing view scroll (should be UIScrollView or a web view).
|
411
|
+
# @param [Symbol] direction The direction to scroll. Valid directions are:
|
412
|
+
# :up, :down, :left, and :right
|
396
413
|
def scroll(uiquery, direction)
|
397
|
-
|
398
|
-
|
414
|
+
allowed_directions = [:up, :down, :left, :right]
|
415
|
+
dir_symbol = direction.to_sym
|
416
|
+
unless allowed_directions.include?(dir_symbol)
|
417
|
+
raise ArgumentError, "Expected '#{direction} to be one of #{allowed_directions}"
|
418
|
+
end
|
419
|
+
|
420
|
+
views_touched=map(uiquery, :scroll, dir_symbol)
|
421
|
+
msg = "could not find view to scroll: '#{uiquery}', args: #{dir_symbol}"
|
399
422
|
assert_map_results(views_touched, msg)
|
400
423
|
views_touched
|
401
424
|
end
|
@@ -790,18 +813,33 @@ module Calabash
|
|
790
813
|
# backdoor("calabashBackdoor:", '')
|
791
814
|
# @example
|
792
815
|
# backdoor("calabashBackdoor:", {example:'param'})
|
793
|
-
# @param {String}
|
794
|
-
# @param {Object}
|
816
|
+
# @param {String} selector the selector to perform on the app delegate
|
817
|
+
# @param {Object} argument the argument to pass to the selector
|
795
818
|
# @return {Object} the result of performing the selector with the argument (serialized)
|
796
|
-
def backdoor(
|
819
|
+
def backdoor(selector, argument)
|
820
|
+
|
821
|
+
unless selector.end_with?(':')
|
822
|
+
messages =
|
823
|
+
[
|
824
|
+
"Selector '#{selector}' is missing a trailing ':'",
|
825
|
+
'Valid backdoor selectors must take one argument.',
|
826
|
+
"Before 0.15.0, the server will append a trailing ':'.",
|
827
|
+
' After 0.15.0, this behavior is scheduled to change.',
|
828
|
+
'',
|
829
|
+
'http://developer.xamarin.com/guides/testcloud/calabash/working-with/backdoors/#backdoor_in_iOS',
|
830
|
+
''
|
831
|
+
]
|
832
|
+
_deprecated('0.15.0', messages.join("\n"), :warn)
|
833
|
+
end
|
834
|
+
|
797
835
|
json = {
|
798
|
-
:selector =>
|
799
|
-
:arg =>
|
836
|
+
:selector => selector,
|
837
|
+
:arg => argument
|
800
838
|
}
|
801
839
|
res = http({:method => :post, :path => 'backdoor'}, json)
|
802
840
|
res = JSON.parse(res)
|
803
841
|
if res['outcome'] != 'SUCCESS'
|
804
|
-
screenshot_and_raise "backdoor #{json} failed because
|
842
|
+
screenshot_and_raise "backdoor #{json} failed because:\n\n#{res['reason']}\n#{res['details']}"
|
805
843
|
end
|
806
844
|
res['result']
|
807
845
|
end
|
@@ -49,6 +49,9 @@ module Calabash
|
|
49
49
|
:emulated_2x => '1X'}
|
50
50
|
}
|
51
51
|
|
52
|
+
# accessibility key = fullscreen.zoom => 2x => Switch to full screen mode
|
53
|
+
# accessibility key = normal.zoom => 1x => Switch to normal mode
|
54
|
+
|
52
55
|
# @!visibility private
|
53
56
|
# @!attribute [r] scale
|
54
57
|
# The current 1X or 2X scale represented as a Symbol.
|
@@ -242,4 +245,4 @@ module Calabash
|
|
242
245
|
|
243
246
|
end
|
244
247
|
end
|
245
|
-
end
|
248
|
+
end
|
@@ -898,6 +898,24 @@ module Calabash
|
|
898
898
|
end
|
899
899
|
end
|
900
900
|
|
901
|
+
# Waits for a keyboard to appear and returns the localized name of the
|
902
|
+
# `key_code` signifier
|
903
|
+
#
|
904
|
+
# @param [String] key_code Maps to a specific name in some localization
|
905
|
+
def lookup_key_name(key_code)
|
906
|
+
wait_for_keyboard
|
907
|
+
begin
|
908
|
+
response_json = JSON.parse(http(:path => 'keyboard-language'))
|
909
|
+
rescue JSON::ParserError
|
910
|
+
raise RuntimeError, "Could not parse output of keyboard-language route. Did the app crash?"
|
911
|
+
end
|
912
|
+
if response_json['outcome'] != 'SUCCESS'
|
913
|
+
screenshot_and_raise "failed to retrieve the keyboard localization"
|
914
|
+
end
|
915
|
+
localized_lang = response_json['results']['input_mode']
|
916
|
+
RunLoop::L10N.new.lookup_localization_name(key_code, localized_lang)
|
917
|
+
end
|
918
|
+
|
901
919
|
# @!visibility private
|
902
920
|
# Returns the the text in the first responder.
|
903
921
|
#
|
@@ -55,6 +55,7 @@ class Calabash::Cucumber::Launcher
|
|
55
55
|
attr_accessor :actions
|
56
56
|
attr_accessor :launch_args
|
57
57
|
attr_accessor :simulator_launcher
|
58
|
+
attr_reader :xcode
|
58
59
|
|
59
60
|
# @!visibility private
|
60
61
|
# Generated when calabash cannot launch the app.
|
@@ -76,6 +77,10 @@ class Calabash::Cucumber::Launcher
|
|
76
77
|
class CalabashLauncherTimeoutErr < Timeout::Error
|
77
78
|
end
|
78
79
|
|
80
|
+
def xcode
|
81
|
+
@xcode ||= RunLoop::Xcode.new
|
82
|
+
end
|
83
|
+
|
79
84
|
# @!visibility private
|
80
85
|
def initialize
|
81
86
|
@simulator_launcher = Calabash::Cucumber::SimulatorLauncher.new
|
@@ -274,7 +279,7 @@ class Calabash::Cucumber::Launcher
|
|
274
279
|
|
275
280
|
sim_control = opts.fetch(:sim_control, RunLoop::SimControl.new)
|
276
281
|
if sim_control.xcode_version_gte_6?
|
277
|
-
default_sim = RunLoop::Core.default_simulator(
|
282
|
+
default_sim = RunLoop::Core.default_simulator(xcode)
|
278
283
|
name_or_udid = merged_opts[:udid] || ENV['DEVICE_TARGET'] || default_sim
|
279
284
|
|
280
285
|
target_simulator = nil
|
@@ -487,7 +492,7 @@ class Calabash::Cucumber::Launcher
|
|
487
492
|
return :instruments if major && major >= 7 # Only instruments supported for iOS7+
|
488
493
|
return :sim_launcher if major # and then we have <= 6
|
489
494
|
|
490
|
-
if RunLoop::
|
495
|
+
if RunLoop::Xcode.new.version_gte_51?
|
491
496
|
return use_sim_launcher_env? ? :sim_launcher : :instruments
|
492
497
|
end
|
493
498
|
|
@@ -535,11 +540,11 @@ class Calabash::Cucumber::Launcher
|
|
535
540
|
|
536
541
|
# RunLoop::Core.run_with_options can reuse the SimControl instance. Many
|
537
542
|
# of the Xcode tool calls, like instruments -s templates, take a long time
|
538
|
-
# to execute.
|
539
|
-
# the results of many of these time-consuming calls so they only need to
|
540
|
-
# be called 1 time per launch.
|
543
|
+
# to execute.
|
541
544
|
# @todo Use SimControl in Launcher in place of methods like simulator_target?
|
542
545
|
args[:sim_control] = RunLoop::SimControl.new
|
546
|
+
args[:instruments] = RunLoop::Instruments.new
|
547
|
+
args[:xcode] = xcode
|
543
548
|
|
544
549
|
if args[:app]
|
545
550
|
if !File.exist?(args[:app])
|
@@ -624,7 +629,7 @@ class Calabash::Cucumber::Launcher
|
|
624
629
|
if run_with_instruments?(args)
|
625
630
|
# Patch for bug in Xcode 6 GM + iOS 8 device testing.
|
626
631
|
# http://openradar.appspot.com/radar?id=5891145586442240
|
627
|
-
uia_strategy = default_uia_strategy(args, args[:sim_control])
|
632
|
+
uia_strategy = default_uia_strategy(args, args[:sim_control], args[:instruments])
|
628
633
|
args[:uia_strategy] ||= uia_strategy
|
629
634
|
calabash_info "Using uia strategy: '#{args[:uia_strategy]}'" if debug_logging?
|
630
635
|
|
@@ -656,14 +661,18 @@ class Calabash::Cucumber::Launcher
|
|
656
661
|
#
|
657
662
|
# rdar://18296714
|
658
663
|
# http://openradar.appspot.com/radar?id=5891145586442240
|
659
|
-
|
664
|
+
#
|
665
|
+
# @param [Hash] launch_args The launch arguments.
|
666
|
+
# @param [RunLoop::SimControl] sim_control Used to find simulators.
|
667
|
+
# @param [RunLoop::Instruments] instruments Used to find physical devices.
|
668
|
+
def default_uia_strategy(launch_args, sim_control, instruments)
|
660
669
|
# Preferences strategy works on Xcode iOS Simulators.
|
661
670
|
if RunLoop::Core.simulator_target?(launch_args, sim_control)
|
662
671
|
:preferences
|
663
672
|
else
|
664
673
|
target_udid = launch_args[:device_target]
|
665
674
|
target_device = nil
|
666
|
-
devices_connected =
|
675
|
+
devices_connected = instruments.physical_devices
|
667
676
|
devices_connected.each do |device|
|
668
677
|
if device.udid == target_udid
|
669
678
|
target_device = device
|
@@ -787,6 +796,11 @@ class Calabash::Cucumber::Launcher
|
|
787
796
|
begin
|
788
797
|
connected = (ping_app == '200')
|
789
798
|
break if connected
|
799
|
+
rescue StandardError => e
|
800
|
+
if full_console_logging?
|
801
|
+
puts "Could not connect. #{e.message}"
|
802
|
+
puts "Will retry ..."
|
803
|
+
end
|
790
804
|
ensure
|
791
805
|
sleep 1 unless connected
|
792
806
|
end
|
@@ -6,32 +6,60 @@ module Calabash
|
|
6
6
|
# @!visibility private
|
7
7
|
module Map
|
8
8
|
|
9
|
-
#
|
9
|
+
# Returns an array of views matched by the `query` or the result of
|
10
10
|
# performing the Objective-C sequence defined by the `method_name` and
|
11
|
-
# `method_args` on all the views matched by the `query
|
11
|
+
# `method_args` on all the views matched by the `query`.
|
12
12
|
#
|
13
|
-
#
|
13
|
+
# This is not a method that users should be calling directly.
|
14
14
|
#
|
15
|
-
#
|
15
|
+
# The `method_name` is typically mapped to an LPOperation on the server.
|
16
|
+
# Some examples of LPOperations are:
|
16
17
|
#
|
17
|
-
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
18
|
+
# * :flash
|
19
|
+
# * :scrollToRowWithMark
|
20
|
+
# * :changeDatePickerDate
|
21
|
+
#
|
22
|
+
# If `method_name` maps to no LPOperation, then it is treated a selector
|
23
|
+
# and is performed on any view that matches `query`.
|
24
|
+
#
|
25
|
+
# @examples
|
26
|
+
#
|
27
|
+
# # Calls 'text' on any visible UITextField, because :text is not a defined operation.
|
28
|
+
# > map("textField", :text)
|
29
|
+
# => [ "old text" ]
|
30
|
+
#
|
31
|
+
# # Does not call 'setText:', because :setText is a defined operation.
|
32
|
+
# > map("textField", :setText, 'new text')
|
33
|
+
# => [ <UITextField ... > ]
|
34
|
+
#
|
35
|
+
# # Calls 'setText:', because 'setText:' is not a defined operation.
|
36
|
+
# > map("textField", 'setText:', 'newer text')
|
37
|
+
# => [ "<VOID>" ]
|
38
|
+
#
|
39
|
+
# # Will return [] because :unknownSelector is not defined on UITextField.
|
40
|
+
# > map("textField", :unknownSelector)
|
41
|
+
# => []
|
42
|
+
#
|
43
|
+
# # Will return [] because 'setAlpha' requires 1 argument and none was provided.
|
44
|
+
# # An error will be logged by the server in the device logs.
|
45
|
+
# > map("textField", 'setAlpha:')
|
46
|
+
# => []
|
47
|
+
#
|
48
|
+
#
|
49
|
+
# Well behaved LPOperations should return the view as JSON objects.
|
50
|
+
#
|
51
|
+
# @todo Calabash LPOperations should return 'views touched' in JSON format
|
21
52
|
def map(query, method_name, *method_args)
|
22
|
-
#todo calabash operations should return 'views touched' in JSON format
|
23
53
|
raw_map(query, method_name, *method_args)['results']
|
24
54
|
end
|
25
55
|
|
26
|
-
#
|
56
|
+
# Returns a JSON object the represents the result of performing an http
|
27
57
|
# query against the calabash server.
|
28
58
|
#
|
29
|
-
#
|
30
|
-
#
|
31
|
-
# raises an error and takes a screenshot if the value of the `outcome` key
|
59
|
+
# Raises an error and takes a screenshot if the value of the `outcome` key
|
32
60
|
# is _not_ 'SUCCESS'
|
33
61
|
#
|
34
|
-
#
|
62
|
+
# The JSON object contains the following keys:
|
35
63
|
#
|
36
64
|
# `outcome` => indicates the success or failure of the query
|
37
65
|
#
|
@@ -42,27 +70,7 @@ module Calabash
|
|
42
70
|
# the `method_name` with arguments defined in
|
43
71
|
# `method_args` on all views matched by the `query`
|
44
72
|
#
|
45
|
-
#
|
46
|
-
#
|
47
|
-
# here are some examples that clarify how the `method_name` and `method_args`
|
48
|
-
# influence the value of the `results` key
|
49
|
-
#
|
50
|
-
# simple examples:
|
51
|
-
#
|
52
|
-
# raw_map('label')['result'] #=> [ all visible UILabels ]
|
53
|
-
# raw_map('label', :text) #=> [ the 'text' of all visible UILabels ]
|
54
|
-
#
|
55
|
-
# example of calling a selector with arguments:
|
56
|
-
#
|
57
|
-
# <tt>raw_map("tableView marked:'cheeses'", {'numberOfRowsInSection' => 0})) =></tt>
|
58
|
-
# <tt>[ the number of rows in the first section of the 'cheeses' table ]</tt>
|
59
|
-
#
|
60
|
-
# example of calling a selector on view to return an object and then calling
|
61
|
-
# another selector on the returned object:
|
62
|
-
#
|
63
|
-
# <tt>raw_map("pickerView marked:'cheeses'", :delegate, [{pickerView:nil},{titleForRow:1},{forComponent:0}]) =></tt>
|
64
|
-
# objc call: <tt>[[pickerView delegate] pickerView:nil titleForRow:1 forComponent:0] =></tt>
|
65
|
-
# <tt>['French']</tt>
|
73
|
+
# @see Calabash::Cucumber::Map#map for examples.
|
66
74
|
def raw_map(query, method_name, *method_args)
|
67
75
|
operation_map = {
|
68
76
|
:method_name => method_name,
|
@@ -87,7 +87,6 @@ module Calabash
|
|
87
87
|
puts "try to rotate to '#{dir_sym}' using '#{candidate}'"
|
88
88
|
end
|
89
89
|
playback(candidate)
|
90
|
-
# need a longer sleep for cloud testing
|
91
90
|
sleep(0.4)
|
92
91
|
recalibrate_after_rotation()
|
93
92
|
|
@@ -117,17 +116,10 @@ module Calabash
|
|
117
116
|
# @example rotate right
|
118
117
|
# rotate :right
|
119
118
|
#
|
120
|
-
# @
|
121
|
-
# rotate :down
|
119
|
+
# @param [Symbol] dir The direction to rotate. Can be :left or :right.
|
122
120
|
#
|
123
|
-
# @
|
124
|
-
#
|
125
|
-
#
|
126
|
-
# @note For legacy support the `dir` argument can be a String or Symbol.
|
127
|
-
# Please update your code to pass a Symbol.
|
128
|
-
#
|
129
|
-
# @param [Symbol] dir The position of the home button after the rotation.
|
130
|
-
# Can be one of `{:down | :left | :right | :up }`.
|
121
|
+
# @return [Symbol] The position of the home button relative to the status
|
122
|
+
# bar after the rotation. Can be one of `{:down | :left | :right | :up }`.
|
131
123
|
def rotate(dir)
|
132
124
|
dir = dir.to_sym
|
133
125
|
current_orientation = status_bar_orientation().to_sym
|
@@ -173,4 +165,4 @@ module Calabash
|
|
173
165
|
|
174
166
|
end
|
175
167
|
end
|
176
|
-
end
|
168
|
+
end
|
@@ -3,10 +3,10 @@ module Calabash
|
|
3
3
|
|
4
4
|
# @!visibility public
|
5
5
|
# The Calabash iOS gem version.
|
6
|
-
VERSION = '0.
|
6
|
+
VERSION = '0.15.0'
|
7
7
|
|
8
8
|
# @!visibility public
|
9
9
|
# The minimum required version of the Calabash embedded server.
|
10
|
-
MIN_SERVER_VERSION = '0.
|
10
|
+
MIN_SERVER_VERSION = '0.15.0'
|
11
11
|
end
|
12
12
|
end
|
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.
|
4
|
+
version: 0.15.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Karl Krukow
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-09-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cucumber
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.0.
|
33
|
+
version: 0.0.2
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.0.
|
40
|
+
version: 0.0.2
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: edn
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -146,7 +146,7 @@ dependencies:
|
|
146
146
|
requirements:
|
147
147
|
- - ">="
|
148
148
|
- !ruby/object:Gem::Version
|
149
|
-
version: 1.
|
149
|
+
version: 1.5.0
|
150
150
|
- - "<"
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '2.0'
|
@@ -156,7 +156,7 @@ dependencies:
|
|
156
156
|
requirements:
|
157
157
|
- - ">="
|
158
158
|
- !ruby/object:Gem::Version
|
159
|
-
version: 1.
|
159
|
+
version: 1.5.0
|
160
160
|
- - "<"
|
161
161
|
- !ruby/object:Gem::Version
|
162
162
|
version: '2.0'
|
@@ -236,14 +236,14 @@ dependencies:
|
|
236
236
|
requirements:
|
237
237
|
- - ">="
|
238
238
|
- !ruby/object:Gem::Version
|
239
|
-
version:
|
239
|
+
version: 1.1.0
|
240
240
|
type: :development
|
241
241
|
prerelease: false
|
242
242
|
version_requirements: !ruby/object:Gem::Requirement
|
243
243
|
requirements:
|
244
244
|
- - ">="
|
245
245
|
- !ruby/object:Gem::Version
|
246
|
-
version:
|
246
|
+
version: 1.1.0
|
247
247
|
- !ruby/object:Gem::Dependency
|
248
248
|
name: rake
|
249
249
|
requirement: !ruby/object:Gem::Requirement
|
@@ -551,7 +551,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
551
551
|
version: '0'
|
552
552
|
requirements: []
|
553
553
|
rubyforge_project:
|
554
|
-
rubygems_version: 2.4.
|
554
|
+
rubygems_version: 2.4.8
|
555
555
|
signing_key:
|
556
556
|
specification_version: 4
|
557
557
|
summary: Client for calabash-ios-server for automated functional testing on iOS
|