eyes_core 3.18.4 → 4.0.3

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.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/lib/applitools/appium/eyes.rb +3 -2
  3. data/lib/applitools/appium/target.rb +218 -193
  4. data/lib/applitools/calabash/calabash_screenshot_provider.rb +23 -23
  5. data/lib/applitools/calabash/full_page_capture_algorithm/base.rb +1 -1
  6. data/lib/applitools/connectivity/proxy.rb +11 -3
  7. data/lib/applitools/connectivity/server_connector.rb +2 -1
  8. data/lib/applitools/core/accessibility_level.rb +11 -0
  9. data/lib/applitools/core/batch_info.rb +24 -2
  10. data/lib/applitools/core/classic_runner.rb +9 -1
  11. data/lib/applitools/core/debug_screenshot_provider.rb +3 -3
  12. data/lib/applitools/core/eyes_base.rb +81 -28
  13. data/lib/applitools/core/eyes_base_configuration.rb +22 -1
  14. data/lib/applitools/core/eyes_runner.rb +12 -0
  15. data/lib/applitools/core/floating_region.rb +17 -8
  16. data/lib/applitools/core/image_match_settings.rb +54 -0
  17. data/lib/applitools/core/match_level.rb +3 -1
  18. data/lib/applitools/core/screenshot.rb +7 -7
  19. data/lib/applitools/core/test_result_summary.rb +17 -4
  20. data/lib/applitools/core/test_results.rb +2 -2
  21. data/lib/applitools/core/universal_eyes_checks.rb +66 -0
  22. data/lib/applitools/core/universal_eyes_open.rb +100 -0
  23. data/lib/applitools/core/universal_new_api.rb +43 -0
  24. data/lib/applitools/universal_sdk/universal_check_settings.rb +190 -0
  25. data/lib/applitools/universal_sdk/universal_client.rb +142 -0
  26. data/lib/applitools/universal_sdk/universal_client_socket.rb +110 -0
  27. data/lib/applitools/universal_sdk/universal_eyes.rb +45 -0
  28. data/lib/applitools/universal_sdk/universal_eyes_config.rb +205 -0
  29. data/lib/applitools/universal_sdk/universal_eyes_manager.rb +40 -0
  30. data/lib/applitools/universal_sdk/universal_eyes_manager_config.rb +62 -0
  31. data/lib/applitools/universal_sdk/universal_server.rb +81 -0
  32. data/lib/applitools/utils/image_utils.rb +7 -7
  33. data/lib/applitools/utils/utils.rb +13 -0
  34. data/lib/applitools/version.rb +2 -1
  35. data/lib/eyes_core.rb +4 -1
  36. metadata +55 -18
  37. data/lib/applitools/chunky_png/resampling.rb +0 -51
  38. data/lib/applitools/chunky_png_patch.rb +0 -11
@@ -6,6 +6,11 @@ require 'applitools/core/eyes_base_configuration'
6
6
  require 'applitools/core/match_level'
7
7
  require 'zlib'
8
8
 
9
+ require_relative 'universal_eyes_open'
10
+ require_relative 'universal_eyes_checks'
11
+ require_relative 'universal_new_api'
12
+ require_relative '../universal_sdk/universal_client'
13
+
9
14
  require_relative 'match_level_setter'
10
15
 
11
16
  module Applitools
@@ -19,6 +24,13 @@ module Applitools
19
24
  }.freeze
20
25
 
21
26
  class EyesBase
27
+ # new open, with eyes-manager
28
+ include Applitools::UniversalEyesOpen
29
+ # all checks here
30
+ include Applitools::UniversalEyesChecks
31
+ # add extract_text, extract_text_regions, locate
32
+ include Applitools::UniversalNewApi
33
+
22
34
  include Applitools::MatchLevelSetter
23
35
  extend Forwardable
24
36
  extend Applitools::Helpers
