calabash-cucumber 0.10.1 → 0.10.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 796a5dc37f43d2e7d150bb8929c5e52d16176966
4
- data.tar.gz: 851e40fd7aaea029233f34abccf91c9e7807fbfa
3
+ metadata.gz: 897651c4a4fa6614afc67e03db8ef2e6765460f8
4
+ data.tar.gz: a99ac89d631f74da261382d01be1280e09e28a8d
5
5
  SHA512:
6
- metadata.gz: 0cbd4f06733e34268ba2ecbeec32c9b8cf8e50d61dc09520039b53778fec9dc0f9560107ba417a2c4dac3f29cf2ce47968e8223934f117545825b5a7454b980f
7
- data.tar.gz: 7e744d481c1125fdedd329be21b14cc4363d5a8f3f6a95e623f76ee921477bf1d231c782efcb807e87bf18bf9136c5acc429b99812155862add9b08bd043a5db
6
+ metadata.gz: acbdeaff512e94a5dbf62756e684e3bec5cdca1f664c98aca2938dc937b1d03453c61afa8f9989aab30ba91efdea587cdcf088ded1f055d6aa8350d2112ea263
7
+ data.tar.gz: b55621291aecd6e071f628509e1ffe75f878ac1bd222493bfb8e53bb4832bf38393473df00d4c2706234ae730023314dbbaf9e9ff7bc77d9dd8f60f6a447f2da
Binary file
Binary file
@@ -8,6 +8,7 @@ require 'calabash-cucumber/version'
8
8
  require 'calabash-cucumber/date_picker'
9
9
  require 'calabash-cucumber/ipad_1x_2x'
10
10
  require 'calabash-cucumber/utils/logging'
11
+ require 'calabash-cucumber/deprecated'
11
12
 
12
13
  # stubs for documentation
13
14
 
@@ -761,13 +761,46 @@ module Calabash
761
761
  res['result']
762
762
  end
763
763
 
764
- # Kills the app.
765
- def calabash_exit
764
+ # Attempts to shut the app down gracefully by simulating the transition
765
+ # to closed steps. The server will attempt to ensure that the following
766
+ # UIApplicationDelegate methods methods are called (in order).
767
+ #
768
+ # ```
769
+ # - (void)applicationWillResignActive:(UIApplication *)application
770
+ # - (void)applicationWillTerminate:(UIApplication *)application
771
+ # ```
772
+ #
773
+ # @todo Shutdown the CalabashServer and close connections.
774
+ #
775
+ # @param [Hash] opts Options for controlling the app shutdown process.
776
+ # @option opts [Float] :post_resign_active_delay (0.4) How long to wait
777
+ # after calling 'application will resign active' before calling
778
+ # 'app will terminate'.
779
+ # @option opts [Float] :post_will_terminate_delay (0.4) How long to wait
780
+ # after calling 'application will resign active' before calling 'exit'.
781
+ # @option opts [Integer] :exit_code What code should the application
782
+ # exit with? This exit code may or may not be used! If the
783
+ # UIApplication responds to `terminateWithSuccess`, then that method will
784
+ # be called. The exit code for `terminateWithSuccess` is undefined.
785
+ def calabash_exit(opts={})
786
+ default_opts = {:post_resign_active_delay => 0.4,
787
+ :post_will_terminate_delay => 0.4,
788
+ :exit_code => 0}
789
+ merged_opts = default_opts.merge(opts)
766
790
  # Exiting the app shuts down the HTTP connection and generates ECONNREFUSED,
767
791
  # or HTTPClient::KeepAliveDisconnected
768
792
  # which needs to be suppressed.
769
793
  begin
770
- http({:method => :post, :path => 'exit', :retryable_errors => Calabash::Cucumber::HTTPHelpers::RETRYABLE_ERRORS - [Errno::ECONNREFUSED, HTTPClient::KeepAliveDisconnected]})
794
+ http({
795
+ :method => :post,
796
+ :path => 'exit',
797
+ :retryable_errors => Calabash::Cucumber::HTTPHelpers::RETRYABLE_ERRORS - [Errno::ECONNREFUSED, HTTPClient::KeepAliveDisconnected]
798
+ }, {
799
+ :post_resign_active_delay => merged_opts[:post_resign_active_delay],
800
+ :post_will_terminate_delay => merged_opts[:post_will_terminate_delay],
801
+ :exit_code => merged_opts[:exit_code]
802
+ }
803
+ )
771
804
  rescue Errno::ECONNREFUSED, HTTPClient::KeepAliveDisconnected
