calabash-cucumber 0.17.0 → 0.17.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 21ca53be02da9a57cb4baffd965a8ce32d959a80
4
- data.tar.gz: 30ff3a6acafdca9a4d45b5855418e37d122a0cc0
3
+ metadata.gz: 634d208866c3c80558eea3cf6e002d436a38ca70
4
+ data.tar.gz: d2800a32dec27bbbbb2fef975ca0c0714cfe4dcb
5
5
  SHA512:
6
- metadata.gz: b20587099e1b708a242899de712604b6e675768a453a09f91ba5f5dd4b4a4e088c72343ff6577b40a945c9eaca58fd3ef54af5a2711af20c16090844ae353629
7
- data.tar.gz: 2b532a1873a5b4a56c141b363b0e9acb46b6012b228fe34f19afb78ab40066444df869ced45d35ffd300e5b90e604729ded46827441546cc6bf79b3a1a8d9d82
6
+ metadata.gz: c3d0e8203c996a79d956d3c1862a48a760a716f622ff070a053682816e0a06bd2e77daeaeb232a299592cef3a8bb060222a64d96bdc39250d484638becea859a
7
+ data.tar.gz: ecf56d4a6ed42028125511566d7b5a8078c43bdc2925619e7f3ee56b9ce5a715d63057355c91800480bc61b3fdc7427ff4677a515ae6e1d786175374aad9b7a8
Binary file
Binary file
@@ -1,7 +1,9 @@
1
+ require "calabash-cucumber/environment"
1
2
  require "calabash-cucumber/logging"
2
3
  require "calabash-cucumber/dot_dir"
3
4
  require "calabash-cucumber/store/preferences"
4
5
  require "calabash-cucumber/usage_tracker.rb"
6
+ require "calabash-cucumber/dylibs"
5
7
  require 'calabash-cucumber/core'
6
8
  require 'calabash-cucumber/tests_helpers'
7
9
  require 'calabash-cucumber/keyboard_helpers'
@@ -193,7 +193,7 @@ module Calabash
193
193
  # @return [Boolean] true if this device is a simulator
194
194
  def simulator?
195
195
  # Post 0.16.2 server
196
- if simulator_details
196
+ unless simulator_details.nil? || simulator_details.empty?
197
197
  true
198
198
  else
199
199
  system == GESTALT_SIM_SYS
@@ -0,0 +1,37 @@
1
+ module Calabash
2
+ module Cucumber
3
+
4
+ # @!visibility private
5
+ module Dylibs
6
+
7
+ # @!visibility private
8
+ def self.sim_dylib_basename
9
+ "libCalabashDynSim.dylib"
10
+ end
11
+
12
+ # @!visibility private
13
+ def self.path_to_sim_dylib
14
+ File.join(self.dylib_dir, self.sim_dylib_basename)
15
+ end
16
+
17
+ # @!visibility private
18
+ def self.device_dylib_basename
19
+ "libCalabashDyn.dylib"
20
+ end
21
+
22
+ # @!visibility private
23
+ def self.path_to_device_dylib
24
+ File.join(self.dylib_dir, self.device_dylib_basename)
25
+ end
26
+
27
+ private
28
+
29
+ # @!visibility private
30
+ def self.dylib_dir
31
+ dirname = File.dirname(__FILE__)
32
+ File.expand_path(File.join(dirname, "..", "..", "dylibs"))
33
+ end
34
+ end
35
+ end
36
+ end
37
+
@@ -0,0 +1,16 @@
1
+ module Calabash
2
+ module Cucumber
3
+ module Environment
4
+
5
+ def self.device_target
6
+ value = ENV["DEVICE_TARGET"]
7
+
8
+ if value.nil? || value == ""
9
+ nil
10
+ else
11
+ value
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -323,7 +323,12 @@ module Calabash
323
323
  # on numeric keyboards, it is actually a button on the
324
324
  # keyboard and not a key
325
325
  if code.eql?(UIA_SUPPORTED_CHARS['Delete'])
