calabash-cucumber 0.9.169.pre2 → 0.9.169.pre5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +14 -1
  3. data/bin/calabash-ios-setup.rb +2 -4
  4. data/bin/calabash-ios-sim.rb +10 -40
  5. data/calabash-cucumber.gemspec +25 -22
  6. data/features-skeleton/support/01_launch.rb +1 -1
  7. data/lib/calabash-cucumber.rb +13 -1
  8. data/lib/calabash-cucumber/actions/instruments_actions.rb +0 -4
  9. data/lib/calabash-cucumber/actions/playback_actions.rb +0 -4
  10. data/lib/calabash-cucumber/core.rb +9 -16
  11. data/lib/calabash-cucumber/device.rb +11 -2
  12. data/lib/calabash-cucumber/environment_helpers.rb +4 -56
  13. data/lib/calabash-cucumber/ios7_operations.rb +4 -2
  14. data/lib/calabash-cucumber/keyboard_helpers.rb +6 -3
  15. data/lib/calabash-cucumber/launch/simulator_helper.rb +40 -386
  16. data/lib/calabash-cucumber/launch/simulator_launcher.rb +534 -0
  17. data/lib/calabash-cucumber/launcher.rb +172 -36
  18. data/lib/calabash-cucumber/operations.rb +3 -4
  19. data/lib/calabash-cucumber/playback_helpers.rb +15 -29
  20. data/lib/calabash-cucumber/rotation_helpers.rb +14 -10
  21. data/lib/calabash-cucumber/status_bar_helpers.rb +5 -1
  22. data/lib/calabash-cucumber/uia.rb +6 -12
  23. data/lib/calabash-cucumber/utils/logging.rb +97 -0
  24. data/lib/calabash-cucumber/utils/plist_buddy.rb +178 -0
  25. data/lib/calabash-cucumber/utils/simulator_accessibility.rb +250 -0
  26. data/lib/calabash-cucumber/utils/xctools.rb +95 -0
  27. data/lib/calabash-cucumber/version.rb +197 -2
  28. data/lib/calabash-cucumber/wait_helpers.rb +16 -20
  29. data/scripts/.irbrc +11 -6
  30. data/scripts/com.example.plist +0 -0
  31. data/scripts/launch.rb +1 -1
  32. data/spec/bin/calabash_ios_sim_spec.rb +24 -0
  33. data/spec/launcher_spec.rb +76 -0
  34. data/spec/logging_spec.rb +38 -0
  35. data/spec/plist_buddy_spec.rb +99 -0
  36. data/spec/resources/enable-accessibility/LPSimpleExample-cal.app/Default-568h@2x.png +0 -0
  37. data/spec/resources/enable-accessibility/LPSimpleExample-cal.app/Info.plist +0 -0
  38. data/spec/resources/enable-accessibility/LPSimpleExample-cal.app/LPSimpleExample-cal +0 -0
  39. data/spec/resources/enable-accessibility/LPSimpleExample-cal.app/PkgInfo +1 -0
  40. data/spec/resources/enable-accessibility/LPSimpleExample-cal.app/en.lproj/InfoPlist.strings +0 -0
  41. data/spec/resources/enable-accessibility/LPSimpleExample-cal.app/en.lproj/LPFirstViewController.nib +0 -0
  42. data/spec/resources/enable-accessibility/LPSimpleExample-cal.app/en.lproj/LPFirstViewController~ipad.nib +0 -0
  43. data/spec/resources/enable-accessibility/LPSimpleExample-cal.app/en.lproj/LPFourthViewController.nib +0 -0
  44. data/spec/resources/enable-accessibility/LPSimpleExample-cal.app/en.lproj/LPFourthViewController~ipad.nib +0 -0
  45. data/spec/resources/enable-accessibility/LPSimpleExample-cal.app/en.lproj/LPSecondViewController.nib +0 -0
  46. data/spec/resources/enable-accessibility/LPSimpleExample-cal.app/en.lproj/LPSecondViewController~ipad.nib +0 -0
  47. data/spec/resources/enable-accessibility/LPSimpleExample-cal.app/en.lproj/LPThirdViewController.nib +0 -0
  48. data/spec/resources/enable-accessibility/LPSimpleExample-cal.app/en.lproj/LPThirdViewController~ipad.nib +0 -0
  49. data/spec/resources/enable-accessibility/LPSimpleExample-cal.app/first.png +0 -0
  50. data/spec/resources/enable-accessibility/LPSimpleExample-cal.app/first@2x.png +0 -0
  51. data/spec/resources/enable-accessibility/LPSimpleExample-cal.app/second.png +0 -0
  52. data/spec/resources/enable-accessibility/LPSimpleExample-cal.app/second@2x.png +0 -0
  53. data/spec/resources/plist_buddy/com.example.plist +0 -0
  54. data/spec/resources/plist_buddy/com.testing.plist +18 -0
  55. data/spec/simulator_accessibility_spec.rb +144 -0
  56. data/spec/spec_helper.rb +31 -0
  57. data/spec/xctools_spec.rb +58 -0
  58. metadata +120 -34