772
805
  []
773
806
  end
@@ -0,0 +1,34 @@
1
+ require 'run_loop'
2
+ require 'calabash-cucumber/utils/logging'
3
+
4
+ module Calabash
5
+ module Cucumber
6
+
7
+ include Calabash::Cucumber::Logging
8
+
9
+ # @!visibility private
10
+ def self.const_missing(const_name)
11
+ if const_name == :FRAMEWORK_VERSION
12
+ _deprecated('0.9.169', 'FRAMEWORK_VERSION has been deprecated - there is no replacement', :warn)
13
+ return nil
14
+ end
15
+ raise(NameError, "uninitialized constant Calabash::Cucumber::#{const_name}")
16
+ end
17
+
18
+ # A model of a release version that can be used to compare two version.
19
+ #
20
+ # Calabash tries very hard to comply with Semantic Versioning rules. However,
21
+ # the semantic versioning spec is incompatible with RubyGem's patterns for
22
+ # pre-release gems.
23
+ #
24
+ # > "But returning to the practical: No release version of SemVer is compatible with Rubygems." - _David Kellum_
25
+ #
26
+ # Calabash version numbers will be in the form `<major>.<minor>.<patch>[.pre<N>]`.
27
+ #
28
+ # @see http://semver.org/
29
+ # @see http://gravitext.com/2012/07/22/versioning.html
30
+ class Version < RunLoop::Version
31
+
32
+ end
33
+ end
34
+ end
@@ -3,6 +3,7 @@ require 'json'
3
3
  require 'net/http'
4
4
  require 'cfpropertylist'
5
5
  require 'calabash-cucumber/utils/logging'
6
+ require 'run_loop'
6
7
 
7
8
  module Calabash
8
9
  module Cucumber
@@ -71,7 +72,7 @@ module Calabash
71
72
 
72
73
  # Stops (quits) the simulator.
73
74
  def stop
74
- self.simulator.quit_simulator
75
+ RunLoop::SimControl.new.quit_sim
75
76
  end
76
77
 
77
78
 
@@ -250,31 +250,54 @@ class Calabash::Cucumber::Launcher
250
250
  default_opts = {:sdk => nil, :path => nil}
251
251
  merged_opts = default_opts.merge opts
252
252
 
253
- sdk ||= merged_opts[:sdk] || sdk_version || self.simulator_launcher.sdk_detector.latest_sdk_version
254
- path ||= merged_opts[:path] || self.simulator_launcher.app_bundle_or_raise(app_path)
253
+ sim_control = opts.fetch(:sim_control, RunLoop::SimControl.new)
254
+ if sim_control.xcode_version_gte_6?
255
+ default_sim = RunLoop::Core.default_simulator(sim_control.xctools)
256
+ name_or_udid = merged_opts[:udid] || ENV['DEVICE_TARGET'] || default_sim
257
+
258
+ target_simulator = nil
259
+ sim_control.simulators.each do |device|
260
+ instruments_launch_name = "#{device.name} (#{device.version.to_s} Simulator)"
261
+ if instruments_launch_name == name_or_udid or device.udid == name_or_udid
262
+ target_simulator = device
263
+ end
264
+ end
265
+
266
+ if target_simulator.nil?
267
+ raise "Could not find a simulator that matches '#{name_or_udid}'"
268
+ end
255
269
 
256
- app = File.basename(path)
270
+ sim_control.reset_sim_content_and_settings({:sim_udid => target_simulator.udid})
271
+ else
272
+ sdk ||= merged_opts[:sdk] || sdk_version || self.simulator_launcher.sdk_detector.latest_sdk_version
273
+ path ||= merged_opts[:path] || self.simulator_launcher.app_bundle_or_raise(app_path)
257
274
 
258
- directories_for_sdk_prefix(sdk).each do |sdk_dir|
259
- app_dir = File.expand_path("#{sdk_dir}/Applications")
260
- next unless File.exists?(app_dir)
275
+ app = File.basename(path)
261
276
 
262
- bundle = `find "#{app_dir}" -type d -depth 2 -name "#{app}" | head -n 1`
277
+ directories_for_sdk_prefix(sdk).each do |sdk_dir|
278
+ app_dir = File.expand_path("#{sdk_dir}/Applications")
279
+ next unless File.exists?(app_dir)
263
280
 
264
- next if bundle.empty? # Assuming we're already clean
281
+ bundle = `find "#{app_dir}" -type d -depth 2 -name "#{app}" | head -n 1`
265
282
 