326
- uia("uia.keyboard().elements().firstWithName('Delete').tap()")
326
+ js_tap_delete = "(function() {"\
327
+ "var deleteElement = uia.keyboard().elements().firstWithName('Delete');"\
328
+ "deleteElement = deleteElement.isValid() ? deleteElement : uia.keyboard().elements().firstWithName('delete');"\
329
+ "deleteElement.tap();"\
330
+ "})();"
331
+ uia(js_tap_delete)
327
332
  else
328
333
  uia_type_string_raw(code)
329
334
  end
@@ -7,7 +7,6 @@ require 'calabash-cucumber/actions/playback_actions'
7
7
  require 'run_loop'
8
8
  require 'cfpropertylist'
9
9
  require 'calabash-cucumber/utils/logging'
10
- require 'calabash/dylibs'
11
10
  require "calabash-cucumber/usage_tracker"
12
11
 
13
12
  # Used to launch apps for testing in iOS Simulator or on iOS Devices. By default
@@ -31,6 +30,9 @@ require "calabash-cucumber/usage_tracker"
31
30
  # not exit the simulator when a Scenario fails.
32
31
  class Calabash::Cucumber::Launcher
33
32
 
33
+ require "calabash-cucumber/dylibs"
34
+ require "calabash-cucumber/environment"
35
+
34
36
  include Calabash::Cucumber::Logging
35
37
  include Calabash::Cucumber::SimulatorAccessibility
36
38
 
@@ -109,48 +111,25 @@ class Calabash::Cucumber::Launcher
109
111
  # @see Calabash::Cucumber::Core#console_attach
110
112
  def attach(options={})
111
113
  default_options = {:max_retry => 1,
112
- :timeout => 10,
113
- :uia_strategy => nil}
114
+ :timeout => 10}
114
115
  merged_options = default_options.merge(options)
115
116
 
116
117
  if calabash_no_launch?
117
- self.actions= Calabash::Cucumber::PlaybackActions.new
118
+ self.actions = Calabash::Cucumber::PlaybackActions.new
118
119
  return
119
120
  end
120
121
 
121
- # :host is is a special case and requires reading information from a cache.
122
- strategy_from_options = merged_options[:uia_strategy]
123
- if strategy_from_options == :host
124
- self.run_loop = RunLoop::HostCache.default.read
125
- return self
126
- end
122
+ self.run_loop = RunLoop::HostCache.default.read
127
123
 
128
124
  # Sets the device attribute.
129
125
  ensure_connectivity(merged_options[:max_retry], merged_options[:timeout])
130
126
 
131
- if strategy_from_options.nil? && xcode.version_gte_7?
132
- self.run_loop = RunLoop::HostCache.default.read
133
- return self
134
- end
135
-
136
- pids_str = `ps x -o pid,command | grep -v grep | grep "instruments" | awk '{printf "%s,", $1}'`
137
- pids = pids_str.split(',').map { |pid| pid.to_i }
138
- pid = pids.first
139
- run_loop = {}
140
- if pid
141
- run_loop[:pid] = pid
142
- self.actions= Calabash::Cucumber::InstrumentsActions.new
127
+ if self.run_loop[:pid]
128
+ self.actions = Calabash::Cucumber::InstrumentsActions.new
143
129
  else
144
- self.actions= Calabash::Cucumber::PlaybackActions.new
130
+ self.actions = Calabash::Cucumber::PlaybackActions.new
145
131
  end
146
132
 
147
- if strategy_from_options
148
- run_loop[:uia_strategy] = merged_options[:uia_strategy]
149
- else
150
- run_loop[:uia_strategy] = :preferences
151
- end
152
-
153
- self.run_loop = run_loop
154
133
  major = self.device.ios_major_version
155
134
  if major.to_i >= 7 && self.actions.is_a?(Calabash::Cucumber::PlaybackActions)
156
135
  puts %Q{
@@ -296,21 +275,46 @@ Remove direct calls to reset_app_sandbox.
296
275
  })
