run_loop 2.3.2 β†’ 2.4.0

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
- SHA256:
3
- metadata.gz: 6cabacbd18475bdda9b3860c4b3ff55e96ac397b707de1468fb58463b210f055
4
- data.tar.gz: b459ec722d9af192d1bfbc22bdf419529a010d75d8fe750bb7a8cf28acc3ebb3
2
+ SHA1:
3
+ metadata.gz: a7552a576fe17fc056f8bd701a86c3f9b48a494d
4
+ data.tar.gz: 3cc4607e284f43dd237059386d2c4d1e97dc1934
5
5
  SHA512:
6
- metadata.gz: 541d35b01160d1de78d863ef0658b3a65bff23405bfada0b41cf9a5a0f3460d112ba1bb65f721df5949613f0d7c358bd5434afd2b0c882b5792de95bebd398e7
7
- data.tar.gz: 58529ba9de24b781ac1f1d476111cc6a23250169b37ce39c678b3b28af2064742c995d62ef1ba9de8ea270959ec6d3087ef09dc0f71de7ff337953756f57444f
6
+ metadata.gz: 2adcaae646576ab37d3ab5e0a9afff7dfcb13f262e53f1ef545521b3ca325054f0cd00b22038511d8fdad11b2c5d9072b070a64f60d645302919327977ac25a0
7
+ data.tar.gz: 21e54fdbf93061cb3a7ba279aede270c25e2118c22474f13a11c22a93d9c43916b4eaf52d92538878c2ef97e9311d57e69bc70bbe96bb84cf73f8799fef11ff9
data/lib/run_loop/app.rb CHANGED
@@ -286,7 +286,8 @@ Bundle must:
286
286
  lproj_asset?(file) ||
287
287
  code_signing_asset?(file) ||
288
288
  core_data_asset?(file) ||
289
- font?(file)
289
+ font?(file) ||
290
+ build_artifact?(file)
290
291
  end
291
292
 
292
293
  # @!visibility private
@@ -371,6 +372,11 @@ Bundle must:
371
372
 
372
373
  extension == ".ttf" || extension == ".otf"
373
374
  end
375
+
376
+ # @!visibility private
377
+ def build_artifact?(file)
378
+ File.extname(file) == ".xcconfig"
379
+ end
374
380
  end
375
381
  end
376
382
 
@@ -564,8 +564,7 @@ Query must contain at least one of these keys:
564
564
  request = request("springboard-alert")
565
565
  client = http_client(http_options)
566
566
  response = client.get(request)
567
- hash = expect_300_response(response)
568
- hash["result"]
567
+ expect_300_response(response)
569
568
  end
570
569
 
571
570
  # @!visibility private
@@ -573,6 +572,39 @@ Query must contain at least one of these keys:
573
572
  !springboard_alert.empty?
574
573
  end
575
574
 
575
+ # @!visibility private
576
+ def dismiss_springboard_alert(button_title)
577
+ parameters = { :button_title => button_title }
578
+ request = request("dismiss-springboard-alert", parameters)
579
+ client = http_client(http_options)
580
+ response = client.post(request)
581
+ hash = expect_300_response(response)
582
+
583
+ if hash["error"]
584
+ raise RuntimeError, %Q[
585
+ Could not dismiss SpringBoard alert by touching button with title '#{button_title}':
586
+
587
+ #{hash["error"]}
588
+
589
+ ]
590
+ end
591
+ true
592
+ end
593
+
594
+ # @!visibility private
595
+ def set_dismiss_springboard_alerts_automatically(true_or_false)
596
+ if ![true, false].include?(true_or_false)
597
+ raise ArgumentError, "Expected #{true_or_false} to be a boolean true or false"
598
+ end
599
+
600
+ parameters = { :dismiss_automatically => true_or_false }
601
+ request = request("set-dismiss-springboard-alerts-automatically", parameters)
602
+ client = http_client(http_options)
603
+ response = client.post(request)
604
+ hash = expect_300_response(response)
605
+ hash["is_dismissing_alerts_automatically"]
606
+ end
607
+
576
608
  # @!visibility private
