testautoi 0.9.142 → 0.9.143

Sign up to get free protection for your applications and to get access to all the features.
@@ -48,8 +48,8 @@ def console
48
48
  path = ENV['CALABASH_IRBRC']
49
49
  unless path
50
50
  path = File.expand_path(File.join(@script_dir,".irbrc"))
51
- ENV['IRBRC'] = path
52
51
  end
52
+ ENV['IRBRC'] = path
53
53
  puts "Running irb..."
54
54
  exec("irb")
55
55
  end
@@ -93,4 +93,4 @@ def run(options={:build_dir=>"Calabash",
93
93
  end
94
94
  system(cmd)
95
95
  puts "Done..."
96
- end
96
+ end
@@ -297,7 +297,7 @@ def update(args)
297
297
  if args.length > 0
298
298
  target = args[0]
299
299
  unless UPDATE_TARGETS.include?(target)
300
- msg("Error") do
300
+ msg('Error') do
301
301
  puts "Invalid target #{target}. Must be one of: #{UPDATE_TARGETS.join(' ')}"
302
302
  end
303
303
  exit 1
@@ -305,8 +305,8 @@ def update(args)
305
305
 
306
306
 
307
307
 
308
- target_file = "features/support/launch.rb"
309
- msg("Question") do
308
+ target_file = 'features/support/launch.rb'
309
+ msg('Question') do
310
310
  puts "I'm about to update the #{target_file} file."
311
311
  puts "Please hit return to confirm that's what you want."
312
312
  end
@@ -314,22 +314,29 @@ def update(args)
314
314
 
315
315
 
316
316
  unless File.exist?(target_file)
317
- msg("Error") do
317
+ msg('Error') do
318
318
  puts "Unable to find file #{target_file}"
319
319
  puts "Please change directory so that #{target_file} exists."
320
320
  end
321
321
  exit 1
322
322
  end
323
- new_launch_script = File.join(@script_dir,"launch.rb")
323
+ new_launch_script = File.join(@script_dir, 'launch.rb')
324
324
 
325
- FileUtils.cp(new_launch_script, target_file, :verbose => true)
325
+ FileUtils.cp(new_launch_script, 'features/support/01_launch.rb', :verbose => true)
326
+ FileUtils.rm(target_file, :force => true, :verbose => true)
326
327
 
327
- msg("Info") do
328
+ hooks_file = 'features/support/hooks.rb'
329
+ if File.exist?(hooks_file)
330
+ FileUtils.mv(hooks_file, 'features/support/02_pre_stop_hooks.rb', :verbose => true)
331
+ end
332
+
333
+ msg('Info') do
328
334
  puts "File copied.\n"
329
- puts "Launch on device using environment variable DEVICE_TARGET=device."
335
+ puts 'Launch on device using environment variable DEVICE_TARGET=device.'
336
+ puts 'Launch on simulator by default or using environment variable DEVICE_TARGET=simulator.'
330
337
  end
331
338
  else
332
- msg("Error") do
339
+ msg('Error') do
333
340
  puts "update must take one of the following targets: #{UPDATE_TARGETS.join(' ')}"
334
341
  end
335
342
  exit 1
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
+ require 'zip/zip'
3
4
  require 'fileutils'
4
5
  require 'json'
5
6
  require 'tmpdir'
6
- require 'zip/zip'
7
7
  require 'uri'
8
8
 
9
9
  require File.join(File.dirname(__FILE__),"calabash-ios-sim")
@@ -112,6 +112,7 @@ def run(option)
112
112
  cmd = "cucumber #{arguments.join(" ")}"
113
113
  end
114
114
  env = {}
115
+ env['CALABASH_NO_DEPRECATION'] = '1'
115
116
  env["APP_BUNDLE_PATH"] = File.join(FileUtils.pwd, app_bundle)
116
117
  if device_udid == ''
117
118
  # Use a Simulator
@@ -164,8 +165,8 @@ def setup
164
165
  ask_for_setting("sim_version", "Please enter the version of the Simulator [5.0, 5.1, 6.0, 6.1]", @settings["sim_version"])
165
166
  ask_for_setting("sim_device", "Please enter the device of the Simulator [iphone, ipad]", @settings["sim_device"])
166
167
 
167
- @settings["build_drop_branch_dir"] = "Mobile/iPhone/branch"
168
- @settings["build_drop_trunk_dir"] = "Mobile/iPhone/trunk"
168
+ @settings["build_drop_branch_dir"] = "Mobile/iPhone/branch/Corp"
169
+ @settings["build_drop_trunk_dir"] = "Mobile/iPhone/trunk/Corp"
169
170
 
170
171
  open(@settings_file, 'w') do |f|
171
172
  f.puts @settings.to_json
@@ -302,10 +303,10 @@ def get_build(version, sim)
302
303
  sim = (sim == 'sim')?"Emulator":"Device"
303
304
  if version == 'trunk'
304
305
  # copy the trunk build
305
- release_path = File.join(mount_node, @settings["build_drop_trunk_dir"], "ConcurMobile", sim)
306
+ release_path = File.join(mount_node, @settings["build_drop_trunk_dir"], "Instrumented", "ConcurMobile-cal", sim)
306
307
  else
307
308
  # copy the version build
308
- release_path = File.join(mount_node, @settings["build_drop_branch_dir"], "iPhone#{version}", "ConcurMobile", sim, "Release")
309
+ release_path = File.join(mount_node, @settings["build_drop_branch_dir"], "iPhone#{version}", "Instrumented", "ConcurMobile-cal", sim)
309
310
  end
310
311
  raise "No builds found in #{release_path}" unless File.directory?(release_path)
311
312
  build_dir = Dir.entries(release_path).reject{|d|d.start_with?('.')}.sort_by{|c| File.stat(File.join(release_path,c)).ctime}.last
@@ -519,12 +520,21 @@ def sim_set_pref(key, value)
519
520
  pref_files.each do |pref_file|
520
521
  plist = CFPropertyList::List.new(:file => pref_file)
521
522
  hash = CFPropertyList.native_types(plist.value)
522
- hash['KeyboardAutocorrection'] = value
523
- plist.value = CFPropertyList.guess(hash)
524
- plist.save(pref_file, CFPropertyList::List::FORMAT_BINARY)
523
+ if value == nil
524
+ puts "<#{pref_file}> #{key}=#{hash[key]}"
525
+ else
526
+ puts "<#{pref_file}> #{key}=#{hash[key]} => #{value}"
527
+ hash[key] = value
528
+ plist.value = CFPropertyList.guess(hash)
529
+ plist.save(pref_file, CFPropertyList::List::FORMAT_BINARY)
530
+ end
525
531
  end
526
532
  end
527
533
 
534
+ def sim_add_photo(file)
535
+
536
+ end
537
+
528
538
  class Device
529
539
  def self.call_device_detect(udid = nil)
530
540
  udid_arg = (udid == nil) ? "" : "-i #{udid}"
@@ -702,6 +712,9 @@ elsif cmd == 'sim'
702
712
  elsif option == 'getbuild'
703
713
  version = ARGV.shift
704
714
  get_build(version, 'sim')
715
+ elsif option == 'add'
716
+ file = ARGV.shift
717
+ sim_add_photo(file)
705
718
  end
706
719
  exit 0
707
720
 
@@ -13,7 +13,7 @@ Gem::Specification.new do |s|
13
13
  s.description = %q{calabash-cucumber drives tests for native iOS apps. You must link your app with calabash-ios-server framework to execute tests.}
14
14
  s.files = `git ls-files`.split("\n").concat(["staticlib/calabash.framework.zip"])
15
15
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
- s.executables = "calabash-ios"
16
+ s.executables = ["calabash-ios", "testautoi"]
17
17
  s.require_paths = ["lib"]
18
18
 
19
19
  s.add_dependency( "cucumber" )
@@ -24,7 +24,7 @@ Gem::Specification.new do |s|
24
24
  s.add_dependency( "location-one", "~>0.0.9")
25
25
  s.add_dependency( "httpclient","2.3.2")
26
26
  s.add_dependency( "bundler", "~> 1.1")
27
- s.add_dependency( "run_loop", "0.0.7" )
27
+ s.add_dependency( "run_loop", "0.0.9" )
28
28
  s.add_dependency( "awesome_print")
29
29
 
30
30
  end
@@ -0,0 +1,46 @@
1
+ ########################################
2
+ # #
3
+ # Important Note #
4
+ # #
5
+ # When running calabash-ios tests at #
6
+ # www.xamarin.com/test-cloud #
7
+ # this file will be overwritten by #
8
+ # a file which automates #
9
+ # app launch on devices. #
10
+ # #
11
+ # Don't rely on this file being #
12
+ # present when running at #
13
+ # Xamarin Test Cloud #
14
+ # #
15
+ ########################################
16
+
17
+ require 'calabash-cucumber/launcher'
18
+
19
+
20
+ # APP_BUNDLE_PATH = "~/Library/Developer/Xcode/DerivedData/??/Build/Products/Calabash-iphonesimulator/??.app"
21
+ # You may uncomment the above to overwrite the APP_BUNDLE_PATH
22
+ # However the recommended approach is to let Calabash find the app itself
23
+ # or set the environment variable APP_BUNDLE_PATH
24
+
25
+
26
+ Before do |scenario|
27
+ @calabash_launcher = Calabash::Cucumber::Launcher.new
28
+ unless @calabash_launcher.calabash_no_launch?
29
+ @calabash_launcher.relaunch
30
+ @calabash_launcher.calabash_notify(self)
31
+ end
32
+ end
33
+
34
+ After do |scenario|
35
+ unless @calabash_launcher.calabash_no_stop?
36
+ calabash_exit
37
+ if @calabash_launcher.active?
38
+ @calabash_launcher.stop
39
+ end
40
+ end
41
+ end
42
+
43
+ at_exit do
44
+ launcher = Calabash::Cucumber::Launcher.new
45
+ Calabash::Cucumber::SimulatorHelper.stop unless launcher.calabash_no_stop?
46
+ end
@@ -58,8 +58,17 @@ Then /^I (?:press|touch) (?:input|text) field number (\d+)$/ do |index|
58
58
  sleep(STEP_PAUSE)
59
59
  end
60
60
 
61
+
61
62
  Then /^I (?:press|touch) the "([^\"]*)" (?:input|text) field$/ do |name|
62
- touch("textField placeholder:'#{name}'")
63
+ placeholder_query = "textField placeholder:'#{name}'"
64
+ marked_query = "textField marked:'#{name}'"
65
+ if !query(placeholder_query).empty?
66
+ touch(placeholder_query)
67
+ elsif !query(marked_query).empty?
68
+ touch(marked_query)
69
+ else
70
+ screenshot_and_raise "could not find text field with placeholder '#{name}' or marked as '#{name}'"
71
+ end
63
72
  sleep(STEP_PAUSE)
64
73
  end
65
74
 
@@ -202,7 +211,7 @@ Then /^I wait to see a navigation bar titled "([^\"]*)"$/ do |expected_mark|
202
211
  end
203
212
 
204
213
  Then /^I wait for the "([^\"]*)" (?:input|text) field$/ do |placeholder|
205
- wait_for(WAIT_TIMEOUT) { element_exists( "textField placeholder:'#{placeholder}'") }
214
+ wait_for(WAIT_TIMEOUT) { element_exists( "textField placeholder:'#{placeholder}'") || element_exists( "textField marked:'#{placeholder}'") }
206
215
  end
207
216
 
208
217
  Then /^I wait for (\d+) (?:input|text) field(?:s)?$/ do |count|
@@ -412,10 +421,10 @@ Then /^I see (\d+) (?:input|text) field(?:s)?$/ do |count|
412
421
  end
413
422
 
414
423
  Then /^I should see a "([^\"]*)" (?:input|text) field$/ do |expected_mark|
415
- res = element_exists("textField placeholder:'#{expected_mark}'") or
424
+ res = element_exists("textField placeholder:'#{expected_mark}'") ||
416
425
  element_exists("textField marked:'#{expected_mark}'")
417
426
  unless res
418
- screenshot_and_raise "Expected textfield with placeholder or accessibilityLabel: #{txt}"
427
+ screenshot_and_raise "Expected textfield with placeholder or accessibilityLabel: #{expected_mark}"
419
428
  end
420
429
  end
421
430
 
@@ -423,7 +432,7 @@ Then /^I should not see a "([^\"]*)" (?:input|text) field$/ do |expected_mark|
423
432
  res = query("textField placeholder:'#{expected_mark}'")
424
433
  res.concat query("textField marked:'#{expected_mark}'")
425
434
  unless res.empty?
426
- screenshot_and_raise "Expected no textfield with placeholder nor accessibilityLabel: #{txt}, found #{res}"
435
+ screenshot_and_raise "Expected no textfield with placeholder nor accessibilityLabel: #{expected_mark}, found #{res}"
427
436
  end
428
437
  end
429
438
 
@@ -21,6 +21,10 @@ module Calabash
21
21
  map(uiquery, :query, *args)
22
22
  end
23
23
 
24
+ def flash(uiquery, *args)
25
+ map(uiquery, :flash, *args)
26
+ end
27
+
24
28
  def server_version
25
29
  JSON.parse(http(:path => 'version'))
26
30
  end
@@ -49,8 +53,10 @@ module Calabash
49
53
  end
50
54
 
51
55
  def query_all(uiquery, *args)
52
- puts "query_all is deprecated. Use the new all/visible feature."
53
- puts "see: https://github.com/calabash/calabash-ios/wiki/05-Query-syntax"
56
+ unless ENV['CALABASH_NO_DEPRECATION'] == '1'
57
+ puts "query_all is deprecated. Use the new all/visible feature."
58
+ puts "see: https://github.com/calabash/calabash-ios/wiki/05-Query-syntax"
59
+ end
54
60
  map("all #{uiquery}", :query, *args)
55
61
  end
56
62
 
@@ -352,9 +358,17 @@ EOF
352
358
 
353
359
  if data.nil? and os=="ios6"
354
360
  recording = recording_name_for(recording_name, "ios5", device)
361
+ data = load_recording(recording, rec_dir)
362
+ end
363
+
364
+ if data.nil? and device=='ipad'
365
+ if ENV['FULL_CONSOLE_OUTPUT'] == '1'
366
+ puts "Unable to find recording for #{os} and #{device}. Trying with #{os} iphone"
367
+ end
368
+ recording = recording_name_for(recording_name, os, 'iphone')
369
+ data = load_recording(recording, rec_dir)
355
370
  end
356
371
 
357
- data = load_recording(recording, rec_dir)
358
372
 
359
373
  if data.nil?
360
374
  screenshot_and_raise "Playback not found: #{recording} (searched for #{recording} in #{Dir.pwd}, #{rec_dir}, #{DATA_PATH}/resources"
@@ -454,7 +468,7 @@ EOF
454
468
  # Exiting the app shuts down the HTTP connection and generates ECONNREFUSED,
455
469
  # which needs to be suppressed.
456
470
  begin
457
- http(:path => 'exit', :retryable_errors => RETRYABLE_ERRORS - [Errno::ECONNREFUSED])
471
+ http({:method =>:post, :path => 'exit', :retryable_errors => RETRYABLE_ERRORS - [Errno::ECONNREFUSED]})
458
472
  rescue Errno::ECONNREFUSED
459
473
  []
460
474
  end
@@ -492,6 +506,10 @@ EOF
492
506
  end
493
507
  end
494
508
 
509
+ def default_device
510
+ @calabash_launcher && @calabash_launcher.device
511
+ end
512
+
495
513
  def send_uia_command(opts ={})
496
514
  run_loop = opts[:run_loop] || (@calabash_launcher && @calabash_launcher.active? && @calabash_launcher.run_loop)
497
515
  command = opts[:command]
@@ -0,0 +1,84 @@
1
+ require 'json'
2
+
3
+ module Calabash
4
+ module Cucumber
5
+ # Class device encapsulates information about the device or devices
6
+ # we are interacting with during a test.
7
+ # Credit: Due to jmoody's briar: https://github.com/jmoody/briar/blob/master/lib/briar/gestalt.rb
8
+
9
+ class Device
10
+
11
+ GESTALT_IPHONE = 'iPhone'
12
+ GESTALT_IPAD = 'iPad'
13
+ GESTALT_IPHONE5 = 'Retina 4-inch'
14
+ GESTALT_SIM_SYS = 'x86_64'
15
+ GESTALT_IPOD = 'iPod'
16
+
17
+
18
+ attr_reader :endpoint
19
+ attr_reader :device_family
20
+ attr_reader :simulator_details, :ios_version
21
+ attr_reader :system
22
+ attr_reader :framework_version
23
+
24
+ attr_accessor :udid
25
+
26
+ def initialize (endpoint, version_data)
27
+ simulator_device = version_data['simulator_device']
28
+ @endpoint = endpoint
29
+ @system = version_data['system']
30
+ @device_family = @system.eql?(GESTALT_SIM_SYS) ? simulator_device : @system.split(/[\d,.]/).first
31
+ @simulator_details = version_data['simulator']
32
+ @ios_version = version_data['iOS_version']
33
+ @framework_version = version_data['version']
34
+ end
35
+
36
+ def simulator?
37
+ system.eql?(GESTALT_SIM_SYS)
38
+ end
39
+
40
+ def device?
41
+ not simulator?
42
+ end
43
+
44
+ def iphone?
45
+ device_family.eql? GESTALT_IPHONE
46
+ end
47
+
48
+ def ipod?
49
+ device_family.eql? GESTALT_IPOD
50
+ end
51
+
52
+ def ipad?
53
+ device_family.eql? GESTALT_IPAD
54
+ end
55
+
56
+ def iphone_5?
57
+ if simulator?
58
+ simulator_details.split(/[(),]/)[3].eql? GESTALT_IPHONE5
59
+ else
60
+ system.split(/[\D]/).delete_if { |x| x.eql?('') }.first.eql?('5')
61
+ end
62
+ end
63
+
64
+ def version_hash (version_str)
65
+ tokens = version_str.split(/[,.]/)
66
+ {:major_version => tokens[0],
67
+ :minor_version => tokens[1],
68
+ :bug_version => tokens[2]}
69
+ end
70
+
71
+ def ios_major_version
72
+ version_hash(ios_version)[:major_version]
73
+ end
74
+
75
+ def ios6?
76
+ ios_major_version.eql?('6')
77
+ end
78
+
79
+ def ios5?
80
+ ios_major_version.eql?('5')
81
+ end
82
+ end
83
+ end
84
+ end
@@ -21,7 +21,7 @@ module Calabash
21
21
 
22
22
  # Load environment variable for showing full console output
23
23
  # If not env var set then we use true; i.e. output to console in full
24
- FULL_CONSOLE_OUTPUT = ENV['CALABASH_FULL_CONSOLE_OUTPUT'] == 'false' ? false : true
24
+ FULL_CONSOLE_OUTPUT = ENV['CALABASH_FULL_CONSOLE_OUTPUT'] == '1' ? true : false
25
25
 
26
26
  def self.relaunch(path, sdk = nil, version = 'iphone', args = nil)
27
27
 
@@ -89,7 +89,7 @@ module Calabash
89
89
  msg << "i.e., the directory containing your .xcodeproj file."
90
90
  msg << "In Xcode, build your calabash target for simulator."
91
91
  msg << "Check that your app can be found in\n #{File.expand_path("~/Library/Developer/Xcode/DerivedData")}"
92
- msg << "\n\nOption 2). In features/support/launch.rb set APP_BUNDLE_PATH to"
92
+ msg << "\n\nOption 2). In features/support/01_launch.rb set APP_BUNDLE_PATH to"
93
93
  msg << "the path where Xcode has built your Calabash target."
94
94
  msg << "Alternatively you can use the environment variable APP_BUNDLE_PATH.\n"
95
95
  raise msg.join("\n")
@@ -101,7 +101,7 @@ module Calabash
101
101
 
102
102
  msg << "\nThis means that Calabash can't automatically launch iOS simulator."
103
103
  msg << "Searched in Xcode 4.x default: #{DEFAULT_DERIVED_DATA_INFO}"
104
- msg << "\nIn features/support/launch.rb set APP_BUNDLE_PATH to"
104
+ msg << "\nIn features/support/01_launch.rb set APP_BUNDLE_PATH to"
105
105
  msg << "the path where Xcode has built your Calabash target."
106
106
  msg << "Alternatively you can use the environment variable APP_BUNDLE_PATH.\n"
107
107
  raise msg.join("\n")
@@ -125,7 +125,7 @@ module Calabash
125
125
  puts "Unable to find .app bundle at #{path}. It should be an .app directory."
126
126
  dd_dir = derived_data_dir_for_project
127
127
  app_bundles = Dir.glob(File.join(dd_dir, "Build", "Products", "*", "*.app"))
128
- msg = "Try setting APP_BUNDLE_PATH in features/support/launch.rb to one of:\n\n"
128
+ msg = "Try setting APP_BUNDLE_PATH in features/support/01_launch.rb to one of:\n\n"
129
129
  msg << app_bundles.join("\n")
130
130
  raise msg
131
131
  elsif path
@@ -140,7 +140,7 @@ module Calabash
140
140
  msg << "Please build your app from Xcode"
141
141
  msg << "You should build the -cal target."
142
142
  msg << ""
143
- msg << "Alternatively, specify APP_BUNDLE_PATH in features/support/launch.rb"
143
+ msg << "Alternatively, specify APP_BUNDLE_PATH in features/support/01_launch.rb"
144
144
  msg << "This should point to the location of your built app linked with calabash.\n"
145
145
  raise msg.join("\n")
146
146
  end
@@ -151,7 +151,7 @@ module Calabash
151
151
  msg << "Please build your app from Xcode"
152
152
  msg << "You should build your calabash target."
153
153
  msg << ""
154
- msg << "Alternatively, specify APP_BUNDLE_PATH in features/support/launch.rb"
154
+ msg << "Alternatively, specify APP_BUNDLE_PATH in features/support/01_launch.rb"
155
155
  msg << "This should point to the location of your built app linked with calabash.\n"
156
156
  raise msg.join("\n")
157
157
  end
@@ -160,7 +160,7 @@ module Calabash
160
160
 
161
161
  puts "APP_BUNDLE_PATH=#{preferred_dir || sim_dirs[0]}\n\n"
162
162
  puts "Please verify!"
163
- puts "If this is wrong please set it as APP_BUNDLE_PATH in features/support/launch.rb\n"
163
+ puts "If this is wrong please set it as APP_BUNDLE_PATH in features/support/01_launch.rb\n"
164
164
  puts("-"*37)
165
165
  bundle_path = sim_dirs[0]
166
166
  end
@@ -198,11 +198,6 @@ module Calabash
198
198
  until connected
199
199
  begin
200
200
  connected = (ping_app == '405')
201
- if ENV['POST_START_BREAK']
202
- puts "Environment var POST_START_BREAK is deprecated and should no longer be necessary."
203
- post_connect_sleep = (ENV['POST_START_BREAK'] || "2").to_f
204
- sleep(post_connect_sleep) unless post_connect_sleep <= 0
205
- end
206
201
  if connected
207
202
  server_version = get_version
208
203
  if server_version
@@ -246,8 +241,7 @@ module Calabash
246
241
 
247
242
  def self.launch(app_bundle_path, sdk, version, args = nil)
248
243
  simulator = SimLauncher::Simulator.new
249
- simulator.quit_simulator
250
- simulator.launch_ios_app(app_bundle_path, sdk, version) #, args wait for update to sim launcher
244
+ simulator.launch_ios_app(app_bundle_path, sdk, version)
251
245
  simulator
252
246
  end
253
247
 
@@ -1,12 +1,13 @@
1
1
  require 'calabash-cucumber/launch/simulator_helper'
2
2
  require 'sim_launcher'
3
+ require 'calabash-cucumber/device'
3
4
  require 'run_loop'
4
5
 
5
6
 
6
7
  class Calabash::Cucumber::Launcher
7
8
  attr_accessor :run_loop
8
9
  attr_accessor :device_target
9
- attr_accessor :ios_version
10
+ attr_accessor :device
10
11
 
11
12
  def initialize(device_target=:simulator)
12
13
  self.device_target = device_target
@@ -16,7 +17,11 @@ class Calabash::Cucumber::Launcher
16
17
  end
17
18
 
18
19
  def calabash_no_stop?
19
- ENV['NO_LAUNCH']=="1" or ENV['NO_STOP']=="1"
20
+ calabash_no_launch? or ENV['NO_STOP']=="1"
21
+ end
22
+
23
+ def calabash_no_launch?
24
+ ENV['NO_LAUNCH']=='1'
20
25
  end
21
26
 
22
27
  def device_target?
@@ -32,15 +37,23 @@ class Calabash::Cucumber::Launcher
32
37
  end
33
38
 
34
39
  def ios_major_version
35
- v = ios_version
36
- (v && v.split('.')[0])
40
+ return nil if device.nil? or device.ios_version.nil?
41
+ device.ios_major_version
42
+ end
43
+
44
+ def ios_version
45
+ return nil if device.nil?
46
+ device.ios_version
37
47
  end
38
48
 
39
49
 
40
- def reset_app_jail(sdk, app_path)
50
+ def reset_app_jail(sdk=nil, path=nil)
41
51
  return if device_target?
42
52
 
43
- app = File.basename(app_path)
53
+ sdk = sdk || ENV['SDK_VERSION'] || SimLauncher::SdkDetector.new().latest_sdk_version
54
+ path = path || Calabash::Cucumber::SimulatorHelper.app_bundle_or_raise(app_path)
55
+
56
+ app = File.basename(path)
44
57
  bundle = `find "#{ENV['HOME']}/Library/Application Support/iPhone Simulator/#{sdk}/Applications/" -type d -depth 2 -name "#{app}" | head -n 1`
45
58
  return if bundle.empty? # Assuming we're already clean
46
59
 
@@ -130,9 +143,7 @@ class Calabash::Cucumber::Launcher
130
143
 
131
144
  if status=='200'
132
145
  version_body = JSON.parse(res.body)
133
- if version_body['iOS_version']
134
- self.ios_version = version_body['iOS_version']
135
- end
146
+ self.device = Calabash::Cucumber::Device.new(url, version_body)
136
147
  end
137
148
 
138
149
  status
@@ -56,7 +56,9 @@ module Calabash
56
56
  query(uiquery, :accessibilityLabel)
57
57
  end
58
58
 
59
-
59
+ def identifier(uiquery)
60
+ query(uiquery, :accessibilityIdentifier)
61
+ end
60
62
 
61
63
  def simple_touch(label, *args)
62
64
  touch("view marked:'#{label}'", *args)
@@ -71,6 +73,10 @@ module Calabash
71
73
  end
72
74
 
73
75
  def set_text(uiquery, txt)
76
+ unless ENV['CALABASH_NO_DEPRECATION'] == '1'
77
+ puts 'set_text is deprecated, please use keyboard_enter_text'
78
+ puts 'https://github.com/calabash/calabash-ios/wiki/03.5-Calabash-iOS-Ruby-API'
79
+ end
74
80
  text_fields_modified = map(uiquery, :setText, txt)
75
81
  screenshot_and_raise "could not find text field #{uiquery}" if text_fields_modified.empty?
76
82
  text_fields_modified
@@ -1,6 +1,6 @@
1
1
  module Calabash
2
2
  module Cucumber
3
- VERSION = '0.9.142'
4
- FRAMEWORK_VERSION = '0.9.141'
3
+ VERSION = '0.9.143'
4
+ FRAMEWORK_VERSION = '0.9.143'
5
5
  end
6
6
  end
@@ -82,21 +82,25 @@ module Calabash
82
82
  end
83
83
 
84
84
  def wait_for_condition(options = {})
85
- options[:timeout] = options[:timeout] || 10
85
+ options[:timeout] = options[:timeout] || 30
86
86
  options[:query] = options[:query] || "view"
87
+ if options.has_key?(:condition)
88
+ opt_condition = options[:condition]
89
+ if opt_condition.is_a?(Symbol)
90
+ target_condition = CALABASH_CONDITIONS[opt_condition]
91
+ elsif opt_condition.is_a?(String)
92
+ target_condition = options[:condition]
93
+ end
94
+ options[:condition] = target_condition
95
+ end
87
96
  options[:condition] = options[:condition] || CALABASH_CONDITIONS[:none_animating]
88
97
  options[:post_timeout] = options[:post_timeout] || 0.1
89
- options[:frequency] = options[:frequency] || 0.2
90
- options[:retry_frequency] = options[:retry_frequency] || 0.2
98
+ options[:frequency] = options[:frequency] || 0.3
99
+ options[:retry_frequency] = options[:retry_frequency] || 0.3
91
100
  options[:count] = options[:count] || 2
92
101
  options[:timeout_message] = options[:timeout_message] || "Timeout waiting for condition (#{options[:condition]})"
93
102
  options[:screenshot_on_error] = options[:screenshot_on_error] || true
94
103
 
95
- if options[:condition] == CALABASH_CONDITIONS[:none_animating]
96
- #puts "Waiting for none-animating has been found unreliable."
97
- #puts "You are advised not to use it until this is resolved."
98
- #puts "Test will continue..."
99
- end
100
104
  begin
101
105
  Timeout::timeout(options[:timeout],WaitError) do
102
106
  loop do
@@ -116,11 +120,15 @@ module Calabash
116
120
  end
117
121
 
118
122
  def wait_for_none_animating(options = {})
119
- #sleep(0.3)
120
123
  options[:condition] = CALABASH_CONDITIONS[:none_animating]
121
124
  wait_for_condition(options)
122
125
  end
123
126
 
127
+ def wait_for_no_network_indicator(options = {})
128
+ options[:condition] = CALABASH_CONDITIONS[:no_network_indicator]
129
+ wait_for_condition(options)
130
+ end
131
+
124
132
  #may be called with a string (query) or an array of strings
125
133
  def wait_for_transition(done_queries, check_options={},animation_options={})
126
134
  done_queries = [*done_queries]
@@ -3,47 +3,38 @@
3
3
  # Important Note #
4
4
  # #
5
5
  # When running calabash-ios tests at #
6
- # www.lesspainful.com #
6
+ # www.xamarin.com/test-cloud #
7
7
  # this file will be overwritten by #
8
8
  # a file which automates #
9
9
  # app launch on devices. #
10
10
  # #
11
11
  # Don't rely on this file being #
12
12
  # present when running at #
13
- # www.lesspainful.com. #
14
- # #
15
- # Only put stuff here to automate #
16
- # iOS Simulator. #
17
- # #
18
- # You can put your app bundle path #
19
- # for automating simulator app start: #
20
- # Uncomment APP_BUNDLE_PATH =.. #
13
+ # Xamarin Test Cloud #
21
14
  # #
22
15
  ########################################
23
16
 
24
17
  require 'calabash-cucumber/launcher'
25
18
 
26
- # Uncomment and replace ?? appropriately
27
- # This should point to your Simulator build
28
- # which includes calabash framework
29
- # this is usually the Calabash build configuration
30
- # of your production target.
31
- #APP_BUNDLE_PATH = "~/Library/Developer/Xcode/DerivedData/??/Build/Products/Calabash-iphonesimulator/??.app"
32
- #
33
19
 
20
+ # APP_BUNDLE_PATH = "~/Library/Developer/Xcode/DerivedData/??/Build/Products/Calabash-iphonesimulator/??.app"
21
+ # You may uncomment the above to overwrite the APP_BUNDLE_PATH
22
+ # However the recommended approach is to let Calabash find the app itself
23
+ # or set the environment variable APP_BUNDLE_PATH
34
24
 
35
25
  Before do |scenario|
36
26
  @calabash_launcher = Calabash::Cucumber::Launcher.new
37
- @calabash_launcher.relaunch
38
- @calabash_launcher.calabash_notify(self)
27
+ unless @calabash_launcher.calabash_no_launch?
28
+ @calabash_launcher.relaunch
29
+ @calabash_launcher.calabash_notify(self)
30
+ end
39
31
  end
40
32
 
41
33
  After do |scenario|
42
34
  unless @calabash_launcher.calabash_no_stop?
35
+ calabash_exit
43
36
  if @calabash_launcher.active?
44
37
  @calabash_launcher.stop
45
- else
46
- Calabash::Cucumber::SimulatorHelper.stop
47
38
  end
48
39
  end
49
40
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: testautoi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.142
4
+ version: 0.9.143
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-04-17 00:00:00.000000000 Z
12
+ date: 2013-05-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: cucumber
@@ -146,7 +146,7 @@ dependencies:
146
146
  requirements:
147
147
  - - '='
148
148
  - !ruby/object:Gem::Version
149
- version: 0.0.7
149
+ version: 0.0.9
150
150
  type: :runtime
151
151
  prerelease: false
152
152
  version_requirements: !ruby/object:Gem::Requirement
@@ -154,7 +154,7 @@ dependencies:
154
154
  requirements:
155
155
  - - '='
156
156
  - !ruby/object:Gem::Version
157
- version: 0.0.7
157
+ version: 0.0.9
158
158
  - !ruby/object:Gem::Dependency
159
159
  name: awesome_print
160
160
  requirement: !ruby/object:Gem::Requirement
@@ -220,14 +220,15 @@ files:
220
220
  - features-skeleton/my_first.feature
221
221
  - features-skeleton/step_definitions/calabash_steps.rb
222
222
  - features-skeleton/step_definitions/my_first_steps.rb
223
+ - features-skeleton/support/01_launch.rb
224
+ - features-skeleton/support/02_pre_stop_hooks.rb
223
225
  - features-skeleton/support/env.rb
224
- - features-skeleton/support/hooks.rb
225
- - features-skeleton/support/launch.rb
226
226
  - features/step_definitions/calabash_steps.rb
227
227
  - lib/calabash-cucumber.rb
228
228
  - lib/calabash-cucumber/calabash_steps.rb
229
229
  - lib/calabash-cucumber/core.rb
230
230
  - lib/calabash-cucumber/cucumber.rb
231
+ - lib/calabash-cucumber/device.rb
231
232
  - lib/calabash-cucumber/ibase.rb
232
233
  - lib/calabash-cucumber/keyboard_helpers.rb
233
234
  - lib/calabash-cucumber/launch/simulator_helper.rb
@@ -348,4 +349,3 @@ specification_version: 3
348
349
  summary: Summary
349
350
  test_files:
350
351
  - features/step_definitions/calabash_steps.rb
351
- has_rdoc:
@@ -1,77 +0,0 @@
1
- ########################################
2
- # #
3
- # Important Note #
4
- # #
5
- # When running calabash-ios tests at #
6
- # www.lesspainful.com #
7
- # this file will be overwritten by #
8
- # a file which automates #
9
- # app launch on devices. #
10
- # #
11
- # Don't rely on this file being #
12
- # present when running at #
13
- # www.lesspainful.com. #
14
- # #
15
- # Only put stuff here to automate #
16
- # iOS Simulator. #
17
- # #
18
- # You can put your app bundle path #
19
- # for automating simulator app start: #
20
- # Uncomment APP_BUNDLE_PATH =.. #
21
- # #
22
- ########################################
23
-
24
- require 'calabash-cucumber/launch/simulator_helper'
25
- require 'sim_launcher'
26
-
27
- # Uncomment and replace ?? appropriately
28
- # This should point to your Simulator build
29
- # which includes calabash framework
30
- # this is usually the Calabash build configuration
31
- # of your production target.
32
- #APP_BUNDLE_PATH = "~/Library/Developer/Xcode/DerivedData/??/Build/Products/Calabash-iphonesimulator/??.app"
33
- #
34
-
35
- def reset_app_jail(sdk, app_path)
36
- app = File.basename(app_path)
37
- bundle = `find "#{ENV['HOME']}/Library/Application Support/iPhone Simulator/#{sdk}/Applications/" -type d -depth 2 -name "#{app}" | head -n 1`
38
- return if bundle.empty? # Assuming we're already clean
39
-
40
- sandbox = File.dirname(bundle)
41
- ['Library', 'Documents', 'tmp'].each do |dir|
42
- FileUtils.rm_rf(File.join(sandbox, dir))
43
- end
44
- end
45
-
46
- def relaunch(args=nil)
47
- if ENV['NO_LAUNCH']!="1"
48
- sdk = ENV['SDK_VERSION'] || SimLauncher::SdkDetector.new().latest_sdk_version
49
- path = Calabash::Cucumber::SimulatorHelper.app_bundle_or_raise(app_path)
50
- if ENV['RESET_BETWEEN_SCENARIOS']=="1"
51
- reset_app_jail(sdk, path)
52
- end
53
-
54
- Calabash::Cucumber::SimulatorHelper.relaunch(path,sdk,ENV['DEVICE'] || 'iphone', args)
55
- end
56
- end
57
-
58
- def app_path
59
- ENV['APP_BUNDLE_PATH'] || (defined?(APP_BUNDLE_PATH) && APP_BUNDLE_PATH)
60
- end
61
-
62
- def calabash_notify
63
- if self.respond_to?(:on_launch)
64
- self.on_launch
65
- end
66
- end
67
-
68
- Before do |scenario|
69
- relaunch
70
- calabash_notify
71
- end
72
-
73
- at_exit do
74
- if ENV['NO_LAUNCH']!="1" and ENV['NO_STOP']!="1"
75
- Calabash::Cucumber::SimulatorHelper.stop
76
- end
77
- end