297
276
  end
298
277
 
299
- # Erases the contents and setting for every available simulator.
300
- #
301
- # For Xcode 6, this is equivalent to calling: `$ xcrun simctl erase` on
302
- # every available simulator. For Xcode < 6, it is equivalent to touching
303
- # the 'Reset Content & Settings' menu item.
278
+ # Erases a simulator. This is the same as touching the Simulator
279
+ # "Reset Content & Settings" menu item.
304
280
  #
305
- # @note
306
- # **WARNING** This is a destructive operation. You have been warned.
281
+ # @param [RunLoop::Device, String] The simulator to erase. Can be a device
282
+ # instance, a simulator UUID, or a human readable simulator name.
307
283
  #
308
- # @raise RuntimeError if called when targeting a physical device
309
- def reset_simulator
284
+ # @raise ArgumentError If the simulator is a physical device
285
+ # @raise RuntimeError If the simulator cannot be shutdown
286
+ # @raise RuntimeError If the simulator cannot be erased
287
+ def reset_simulator(device=nil)
310
288
  if device_target?
311
- raise "Calling 'reset_simulator' when targeting a device is not allowed"
289
+ raise ArgumentError, "Resetting physical devices is not supported."
312
290
  end
313
- RunLoop::SimControl.new.reset_sim_content_and_settings
291
+
292
+ simulator = nil
293
+
294
+ if device.nil? || device == ""
295
+ device_target = Calabash::Cucumber::Environment.device_target
296
+ if device_target.nil?
297
+ default_simulator = RunLoop::Core.default_simulator
298
+ simulator = RunLoop::Device.device_with_identifier(default_simulator)
299
+ else
300
+ simulator = RunLoop::Device.device_with_identifier(device_target)
301
+ end
302
+ elsif device.is_a?(RunLoop::Device)
303
+ if device.physical_device?
304
+ raise ArgumentError,
305
+ %Q{
306
+ Cannot reset: #{device}.
307
+
308
+ Resetting physical devices is not supported.
309
+ }
310
+ end
311
+ simulator = device
312
+ else
313
+ simulator = RunLoop::Device.device_with_identifier(device)
314
+ end
315
+
316
+ RunLoop::CoreSimulator.erase(simulator)
317
+ simulator
314
318
  end
315
319
 
316
320
  # @!visibility private
@@ -559,9 +563,9 @@ Remove direct calls to reset_app_sandbox.
559
563
  # User passed a Boolean, not a file.
560
564
  if use_dylib.is_a?(TrueClass)
561
565
  if simulator_target?(args)
562
- args[:inject_dylib] = Calabash::Dylibs.path_to_sim_dylib
566
+ args[:inject_dylib] = Calabash::Cucumber::Dylibs.path_to_sim_dylib
563
567
  else
564
- args[:inject_dylib] = Cucumber::Dylibs.path_to_device_dylib
568
+ raise RuntimeError, "Injecting a dylib is not supported when targetting a device"
565
569
  end
566
570
  else
567
571
  unless File.exist? use_dylib
@@ -1,6 +1,8 @@
1
1
  module Calabash
2
2
  module Cucumber
3
+ require "fileutils"
3
4
  require "run_loop"
5
+ require "calabash-cucumber/dot_dir"
4
6
 
5
7
  # These methods are not part of the API.
6
8
  #
@@ -32,6 +34,30 @@ module Calabash
32
34
  puts self.red("ERROR: #{msg}") if msg
33
35
  end
34
36
 
37
+ # !@visibility private
38
+ def self.log_to_file(message)
39
+ timestamp = self.timestamp
40
+
41
+ begin
42
+ File.open(self.calabash_log_file, "a:UTF-8") do |file|
43
+ message.split($-0).each do |line|
44
+ file.write("#{timestamp} #{line}#{$-0}")
45
+ end
46
+ end
47
+ rescue => e
48
+ message =
49
+ %Q{Could not write:
50
+
51
+ #{message}
52
+
53
+ to calabash.log because:
54
+
55
+ #{e}
56
+ }
57
+ self.log_debug(message)
58
+ end
59
+ end
60
+
35
61
  private