577
609
  # @see #query
578
610
  def query_for_coordinate(uiquery)
@@ -804,6 +836,20 @@ Timed out after #{timeout} seconds waiting for an alert to appear.
804
836
  end
805
837
  end
806
838
 
839
+ # @!visibility private
840
+ def wait_for_springboard_alert(timeout=WAIT_DEFAULTS[:timeout])
841
+ options = WAIT_DEFAULTS.dup
842
+ options[:timeout] = timeout
843
+ message = %Q[
844
+
845
+ Timed out after #{timeout} seconds waiting for a SpringBoard alert to appear.
846
+
847
+ ]
848
+ wait_for(message, options) do
849
+ springboard_alert_visible?
850
+ end
851
+ end
852
+
807
853
  # @!visibility private
808
854
  def wait_for_no_alert(timeout=WAIT_DEFAULTS[:timeout])
809
855
  options = WAIT_DEFAULTS.dup
@@ -819,6 +865,20 @@ Timed out after #{timeout} seconds waiting for an alert to disappear.
819
865
  end
820
866
  end
821
867
 
868
+ # @!visibility private
869
+ def wait_for_no_springboard_alert(timeout=WAIT_DEFAULTS[:timeout])
870
+ options = WAIT_DEFAULTS.dup
871
+ options[:timeout] = timeout
872
+ message = %Q[
873
+
874
+ Timed out after #{timeout} seconds waiting for a SpringBoard alert to disappear.
875
+
876
+ ]
877
+ wait_for(message, options) do
878
+ !springboard_alert_visible?
879
+ end
880
+ end
881
+
822
882
  # @!visibility private
823
883
  def wait_for_text_in_view(text, uiquery, options={})
824
884
  merged_options = WAIT_DEFAULTS.merge(options)
@@ -1212,7 +1272,7 @@ PRIVATE
1212
1272
 
1213
1273
  RunLoop.log_debug("Waited for #{Time.now - now} seconds for DeviceAgent to shutdown")
1214
1274
  end
1215
- rescue RunLoop::DeviceAgent::Client::HTTPError => e
1275
+ rescue RunLoop::DeviceAgent::Client::HTTPError, HTTPClient::ReceiveTimeoutError => e
1216
1276
  RunLoop.log_debug("DeviceAgent-Runner shutdown error: #{e.message}")
1217
1277
  ensure
1218
1278
  if @launcher_pid
@@ -109,7 +109,8 @@ Expected :device_agent_install_timeout key in options:
109
109
  ]
110
110
  end
111
111
 