@@ -28,6 +40,25 @@ module Applitools
28
40
  SCREENSHOT_AS_IS = Applitools::EyesScreenshot::COORDINATE_TYPES[:screenshot_as_is].freeze
29
41
  CONTEXT_RELATIVE = Applitools::EyesScreenshot::COORDINATE_TYPES[:context_relative].freeze
30
42
 
43
+ class << self
44
+ def set_viewport_size(driver, viewport_size)
45
+ Applitools::ArgumentGuard.not_nil(driver, 'Driver')
46
+ Applitools::ArgumentGuard.not_nil(viewport_size, 'viewport_size')
47
+ Applitools::ArgumentGuard.is_a?(viewport_size, 'viewport_size', Applitools::RectangleSize)
48
+ Applitools::EyesLogger.info "Set viewport size #{viewport_size}"
49
+ begin
50
+ driver_config_json = driver.universal_driver_config
51
+ required_size = Applitools::RectangleSize.from_any_argument viewport_size
52
+ @universal_client = Applitools::Connectivity::UniversalClient.new
53
+ @universal_client.core_set_viewport_size(driver_config_json, required_size.to_hash)
54
+ rescue => e
55
+ Applitools::EyesLogger.error e.class
56
+ Applitools::EyesLogger.error e.message
57
+ raise Applitools::EyesError.new 'Failed to set viewport size!'
58
+ end
59
+ end
60
+ end
61
+
31
62
  attr_accessor :config
32
63
  private :config, :config=
33
64
 
@@ -60,6 +91,9 @@ module Applitools
60
91
 
61
92
  def_delegators 'config', *Applitools::EyesBaseConfiguration.methods_to_delegate
62
93
 
94
+ # attr_accessor :universal_client, :universal_eyes_manager
95
+ attr_accessor :universal_eyes, :universal_driver
96
+
63
97
  def initialize(*args)
64
98
  options = Applitools::Utils.extract_options!(args)
65
99
  self.runner = options[:runner]
@@ -100,6 +134,9 @@ module Applitools
100
134
  self.server_scale = 0
101
135
  self.server_remainder = 0
102
136
  self.compare_with_parent_branch = false
137
+
138
+ self.universal_eyes = nil # eyes.open
139
+ self.universal_driver = nil # eyes.open
103
140
  end
104
141
 
105
142
  def ensure_config
@@ -158,15 +195,20 @@ module Applitools
158
195
  self.last_screenshot = nil
159
196
  clear_user_inputs
160
197
 
198
+ if !running_session && !universal_eyes
199
+ logger.info('Server session was not started')
200
+ logger.info('--- Empty test ended')
201
+ return Applitools::TestResults.new
202
+ end
203
+
204
+
161
205
  if running_session.nil?
162
206
  logger.info 'Closed'
163
207
  return false
164
208
  end
165
209
 
166
210
  logger.info 'Aborting server session...'
167
- server_connector.stop_session(running_session, true, false)
168
- logger.info '---Test aborted'
169
-
211
+ universal_sdk_abort
170
212
  rescue Applitools::EyesError => e
171
213
  logger.error e.message
172
214
 
@@ -207,18 +249,18 @@ module Applitools
207
249
  raise e
208
250
  end
209
251
 
210
- def update_config_from_options(options)
211
- # Applitools::ArgumentGuard.hash options, 'open_base parameter', [:test_name]
212
- default_options = { session_type: 'SEQUENTIAL' }
213
- options = default_options.merge options
214
-
215
- self.app_name = options[:app_name] if options[:app_name]
216
-
217
- # Applitools::ArgumentGuard.not_nil options[:test_name], 'options[:test_name]'
218
- self.test_name = options[:test_name] if options[:test_name]
219
- self.viewport_size = options[:viewport_size] if options[:viewport_size]
220
- self.session_type = options[:session_type] if options[:session_type]
221
- end
252
+ # def update_config_from_options(options)
253
+ # # Applitools::ArgumentGuard.hash options, 'open_base parameter', [:test_name]
254
+ # default_options = { session_type: 'SEQUENTIAL' }
255
+ # options = default_options.merge options
256
+ #
257
+ # self.app_name = options[:app_name] if options[:app_name]
258
+ #
259
+ # # Applitools::ArgumentGuard.not_nil options[:test_name], 'options[:test_name]'
260
+ # self.test_name = options[:test_name] if options[:test_name]
261
+ # self.viewport_size = options[:viewport_size] if options[:viewport_size]
262
+ # self.session_type = options[:session_type] if options[:session_type]
263
+ # end
222
264
 
