eyes_core 3.8.0 → 3.9.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
2
  SHA1:
3
- metadata.gz: dd1acdd13827926e57fe2bf72251ed21ebe7090a
4
- data.tar.gz: 265b88d8fca7e2e5bc1dca8cc837254bc7307af6
3
+ metadata.gz: 3cd56839e5721775879c8103fe725889fd804eb6
4
+ data.tar.gz: 1a22c8653ccf48d6021b5d6416e2de18d55c98ca
5
5
  SHA512:
6
- metadata.gz: 3517e061b53fb5669ad5f18383932718e00c4b09fba300ec4ac2a24754b2b34425bd5f4f23ca0e1438af35b653537f47b51bbf8a971b1a2224e0078338a00202
7
- data.tar.gz: 1838ddf5bd8396bd81f4fe471dff33a80184eeb511094cf15afdb9efd4d4602bdb00fc6b975888b6d2bfe2bfd53646d13e4088502cb51f1bd7e4f8862d9ec8a2
6
+ metadata.gz: 024443174ee13d25181fbdd8f92fdc2daced4cbbf43394b189d7f22921c867d1e64e700f179c79d433072b5f390b065ecc3f37b2d992d8692b574066aa6cc109
7
+ data.tar.gz: ab4d97600d218dbd6f0920ae3230638c2c4b25898dd074176b548b86e76ac1bad15d16c3bef49309ba38f1052cca930c12b69a58e9c082c809b9ee13d05cd7e7
@@ -66,14 +66,19 @@ module Applitools::Connectivity
66
66
  RETRY_STEP_FACTOR = 1.5
67
67
  RETRY_MAX_DELAY = 5
68
68
 
69
- def match_single_window(data)
69
+ def match_single_window_data(data)
70
70
  # Notice that this does not include the screenshot.
71
71
  json_data = Oj.dump(data.to_hash).force_encoding('BINARY')
72
72
  body = [json_data.length].pack('L>') + json_data + data.screenshot
73
73
  # Applitools::EyesLogger.debug json_data
74
74
  begin
75
75
  Applitools::EyesLogger.debug 'Sending match data...'
76
- res = long_post(@single_check_endpoint_url, content_type: 'application/octet-stream', body: body)
76
+ res = long_post(
77
+ @single_check_endpoint_url,
78
+ content_type: 'application/octet-stream',
79
+ body: body,
80
+ query: { agent_id: data.agent_id }
81
+ )
77
82
  rescue Errno::EWOULDBLOCK, Faraday::ConnectionFailed
78
83
  @delays ||= request_delay(RETRY_DELAY, RETRY_STEP_FACTOR, RETRY_MAX_DELAY)
79
84
  begin
@@ -81,11 +86,16 @@ module Applitools::Connectivity
81
86
  rescue StopIteration
82
87
  raise Applitools::UnknownNetworkStackError.new('Unknown network stack error')
83
88
  end
84
- res = match_single_window(data)
89
+ res = match_single_window_data(data)
85
90
  ensure
86
91
  @delays = nil
87
92
  end
88
93
  raise Applitools::EyesError.new("Request failed: #{res.status} #{res.headers} #{res.body}") unless res.success?
94
+ res
95
+ end
96
+
97
+ def match_single_window(data)
98
+ res = match_single_window_data(data)
89
99
  Applitools::TestResults.new Oj.load(res.body)
90
100
  end
91
101
 
@@ -111,7 +111,7 @@ module Applitools
111
111
  end
112
112
 
113
113
  def add_property(name, value)
114
- @properties << {name: name, value: value}
114
+ @properties << { name: name, value: value }
115
115
  end
116
116
 
117
117
  def abort_if_not_closed
@@ -0,0 +1,35 @@
1
+ require_relative 'region'
2
+ module Applitools
3
+ class FloatingRegion < Region
4
+ class << self
5
+ def for_element(element, max_left_offset, max_top_offset, max_right_offset, max_bottom_offset)
6
+ Applitools::ArgumentGuard.is_a? element, 'element', Applitools::Selenium::Element
7
+ new element.location.x, element.location.y, element.size.width, element.size.height, max_left_offset,
8
+ max_top_offset, max_right_offset, max_bottom_offset
9
+ end
10
+ end
11
+
12
+ attr_accessor :max_top_offset, :max_right_offset, :max_bottom_offset, :max_left_offset
13
+
14
+ def initialize(left, top, width, height, max_left_offset, max_top_offset, max_right_offset, max_bottom_offset)
15
+ super(left, top, width, height)
16
+ self.max_left_offset = max_left_offset
17
+ self.max_top_offset = max_top_offset
18
+ self.max_right_offset = max_right_offset
19
+ self.max_bottom_offset = max_bottom_offset
20
+ end
21
+
22
+ def to_hash
23
+ {
24
+ 'Top' => top,
25
+ 'Left' => left,
26
+ 'Width' => width,
27
+ 'Height' => height,
28
+ 'MaxUpOffset' => max_top_offset,
29
+ 'MaxLeftOffset' => max_left_offset,
30
+ 'MaxRightOffset' => max_right_offset,
31
+ 'MaxDownOffset' => max_bottom_offset
32
+ }
33
+ end
34
+ end
35
+ end
@@ -90,5 +90,9 @@ module Applitools
90
90
  def remove_session_if_matching=(value)
