run_loop 2.2.1 → 2.2.2

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: 7f70f23c16823815e9b01ca4e967dcd8f065d4ff
4
- data.tar.gz: 2d2b303201f7d2961dbb4a9f8947a2ab0638de3b
3
+ metadata.gz: c125e357c95d69d1ef1e4b74ce1bfbf4faddb920
4
+ data.tar.gz: f27d253bba7d6f3faeb4ee37d9f4d0e209d1393b
5
5
  SHA512:
6
- metadata.gz: 2343195435e906556bfe720b75f66637a42b29e4f8aea669584793ad4a668002151210c75ac96d2856afd1b1aee3800afa255d1ec2a5cd0e79ce3e5709683adc
7
- data.tar.gz: eea4a57f853d15eedfad0c710f889e5896dfa046ac45e7d4114df1c889f98a6d78cfc32948ebda371e48a26a726f756fbae4275812a13f48aa6b93a1815e2b16
6
+ metadata.gz: 009bddf011cdb692c5ee738b0b9a2e4a3c033e4b01fb29e0db6b548cadea44be2d068b3190af2a34db4b7c38cf7ed880b03c23943a7769f974da0d106ad98742
7
+ data.tar.gz: e26d021e69d642bdc9c115e47a235c993b837ac5b88ceaab43570bd86a3f0756de7d37ffea55418cf6818628eeb2cf8af6579decc4ca69924c450dba3a8db6fd
@@ -110,8 +110,8 @@ removed (1.5.0). It has been replaced by an options hash with two keys:
110
110
 
111
111
  instruments = merged_options[:instruments]
112
112
  simctl = merged_options[:simctl]
113
+ xcode = merged_options[:xcode]
113
114
 
114
- xcode = RunLoop::Xcode.new
115
115
  simulator = simctl.simulators.detect do |sim|
116
116
  sim.instruments_identifier(xcode) == udid_or_name ||
117
117
  sim.udid == udid_or_name
@@ -376,7 +376,10 @@ version: #{version}
376
376
  # iOS 9 simulators have an additional boot screen.
377
377
  is_gte_ios9 = version >= RunLoop::Version.new('9.0')
378
378
 
379
- # iOS 9 iPad simulators need additional time to stabilize, especially
379
+ # Xcode 8 simulators do not need to wait for log file
380
+ is_xcode8 = RunLoop::Xcode.new.version_gte_8?
381
+
382
+ # iOS > 9 iPad simulators need additional time to stabilize, especially
380
383
  # to ensure that `simctl install` notifies SpringBoard that a new app
381
384
  # has been installed.
382
385
  is_ipad = simulator_is_ipad?
@@ -388,7 +391,12 @@ version: #{version}
388
391
  RunLoop.log_debug("Waiting for simulator to stabilize with timeout: #{timeout} seconds")
389
392
 
390
393
  current_dir_sha = simulator_data_directory_sha
391
- current_log_sha = simulator_log_file_sha
394
+ if is_xcode8
395
+ current_log_sha = true
396
+ else
397
+ current_log_sha = simulator_log_file_sha
398
+ end
399
+
392
400
  is_stable = false
393
401
  waited_for_boot = false
394
402
  waited_for_ipad = false
@@ -396,7 +404,11 @@ version: #{version}
396
404
 
397
405
  while Time.now < poll_until do
398
406
  latest_dir_sha = simulator_data_directory_sha
399
- latest_log_sha = simulator_log_file_sha
407
+ if is_xcode8
408
+ latest_log_sha = true
409
+ else
410
+ latest_log_sha = simulator_log_file_sha
411
+ end
400
412
 
401
413
  is_stable = [current_dir_sha == latest_dir_sha,
402
414
  current_log_sha == latest_log_sha].all?
@@ -18,7 +18,7 @@
18
18
  "optionName" : "session_id",
19
19
  "info" : "Session ID for the XCUITest",
20
20
  "required" : false,
21
- "default" : "BEEFBABE-FEED-BABE-BEEF-CAFEBEEFFACE"
21
+ "default" : "AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE"
22
22
  },