223
265
  def merge_config(other_config)
224
266
  config.merge(other_config)
@@ -393,40 +435,51 @@ module Applitools
393
435
 
394
436
  clear_user_inputs
395
437
 
396
- unless running_session
438
+ if !running_session && !universal_eyes
397
439
  be_silent || logger.info('Server session was not started')
398
440
  be_silent || logger.info('--- Empty test ended')
399
441
  return Applitools::TestResults.new
400
442
  end
401
443
 
402
- is_new_session = running_session.new_session?
403
- session_results_url = running_session.url
444
+ # is_new_session = running_session.new_session?
445
+ # session_results_url = running_session.url
404
446
 
405
447
  logger.info 'Ending server session...'
406
448
 
407
- save = is_new_session && save_new_tests || !is_new_session && failed && save_failed_tests
449
+ # save = is_new_session && save_new_tests || !is_new_session && failed && save_failed_tests
408
450
 
409
- logger.info "Automatically save test? #{save}"
451
+ # logger.info "Automatically save test? #{save}"
410
452
 
411
- results = server_connector.stop_session running_session, false, save
453
+ # U-Notes : universal server returns Array ; keys as sym
454
+ universal_results = universal_eyes.close # Array even for one test
455
+ # require 'pry'
456
+ # binding.pry
457
+ key_transformed_results = Applitools::Utils.deep_stringify_keys(universal_results)
458
+ results = key_transformed_results.map {|result| Applitools::TestResults.new(result) }
459
+ results = results.first if results.size >= 1
460
+
461
+ session_results_url = results.url
462
+ # results = server_connector.stop_session running_session, false, save
412
463
  runner.aggregate_result(results) if runner
413
464
 
414
- results.is_new = is_new_session
415
- results.url = session_results_url
465
+ # results.is_new = is_new_session
466
+ # results.url = session_results_url
467
+ save = results.new? && save_new_tests || !results.new? && failed && save_failed_tests
468
+ logger.info "Automatically save test? #{save}"
416
469
 
417
470
  logger.info results.to_s(verbose_results)
418
471
 
419
472
  if results.unresolved?
420
473
  if results.new?
421
474
  logger.error "--- New test ended. see details at #{session_results_url}"
422
- error_message = "New test '#{session_start_info.scenario_id_or_name}' " \
423
- "of '#{session_start_info.app_id_or_name}' " \
475
+ error_message = "New test '#{test_name}' " \
476
+ "of '#{app_name}' " \
424
477
  "Please approve the baseline at #{session_results_url} "
425
478
  raise Applitools::NewTestError.new error_message, results if throw_exception
426
479
  else
427
480
  logger.error "--- Differences are found. see details at #{session_results_url}"
428
- error_message = "Test '#{session_start_info.scenario_id_or_name}' " \
429
- "of '#{session_start_info.app_id_or_name}' " \
481
+ error_message = "Test '#{test_name}' " \
482
+ "of '#{app_name}' " \
430
483
  "detected differences! See details at #{session_results_url}"
431
484
  raise Applitools::DiffsFoundError.new error_message, results if throw_exception
432
485
  end
@@ -435,7 +488,7 @@ module Applitools
435
488
 
436
489
  if results.failed?
437
490
  logger.error "--- Failed test ended. see details at #{session_results_url}"