112
- options = {:log_cmd => true, :timeout => install_timeout}
112
+ shell_options = {:log_cmd => true, :timeout => install_timeout}
113
+
113
114
  args = [
114
115
  cmd, "install",
115
116
  "--device-id", device.udid,
@@ -122,7 +123,7 @@ Expected :device_agent_install_timeout key in options:
122
123
  end
123
124
 
124
125
  start = Time.now
125
- hash = run_shell_command(args, options)
126
+ hash = run_shell_command(args, shell_options)
126
127
 
127
128
  if hash[:exit_status] != 0
128
129
  raise RuntimeError, %Q[
@@ -137,7 +138,11 @@ Could not install #{runner.runner}. iOSDeviceManager says:
137
138
 
138
139
  RunLoop::log_debug("Took #{Time.now - start} seconds to install DeviceAgent");
139
140
 
140
- args = ["start_test", "--device-id", device.udid]
141
+ cmd = "xcrun"
142
+ args = ["xcodebuild", "test-without-building",
143
+ "-xctestrun", path_to_xctestrun(device),
144
+ "-destination", "id=#{device.udid}",
145
+ "-derivedDataPath", derived_data_directory]
141
146
 
142
147
  log_file = IOSDeviceManager.log_file
143
148
  FileUtils.rm_rf(log_file)
@@ -150,8 +155,6 @@ Could not install #{runner.runner}. iOSDeviceManager says:
150
155
  options = {:out => log_file, :err => log_file}
151
156
  RunLoop.log_unix_cmd("#{cmd} #{args.join(" ")} >& #{log_file}")
152
157
 
153
- # Gotta keep the ios_device_manager process alive or the connection
154
- # to testmanagerd will fail.
155
158
  pid = Process.spawn(env, cmd, *args, options)
156
159
  Process.detach(pid)
157
160
 
@@ -196,6 +199,27 @@ iOSDeviceManager says:
196
199
 
197
200
  hash[:exit_status] == 0
198
201
  end
202
+
203
+ def path_to_xctestrun(device)
204
+ if device.physical_device?
205
+ File.join(runner.tester, "DeviceAgent-device.xctestrun")
206
+ else
207
+ template = File.join(runner.tester, "DeviceAgent-simulator-template.xctestrun")
208
+ path = File.join(RunLoop::DotDir.directory, "xcuitest", "DeviceAgent-simulator.xctestrun")
209
+ contents = File.read(template).force_encoding("UTF-8")
210
+ substituted = contents.gsub("TEST_HOST_PATH", runner.runner)
211
+ File.open(path, "w:UTF-8") do |file|
212
+ file.write(substituted)
213
+ end
214
+ path
215
+ end
216
+ end
217
+
218
+ def derived_data_directory
219
+ path = File.join(RunLoop::DotDir.directory, "xcuitest", "DerivedData")
220
+ FileUtils.mkdir_p(path) if !File.exist?(path)
221
+ path
222
+ end
199
223
  end
200
224
  end
201
225
  end
@@ -75,16 +75,12 @@ Use the CBXWS environment variable to override the default.
75
75
  args = [
76
76
  "xcrun",
77
77
  "xcodebuild",
78
+ "-derivedDataPath", derived_data_directory,
78
79
  "-scheme", "AppStub",
79
80
  "-workspace", workspace,
80
81
  "-config", "Debug",
81
82
  "-destination",
82
83
  "id=#{device.udid}",
83
- "CLANG_ENABLE_CODE_COVERAGE=YES",
84
- "GCC_GENERATE_TEST_COVERAGE_FILES=NO",
85
- "GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=NO",
86
- # Scheme setting.
87
- "-enableCodeCoverage", "YES",
88
84
  "test"
89
85
  ]
90
86
 
@@ -113,6 +109,12 @@ Use the CBXWS environment variable to override the default.
113
109
  relative = File.expand_path(File.join(this_dir, "..", "..", "..", ".."))
114
110
  File.join(relative, "DeviceAgent.iOS/DeviceAgent.xcworkspace")
115
111
  end
112
+
113
+ def derived_data_directory
114
+ path = File.join(Xcodebuild.dot_dir, "DerivedData")
115
+ FileUtils.mkdir_p(path) if !File.exist?(path)
116
+ path
117
+ end
116
118
  end
117
119
  end
118
120
  end
@@ -5,7 +5,7 @@ module RunLoop
5
5
  # Removes diacritic markers from string.
6
6
  #
7
7
  # The ruby Encoding tools cannot perform this action, they can only change
8
- # convert one encodign to another by substituting characters.
8
+ # convert one encoding to another by substituting characters.
9
9
  #
10
10
  # In ruby 1.9.3 we would have used Iconv, but that does not exist in 2.0.
11
11
  #
@@ -1,5 +1,5 @@
1
1
  module RunLoop
2
- VERSION = "2.3.2"
2
+ VERSION = "2.4.0"
3
3
 
4
4
  # A model of a software release version that can be used to compare two versions.
5
5
  #
@@ -43,7 +43,8 @@ function englishLocalizations() {
43
43
  ["OK", /Would Like to Access Your Motion & Fitness Activity/],
44
44
  ["OK", /Would Like Access to Twitter Accounts/],
45
45
  ["OK", /data available to nearby bluetooth devices/],
46
- ["OK", /[Ww]ould [Ll]ike to [Ss]end [Yy]ou( Push)? Notifications/]
46
+ ["OK", /[Ww]ould [Ll]ike to [Ss]end [Yy]ou( Push)? Notifications/],
47
+ ["Allow", /Would Like to Add VPN Configurations/]
47
48
  ];
48
49
  }
49
50
 
@@ -201,6 +202,22 @@ function portugueseBrazilLocalizations() {
201
202
  ];
202
203
  }