23
23
  "-k" : {
24
24
  "longFlag" : "--keep-alive",
@@ -84,8 +84,13 @@ module RunLoop
84
84
  options,
85
85
  app_details)
86
86
 
87
+ default_options = {
88
+ :xcode => xcode
89
+ }
90
+ merged_options = default_options.merge(options)
91
+
87
92
  if device.simulator? && app
88
- core_sim = RunLoop::CoreSimulator.new(device, app, :xcode => xcode)
93
+ core_sim = RunLoop::CoreSimulator.new(device, app, merged_options)
89
94
  if reset_options
90
95
  core_sim.reset_app_sandbox
91
96
  end
@@ -317,7 +322,7 @@ INSTANCE METHODS
317
322
 
318
323
  # @!visibility private
319
324
  def tree
320
- options = http_options
325
+ options = tree_http_options
321
326
  request = request("tree")
322
327
  client = http_client(options)
323
328
  response = client.get(request)
@@ -336,12 +341,44 @@ INSTANCE METHODS
336
341
  result.count != 0
337
342
  end
338
343
 
344
+ # @!visibility private
345
+ def clear_text
346
+ options = enter_text_http_options
347
+ parameters = {
348
+ :gesture => "clear_text"
349
+ }
350
+ request = request("gesture", parameters)
351
+ client = http_client(options)
352
+ response = client.post(request)
353
+ expect_300_response(response)
354
+ end
355
+
339
356
  # @!visibility private
340
357
  def enter_text(string)
341
358
  if !keyboard_visible?
342
359
  raise RuntimeError, "Keyboard must be visible"
343
360
  end