438
- error_message = "Test '#{session_start_info.scenario_id_or_name}' of '#{session_start_info.app_id_or_name}' " \
491
+ error_message = "Test '#{test_name}' of '#{app_name}' " \
439
492
  "is failed! See details at #{session_results_url}"
440
493
  raise Applitools::TestFailedError.new error_message, results if throw_exception
441
494
  return results
@@ -11,7 +11,7 @@ require 'applitools/core/image_match_settings'
11
11
 
12
12
  module Applitools
13
13
  class EyesBaseConfiguration < AbstractConfiguration
14
- DEFAULT_MATCH_TIMEOUT = 2 # seconds
14
+ DEFAULT_MATCH_TIMEOUT = 0 # seconds
15
15
 
16
16
  DEFAULT_CONFIG = {
17
17
  branch_name: ENV['APPLITOOLS_BRANCH'],
@@ -200,5 +200,26 @@ module Applitools
200
200
 
201
201
  methods_to_delegate.push(:set_proxy)
202
202
  methods_to_delegate.push(:add_property)
203
+
204
+ # U-Notes : Universal Add
205
+
206
+ # layoutBreakpoints?: boolean | number[]
207
+ def layout_breakpoints=(value)
208
+ config_hash[:layout_breakpoints] = (value.is_a?(Array) && value.all? {|v| v.is_a?(Numeric)}) ? value : !!value
209
+ end
210
+ def layout_breakpoints
211
+ config_hash[:layout_breakpoints]
212
+ end
213
+ collect_method :layout_breakpoints
214
+
215
+ # scrollRootElement?: TElement | TSelector
216
+ def scroll_root_element=(value)
217
+ config_hash[:scroll_root_element] = value
218
+ end
219
+ def scroll_root_element
220
+ config_hash[:scroll_root_element]
221
+ end
222
+ collect_method :scroll_root_element
223
+
203
224
  end
204
225
  end
@@ -3,9 +3,12 @@
3
3
  module Applitools
4
4
  class EyesRunner
5
5
  attr_accessor :batches_server_connectors_map
6
+ attr_accessor :universal_client, :universal_eyes_manager
6
7
 
7
8
  def initialize
8
9
  self.batches_server_connectors_map = {}
10
+ self.universal_client = Applitools::Connectivity::UniversalClient.new
11
+ self.universal_eyes_manager = nil # eyes.open
9
12
  end
10
13
 
11
14
  def add_batch(batch_id, &block)
@@ -15,5 +18,14 @@ module Applitools
15
18
  def delete_all_batches
16
19
  batches_server_connectors_map.each_value { |v| v.call if v.respond_to? :call }
17
20
  end
21
+
22
+ def get_universal_eyes_manager
23
+ return universal_eyes_manager if universal_eyes_manager
24
+ self.universal_eyes_manager = universal_client.make_manager(universal_eyes_manager_config.to_hash)
25
+ end
26
+
27
+ def close_all_eyes
28
+ get_universal_eyes_manager.close_all_eyes
29
+ end
18
30
  end
19
31
  end
@@ -93,14 +93,14 @@ module Applitools
93
93
 
94
94
  def to_hash
95
95
  {
96
- 'Top' => top,
97
- 'Left' => left,
98
- 'Width' => width,
99
- 'Height' => height,
100
- 'MaxUpOffset' => max_top_offset + padding_top,
101
- 'MaxLeftOffset' => max_left_offset + padding_left,
102
- 'MaxRightOffset' => max_right_offset + padding_right,
103
- 'MaxDownOffset' => max_bottom_offset + padding_bottom
96
+ 'top' => top,
97
+ 'left' => left,
98
+ 'width' => width,
99
+ 'height' => height,
100
+ 'maxUpOffset' => max_top_offset + padding_top,
101
+ 'maxLeftOffset' => max_left_offset + padding_left,
102
+ 'maxRightOffset' => max_right_offset + padding_right,
103
+ 'maxDownOffset' => max_bottom_offset + padding_bottom
104
104
  }
105
105
  end
106
106
  end
@@ -123,5 +123,14 @@ module Applitools
123
123
  self.max_right_offset = max_right_offset
124
124
  self.max_bottom_offset = max_bottom_offset
125
125
  end
126
+
127
+ def to_hash
128
+ {
129
+ maxUpOffset: max_top_offset,
130
+ maxDownOffset: max_bottom_offset,
131
+ maxLeftOffset: max_left_offset,
132
+ maxRightOffset: max_right_offset
133
+ }
134
+ end
126
135
  end
127
136
  end
@@ -98,6 +98,60 @@ module Applitools
98
98
  min_diff_height == other.min_diff_height &&
99
99
  match_threshold == other.match_threshold
100
100
  end
101
+
102
+ def to_hash
103
+ {
104
+ minDiffIntensity: min_diff_intensity,
105
+ minDiffWidth: min_diff_width,
106
+ minDiffHeight: min_diff_height,
107
+ matchThreshold: match_threshold
108
+ }
109
+ end
101
110
  end
111
+
112
+ # export type MatchSettings<TRegion> = {
113
+ # exact?: {
114
+ # minDiffIntensity: number
115
+ # minDiffWidth: number
116
+ # minDiffHeight: number
117
+ # matchThreshold: number
118
+ # }
119
+ # matchLevel?: MatchLevel
120
+ # sendDom?: boolean
121
+ # useDom?: boolean
122
+ # enablePatterns?: boolean
123
+ # ignoreCaret?: boolean
124
+ # ignoreDisplacements?: boolean
125
+ # accessibilitySettings?: {
126
+ # level?: AccessibilityLevel
127
+ # guidelinesVersion?: AccessibilityGuidelinesVersion
128
+ # }
129
+ # ignoreRegions?: TRegion[]
130
+ # layoutRegions?: TRegion[]
131
+ # strictRegions?: TRegion[]
132
+ # contentRegions?: TRegion[]
133
+ # floatingRegions?: (TRegion | FloatingRegion<TRegion>)[]
134
+ # accessibilityRegions?: (TRegion | AccessibilityRegion<TRegion>)[]
135
+ # }
136
+ def to_hash
137
+ result = {}
138
+ result[:exact] = exact.to_hash unless exact == Exact.new # ...
139
+ result[:matchLevel] = match_level
140
+ # result[:sendDom] = nil # duplicate configuration ?
141
+ result[:useDom] = use_dom if use_dom
142
+ result[:enablePatterns] = enable_patterns if enable_patterns
143
+ result[:ignoreCaret] = ignore_caret if ignore_caret
144
+ result[:ignoreDisplacements] = ignore_displacements if ignore_displacements
145
+ result[:accessibilitySettings] = accessibility_settings.to_hash if accessibility_settings
146
+ result[:ignoreRegions] = ignore unless ignore.empty?
147
+ result[:layoutRegions] = layout unless layout.empty?
148
+ result[:strictRegions] = strict unless strict.empty?
149
+ result[:contentRegions] = content unless content.empty?
150
+ result[:floatingRegions] = floating unless floating.empty?
151
+ result[:accessibilityRegions] = accessibility unless accessibility.empty?
152
+ result.compact
153
+ # :SplitTopHeight, :SplitBottomHeight, :scale, :remainder - deprecated ?
154
+ end
155
+
102
156
  end
103
157
  end
@@ -5,13 +5,15 @@ module Applitools
5
5
  extend self
6
6
  NONE = 'None'.freeze
7
7
  LAYOUT = 'Layout'.freeze
8
+ LAYOUT1 = 'Layout1'.freeze
8
9
  LAYOUT2 = 'Layout2'.freeze
9
10
  CONTENT = 'Content'.freeze
10
11
  STRICT = 'Strict'.freeze
11
12
  EXACT = 'Exact'.freeze
12
13
 
13
14
  def enum_values
14
- [NONE, LAYOUT, LAYOUT2, CONTENT, STRICT, EXACT]
15
+ [NONE, LAYOUT, LAYOUT1, LAYOUT2, CONTENT, STRICT, EXACT]
15
16
  end
16
17
  end
17
18
  end
19
+ # U-Notes : Added Layout1 MatchLevel
@@ -5,7 +5,7 @@ module Applitools
5
5
  class Screenshot < Delegator
6
6
  class << self
7
7
  def from_region(region)
8
- self::Image.new(::ChunkyPNG::Image.new(region.width, region.height))
8
+ # self::Image.new(::ChunkyPNG::Image.new(region.width, region.height))
9
9
  end
10
10
 
11
11
  def from_datastream(datastream)
@@ -18,7 +18,7 @@ module Applitools
18
18
 
19
19
  def from_any_image(image)
20
20
  return from_region(image) if image.is_a? Applitools::Region
21
- return from_image(image) if image.is_a? ::ChunkyPNG::Image
21
+ # return from_image(image) if image.is_a? ::ChunkyPNG::Image
22
22
  return image if image.is_a?(Image) | image.is_a?(Datastream)
23
23
  from_datastream(image)
24
24
  end
@@ -60,12 +60,12 @@ module Applitools
60
60
  "Expected image to be Datastream or String, but got #{image.class}"
61
61
  )
