eyes_core 3.17.16 → 3.17.17

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
2
  SHA256:
3
- metadata.gz: f493e2e676266fe3171fdcc71969df85850857c4cdfcdb76075ecc17c83d6947
4
- data.tar.gz: 1e1f1e972549d21dd82cf636fa2430a2854032b11e3aca4394a6881a7d967390
3
+ metadata.gz: bec0e3de9fa596430d8a46e5274359fafb24bf610223181263cc74c7da18cc74
4
+ data.tar.gz: 2949d1c8638ecb578569fd55b69e3eaafdfc81fd7ad05cd35f0f5dc9c17bba7e
5
5
  SHA512:
6
- metadata.gz: ef157b03cd73e0b56ccb8b30f2ca37dbaef94b9274218285fb21a3e91b3578b87b1c70ae0327888613159d12685e96914dcf8d244aa614de543f43b7d184353c
7
- data.tar.gz: 1ca941fb0dd570fbf7b2cd7312d8cdd4b5e0b0e54f5e6152fb31fa0d12ddecbd7d2c878e8575467a894f2c46f224f077e417550428402b4f22508974884aeee0
6
+ metadata.gz: d79a7817840dafdd6102d6442a71f63fd5db7885e6de70432d9fd0f43c66805f533e0c439f25330253ca17b87e05c752996ea6001a0a63ecb5b74e690704780a
7
+ data.tar.gz: 214446f6d9a8e1fafe461970f560a9b65d353578a820ad18fb0dae523752f0dd7f3eab74ca530d2400198f97d9f7f5731f79bbf77e85d4949b051c7940607b5b
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Applitools
4
4
  class AppOutput
5
- attr_reader :title, :screenshot64, :location
5
+ attr_reader :title, :screenshot64, :location, :screenshot_url_getter, :dom_url_getter
6
6
 
7
7
  attr_accessor :dom_url, :screenshot_url, :visual_viewport
8
8
 
@@ -10,6 +10,8 @@ module Applitools
10
10
  @title = title
11
11
  @screenshot64 = screenshot64
12
12
  @location = Applitools::Location::TOP_LEFT
13
+ @screenshot_url_getter = nil
14
+ @dom_url_getter = nil
13
15
  end
14
16
 
15
17
  def location=(value)
@@ -17,12 +19,24 @@ module Applitools
17
19
  @location = value
18
20
  end
19
21
 
22
+ def on_need_screenshot_url(&block)
23
+ @screenshot_url_getter = block if block_given?
24
+ end
25
+
26
+ def on_need_dom_url(&block)
27
+ @dom_url_getter = block if block_given?
28
+ end
29
+
30
+ def dom_url
31
+ @dom_url ||= (@dom_url_getter && @dom_url_getter.call)
32
+ end
33
+
20
34
  def to_hash
21
35
  result = {
22
36
  Title: title,
23
37
  Screenshot64: nil,
24
38
  Location: location.to_hash,
25
- ScreenshotUrl: screenshot_url
39
+ ScreenshotUrl: screenshot_url || (screenshot_url_getter && screenshot_url_getter.call)
26
40
  }
27
41
  result[:DomUrl] = dom_url if dom_url
28
42
  result[:visualViewport] = visual_viewport if visual_viewport
@@ -6,17 +6,19 @@ require_relative 'helpers'
6
6
  module Applitools
7
7
  class BatchInfo
8
8
  extend Helpers
9
- attr_accessor :started_at, :id
9
+ attr_accessor :started_at, :id, :notify_on_completion
10
10
 
11
11
  environment_attribute :name, 'APPLITOOLS_BATCH_NAME'
12
12
  environment_attribute :id, 'APPLITOOLS_BATCH_ID'
13
13
  environment_attribute :sequence_name, 'APPLITOOLS_BATCH_SEQUENCE'
14
- environment_attribute :notify_on_completion, 'APPLITOOLS_BATCH_NOTIFY'
14
+ environment_attribute :env_notify_on_completion, 'APPLITOOLS_BATCH_NOTIFY'
15
+
15
16
 
16
17
  def initialize(name = nil, started_at = Time.now)
17
18
  self.name = name if name
18
19
  @started_at = started_at
19
20
  self.id = SecureRandom.uuid unless id
21
+ self.notify_on_completion = 'true'.casecmp(env_notify_on_completion || '') == 0 ? true : false
20
22
  end
21
23
 
22
24
  def json_data
@@ -25,7 +27,7 @@ module Applitools
25
27
  'name' => name,
26
28
  'startedAt' => @started_at.iso8601,
27
29
  'batchSequenceName' => sequence_name,