344
- options = http_options
361
+ options = enter_text_http_options
362
+ parameters = {
363
+ :gesture => "enter_text",
364
+ :options => {
365
+ :string => string
366
+ }
367
+ }
368
+ request = request("gesture", parameters)
369
+ client = http_client(options)
370
+ response = client.post(request)
371
+ expect_300_response(response)
372
+ end
373
+
374
+ # @!visibility private
375
+ #
376
+ # Some clients are performing keyboard checks _before_ calling #enter_text.
377
+ #
378
+ # 1. Removes duplicate check.
379
+ # 2. It turns out DeviceAgent query can be very slow.
380
+ def enter_text_without_keyboard_check(string)
381
+ options = enter_text_http_options
345
382
  parameters = {
346
383
  :gesture => "enter_text",
347
384
  :options => {
@@ -377,6 +414,12 @@ INSTANCE METHODS
377
414
  # query({text: "\"To know is not enough.\""})
378
415
  # query({text: %Q["To know is not enough."]})
379
416
  #
417
+ # # Equivalent to Calabash query("*")
418
+ # query({})
419
+ #
420
+ # # Equivalent to Calabash query("all *")
421
+ # query({all: true})
422
+ #
380
423
  # Querying for text with newlines is not supported yet.
381
424
  #
382
425
  # The query language supports the following keys:
@@ -449,45 +492,40 @@ INSTANCE METHODS
449
492
  raise ArgumentError, %Q[
450
493
  Unsupported key or keys found: '#{unknown_keys}'.
451
494
 
452
- Allowed keys for a query are: #{keys}
453
-
454
- ]
455
- end
456
-
457
- has_any_key = (allowed_keys & uiquery.keys).any?
458
- if !has_any_key
459
- keys = allowed_keys.map { |key| ":#{key}" }.join(", ")
460
- raise ArgumentError, %Q[
461
- Query does not contain any keysUnsupported key or keys found: '#{unknown_keys}'.
495
+ Allowed keys for a query are:
462
496
 
463
- Allowed keys for a query are: #{keys}
497
+ #{keys}
464
498
 
465
499
  ]
466
500
  end
467
501
 
468
- parameters = merged_options.dup.tap { |hs| hs.delete(:all) }
469
- if parameters.empty?
470
- keys = allowed_keys.map { |key| ":#{key}" }.join(", ")
471
- raise ArgumentError, %Q[
502
+ if _wildcard_query?(uiquery)
503
+ elements = _flatten_tree
504
+ else
505
+ parameters = merged_options.dup.tap { |hs| hs.delete(:all) }
506
+ if parameters.empty?
507
+ keys = allowed_keys.map { |key| ":#{key}" }.join(", ")
508
+ raise ArgumentError, %Q[
472
509
  Query must contain at least one of these keys:
473
510
 
474
511
  #{keys}
475
512
 
476
513
  ]
477
- end
514
+ end
478
515
 
479
- request = request("query", parameters)
480
- client = http_client(http_options)
516
+ request = request("query", parameters)
517
+ client = http_client(http_options)
481
518
 
482
- RunLoop.log_debug %Q[Sending query with parameters:
519
+ RunLoop.log_debug %Q[Sending query with parameters:
483
520
 
484
521
  #{JSON.pretty_generate(parameters)}
485
522
 
486
523
  ]
487
524
 
488
- response = client.post(request)
489
- hash = expect_300_response(response)
490
- elements = hash["result"]
525
+ response = client.post(request)
526
+ hash = expect_300_response(response)
527
+ elements = hash["result"]
528
+ end
491
529
 
492
530
  if merged_options[:all]
493
531
  elements
@@ -1030,6 +1068,30 @@ PRIVATE
1030
1068
  end
1031
1069
  end
1032
1070
 
1071
+ # @!visibility private
1072
+ #
1073
+ # Tree can take a very long time.
1074
+ def tree_http_options
1075
+ timeout = DEFAULTS[:http_timeout] * 6
1076
+ {
1077
+ :timeout => timeout,
1078
+ :interval => 0.1,
1079
+ :retries => (timeout/0.1).to_i
1080
+ }
1081
+ end
1082
+
1083
+ # @!visibility private
1084
+ #
1085
+ # A patch while we are trying to figure out what is wrong with text entry.
1086
+ def enter_text_http_options
1087
+ timeout = DEFAULTS[:http_timeout] * 6
1088
+ {
1089
+ :timeout => timeout,
1090
+ :interval => 0.1,
1091
+ :retries => (timeout/0.1).to_i
1092
+ }
1093
+ end
1094
+
1033
1095
  # @!visibility private
1034
1096
  def server_pid
1035
1097
  options = http_options
@@ -1394,6 +1456,16 @@ Valid values are: :down, :up, :right, :left, :bottom, :top
1394
1456
  response = client.post(request)
1395
1457
  expect_300_response(response)
1396
1458
  end
1459
+
1460
+ # @!visibility private
1461
+ # Private method. Do not call.
1462
+ def _wildcard_query?(uiquery)
1463
+ return true if uiquery.empty?
1464
+ return false if uiquery.count != 1
1465
+
1466
+ uiquery.has_key?(:all)
1467
+ end
1468
+
1397
1469
  end
1398
1470
  end
1399
1471
  end
@@ -1,5 +1,5 @@
1
1
  module RunLoop
2
- VERSION = "2.2.1"
2
+ VERSION = "2.2.2"
3
3
 
4
4
  # A model of a software release version that can be used to compare two versions.
5
5
  #
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.2.1
4
+ version: 2.2.2
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: 2016-09-30 00:00:00.000000000 Z
12
+ date: 2016-10-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
@@ -301,6 +301,20 @@ dependencies:
301
301
  - - ">="
302
302
  - !ruby/object:Gem::Version
303
303
  version: '0'
304
+ - !ruby/object:Gem::Dependency
305
+ name: rb-readline
306
+ requirement: !ruby/object:Gem::Requirement
307
+ requirements:
308
+ - - ">="
309
+ - !ruby/object:Gem::Version
310
+ version: '0'
311
+ type: :development
312
+ prerelease: false
313
+ version_requirements: !ruby/object:Gem::Requirement
314
+ requirements:
315
+ - - ">="
316
+ - !ruby/object:Gem::Version
317
+ version: '0'
304
318
  description:
305
319
  email:
306
320
  - karl.krukow@xamarin.com
@@ -412,7 +426,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
412
426
  version: '0'
413
427
  requirements: []
414
428
  rubyforge_project:
415
- rubygems_version: 2.6.6
429
+ rubygems_version: 2.5.1
416
430
  signing_key:
417
431
  specification_version: 4
418
432
  summary: The bridge between Calabash iOS and Xcode command-line tools like instruments