36
62
 
37
63
  # @!visibility private
@@ -74,6 +100,27 @@ module Calabash
74
100
  def self.green(string)
75
101
  colorize(string, 32)
76
102
  end
103
+
104
+ # @!visibility private
105
+ def self.timestamp
106
+ Time.now.strftime("%Y-%m-%d_%H-%M-%S")
107
+ end
108
+
109
+ # @!visibility private
110
+ def self.logs_directory
111
+ path = File.join(Calabash::Cucumber::DotDir.directory, "logs")
112
+ FileUtils.mkdir_p(path)
113
+ path
114
+ end
115
+
116
+ # @!visibility private
117
+ def self.calabash_log_file
118
+ path = File.join(self.logs_directory, "calabash.log")
119
+ if !File.exist?(path)
120
+ FileUtils.touch(path)
121
+ end
122
+ path
123
+ end
77
124
  end
78
125
  end
79
126
 
@@ -8,6 +8,7 @@ module Calabash
8
8
  #
9
9
  # ~/.calabash/preferences/preferences.json
10
10
  class Preferences
11
+ require "calabash-cucumber/dot_dir"
11
12
 
12
13
  def initialize
13
14
  dot_dir = Calabash::Cucumber::DotDir.directory
@@ -150,12 +151,8 @@ module Calabash
150
151
  def generate_json(hash)
151
152
  begin
152
153
  JSON.pretty_generate(hash)
153
- rescue TypeError, JSON::UnparserError => e
154
- write_to_log(
155
- %Q{Error generating JSON from:
156
- hash: #{hash}
157
- error: #{e}
158
- })
154
+ rescue TypeError, JSON::UnparserError => _
155
+
159
156
  log_defaults_reset
160
157
 
161
158
  # Will always generate valid JSON
@@ -181,12 +178,8 @@ error: #{e}
181
178
  def parse_json(string)
182
179
  begin
183
180
  JSON.parse(string, {:symbolize_names => true})
184
- rescue TypeError, JSON::ParserError => e
185
- write_to_log(
186
- %Q{Error parsing JSON from:
187
- string: #{string}
188
- error: #{e}
189
- })
181
+ rescue TypeError, JSON::ParserError => _
182
+
190
183
  log_defaults_reset
191
184
 
192
185
  hash = defaults
@@ -195,11 +188,6 @@ string: #{string}
195
188
  end
196
189
  end
197
190
 
198
- # @!visibility private
199
- def write_to_log(error_message)
200
- # TODO write to a log file?
201
- end
202
-
203
191
  # @!visibility private
204
192
  def log_defaults_reset
205
193
  Calabash::Cucumber.log_warn(
@@ -1,6 +1,8 @@
1
1
  module Calabash
2
2
  module Cucumber
3
3
  class UsageTracker
4
+ require "calabash-cucumber/store/preferences"
5
+ require "calabash-cucumber/logging"
4
6
 
5
7
  require "httpclient"
6
8
  require "run_loop"
@@ -24,9 +26,9 @@ module Calabash
24
26
  info_we_are_allowed_to_track != "none"
25
27
  begin
26
28
  HTTPClient.post(ROUTE, info)
27
- rescue => _
28
- # do nothing
29
- # Perhaps we should log?
29
+ rescue => e
30
+ message = %Q{ERROR: Could not post usage tracking information:#{$-0}#{e}}
31
+ Calabash::Cucumber::log_to_file(message)
30
32
  end
31
33
  end
32
34
  end
@@ -82,7 +84,7 @@ module Calabash
82
84
  end
83
85
 
84
86
  # @!visibility private
85
- DATA_VERSION = "1.0"
87
+ DATA_VERSION = "1.1"
86
88
 
87
89
  # @!visibility private
88
90
  WINDOWS = "Windows"
@@ -179,7 +181,8 @@ module Calabash
179
181
  :jenkins => RunLoop::Environment.jenkins?,
180
182
  :travis => RunLoop::Environment.travis?,
181
183
  :circle_ci => RunLoop::Environment.circle_ci?,
182
- :teamcity => RunLoop::Environment.teamcity?
184
+ :teamcity => RunLoop::Environment.teamcity?,
185
+ :gitlab => RunLoop::Environment.gitlab?
183
186
  }
184
187
  )