28
- 'notifyOnCompletion' => 'true'.casecmp(notify_on_completion || '') == 0 ? true : false
30
+ 'notifyOnCompletion' => notify_on_completion
29
31
  }
30
32
  end
31
33
 
@@ -280,7 +280,6 @@ module Applitools
280
280
  self.last_screenshot = result.screenshot
281
281
  end
282
282
 
283
- self.should_match_window_run_once_on_timeout = true
284
283
  self.failed = true
285
284
  logger.info "Mistmatch! #{tag}" unless running_session.new_session?
286
285
 
@@ -614,27 +613,7 @@ module Applitools
614
613
  end
615
614
 
616
615
  def get_app_output_with_screenshot(region_provider, _last_screenshot)
617
- dom_url = ''
618
616
  captured_dom_data = dom_data
619
- unless captured_dom_data.empty?
620
- begin
621
- logger.info 'Processing DOM..'
622
- dom_url = server_connector.post_dom_json(captured_dom_data, runner.rendering_info(server_connector)) do |json|
623
- io = StringIO.new
624
- gz = Zlib::GzipWriter.new(io)
625
- gz.write(json.encode('UTF-8'))
626
- gz.close
627
- result = io.string
628
- io.close
629
- result
630
- end
631
- logger.info 'Done'
632
- logger.info dom_url
633
- rescue Applitools::EyesError => e
634
- logger.warn e.message
635
- dom_url = nil
636
- end
637
- end
638
617
  logger.info 'Getting screenshot...'
639
618
  screenshot = capture_screenshot
640
619
  logger.info 'Done getting screenshot!'
@@ -646,21 +625,41 @@ module Applitools
646
625
 
647
626
  screenshot = yield(screenshot) if block_given?
648
627
 
649
- if screenshot
650
- self.screenshot_url = server_connector.put_screenshot(
651
- runner.rendering_info(server_connector),
652
- screenshot
653
- )
654
- end
655
-
656
628
  logger.info 'Getting title...'
657
629
  a_title = title
658
630
  logger.info 'Done!'