62
62
  end
63
- @datastream = ::ChunkyPNG::Datastream.from_string image
63
+ # @datastream = ::ChunkyPNG::Datastream.from_string image
64
64
  end
65
65
 
66
66
  def update!(image)
67
67
  Applitools::ArgumentGuard.not_nil(image, 'image')
68
- Applitools::ArgumentGuard.is_a?(image, 'image', ::ChunkyPNG::Image)
68
+ # Applitools::ArgumentGuard.is_a?(image, 'image', ::ChunkyPNG::Image)
69
69
  @datastream = image.to_datastream
70
70
  self
71
71
  end
@@ -90,7 +90,7 @@ module Applitools
90
90
  end
91
91
 
92
92
  def restore
93
- ::ChunkyPNG::Image.from_datastream @datastream
93
+ # ::ChunkyPNG::Image.from_datastream @datastream
94
94
  end
95
95
 
96
96
  def sha256
@@ -103,13 +103,13 @@ module Applitools
103
103
 
104
104
  def initialize(image)
105
105
  Applitools::ArgumentGuard.not_nil(image, 'image')
106
- Applitools::ArgumentGuard.is_a?(image, 'image', ::ChunkyPNG::Image)
106
+ # Applitools::ArgumentGuard.is_a?(image, 'image', ::ChunkyPNG::Image)
107
107
  @image = image