185
188
  end
@@ -3,10 +3,10 @@ module Calabash
3
3
 
4
4
  # @!visibility public
5
5
  # The Calabash iOS gem version.
6
- VERSION = "0.17.0"
6
+ VERSION = "0.17.1"
7
7
 
8
8
  # @!visibility public
9
9
  # The minimum required version of the Calabash embedded server.
10
- MIN_SERVER_VERSION = "0.17.0"
10
+ MIN_SERVER_VERSION = "0.17.1"
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.17.0
4
+ version: 0.17.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: 2015-12-09 00:00:00.000000000 Z
11
+ date: 2016-01-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cucumber
@@ -144,16 +144,22 @@ dependencies:
144
144
  name: run_loop
145
145
  requirement: !ruby/object:Gem::Requirement
146
146
  requirements:
147
- - - "~>"
147
+ - - ">="
148
148
  - !ruby/object:Gem::Version
149
- version: '2.0'
149
+ version: 2.0.3
150
+ - - "<"
151
+ - !ruby/object:Gem::Version
152
+ version: '3.0'
150
153
  type: :runtime
151
154
  prerelease: false
152
155
  version_requirements: !ruby/object:Gem::Requirement
153
156
  requirements:
154
- - - "~>"
157
+ - - ">="
155
158
  - !ruby/object:Gem::Version
156
- version: '2.0'
159
+ version: 2.0.3
160
+ - - "<"
161
+ - !ruby/object:Gem::Version
162
+ version: '3.0'
157
163
  - !ruby/object:Gem::Dependency
158
164
  name: json
159
165
  requirement: !ruby/object:Gem::Requirement
@@ -406,6 +412,8 @@ files:
406
412
  - lib/calabash-cucumber/deprecated.rb
407
413
  - lib/calabash-cucumber/device.rb
408
414
  - lib/calabash-cucumber/dot_dir.rb
415
+ - lib/calabash-cucumber/dylibs.rb
416
+ - lib/calabash-cucumber/environment.rb
409
417
  - lib/calabash-cucumber/environment_helpers.rb
410
418
  - lib/calabash-cucumber/failure_helpers.rb
411
419
  - lib/calabash-cucumber/http_helpers.rb
@@ -533,7 +541,6 @@ files:
533
541
  - lib/calabash-cucumber/utils/xctools.rb
534
542
  - lib/calabash-cucumber/version.rb
535
543
  - lib/calabash-cucumber/wait_helpers.rb
536
- - lib/calabash/dylibs.rb
537
544
  - lib/frank-calabash.rb
538
545
  - scripts/.irbrc
539
546
  - scripts/calabash.xcconfig.erb
@@ -1,21 +0,0 @@
1
- module Calabash
2
- module Dylibs
3
- def sim_dylib_basename
4
- 'libCalabashDynSim.dylib'
5
- end
6
-
7
- def path_to_sim_dylib
8
- File.expand_path File.join(__FILE__, '..', '..', '..', 'dylibs', sim_dylib_basename)
9
- end
10
-
11
- def device_dylib_basename
12
- 'libCalabashDyn.dylib'
13
- end
14
-
15
- def path_to_device_dylib
16
- File.expand_path File.join(__FILE__, '..', '..', '..', 'dylibs', device_dylib_basename)
17
- end
18
-
19
- module_function :path_to_sim_dylib, :path_to_device_dylib, :device_dylib_basename, :sim_dylib_basename
20
- end
21
- end