eyes_core 3.0.8 → 3.1.1
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 +4 -4
- data/ext/eyes_core/eyes_core.c +10 -10
- data/lib/applitools/chunky_png/resampling.rb +15 -3
- data/lib/applitools/core/argument_guard.rb +4 -0
- data/lib/applitools/core/eyes_base.rb +10 -4
- data/lib/applitools/core/hash_extension.rb +11 -0
- data/lib/applitools/core/rectangle_size.rb +10 -1
- data/lib/applitools/core/screenshot.rb +85 -29
- data/lib/applitools/core/session_start_info.rb +2 -2
- data/lib/applitools/core/test_results.rb +1 -1
- data/lib/applitools/images/eyes.rb +11 -9
- data/lib/applitools/images/eyes_images_screenshot.rb +5 -2
- data/lib/applitools/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a6bfdf93e062d2d12f52900e4e161d86064443a4
|
4
|
+
data.tar.gz: 49420a387dc5327c6cd31a5f814e4e1e29f90948
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4a3d745e90548ce9c1d9d73471a369e6c2d3eda0fa4dbabf2bfe50159180e3081248f707f15db8d3f488bf80a6a51920e3ed605ea6138b2e39cdc345e18d10f4
|
7
|
+
data.tar.gz: 47fdcf476ad6fa1894e70a303b5c8793c6207688e8b9749f9058818761d3277a92ea907f129430f7ac5edbed74bcd62002753ce586caf33a4ce6b844ec45f8eb
|
data/ext/eyes_core/eyes_core.c
CHANGED
@@ -124,7 +124,7 @@ VALUE raw_merge_pixels(VALUE merge_pixels[], unsigned int size) {
|
|
124
124
|
}
|
125
125
|
|
126
126
|
VALUE c_bicubic_points(VALUE self, VALUE src_dimension, VALUE dst_dimension, VALUE direction) {
|
127
|
-
unsigned long y_bounds, pixels_size, c_src_dimension, c_dst_dimension, index, index_y;
|
127
|
+
unsigned long y_bounds, pixels_size, c_src_dimension, c_dst_dimension, index, index_y, i, y, x;
|
128
128
|
double step;
|
129
129
|
VALUE result_array;
|
130
130
|
|
@@ -146,16 +146,16 @@ VALUE c_bicubic_points(VALUE self, VALUE src_dimension, VALUE dst_dimension, VAL
|
|
146
146
|
pixels_size = y_bounds * c_dst_dimension;
|
147
147
|
result_array = rb_ary_new2(pixels_size);
|
148
148
|
|
149
|
-
for (
|
149
|
+
for (i = 0; i < c_dst_dimension; i++) {
|
150
150
|
steps[i] = (unsigned long)i*step;
|
151
151
|
residues[i] = i*step - steps[i];
|
152
152
|
};
|
153
153
|
|
154
|
-
for (
|
154
|
+
for (y = 0; y < y_bounds; y++) {
|
155
155
|
line_bounds = rb_funcall(self, rb_intern("line_with_bounds"), 3, UINT2NUM(y), src_dimension, direction);
|
156
156
|
|
157
157
|
index_y = c_dst_dimension * y;
|
158
|
-
for (
|
158
|
+
for (x = 0; x < c_dst_dimension; x++) {
|
159
159
|
if (RTEST(direction)) {
|
160
160
|
index = y_bounds * x + y;
|
161
161
|
} else {
|
@@ -174,8 +174,8 @@ VALUE c_bicubic_points(VALUE self, VALUE src_dimension, VALUE dst_dimension, VAL
|
|
174
174
|
}
|
175
175
|
|
176
176
|
VALUE scale_points2(VALUE self, VALUE dst_width, VALUE dst_height, VALUE w_m, VALUE h_m) {
|
177
|
-
unsigned long c_dst_height, c_dst_width, y_pos, x_pos, index;
|
178
|
-
unsigned int c_w_m, c_h_m, buffer_index, buffer_size;
|
177
|
+
unsigned long c_dst_height, c_dst_width, y_pos, x_pos, index, i, j;
|
178
|
+
unsigned int c_w_m, c_h_m, buffer_index, buffer_size, x, y;
|
179
179
|
VALUE pixels_to_merge [NUM2UINT(w_m) * NUM2UINT(h_m)];
|
180
180
|
VALUE result;
|
181
181
|
|
@@ -188,12 +188,12 @@ VALUE scale_points2(VALUE self, VALUE dst_width, VALUE dst_height, VALUE w_m, VA
|
|
188
188
|
result = rb_ary_new2(c_dst_width * c_dst_height);
|
189
189
|
buffer_size = c_h_m * c_w_m;
|
190
190
|
|
191
|
-
for (
|
192
|
-
for (
|
191
|
+
for (i = 0; i < c_dst_height; i++) {
|
192
|
+
for (j = 0; j < c_dst_width; j++) {
|
193
193
|
buffer_index = 0;
|
194
|
-
for (
|
194
|
+
for (y = 0; y < c_h_m; y++) {
|
195
195
|
y_pos = i * c_h_m + y;
|
196
|
-
for (
|
196
|
+
for (x = 0; x < c_w_m; x++) {
|
197
197
|
x_pos = j * c_w_m + x;
|
198
198
|
pixels_to_merge[buffer_index++] = rb_funcall(self, rb_intern("get_pixel"), 2, UINT2NUM(x_pos), UINT2NUM(y_pos));
|
199
199
|
}
|
@@ -1,3 +1,15 @@
|
|
1
|
+
module Applitools
|
2
|
+
class Enumerator < ::Enumerator
|
3
|
+
if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.0.0')
|
4
|
+
attr_reader :size
|
5
|
+
def initialize(*args)
|
6
|
+
@size = args[0] if args.size == 1
|
7
|
+
super()
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
1
13
|
module Applitools::ChunkyPNG
|
2
14
|
module Resampling
|
3
15
|
def resample_bicubic!(dst_width, dst_height)
|
@@ -15,7 +27,7 @@ module Applitools::ChunkyPNG
|
|
15
27
|
|
16
28
|
return self unless w_m * h_m > 1
|
17
29
|
|
18
|
-
pixels = scale_points2(dst_width, dst_height, w_m, h_m)
|
30
|
+
pixels = scale_points2(dst_width, dst_height, w_m, h_m)
|
19
31
|
replace_canvas!(dst_width, dst_height, pixels)
|
20
32
|
end
|
21
33
|
|
@@ -34,8 +46,8 @@ module Applitools::ChunkyPNG
|
|
34
46
|
def line_with_bounds(y, src_dimension, direction)
|
35
47
|
line = (direction ? column(y) : row(y))
|
36
48
|
[imaginable_point(line[0], line[1])] + line + [
|
37
|
-
|
38
|
-
|
49
|
+
imaginable_point(line[src_dimension - 2], line[src_dimension - 3]),
|
50
|
+
imaginable_point(line[src_dimension - 1], line[src_dimension - 2])
|
39
51
|
]
|
40
52
|
end
|
41
53
|
|
@@ -62,7 +62,7 @@ module Applitools
|
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
65
|
-
|
65
|
+
@default_match_settings = { match_level: MATCH_LEVEL[:strict], exact: nil }
|
66
66
|
end
|
67
67
|
|
68
68
|
def full_agent_id
|
@@ -73,6 +73,14 @@ module Applitools
|
|
73
73
|
end
|
74
74
|
end
|
75
75
|
|
76
|
+
def match_level=(level)
|
77
|
+
@default_match_settings[:match_level] = level
|
78
|
+
end
|
79
|
+
|
80
|
+
def match_level
|
81
|
+
@default_match_settings[:match_level]
|
82
|
+
end
|
83
|
+
|
76
84
|
def disabled=(value)
|
77
85
|
@disabled = Applitools::Utils.boolean_value value
|
78
86
|
end
|
@@ -283,8 +291,7 @@ module Applitools
|
|
283
291
|
private
|
284
292
|
|
285
293
|
attr_accessor :running_session, :last_screenshot, :current_app_name, :test_name, :session_type,
|
286
|
-
:scale_provider, :
|
287
|
-
:should_match_window_run_once_on_timeout, :app_output_provider
|
294
|
+
:scale_provider, :session_start_info, :should_match_window_run_once_on_timeout, :app_output_provider
|
288
295
|
|
289
296
|
attr_reader :user_inputs
|
290
297
|
|
@@ -405,7 +412,6 @@ module Applitools
|
|
405
412
|
scenario_id_or_name: test_name, batch_info: test_batch,
|
406
413
|
env_name: baseline_name, environment: app_env,
|
407
414
|
default_match_settings: default_match_settings,
|
408
|
-
match_level: default_match_settings,
|
409
415
|
branch_name: branch_name, parent_branch_name: parent_branch_name
|
410
416
|
|
411
417
|
logger.info 'Starting server session...'
|
@@ -1,5 +1,7 @@
|
|
1
|
+
require_relative 'hash_extension'
|
1
2
|
module Applitools
|
2
3
|
RectangleSize = Struct.new(:width, :height) do
|
4
|
+
include Applitools::HashExtension
|
3
5
|
class << self
|
4
6
|
def from_any_argument(value)
|
5
7
|
return from_string(value) if value.is_a? String
|
@@ -25,6 +27,11 @@ module Applitools
|
|
25
27
|
end
|
26
28
|
end
|
27
29
|
|
30
|
+
def initialize(*args)
|
31
|
+
super
|
32
|
+
struct_define_to_h_method if respond_to? :struct_define_to_h_method
|
33
|
+
end
|
34
|
+
|
28
35
|
def to_s
|
29
36
|
"#{width}x#{height}"
|
30
37
|
end
|
@@ -41,6 +48,8 @@ module Applitools
|
|
41
48
|
self
|
42
49
|
end
|
43
50
|
|
44
|
-
|
51
|
+
def to_hash
|
52
|
+
to_h
|
53
|
+
end
|
45
54
|
end
|
46
55
|
end
|
@@ -1,42 +1,32 @@
|
|
1
1
|
module Applitools
|
2
2
|
class Screenshot < Delegator
|
3
|
-
extend Forwardable
|
4
|
-
def_delegators :header, :width, :height
|
5
|
-
|
6
3
|
class << self
|
7
4
|
def from_region(region)
|
8
|
-
new
|
5
|
+
self::Image.new(::ChunkyPNG::Image.new(region.width, region.height))
|
9
6
|
end
|
10
|
-
end
|
11
7
|
|
12
|
-
|
13
|
-
|
14
|
-
|
8
|
+
def from_datastream(datastream)
|
9
|
+
self::Datastream.new(datastream)
|
10
|
+
end
|
15
11
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
@datastream = image.to_datastream
|
20
|
-
self
|
21
|
-
end
|
12
|
+
def from_image(image)
|
13
|
+
Image.new(image)
|
14
|
+
end
|
22
15
|
|
23
|
-
|
24
|
-
|
16
|
+
def from_any_image(image)
|
17
|
+
return from_region(image) if image.is_a? Applitools::Region
|
18
|
+
return from_image(image) if image.is_a? ::ChunkyPNG::Image
|
19
|
+
return image if image.is_a?(Image) | image.is_a?(Datastream)
|
20
|
+
from_datastream(image)
|
21
|
+
end
|
25
22
|
end
|
26
23
|
|
27
|
-
def
|
28
|
-
|
24
|
+
def initialize(_image)
|
25
|
+
raise Applitools::EyesError.new 'Applitools::Screenshot is an abstract class!'
|
29
26
|
end
|
30
27
|
|
31
|
-
|
32
|
-
|
33
|
-
def header
|
34
|
-
@datastream.header_chunk
|
35
|
-
end
|
36
|
-
|
37
|
-
def __setobj__(obj)
|
38
|
-
@datastream = obj.to_datastream
|
39
|
-
self
|
28
|
+
def __getobj__
|
29
|
+
nil
|
40
30
|
end
|
41
31
|
|
42
32
|
def method_missing(method, *args, &block)
|
@@ -51,8 +41,74 @@ module Applitools
|
|
51
41
|
super
|
52
42
|
end
|
53
43
|
|
54
|
-
|
55
|
-
|
44
|
+
class Datastream < self
|
45
|
+
extend Forwardable
|
46
|
+
def_delegators :header, :width, :height
|
47
|
+
attr_reader :datastream
|
48
|
+
|
49
|
+
def initialize(image)
|
50
|
+
Applitools::ArgumentGuard.not_nil(image, 'image')
|
51
|
+
unless image.is_a?(String)
|
52
|
+
Applitools::ArgumentGuard.raise_argument_error(
|
53
|
+
"Expected image to be Datastream or String, but got #{image.class}"
|
54
|
+
)
|
55
|
+
end
|
56
|
+
@datastream = ::ChunkyPNG::Datastream.from_string image
|
57
|
+
end
|
58
|
+
|
59
|
+
def update!(image)
|
60
|
+
Applitools::ArgumentGuard.not_nil(image, 'image')
|
61
|
+
Applitools::ArgumentGuard.is_a?(image, 'image', ::ChunkyPNG::Image)
|
62
|
+
@datastream = image.to_datastream
|
63
|
+
self
|
64
|
+
end
|
65
|
+
|
66
|
+
def to_blob
|
67
|
+
@datastream.to_blob
|
68
|
+
end
|
69
|
+
|
70
|
+
def header
|
71
|
+
@datastream.header_chunk
|
72
|
+
end
|
73
|
+
|
74
|
+
def __getobj__
|
75
|
+
restore
|
76
|
+
end
|
77
|
+
|
78
|
+
alias image __getobj__
|
79
|
+
|
80
|
+
def __setobj__(obj)
|
81
|
+
@datastream = obj.to_datastream
|
82
|
+
self
|
83
|
+
end
|
84
|
+
|
85
|
+
def restore
|
86
|
+
::ChunkyPNG::Image.from_datastream @datastream
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
class Image < self
|
91
|
+
attr_reader :image
|
92
|
+
|
93
|
+
def initialize(image)
|
94
|
+
Applitools::ArgumentGuard.not_nil(image, 'image')
|
95
|
+
Applitools::ArgumentGuard.is_a?(image, 'image', ::ChunkyPNG::Image)
|
96
|
+
@image = image
|
97
|
+
end
|
98
|
+
|
99
|
+
def update!(image)
|
100
|
+
Applitools::ArgumentGuard.not_nil(image, 'image')
|
101
|
+
Applitools::ArgumentGuard.is_a?(image, 'image', ::ChunkyPNG::Image)
|
102
|
+
@image = image
|
103
|
+
end
|
104
|
+
|
105
|
+
def __getobj__
|
106
|
+
@image
|
107
|
+
end
|
108
|
+
|
109
|
+
def __setobj__(obj)
|
110
|
+
@image = obj
|
111
|
+
end
|
56
112
|
end
|
57
113
|
end
|
58
114
|
end
|
@@ -10,7 +10,7 @@ module Applitools
|
|
10
10
|
@batch_info = options[:batch_info]
|
11
11
|
@env_name = options[:env_name]
|
12
12
|
@environment = options[:environment]
|
13
|
-
@
|
13
|
+
@default_match_settings = options[:default_match_settings]
|
14
14
|
@branch_name = options[:branch_name]
|
15
15
|
@parent_branch_name = options[:parent_branch_name]
|
16
16
|
end
|
@@ -24,7 +24,7 @@ module Applitools
|
|
24
24
|
batch_info: @batch_info.to_hash,
|
25
25
|
env_name: @env_name,
|
26
26
|
environment: @environment.to_hash,
|
27
|
-
|
27
|
+
default_match_settings: @default_match_settings,
|
28
28
|
branch_name: @branch_name,
|
29
29
|
parent_branch_name: @parent_branch_name
|
30
30
|
}
|
@@ -32,7 +32,7 @@ module Applitools
|
|
32
32
|
def ==(other)
|
33
33
|
if other.is_a? self.class
|
34
34
|
result = true
|
35
|
-
%
|
35
|
+
%w(is_new url steps matches mismatches missing).each do |field|
|
36
36
|
result &&= send(field) == other.send(field)
|
37
37
|
end
|
38
38
|
return result if result
|
@@ -186,15 +186,17 @@ module Applitools::Images
|
|
186
186
|
alias set_viewport_size vp_size=
|
187
187
|
|
188
188
|
def get_image_from_options(options)
|
189
|
-
if options[:image].nil? || !options[:image].is_a?(Applitools::Screenshot)
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
189
|
+
image = if options[:image].nil? || !options[:image].is_a?(Applitools::Screenshot)
|
190
|
+
if options[:image].is_a? ChunkyPNG::Image
|
191
|
+
Applitools::Screenshot.from_image options[:image]
|
192
|
+
elsif !options[:image_path].nil? && !options[:image_path].empty?
|
193
|
+
Applitools::Screenshot.from_datastream ChunkyPNG::Datastream.from_file(options[:image_path]).to_s
|
194
|
+
elsif !options[:image_bytes].nil? && !options[:image_bytes].empty?
|
195
|
+
Applitools::Screenshot.from_datastream options[:image_bytes]
|
196
|
+
end
|
197
|
+
else
|
198
|
+
options[:image]
|
199
|
+
end
|
198
200
|
|
199
201
|
Applitools::ArgumentGuard.not_nil image, 'options[:image] can\'t be nil!'
|
200
202
|
|
@@ -84,8 +84,11 @@ module Applitools::Images
|
|
84
84
|
" screenshot bounds #{bounds}"
|
85
85
|
end
|
86
86
|
|
87
|
-
sub_screenshot_image = Applitools::Screenshot.
|
88
|
-
|
87
|
+
sub_screenshot_image = Applitools::Screenshot.from_any_image(
|
88
|
+
image.crop(
|
89
|
+
sub_screen_region.left, sub_screen_region.top, sub_screen_region.width, sub_screen_region.height
|
90
|
+
).to_datastream.to_blob
|
91
|
+
)
|
89
92
|
|
90
93
|
relative_sub_screenshot_region = convert_region_location(sub_screen_region, SCREENSHOT_AS_IS, CONTEXT_RELATIVE)
|
91
94
|
|
data/lib/applitools/version.rb
CHANGED
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.
|
4
|
+
version: 3.1.1
|
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-
|
11
|
+
date: 2017-04-05 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/hash_extension.rb
|
220
221
|
- lib/applitools/core/helpers.rb
|
221
222
|
- lib/applitools/core/location.rb
|
222
223
|
- lib/applitools/core/match_result.rb
|