266
- if debug_logging?
267
- puts "Reset app state for #{bundle}"
268
- end
269
- sandbox = File.dirname(bundle)
270
- ['Library', 'Documents', 'tmp'].each do |content_dir|
271
- FileUtils.rm_rf(File.join(sandbox, content_dir))
283
+ next if bundle.empty? # Assuming we're already clean
284
+
285
+ if debug_logging?
286
+ puts "Reset app state for #{bundle}"
287
+ end
288
+ sandbox = File.dirname(bundle)
289
+ ['Library', 'Documents', 'tmp'].each do |content_dir|
290
+ FileUtils.rm_rf(File.join(sandbox, content_dir))
291
+ end
272
292
  end
273
293
  end
274
294
  end
275
295
 
276
- # Simulates touching the iOS Simulator > Reset Content and Settings... menu
277
- # item.
296
+ # Erases the contents and setting for every available simulator.
297
+ #
298
+ # For Xcode 6, this is equivalent to calling: `$ xcrun simctl erase` on
299
+ # every available simulator. For Xcode < 6, it is equivalent to touching
300
+ # the 'Reset Content & Settings' menu item.
278
301
  #
279
302
  # @note
280
303
  # **WARNING** This is a destructive operation. You have been warned.
@@ -282,9 +305,9 @@ class Calabash::Cucumber::Launcher
282
305
  # @raise RuntimeError if called when targeting a physical device
283
306
  def reset_simulator
284
307
  if device_target?
285
- raise "calling 'reset_simulator' when targeting a device is not allowed"
308
+ raise "Calling 'reset_simulator' when targeting a device is not allowed"
286
309
  end
287
- reset_simulator_content_and_settings
310
+ RunLoop::SimControl.new.reset_sim_content_and_settings
288
311
  end
289
312
 
290
313
  # @!visibility private
@@ -484,8 +507,17 @@ class Calabash::Cucumber::Launcher
484
507
  #TODO stopping is currently broken, but this works anyway because instruments stop the process before relaunching
485
508
  RunLoop.stop(run_loop) if run_loop
486
509
 
510
+ # @todo Don't overwrite the _args_ parameter!
487
511
  args = default_launch_args.merge(args)
488
512
 
513
+ # RunLoop::Core.run_with_options can reuse the SimControl instance. Many
514
+ # of the Xcode tool calls, like instruments -s templates, take a long time
515
+ # to execute. The SimControl instance has XCTool attribute which caches
516
+ # the results of many of these time-consuming calls so they only need to
517
+ # be called 1 time per launch.
518
+ # @todo Use SimControl in Launcher in place of methods like simulator_target?
519
+ args[:sim_control] = RunLoop::SimControl.new
520
+
489
521
  args[:app] = args[:app] || args[:bundle_id] || app_path || detect_app_bundle_from_args(args)
490
522
 
491
523
 
@@ -530,7 +562,10 @@ class Calabash::Cucumber::Launcher
530
562
  if sdk.nil? and args[:device_target] == 'simulator'
531
563
  sdk = :all
532
564
  end
533
- reset_app_sandbox({:sdk => sdk, :path => args[:app]})
565
+ reset_app_sandbox({:sdk => sdk,
566
+ :path => args[:app],
567
+ :udid => args[:udid],
568
+ :sim_control => args[:sim_control]})
534
569
  end
535
570
 
536
571
  if args[:privacy_settings]
@@ -555,14 +590,6 @@ class Calabash::Cucumber::Launcher
555
590
  if run_with_instruments?(args)
556
591
  # Patch for bug in Xcode 6 GM + iOS 8 device testing.
557
592
  # http://openradar.appspot.com/radar?id=5891145586442240
558
- #
559
- # RunLoop::Core.run_with_options can reuse the SimControl instance. Many
560
- # of the Xcode tool calls, like instruments -s templates, take a long time
561
- # to execute. The SimControl instance has XCTool attribute which caches
562
- # the results of many of these time-consuming calls so they only need to
563
- # be called 1 time per launch.
564
- # @todo Use SimControl in Launcher in place of methods like simulator_target?
565
- args[:sim_control] = RunLoop::SimControl.new
566
593
  uia_strategy = default_uia_strategy(args, args[:sim_control])
567
594
  args[:uia_strategy] ||= uia_strategy
568
595
  calabash_info "Using uia strategy: '#{args[:uia_strategy]}'" if debug_logging?
@@ -608,6 +635,10 @@ class Calabash::Cucumber::Launcher
608
635
  break
609
636
  end
610
637
  end