203
204
 
205
+ function koreanLocalizations() {
206
+ return [
207
+ ["ν—ˆμš©", /μ—μ„œ μ‚¬μš©μžμ˜ μœ„μΉ˜μ— μ ‘κ·Όν•˜λ„λ‘ ν—ˆμš©ν•˜κ² μŠ΅λ‹ˆκΉŒ/],
208
+ ["ν—ˆμš©", /을(λ₯Ό) μ‚¬μš©ν•˜μ§€ μ•Šμ„ λ•Œμ—λ„ ν•΄λ‹Ή 앱이 μ‚¬μš©μžμ˜ μœ„μΉ˜μ— μ ‘κ·Όν•˜λ„λ‘ ν—ˆμš©ν•˜κ³˜μŠ΅λ‹ˆκΉŒ/],
209
+ ["승인", /이(κ°€) μ‚¬μš©μžμ˜ μ—°λ½μ²˜μ— μ ‘κ·Όν•˜λ €κ³  ν•©λ‹ˆλ‹€/],
210
+ ["승인", /이(κ°€) μ‚¬μš©μžμ˜ μΊ˜λ¦°λ”μ— μ ‘κ·Όν•˜λ €κ³  ν•©λ‹ˆλ‹€/],
211
+ ["승인", /이(κ°€) μ‚¬μš©μžμ˜ 미리 μ•Œλ¦Όμ— μ ‘κ·Όν•˜λ €κ³  ν•©λ‹ˆλ‹€/],
212
+ ["승인", /이(κ°€) μ‚¬μš©μžμ˜ 사진에 μ ‘κ·Όν•˜λ €κ³  ν•©λ‹ˆλ‹€/],
213
+ ["승인", /이(κ°€) 카메라에 μ ‘κ·Όν•˜λ €κ³  ν•©λ‹ˆλ‹€/],
214
+ ["승인", /μ—μ„œ Twitter 계정에 μ ‘κ·Όν•˜λ €κ³  ν•©λ‹ˆλ‹€/],
215
+ ["승인", /이(κ°€) μ‚¬μš©μžμ˜ λ™μž‘ 및 ν”ΌνŠΈλ‹ˆμŠ€ ν™œλ™μ— μ ‘κ·Όν•˜λ €κ³  ν•©λ‹ˆλ‹€/],
216
+ ["승인", "이(κ°€) λ§ˆμ΄ν¬μ— μ ‘κ·Όν•˜λ €κ³  ν•©λ‹ˆλ‹€"],
217
+ ["ν—ˆμš©", "μ—μ„œ μ•Œλ¦Όμ„ λ³΄λ‚΄κ³ μž ν•©λ‹ˆλ‹€"]
218
+ ];
219
+ }
220
+
204
221
  function localizations() {
205
222
  return [].concat(
206
223
  danishLocalizations(),
@@ -212,7 +229,8 @@ function localizations() {
212
229
  russianLocalizations(),
213
230
  spanishLocalizations(),
214
231
  frenchLocalizations(),
215
- portugueseBrazilLocalizations()
232
+ portugueseBrazilLocalizations(),
233
+ koreanLocalizations()
216
234
  );
217
235
  }
218
236
 
@@ -270,4 +288,3 @@ function isPrivacyAlert(alert) {
270
288
  }
271
289
  return false;
272
290
  }