@@ -2,11 +2,14 @@ require 'calabash-cucumber/core'
2
2
  require 'calabash-cucumber/tests_helpers'
3
3
  require 'calabash-cucumber/playback_helpers'
4
4
  require 'calabash-cucumber/environment_helpers'
5
+ require 'calabash-cucumber/utils/logging'
5
6
 
6
7
  module Calabash
7
8
  module Cucumber
8
9
  module KeyboardHelpers
10
+
9
11
  include Calabash::Cucumber::TestsHelpers
12
+ include Calabash::Cucumber::Logging
10
13
 
11
14
  KEYPLANE_NAMES = {
12
15
  :small_letters => 'small-letters',
@@ -740,8 +743,8 @@ module Calabash
740
743
  # the first responder will be the +UITextField+ or +UITextView+ instance
741
744
  # that is associated with the visible keyboard.
742
745
  #
743
- # returns +nil+ if there no +textField+ or +testView+ is found to be
744
- # the first responder. it is extremely unlikely that this will happen.
746
+ # returns +empty string+ if no +textField+ or +textView+ elements are found to be
747
+ # the first responder.
745
748
  #
746
749
  # raises an exception if there is no visible keyboard
747
750
  def _text_from_first_responder
@@ -752,7 +755,7 @@ module Calabash
752
755
  return res.first unless res.empty?
753
756
  end
754
757
  #noinspection RubyUnnecessaryReturnStatement
755
- return nil
758
+ return ""
756
759
  end
757
760
 
758
761
  end
@@ -1,407 +1,61 @@
1
1
  require 'sim_launcher'
2
- require 'json'
3
- require 'run_loop'
4
- require 'net/http'
5
- require 'cfpropertylist'
6
2
 
7
3
  module Calabash
8
4
  module Cucumber
9
5
 
6
+ # this module has been replaced by Simulator Launcher
7
+ #
8
+ # @deprecated Use the SimulatorLauncher class instead
9
+ # @since 0.9.169
10
10
  module SimulatorHelper
11
11
 
12
- class TimeoutErr < RuntimeError
13
- end
14
-
15
- DERIVED_DATA = File.expand_path("~/Library/Developer/Xcode/DerivedData")
16
- DEFAULT_DERIVED_DATA_INFO = File.expand_path("#{DERIVED_DATA}/*/info.plist")
17
-
18
- DEFAULT_SIM_WAIT = 30
19
-
20
- DEFAULT_SIM_RETRY = 2
21
-
22
- # Load environment variable for showing full console output.
23
- # If not env var set then we use false, i.e. output to console is limited.
24
- FULL_CONSOLE_OUTPUT = ENV['CALABASH_FULL_CONSOLE_OUTPUT'] == '1' ? true : false
25
-
26
- def self.relaunch(path, sdk = nil, version = 'iphone', args = nil)
27
-
28
- app_bundle_path = app_bundle_or_raise(path)
29
- ensure_connectivity(app_bundle_path, sdk, version, args)
30
-
31
- end
32
-
12
+ # quits the simulator
13
+ #
14
+ # this has been deprecated, but it appears in legacy launch hooks
15
+ #
16
+ # use this pattern instead:
17
+ #
18
+ # at_exit do
19
+ # launcher = Calabash::Cucumber::Launcher.new
20
+ # if launcher.simulator_target?
21
+ # launcher.simulator_launcher.stop unless launcher.calabash_no_stop?
22
+ # end
23
+ # end
24
+ #
25
+ # @deprecated use the SimulatorLauncher.new().stop instead
33
26
  def self.stop
34
- simulator = SimLauncher::Simulator.new
35
- simulator.quit_simulator
36
- end
37
-
38
- def self.derived_data_dir_for_project
39
- dir = project_dir
40
- xcode_workspace_name = ''
41
- info_plist = Dir.glob(DEFAULT_DERIVED_DATA_INFO).find { |plist_file|
42
- begin
43
- plist = CFPropertyList::List.new(:file => plist_file)
44
- hash = CFPropertyList.native_types(plist.value)
45
- ws_dir = File.dirname(hash['WorkspacePath']).downcase
46
- p_dir = dir.downcase
47
- if (p_dir.include? ws_dir)
48
- xcode_workspace_name = ws_dir.split('/').last
49
- end
50
- ws_dir == p_dir
51
- rescue
52
- false
53
- end
54
- }
55
-
56
- if not info_plist.nil?
57
- return File.dirname(info_plist)
58
- else
59
- res = Dir.glob("#{dir}/*.xcodeproj")
60
- if res.empty?
61
- raise "Unable to find *.xcodeproj in #{dir}"
62
- elsif res.count > 1
63
- raise "Unable to found several *.xcodeproj in #{dir}: #{res}"
64
- end
65
-
66
- xcode_proj_name = res.first.split(".xcodeproj")[0]
67
-
68
- xcode_proj_name = File.basename(xcode_proj_name)
69
-
70
- build_dirs = Dir.glob("#{DERIVED_DATA}/*").find_all do |xc_proj|
71
- File.basename(xc_proj).start_with?(xcode_proj_name)
72
- end
73
-
74
- if (build_dirs.count == 0 && !xcode_workspace_name.empty?)
75
- # check for directory named "workspace-{deriveddirectoryrandomcharacters}"
76
- build_dirs = Dir.glob("#{DERIVED_DATA}/*").find_all do |xc_proj|
77
- File.basename(xc_proj).downcase.start_with?(xcode_workspace_name)
78
- end
79
- end
80
-
81
- # todo analyze `self.derived_data_dir_for_project` to see if it contains dead code
82
- # todo assuming this is not dead code, the documentation around derived data for project needs to be updated
83
-
84
- if (build_dirs.count == 0)
85
- msg = ["Unable to find your built app."]
86
- msg << "This means that Calabash can't automatically launch iOS simulator."
87
- msg << "Searched in Xcode 4.x default: #{DEFAULT_DERIVED_DATA_INFO}"
88
- msg << ""
89
- msg << "To fix there are a couple of options:\n"
90
- msg << "Option 1) Make sure you are running this command from your project directory, "
91
- msg << "i.e., the directory containing your .xcodeproj file."
92
- msg << "In Xcode, build your calabash target for simulator."
93
- msg << "Check that your app can be found in\n #{File.expand_path("~/Library/Developer/Xcode/DerivedData")}"
94
- msg << "\n\nOption 2). In features/support/01_launch.rb set APP_BUNDLE_PATH to"
95
- msg << "the path where Xcode has built your Calabash target."
96
- msg << "Alternatively you can use the environment variable APP_BUNDLE_PATH.\n"
97
- raise msg.join("\n")
98
-
99
- elsif (build_dirs.count > 1)
100
- msg = ["Unable to auto detect APP_BUNDLE_PATH."]
101
- msg << "You have several projects with the same name: #{xcode_proj_name} in #{DERIVED_DATA}:\n"
102
- msg << build_dirs.join("\n")
103
-
104
- msg << "\nThis means that Calabash can't automatically launch iOS simulator."
105
- msg << "Searched in Xcode 4.x default: #{DEFAULT_DERIVED_DATA_INFO}"
106
- msg << "\nIn features/support/01_launch.rb set APP_BUNDLE_PATH to"
107
- msg << "the path where Xcode has built your Calabash target."
108
- msg << "Alternatively you can use the environment variable APP_BUNDLE_PATH.\n"
109
- raise msg.join("\n")
27
+ unless ENV['CALABASH_NO_DEPRECATION'] == '1'
28
+ if RUBY_VERSION < '2.0'
29
+ stack = Kernel.caller()[1..6].join("\n")
110
30
  else
111
- if FULL_CONSOLE_OUTPUT
112
- puts "Found potential build dir: #{build_dirs.first}"
113
- puts "Checking..."
114
- end
115
- return build_dirs.first
31
+ stack = Kernel.caller(0, 6)[1..-1].join("\n")
116
32
  end
117
- end
118
- end
119
-
120
- def self.project_dir
121
- File.expand_path(ENV['PROJECT_DIR'] || Dir.pwd)
122
- end
123
-
124
- def self.detect_app_bundle(path=nil,device_build_dir='iPhoneSimulator')
125
- begin
126
- app_bundle_or_raise(path,device_build_dir)
127
- rescue =>e
128
- nil
129
- end
130
- end
131
-
132
- def self.app_bundle_or_raise(path=nil, device_build_dir='iPhoneSimulator')
133
- bundle_path = nil
134
- path = File.expand_path(path) if path
135
-
136
- if path and not File.directory?(path)
137
- raise "Unable to find .app bundle at #{path}. It should be an .app directory."
138
- elsif path
139
- bundle_path = path
140
- elsif xamarin_project?
141
- bundle_path = bundle_path_from_xamarin_project(device_build_dir)
142
- unless bundle_path
143
- msg = ["Detected Xamarin project, but did not detect built app linked with Calabash"]
144
- msg << "You should build your project from Xamarin Studio"
145
- msg << "Make sure you build for Simulator and that you're using the Calabash components"
146
- raise msg.join("\n")
147
- end
148
- if FULL_CONSOLE_OUTPUT
149
- puts("-"*37)
150
- puts "Auto detected APP_BUNDLE_PATH:\n\n"
151
-
152
- puts "APP_BUNDLE_PATH=#{preferred_dir || sim_dirs[0]}\n\n"
153
- puts "Please verify!"
154
- puts "If this is wrong please set it as APP_BUNDLE_PATH in features/support/01_launch.rb\n"
155
- puts("-"*37)
156
- end
157
- else
158
- dd_dir = derived_data_dir_for_project
159
- sim_dirs = Dir.glob(File.join(dd_dir, "Build", "Products", "*-iphonesimulator", "*.app"))
160
- if sim_dirs.empty?
161
- msg = ["Unable to auto detect APP_BUNDLE_PATH."]
162
- msg << "Have you built your app for simulator?"
163
- msg << "Searched dir: #{dd_dir}/Build/Products"
164
- msg << "Please build your app from Xcode"
165
- msg << "You should build the -cal target."
166
- msg << ""
167
- msg << "Alternatively, specify APP_BUNDLE_PATH in features/support/01_launch.rb"
168
- msg << "This should point to the location of your built app linked with calabash.\n"
169
- raise msg.join("\n")
170
- end
171
- preferred_dir = find_preferred_dir(sim_dirs)
172
- if preferred_dir.nil?
173
- msg = ["Error... Unable to find APP_BUNDLE_PATH."]
174
- msg << "Cannot find a built app that is linked with calabash.framework"
175
- msg << "Please build your app from Xcode"
176
- msg << "You should build your calabash target."
177
- msg << ""
178
- msg << "Alternatively, specify APP_BUNDLE_PATH in features/support/01_launch.rb"
179
- msg << "This should point to the location of your built app linked with calabash.\n"
180
- raise msg.join("\n")
181
- end
182
- if FULL_CONSOLE_OUTPUT
183
- puts("-"*37)
184
- puts "Auto detected APP_BUNDLE_PATH:\n\n"
185
-
186
- puts "APP_BUNDLE_PATH=#{preferred_dir || sim_dirs[0]}\n\n"
187
- puts "Please verify!"
188
- puts "If this is wrong please set it as APP_BUNDLE_PATH in features/support/01_launch.rb\n"
189
- puts("-"*37)
190
- end
191
- bundle_path = sim_dirs[0]
192
- end
193
- bundle_path
194
- end
195
-
196
- def self.xamarin_project?
197
- xamarin_ios_csproj_path != nil
198
- end
199
-
200
- def self.xamarin_ios_csproj_path
201
- solution_path = Dir['*.sln'].first
202
- if solution_path
203
- project_dir = Dir.pwd
204
- else
205
- solution_path = Dir[File.join('..','*.sln')].first
206
- project_dir = File.expand_path('..') if solution_path
207
- end
208
- return nil unless project_dir
209
-
210
- ios_project_dir = Dir[File.join(project_dir,'*.iOS')].first
211
- return ios_project_dir if ios_project_dir && File.directory?(ios_project_dir)
212
- # ios_project_dir does not exist
213
- # Detect case where there is no such sub directory
214
- # (i.e. iOS only Xamarin project)
215
- bin_dir = File.join(project_dir, 'bin')
216
- if xamarin_ios_bin_dir?(bin_dir)
217
- return project_dir ## Looks like iOS bin dir is here
218
- end
219
-
220
- sub_dirs = Dir[File.join(project_dir,'*')].select {|dir| File.directory?(dir)}
221
-
222
- sub_dirs.find do |sub_dir|
223
- contains_csproj = Dir[File.join(sub_dir,'*.csproj')].first
224
- contains_csproj && xamarin_ios_bin_dir?(File.join(sub_dir,'bin'))
225
- end
226
-
227
- end
228
-
229
- def self.xamarin_ios_bin_dir?(bin_dir)
230
- File.directory?(bin_dir) &&
231
- (File.directory?(File.join(bin_dir,'iPhoneSimulator')) ||
232
- File.directory?(File.join(bin_dir,'iPhone')))
233
- end
234
-
235
- def self.bundle_path_from_xamarin_project(device_build_dir='iPhoneSimulator')
236
- ios_project_path = xamarin_ios_csproj_path
237
- conf_glob = File.join(ios_project_path,'bin',device_build_dir,'*')
238
- built_confs = Dir[conf_glob]
239
-
240
- calabash_build = built_confs.find {|path| File.basename(path) == 'Calabash'}
241
- debug_build = built_confs.find {|path| File.basename(path) == 'Debug'}
242
-
243
- bundle_path = [calabash_build, debug_build, *built_confs].find do |path|
244
- next unless path && File.directory?(path)
245
- app_dir = Dir[File.join(path,'*.app')].first
246
- app_dir && linked_with_calabash?(app_dir)
247
- end
248
-
249
- Dir[File.join(bundle_path,'*.app')].first if bundle_path
250
- end
251
-
252
- def self.linked_with_calabash?(d)
253
- skipped_formats = [".png", ".jpg", ".jpeg", ".plist", ".nib", ".lproj"]
254
- dir = File.expand_path(d)
255
33
 
256
- # For every file on that .app directory
257
- Dir.entries(d).each do |file|
258
- # If this is an asset or any of those skipped formats, skip it.
259
- next if skipped_formats.include? File.extname(file)
34
+ msgs = ['The Calabash::Cucumber::SimulatorHelper module has been replaced.',
35
+ 'Please replace:',
36
+ '',
37
+ ' Calabash::Cucumber::SimulatorHelper.stop',
38
+ '',
39
+ 'with this:',
40
+ '',
41
+ ' launcher = Calabash::Cucumber::Launcher.new',
42
+ ' launcher.simulator_launcher.stop',
43
+ '',
44
+ 'The stack trace below will show you the line number you need to change.']
260
45
 
261
- # If its not, try to run otool against that file, check whether we are linked against calabash framework.
262
- out = `otool #{dir}/#{file} -o 2> /dev/null | grep CalabashServer`
263
- return true if /CalabashServer/.match(out)
264
- end
46
+ msg = "deprecated '0.9.169' - #{msgs.join("\n")}\n#{stack}"
265
47
 
266
- # Defaulted to false
267
- false
268
- end
269
-
270
- def self.find_preferred_dir(sim_dirs)
271
- sim_dirs.find do |d|
272
- linked_with_calabash?(d)
273
- end
274
- end
275
-
276
- def self.ensure_connectivity(app_bundle_path, sdk, version, args = nil)
277
- begin
278
- max_retry_count = (ENV['MAX_CONNECT_RETRY'] || DEFAULT_SIM_RETRY).to_i
279
- timeout = (ENV['CONNECT_TIMEOUT'] || DEFAULT_SIM_WAIT).to_i
280
- retry_count = 0
281
- connected = false
282
-
283
- if FULL_CONSOLE_OUTPUT
284
- puts "Waiting at most #{timeout} seconds for simulator (CONNECT_TIMEOUT)"
285
- puts "Retrying at most #{max_retry_count} times (MAX_CONNECT_RETRY)"
286
- end
287
-
288
- until connected do
289
- raise "MAX_RETRIES" if retry_count == max_retry_count
290
- retry_count += 1
291
- if FULL_CONSOLE_OUTPUT
292
- puts "(#{retry_count}.) Start Simulator #{sdk}, #{version}, for #{app_bundle_path}"
293
- end
294
- begin
295
- Timeout::timeout(timeout, TimeoutErr) do
296
- simulator = launch(app_bundle_path, sdk, version, args)
297
- until connected
298
- begin
299
- connected = (ping_app == '405')
300
- if connected
301
- server_version = get_version
302
- if server_version
303
- if FULL_CONSOLE_OUTPUT
304
- p server_version
305
- end
306
- unless version_check(server_version)
307
- msgs = ["You're running an older version of Calabash server with a newer client",
308
- "Client:#{Calabash::Cucumber::VERSION}",
309
- "Server:#{server_version}",
310
- "Minimum server version #{Calabash::Cucumber::FRAMEWORK_VERSION}",
311
- "Update recommended:",
312
- "https://github.com/calabash/calabash-ios/wiki/B1-Updating-your-Calabash-iOS-version"
313
- ]
314
- raise msgs.join("\n")
315
- end
316
- else
317
- connected = false
318
- end
319
- end
320
- rescue Exception => e
321
-
322
- ensure
323
- sleep 1 unless connected
324
- end
325
- end
326
- end
327
- rescue TimeoutErr => e
328
- puts 'Timed out... Retrying'
329
- stop
330
- end
48
+ begin
49
+ STDERR.puts "\033[34m\nWARN: #{msg}\033[0m"
50
+ rescue
51
+ STDERR.puts "\nWARN: #{msg}"
331
52
  end
332
- rescue RuntimeError => e
333
- p e
334
- msg = "Unable to make connection to Calabash Server at #{ENV['DEVICE_ENDPOINT']|| "http://localhost:37265/"}\n"
335
- msg << "Make sure you've' linked correctly with calabash.framework and set Other Linker Flags.\n"
336
- msg << "Make sure you don't have a firewall blocking traffic to #{ENV['DEVICE_ENDPOINT']|| "http://localhost:37265/"}.\n"
337
- raise msg
338
53
  end
339
- end
340
-
341
-
342
- def self.launch(app_bundle_path, sdk, version, args = nil)
343
- simulator = SimLauncher::Simulator.new
344
- simulator.launch_ios_app(app_bundle_path, sdk, version)
54
+ simulator = SimLauncher::Simulator.new()
55
+ simulator.quit_simulator
345
56
  simulator
346
57
  end
347
58
 
348
- def self.ping_app
349
- url = URI.parse(ENV['DEVICE_ENDPOINT']|| "http://localhost:37265/")
350
- if FULL_CONSOLE_OUTPUT
351
- puts "Ping #{url}..."
352
- end
353
- http = Net::HTTP.new(url.host, url.port)
354
- res = http.start do |sess|
355
- sess.request Net::HTTP::Get.new url.path
356
- end
357
- status = res.code
358
- begin
359
- http.finish if http and http.started?
360
- rescue
361
-
362
- end
363
- status
364
- end
365
-
366
- def self.get_version
367
- endpoint = ENV['DEVICE_ENDPOINT']|| "http://localhost:37265"
368
- endpoint += "/" unless endpoint.end_with? "/"
369
- url = URI.parse("#{endpoint}version")
370
-
371
- if FULL_CONSOLE_OUTPUT
372
- puts "Fetch version #{url}..."
373
- end
374
- begin
375
- body = Net::HTTP.get_response(url).body
376
- res = JSON.parse(body)
377
- if res['iOS_version']
378
- @ios_version = res['iOS_version']
379
- end
380
- res
381
- rescue
382
- nil
383
- end
384
- end
385
-
386
- def self.ios_version
387
- unless @ios_version
388
- get_version
389
- end
390
- @ios_version
391
- end
392
-
393
- def self.ios_major_version
394
- v = ios_version
395
- if v
396
- v.split(".")[0]
397
- end
398
- end
399
-
400
- def self.version_check(version)
401
- server_version = version["version"]
402
- Calabash::Cucumber::FRAMEWORK_VERSION == server_version
403
- end
404
59
  end
405
-
406
60
  end
407
61
  end