108
108
  end
109
109
 
110
110
  def update!(image)
111
111
  Applitools::ArgumentGuard.not_nil(image, 'image')
112
- Applitools::ArgumentGuard.is_a?(image, 'image', ::ChunkyPNG::Image)
112
+ # Applitools::ArgumentGuard.is_a?(image, 'image', ::ChunkyPNG::Image)
113
113
  @image = image
114
114
  end
115
115
 
@@ -3,10 +3,23 @@
3
3
  module Applitools
4
4
  class TestResultSummary
5
5
  attr_accessor :results, :passed, :unresolved, :failed, :exceptions, :mismatches, :missing, :matches
6
- def initialize(results)
7
- Applitools::ArgumentGuard.is_a?(results, 'results', Array)
8
- results.each_with_index do |r, i|
9
- Applitools::ArgumentGuard.is_a?(r, "results[#{i}]", Applitools::TestResults)
6
+ attr_accessor :original_test_results
7
+ def initialize(all_test_results)
8
+ @original_test_results = all_test_results
9
+ @results = all_test_results[:results]
10
+ @passed = all_test_results[:passed]
11
+ @unresolved = all_test_results[:unresolved]
12
+ @failed = all_test_results[:failed]
13
+ @exceptions = all_test_results[:exceptions]
14
+ @mismatches = all_test_results[:mismatches]
15
+ @missing = all_test_results[:missing]
16
+ @matches = all_test_results[:matches]
17
+ end
18
+
19
+ def old_style_results_array
20
+ Applitools::Utils.deep_stringify_keys(results).map do |e|
21
+ r = e['testResults'] ? e['testResults'] : {}
22
+ Applitools::TestResults.new(r)
10
23
  end