91
91
  current_data['removeSessionIfMatching'] = value ? true : false
92
92
  end
93
+
94
+ def agent_id
95
+ current_data['startInfo']['agentId']
96
+ end
93
97
  end
94
98
  end
@@ -22,6 +22,7 @@ module Applitools
22
22
  'SplitBottomHeight' => 0,
23
23
  'IgnoreCaret' => false,
24
24
  'Ignore' => [],
25
+ 'Floating' => [],
25
26
  'Exact' => {
26
27
  'MinDiffIntensity' => 0,
27
28
  'MinDiffWidth' => 0,
@@ -65,7 +66,9 @@ module Applitools
65
66
  def initialize
66
67
  @app_output = nil
67
68
  @ignored_regions = []
69
+ @floating_regions = []
68
70
  @need_convert_ignored_regions_coordinates = false
71
+ @need_convert_floating_regions_coordinates = false
69
72
  end
70
73
 
71
74
  def screenshot
@@ -97,6 +100,13 @@ module Applitools
97
100
  end
98
101
  end
99
102
 
103
+ def floating_regions=(value)
104
+ Applitools::ArgumentGuard.is_a? value, 'value', Array
105
+ value.each do |r|
106
+ current_data['Options']['ImageMatchSettings']['Floating'] << r.to_hash
107
+ end
108
+ end
109
+
100
110
  def app_output=(value)
101
111
  Applitools::ArgumentGuard.is_a? value, 'value', Applitools::AppOutputWithScreenshot
102
112
  @app_output = value
@@ -116,7 +126,7 @@ module Applitools
116
126
 
117
127
  def read_target(target, driver)
118
128
  # options
119
- %w(trim).each do |field|
129
+ target_options_to_read.each do |field|
120
130
  send("#{field}=", target.options[field.to_sym])
121
131
  end
122
132
  # ignored regions
@@ -131,8 +141,28 @@ module Applitools
131
141
  @need_convert_ignored_regions_coordinates = true
132
142
  end
133
143
  end
144
+ # floating regions
145
+ target.floating_regions.each do |r|
146
+ case r
147
+ when Proc
148
+ region = r.call(driver)
149
+ raise Applitools::EyesError.new "Wrong floating region: #{region.class}" unless
150
+ region.is_a? Applitools::FloatingRegion
151
+ @floating_regions << region
152
+ @need_convert_floating_regions_coordinates = true
153
+ when Applitools::FloatingRegion
154
+ @floating_regions << r
155
+ @need_convert_floating_regions_coordinates = true
156
+ end
157
+ end
134
158
  end
135
159
 
160
+ def target_options_to_read
161
+ %w(trim ignore_caret)
162
+ end
163
+
164
+ private :target_options_to_read
165
+
136
166
  def ignore_mismatch
137
167
  current_data['IgnoreMismatch']
138
168
  end
@@ -145,6 +175,10 @@ module Applitools
145
175
  current_data['Options']['Trim']['Enabled'] = value ? true : false
146
176
  end
147
177
 
178
+ def ignore_caret=(value)
179
+ current_data['Options']['ImageMatchSettings']['IgnoreCaret'] = value
180
+ end
181
+
148
182
  def convert_ignored_regions_coordinates
149
183
  return unless @need_convert_ignored_regions_coordinates
150
184
  self.ignored_regions = @ignored_regions.map do |r|
@@ -153,12 +187,31 @@ module Applitools
153
187
  @need_convert_ignored_regions_coordinates = false
154
188
  end
155
189
 
190
+ def convert_floating_regions_coordinates
191
+ return unless @need_convert_floating_regions_coordinates
192
+ self.floating_regions = @floating_regions.map do |r|
193
+ r.location = app_output.screenshot.convert_location(
194
+ r.location,
195
+ Applitools::EyesScreenshot::COORDINATE_TYPES[:context_relative],
196
+ Applitools::EyesScreenshot::COORDINATE_TYPES[:screenshot_as_is]
197
+ )
198
+ r.to_hash
199
+ end
200
+ @need_convert_floating_regions_coordinates = false
201
+ end
202
+
156
203
  def to_hash
157
204
  if @need_convert_ignored_regions_coordinates
158
205
  raise Applitools::EyesError.new(
159
206
  'You should convert coordinates for ignored_regions!'
160
207
  )
161
208
  end
209
+
210
+ if @need_convert_floating_regions_coordinates
211
+ raise Applitools::EyesError.new(
212
+ 'You should convert coordinates for floating_regions!'
213
+ )
214
+ end
162
215
  current_data.dup
163
216
  end
164
217
 
@@ -41,12 +41,14 @@ module Applitools
41
41
  app_output = app_output_provider.app_output(region_provider, last_screenshot)
42
42
  match_window_data.app_output = app_output
43
43
  match_window_data.convert_ignored_regions_coordinates
44
+ match_window_data.convert_floating_regions_coordinates
44
45
  match_result = perform_match(match_window_data)
45
46
  else
46
47
  passed_ignore_mismatch = match_window_data.ignore_mismatch
47
48
  app_output = app_output_provider.app_output(region_provider, last_screenshot)
48
49
  match_window_data.app_output = app_output
49
50
  match_window_data.convert_ignored_regions_coordinates
51
+ match_window_data.convert_floating_regions_coordinates
50
52
  match_window_data.ignore_mismatch = true
51
53
  start = Time.now
52
54
  match_result = perform_match(match_window_data)
@@ -63,6 +65,7 @@ module Applitools
63
65
  app_output = app_output_provider.app_output(region_provider, last_screenshot)
64
66
  match_window_data.app_output = app_output
65
67
  match_window_data.convert_ignored_regions_coordinates
68
+ match_window_data.convert_floating_regions_coordinates
66
69
  match_window_data.ignore_mismatch = true
67
70
  match_result = perform_match(match_window_data)
68
71
  retry_time = Time.now - start
@@ -72,6 +75,7 @@ module Applitools
72
75
  app_output = app_output_provider.app_output(region_provider, last_screenshot)
73
76
  match_window_data.app_output = app_output
74
77
  match_window_data.convert_ignored_regions_coordinates
78
+ match_window_data.convert_floating_regions_coordinates
75
79
  match_window_data.ignore_mismatch = passed_ignore_mismatch
76
80
  match_result = perform_match(match_window_data)
77
81
  end
@@ -42,13 +42,14 @@ module Applitools::Images
42
42
  end
43
43
  end
44
44
 
45
- attr_accessor :image, :options, :ignored_regions, :region_to_check
45
+ attr_accessor :image, :options, :ignored_regions, :region_to_check, :floating_regions
46
46
 
47
47
  def initialize(image)
48
48
  Applitools::ArgumentGuard.not_nil(image, 'image')
49
49
  Applitools::ArgumentGuard.is_a? image, 'image', Applitools::Screenshot
50
50
  self.image = image
51
51
  self.ignored_regions = []
52
+ self.floating_regions = []
52
53
  self.options = {
53
54
  trim: false
54
55
  }
@@ -64,6 +65,22 @@ module Applitools::Images
64
65
  self
65
66
  end
66
67
 
68
+ def floating(*args)
69
+ value = case args.first
70
+ when Applitools::FloatingRegion
71
+ proc { args.first }
72
+ when Applitools::Region
73
+ proc do
74
+ region = args.shift
75
+ Applitools::FloatingRegion.new region.left, region.top, region.width, region.height, *args
76
+ end
77
+ else
78
+ self.floating_regions = []
79
+ end
80
+ floating_regions << value
81
+ self
82
+ end
83
+
67
84
  def region(region = nil)
68
85
  if region
69
86
  Applitools::ArgumentGuard.is_a? region, 'region', Applitools::Region
@@ -1,3 +1,3 @@
1
1
  module Applitools
2
- VERSION = '3.8.0'.freeze
2
+ VERSION = '3.9.0'.freeze
3
3
  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.8.0
4
+ version: 3.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Applitools Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-23 00:00:00.000000000 Z
11
+ date: 2017-05-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oily_png
@@ -217,6 +217,7 @@ files:
217
217
  - lib/applitools/core/eyes_screenshot.rb
218
218
  - lib/applitools/core/fixed_cut_provider.rb
219
219
  - lib/applitools/core/fixed_scale_provider.rb
220
+ - lib/applitools/core/floating_region.rb
220
221
  - lib/applitools/core/hash_extension.rb
221
222
  - lib/applitools/core/helpers.rb
222
223
  - lib/applitools/core/location.rb