638
+
639
+ # Device could not be found; kick the problem down the road.
640
+ return :preferences if target_device.nil?
641
+
611
642
  # Preferences strategy works for iOS < 8.0, but not for iOS >= 8.0.
612
643
  if target_device.version < RunLoop::Version.new('8.0')
613
644
  :preferences
@@ -3,6 +3,7 @@ require 'calabash-cucumber/utils/plist_buddy'
3
3
  require 'calabash-cucumber/utils/logging'
4
4
  require 'sim_launcher'
5
5
  require 'cfpropertylist'
6
+ require 'run_loop'
6
7
 
7
8
  module Calabash
8
9
  module Cucumber
@@ -30,14 +31,12 @@ module Calabash
30
31
  # simulator, but in case we can, this method will quit the simulator
31
32
  # that is indicated by `xcode-select` or `DEVELOPER_DIR`.
32
33
  def quit_simulator
33
- dev_dir = xcode_developer_dir
34
- system "/usr/bin/osascript -e 'tell application \"#{dev_dir}/Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone Simulator.app\" to quit'"
34
+ RunLoop::SimControl.new.quit_sim
35
35
  end
36
36
 
37
37
  # Launches the iOS Simulator indicated by `xcode-select` or `DEVELOPER_DIR`.
38
38
  def launch_simulator
39
- dev_dir = xcode_developer_dir
40
- system "open -a \"#{dev_dir}/Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone Simulator.app\""
39
+ RunLoop::SimControl.new.launch_sim
41
40
  end
42
41
 
43
42
  # Resets the simulator content and settings. It is analogous to touching
@@ -1,41 +1,13 @@
1
- require 'calabash-cucumber/utils/logging'
2
- require 'run_loop/version'
3
-
4
1
  module Calabash
5
2
  module Cucumber
6
3
 
7
4
  # @!visibility public
8
5
  # The Calabash iOS gem version.
9
- VERSION = '0.10.1'
6
+ VERSION = '0.10.2'
10
7
 
11
8
  # @!visibility public
12
9
  # The minimum required version of the calabash.framework or, for Xamarin
13
10
  # users, the Calabash component.
14
- MIN_SERVER_VERSION = '0.10.1'
15
-
16
- # @!visibility private
17
- def self.const_missing(const_name)
18
- if const_name == :FRAMEWORK_VERSION
19
- _deprecated('0.9.169', 'FRAMEWORK_VERSION has been deprecated - there is no replacement', :warn)
20
- return nil
21
- end
22
- raise(NameError, "uninitialized constant Calabash::Cucumber::#{const_name}")
23
- end
24
-
25
- # A model of a release version that can be used to compare two version.
26
- #
27
- # Calabash tries very hard to comply with Semantic Versioning rules. However,
28
- # the semantic versioning spec is incompatible with RubyGem's patterns for
29
- # pre-release gems.
30
- #
31
- # > "But returning to the practical: No release version of SemVer is compatible with Rubygems." - _David Kellum_
32
- #
33
- # Calabash version numbers will be in the form `<major>.<minor>.<patch>[.pre<N>]`.
34
- #
35
- # @see http://semver.org/
36
- # @see http://gravitext.com/2012/07/22/versioning.html
37
- class Version < RunLoop::Version
38
-
39
- end
11
+ MIN_SERVER_VERSION = '0.10.2'
40
12
  end
41
13
  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.10.1
4
+ version: 0.10.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Karl Krukow
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-18 00:00:00.000000000 Z
11
+ date: 2014-10-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cucumber
@@ -170,14 +170,14 @@ dependencies:
170
170
  requirements:
171
171
  - - "~>"
172
172
  - !ruby/object:Gem::Version
173
- version: 1.0.3
173
+ version: 1.0.8
174
174
  type: :runtime
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
178
  - - "~>"
179
179
  - !ruby/object:Gem::Version
180
- version: 1.0.3
180
+ version: 1.0.8
181
181
  - !ruby/object:Gem::Dependency
182
182
  name: rake
183
183
  requirement: !ruby/object:Gem::Requirement
@@ -273,6 +273,7 @@ files:
273
273
  - lib/calabash-cucumber/core.rb
274
274
  - lib/calabash-cucumber/cucumber.rb
275
275
  - lib/calabash-cucumber/date_picker.rb
276
+ - lib/calabash-cucumber/deprecated.rb
276
277
  - lib/calabash-cucumber/device.rb
277
278
  - lib/calabash-cucumber/environment_helpers.rb
278
279
  - lib/calabash-cucumber/failure_helpers.rb