11
24
  end
12
25
  end
@@ -26,8 +26,8 @@ module Applitools
26
26
  @mismatches = results.fetch('mismatches', 0)
27
27
  @missing = results.fetch('missing', 0)
28
28
  @status = results.fetch('status', 0)
29
- @is_new = nil
30
- @url = nil
29
+ @is_new = results.fetch('isNew', nil)
30
+ @url = results.fetch('url', nil)
31
31
  end
32
32
 
33
33
  def passed?
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Applitools
4
+ module UniversalEyesChecks
5
+
6
+ # Takes a snapshot and matches it with the expected output.
7
+ #
8
+ # @param [String] name The name of the tag.
9
+ # @param [Applitools::Selenium::Target] target which area of the window to check.
10
+ # @return [Applitools::MatchResult] The match results.
11
+ def universal_check(name, target)
12
+ return disabled_result if respond_to?(:disabled?) && disabled?
13
+
14
+ raise Applitools::EyesNotOpenException.new('Eyes not open!') if @universal_eyes.nil?
15
+ Applitools::EyesLogger.logger.info "#{test_name} : check(#{name}) started ..."
16
+ # require 'pry'
17
+ # binding.pry
18
+ check_result = @universal_eyes.check(get_universal_check_settings(name, target))
19
+ if server_error?(check_result)
20
+ # require 'pry'
21
+ # binding.pry
22
+ raise Applitools::EyesError.new("Request failed: #{check_result[:message]}")
23
+ end
24
+
25
+ if check_result != {}
26
+ result = Applitools::MatchResult.new(Applitools::Utils.deep_stringify_keys(check_result))
27
+
28
+ check_fail_result_processing(name) unless result.as_expected?
29
+ end
30
+
31
+ logger.info 'Done!'
32
+ end
33
+
34
+ private
35
+
36
+ def disabled_result
37
+ logger.info "#{__method__} Ignored"
38
+ result = Applitools::MatchResults.new
39
+ result.as_expected = true
40
+ result
41
+ end
42
+
43
+ def get_universal_check_settings(name, target)
44
+ universal_check_settings = Applitools::UniversalCheckSettings.new(name: name)
45
+ universal_check_settings.from_original_target(target, self)
46
+ # require 'pry'
47
+ # binding.pry
48
+ universal_check_settings.to_hash
49
+ end
50
+
51
+ def check_fail_result_processing(name)
52
+ self.failed = true
53
+ logger.info "Mistmatch! #{name}" #unless running_session.new_session?
54
+
55
+ if failure_reports == :immediate
56
+ raise Applitools::TestFailedException.new "Mistmatch found in #{test_name} of #{app_name}"
57
+ end
58
+ end
59
+
60
+ def server_error?(universal_results)
61
+ universal_results.is_a?(Hash) && universal_results[:message] && universal_results[:stack]
62
+ end
63
+
64
+ end
65
+ end
66
+ # U-Notes : Added internal Applitools::UniversalEyesChecks
@@ -0,0 +1,100 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Applitools
4
+ module UniversalEyesOpen
5
+
6
+ # Starts a test
7
+ #
8
+ # @param options [Hash] options
9
+ # @option options :driver The driver that controls the browser hosting the application
10
+ # under the test. (*Required* option)
11
+ # @option options [String] :app_name The name of the application under the test. (*Required* option)
12
+ # @option options [String] :test_name The test name (*Required* option)
13
+ # @option options [String | Hash] :viewport_size The required browser's viewport size
14
+ # (i.e., the visible part of the document's body) or +nil+ to use the current window's viewport.
15
+ # @option options :session_type The type of the test (e.g., standard test / visual performance test).
16
+ # Default value is 'SEQUENTAL'
17
+ # @return [Applitools::Selenium::Driver] A wrapped web driver which enables Eyes
18
+ # trigger recording and frame handling
19
+ def universal_open(options = {})
20
+ original_driver = options.delete(:driver)
21
+ Applitools::ArgumentGuard.not_nil original_driver, 'options[:driver]'
22
+
23
+ if respond_to?(:disabled?) && disabled?
24
+ logger.info('Ignored')
25
+ return original_driver
26
+ end
27
+
28
+ self.driver = Applitools::Selenium::SeleniumEyes.eyes_driver(original_driver, self)
29
+
30
+ update_config_from_options(options)
31
+ universal_driver_config = driver.universal_driver_config
32
+ universal_eyes_manager = runner.get_universal_eyes_manager
33
+
34
+ universal_eyes_config = Applitools::UniversalEyesConfig.new
35
+ universal_eyes_config.from_original_sdk(self)
36
+
37
+ # require('pry')
38
+ # binding.pry
39
+
40
+ @universal_eyes = universal_eyes_manager.open_eyes(universal_driver_config, universal_eyes_config.to_hash)
41
+ raise Applitools::EyesNotOpenException.new('Eyes not open!') if @universal_eyes.nil?
42
+
43
+ self.open = true if respond_to?(:open=, true)
44
+ self.running_session = true if respond_to?(:running_session=, true)
45
+ driver
46
+ rescue Applitools::EyesError => e
47
+ logger.error e.message
48
+ raise e
49
+ end
50
+
51
+ def universal_sdk_abort
52
+ if respond_to?(:disabled?) && disabled?
53
+ logger.info "#{__method__} Ignore disabled"
54
+ return false
55
+ end
56
+ # raise Applitools::EyesNotOpenException.new('Eyes not open!') if @eyes.nil?
57
+ return if @universal_eyes.nil?
58
+ result = @universal_eyes.abort
59
+
60
+ if result.is_a? Hash
61
+ logger.info "---Test aborted" if !result[:message] && !result[:stack]
62
+ else
63
+ # TestCheckFrameInFrame_Fully_Fluent_VG\
64
+ # require('pry')
65
+ # binding.pry
66
+ end
67
+ end
68
+
69
+ private
70
+
71
+ def update_config_from_options(options)
72
+ default_options = { session_type: 'SEQUENTIAL' }
73
+
74
+ options = default_options.merge options
75
+
76
+ self.app_name = options[:app_name] if options[:app_name]
77
+ self.test_name = options[:test_name] if options[:test_name]
78
+ if (config.viewport_size.nil? || config.viewport_size&.empty?) && options[:viewport_size]
79
+ self.viewport_size = Applitools::RectangleSize.from_any_argument options[:viewport_size]
80
+ end
81
+ self.session_type = options[:session_type] if options[:session_type]
82
+
83
+ raise Applitools::EyesIllegalArgument, config.validation_errors.values.join('/n') unless config.valid?
84
+
85
+ logger.info "Agent = #{full_agent_id}"
86
+ logger.info "open(app_name: #{app_name}, test_name: #{test_name}," \
87
+ " viewport_size: #{viewport_size})"
88
+
89
+ raise Applitools::EyesError.new 'API key is missing! Please set it using api_key=' if
90
+ api_key.nil? || (api_key && api_key.empty?)
91
+
92
+ logger.info "Batch is #{@batch}" if @batch
93
+ app_env = app_environment if respond_to? :app_environment
94
+ logger.info "Application environment is #{app_env}"
95
+ test_info = "'#{test_name}' of '#{app_name}' #{app_env}"
96
+ logger.info "--- New test started - #{test_info}"
97
+ end
98
+
99
+ end
100
+ end