659
631
  Applitools::AppOutputWithScreenshot.new(
660
632
  Applitools::AppOutput.new(a_title, screenshot).tap do |o|
661
633
  o.location = region.location unless region.empty?
662
- o.dom_url = dom_url unless dom_url && dom_url.empty?
663
- o.screenshot_url = screenshot_url if respond_to?(:screenshot_url) && !screenshot_url.nil?
634
+ o.on_need_screenshot_url do
635
+ return unless screenshot
636
+ server_connector.put_screenshot(
637
+ runner.rendering_info(server_connector),
638
+ screenshot
639
+ )
640
+ end
641
+ o.on_need_dom_url do
642
+ unless captured_dom_data.empty?
643
+ begin
644
+ logger.info 'Processing DOM..'
645
+ dom_url = server_connector.post_dom_json(captured_dom_data, runner.rendering_info(server_connector)) do |json|
646
+ io = StringIO.new
647
+ gz = Zlib::GzipWriter.new(io)
648
+ gz.write(json.encode('UTF-8'))
649
+ gz.close
650
+ result = io.string
651
+ io.close
652
+ result
653
+ end
654
+ logger.info 'Done'
655
+ logger.info dom_url
656
+ rescue Applitools::EyesError => e
657
+ logger.warn e.message
658
+ dom_url = nil
659
+ end
660
+ dom_url
661
+ end
662
+ end
664
663
  end,
665
664
  screenshot,
666
665
  allow_empty_screenshot
@@ -24,6 +24,7 @@ module Applitools
24
24
  'ForceMismatch' => false,
25
25
  'IgnoreMatch' => false,
26
26
  'IgnoreMismatch' => false,
27
+ 'ReplaceLast' => false,
27
28
  'Trim' => {
28
29
  'Enabled' => false
29
30
  },
@@ -313,6 +314,15 @@ module Applitools
313
314
  current_data['IgnoreMismatch']
314
315
  end
315
316
 
317
+ def replace_last
318
+ current_data['Options']['ReplaceLast']
319
+ end
320
+
321
+ def replace_last=(value)
322
+ Applitools::ArgumentGuard.one_of?(value, 'value', [TrueClass, FalseClass])
323
+ current_data['Options']['ReplaceLast'] = value
324
+ end
325
+
316
326
  def tag
317
327
  current_data['Tag']
318
328
  end
@@ -48,10 +48,11 @@ module Applitools
48
48
  match_window_data.convert_strict_regions_coordinates
49
49
  match_window_data.convert_content_regions_coordinates
50
50
  match_window_data.convert_accessibility_regions_coordinates
51
+ match_window_data.replace_last = false
51
52
  match_result = perform_match(match_window_data)
52
53
  else
53
- passed_ignore_mismatch = match_window_data.ignore_mismatch
54
54
  app_output = app_output_provider.app_output(region_provider, last_screenshot)
55
+ last_image_digest = app_output.screenshot.image.sha256
55
56
  match_window_data.app_output = app_output
56
57
  match_window_data.convert_ignored_regions_coordinates
57
58
  match_window_data.convert_floating_regions_coordinates
@@ -59,44 +60,37 @@ module Applitools
59
60
  match_window_data.convert_strict_regions_coordinates
60
61
  match_window_data.convert_content_regions_coordinates
61
62
  match_window_data.convert_accessibility_regions_coordinates
62
- match_window_data.ignore_mismatch = true
63
- start = Time.now
63
+ match_window_data.replace_last = false
64
64
  match_result = perform_match(match_window_data)
65
- retry_time = Time.now - start
66
65
 
67
66
  block_retry = if block_given?
68
67
  yield(match_result)
69
68
  else
70
69
  false
71
70
  end
71
+ start = Time.now
72
+ retry_time = 0
72
73
 
73
74
  while retry_time < retry_timeout && !(block_retry || match_result.as_expected?)
74
75
  sleep MATCH_INTERVAL
75
76
  app_output = app_output_provider.app_output(region_provider, last_screenshot)
76
- match_window_data.app_output = app_output
77
- match_window_data.convert_ignored_regions_coordinates
78
- match_window_data.convert_floating_regions_coordinates
79
- match_window_data.convert_layout_regions_coordinates
80
- match_window_data.convert_strict_regions_coordinates
81
- match_window_data.convert_content_regions_coordinates
82
- match_window_data.convert_accessibility_regions_coordinates
83
- match_window_data.ignore_mismatch = true
84
- match_result = perform_match(match_window_data)
77
+ image_digest = app_output.screenshot.image.sha256
78
+ if image_digest == last_image_digest
79
+ logger.info('Got the same screenshot in retry. Not sending to the server.')
80
+ else
81
+ match_window_data.app_output = app_output
82
+ match_window_data.convert_ignored_regions_coordinates
83
+ match_window_data.convert_floating_regions_coordinates
84
+ match_window_data.convert_layout_regions_coordinates
85
+ match_window_data.convert_strict_regions_coordinates
86
+ match_window_data.convert_content_regions_coordinates
87
+ match_window_data.convert_accessibility_regions_coordinates
88
+ match_window_data.replace_last = true
89
+ match_result = perform_match(match_window_data)
90
+ end
91
+ last_image_digest = image_digest
85
92
  retry_time = Time.now - start
86
93
  end
87
-
88
- unless block_retry || match_result.as_expected?
89
- app_output = app_output_provider.app_output(region_provider, last_screenshot)
90
- match_window_data.app_output = app_output
91
- match_window_data.convert_ignored_regions_coordinates
92
- match_window_data.convert_floating_regions_coordinates
93
- match_window_data.convert_layout_regions_coordinates
94
- match_window_data.convert_strict_regions_coordinates
95
- match_window_data.convert_content_regions_coordinates
96
- match_window_data.convert_accessibility_regions_coordinates
97
- match_window_data.ignore_mismatch = passed_ignore_mismatch
98
- match_result = perform_match(match_window_data)
99
- end
100
94
  end
101
95
 
102
96
  logger.info "Completed in #{format('%.2f', Time.now - elapsed_time_start)} seconds"
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ require 'digest'
2
3
 
3
4
  module Applitools
4
5
  class Screenshot < Delegator
@@ -91,6 +92,10 @@ module Applitools
91
92
  def restore
92
93
  ::ChunkyPNG::Image.from_datastream @datastream
93
94
  end
95
+
96
+ def sha256
97
+ Digest::SHA2.new(256).hexdigest(@datastream.to_s)
98
+ end
94
99
  end
95
100
 
96
101
  class Image < self
@@ -115,6 +120,10 @@ module Applitools
115
120
  def __setobj__(obj)
116
121
  @image = obj
117
122
  end
123
+
124
+ def sha256
125
+ Digest::SHA2.new(256).hexdigest(@image.to_datastream.to_s)
126
+ end
118
127
  end
119
128
  end
120
129
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: false
2
2
 
3
3
  module Applitools
4
- VERSION = '3.17.16'.freeze
4
+ VERSION = '3.17.17'.freeze
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eyes_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.17.16
4
+ version: 3.17.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - Applitools Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-18 00:00:00.000000000 Z
11
+ date: 2020-07-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oily_png