273
-
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: run_loop
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.2
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Karl Krukow
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-08-27 00:00:00.000000000 Z
12
+ date: 2017-04-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
@@ -45,20 +45,14 @@ dependencies:
45
45
  requirements:
46
46
  - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: '3.0'
49
- - - ">="
50
- - !ruby/object:Gem::Version
51
- version: 3.0.1
48
+ version: '2.2'
52
49
  type: :runtime
53
50
  prerelease: false
54
51
  version_requirements: !ruby/object:Gem::Requirement
55
52
  requirements:
56
53
  - - "~>"
57
54
  - !ruby/object:Gem::Version
58
- version: '3.0'
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: 3.0.1
55
+ version: '2.2'
62
56
  - !ruby/object:Gem::Dependency
63
57
  name: thor
64
58
  requirement: !ruby/object:Gem::Requirement
@@ -331,7 +325,6 @@ files:
331
325
  - lib/run_loop/cli/cli.rb
332
326
  - lib/run_loop/cli/codesign.rb
333
327
  - lib/run_loop/cli/errors.rb
334
- - lib/run_loop/cli/idm.rb
335
328
  - lib/run_loop/cli/instruments.rb
336
329
  - lib/run_loop/cli/locale.rb
337
330
  - lib/run_loop/cli/simctl.rb
@@ -421,7 +414,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
421
414
  - !ruby/object:Gem::Version
422
415
  version: '0'
423
416
  requirements: []
424
- rubygems_version: 3.0.3
417
+ rubyforge_project:
418
+ rubygems_version: 2.5.1
425
419
  signing_key:
426
420
  specification_version: 4
427
421
  summary: The bridge between Calabash iOS and Xcode command-line tools like instruments
@@ -1,71 +0,0 @@
1
-
2
- module RunLoop
3
- module CLI
4
-
5
- require 'thor'
6
- class IDM < Thor
7
-
8
- require "run_loop"
9
- require "run_loop/cli/errors"
10
- require "run_loop/shell"
11
- include RunLoop::Shell
12
-
13
- require "run_loop/regex"
14
-
15
- desc "install app [OPTIONS]", "Installs an app on a device."
16
-
17
- method_option "device",
18
- :desc => 'The simulator UDID or name.',
19
- :aliases => "-d",
20
- :required => false,
21
- :type => :string
22
-
23
- method_option "debug",
24
- :desc => "Enable debug logging.",
25
- :aliases => "-v",
26
- :required => false,
27
- :default => false,
28
- :type => :boolean
29
-
30
- method_option "force",
31
- :desc => "Force a re-install the existing app",
32
- :aliases => "-f",
33
- :required => false,
34
- :default => false,
35
- :type => :boolean
36
-
37
- def install(app)
38
- extension = File.extname(app)
39
- if extension == ".app"
40
- app_instance = RunLoop::App.new(app)
41
- else
42
- app_instance = RunLoop::Ipa.new(app)
43
- end
44
-
45
- xcode = RunLoop::Xcode.new
46
- simctl = RunLoop::Simctl.new
47
- instruments = RunLoop::Instruments.new
48
-
49
- detect_options = {}
50
-
51
- device = options[:device]
52
- if !device
53
- detect_options[:device] = "device"
54
- else
55
- detect_options[:device] = device
56
- end
57
-
58
- device = RunLoop::Device.detect_device(detect_options, xcode,
59
- simctl, instruments)
60
-
61
- idm = RunLoop::PhysicalDevice::IOSDeviceManager.new(device)
62
-
63
- if options[:force]
64
- idm.install_app(app_instance)
65
- else
66
- idm.ensure_newest_installed(app_instance)
67
- end
68
- end
69
- end
70
- end
71
- end