eyes_core 5.0.0 → 6.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +504 -0
  3. data/Rakefile +35 -0
  4. data/eyes_core.gemspec +60 -0
  5. data/lib/applitools/core/batch_info.rb +2 -0
  6. data/lib/applitools/core/eyes_base.rb +106 -18
  7. data/lib/applitools/core/eyes_base_configuration.rb +9 -3
  8. data/lib/applitools/core/eyes_runner.rb +3 -2
  9. data/lib/applitools/core/test_results.rb +6 -1
  10. data/lib/applitools/core/universal_eyes_checks.rb +2 -1
  11. data/lib/applitools/core/universal_eyes_open.rb +2 -1
  12. data/lib/applitools/eyes_core/version.rb +10 -0
  13. data/lib/applitools/universal_sdk/universal_client.rb +26 -10
  14. data/lib/applitools/universal_sdk/universal_eyes_config.rb +10 -9
  15. data/lib/eyes_core.rb +1 -3
  16. metadata +14 -58
  17. data/ext/eyes_core/extconf.rb +0 -5
  18. data/ext/eyes_core/eyes_core.c +0 -252
  19. data/ext/eyes_core/eyes_core.h +0 -28
  20. data/lib/applitools/appium/android_region_provider.rb +0 -32
  21. data/lib/applitools/appium/android_screenshot.rb +0 -21
  22. data/lib/applitools/appium/driver.rb +0 -12
  23. data/lib/applitools/appium/eyes.rb +0 -189
  24. data/lib/applitools/appium/ios_region_provider.rb +0 -25
  25. data/lib/applitools/appium/ios_screenshot.rb +0 -10
  26. data/lib/applitools/appium/region_provider.rb +0 -51
  27. data/lib/applitools/appium/screenshot.rb +0 -30
  28. data/lib/applitools/appium/target.rb +0 -240
  29. data/lib/applitools/appium/utils.rb +0 -64
  30. data/lib/applitools/calabash/calabash_element.rb +0 -64
  31. data/lib/applitools/calabash/calabash_screenshot_provider.rb +0 -83
  32. data/lib/applitools/calabash/environment_detector.rb +0 -25
  33. data/lib/applitools/calabash/eyes.rb +0 -194
  34. data/lib/applitools/calabash/eyes_calabash_android_screenshot.rb +0 -68
  35. data/lib/applitools/calabash/eyes_calabash_ios_screenshot.rb +0 -30
  36. data/lib/applitools/calabash/eyes_calabash_screenshot.rb +0 -80
  37. data/lib/applitools/calabash/eyes_hooks.rb +0 -51
  38. data/lib/applitools/calabash/eyes_settings.rb +0 -45
  39. data/lib/applitools/calabash/full_page_capture_algorithm/android_scroll_view.rb +0 -95
  40. data/lib/applitools/calabash/full_page_capture_algorithm/base.rb +0 -51
  41. data/lib/applitools/calabash/full_page_capture_algorithm/ios_ui_table_view.rb +0 -150
  42. data/lib/applitools/calabash/full_page_capture_algorithm.rb +0 -26
  43. data/lib/applitools/calabash/os_versions.rb +0 -25
  44. data/lib/applitools/calabash/rspec_matchers.rb +0 -25
  45. data/lib/applitools/calabash/steps/android_eyes_session.rb +0 -37
  46. data/lib/applitools/calabash/steps/android_matchers.rb +0 -36
  47. data/lib/applitools/calabash/steps/eyes_session.rb +0 -42
  48. data/lib/applitools/calabash/steps/eyes_settings.rb +0 -59
  49. data/lib/applitools/calabash/steps/ios_eyes_session.rb +0 -15
  50. data/lib/applitools/calabash/steps/ios_matchers.rb +0 -17
  51. data/lib/applitools/calabash/steps/matchers.rb +0 -71
  52. data/lib/applitools/calabash/target.rb +0 -69
  53. data/lib/applitools/calabash/utils.rb +0 -74
  54. data/lib/applitools/calabash_steps.rb +0 -16
  55. data/lib/applitools/capybara/capybara_settings.rb +0 -25
  56. data/lib/applitools/capybara/driver.rb +0 -39
  57. data/lib/applitools/rspec/target_matcher.rb +0 -25
  58. data/lib/applitools/universal_sdk/executable_finder.rb +0 -57
  59. data/lib/applitools/universal_sdk/universal_server_control.rb +0 -79
  60. data/lib/applitools/version.rb +0 -8
  61. data/lib/eyes_consts.rb +0 -4
  62. data/lib/eyes_rspec.rb +0 -4
@@ -1,252 +0,0 @@
1
- #include "eyes_core.h"
2
-
3
- void Init_eyes_core() {
4
- VALUE Applitools = rb_define_module("Applitools");
5
- VALUE Resampling = rb_define_module_under(Applitools, "ResamplingFast");
6
- rb_define_method(Resampling, "resampling_first_step", c_resampling_first_step, 2);
7
- };
8
-
9
- VALUE c_resampling_first_step(VALUE self, VALUE dst_dimension_x, VALUE dst_dimension_y) {
10
- PIXEL *source, *destination;
11
- unsigned long int source_width, source_height, c_dst_dimension_x, c_dst_dimension_y, w_m, h_m;
12
- VALUE result_array;
13
-
14
- source_width = NUM2UINT(rb_funcall(self, rb_intern("width"), 0));
15
- source_height = NUM2UINT(rb_funcall(self, rb_intern("height"), 0));
16
-
17
- c_dst_dimension_x = NUM2UINT(dst_dimension_x);
18
- c_dst_dimension_y = NUM2UINT(dst_dimension_y);
19
-
20
- w_m = source_width / c_dst_dimension_x;
21
- h_m = source_height / c_dst_dimension_y;
22
-
23
- if (w_m == 0) {
24
- w_m = 1;
25
- };
26
-
27
- if (h_m == 0) {
28
- h_m = 1;
29
- };
30
-
31
- source = get_c_array(self);
32
-
33
- destination = get_bicubic_points(source, source_width, source_height, c_dst_dimension_x * w_m, c_dst_dimension_y * h_m);
34
-
35
- if (w_m * h_m > 1) {
36
- source = destination;
37
- destination = c_scale_points(source, c_dst_dimension_x, c_dst_dimension_y, w_m, h_m);
38
- }
39
-
40
- result_array = get_ruby_array(self, destination, c_dst_dimension_x * c_dst_dimension_y);
41
- free(destination);
42
- return result_array;
43
- };
44
-
45
- VALUE get_ruby_array(VALUE self, PIXEL *pixels, unsigned long int pixels_size) {
46
- VALUE result_array;
47
- unsigned long int i;
48
- result_array = rb_ary_new2(pixels_size);
49
- for (i=0; i<pixels_size; i++) {
50
- rb_ary_store(result_array, i, UINT2NUM(pixels[i]));
51
- };
52
- return result_array;
53
- }
54
-
55
- PIXEL* get_c_array(VALUE self) {
56
- unsigned long int w,h,i;
57
- PIXEL* ary;
58
- VALUE pixels;
59
-
60
- pixels = rb_funcall(self, rb_intern("pixels"), 0);
61
- w = NUM2UINT(rb_funcall(self, rb_intern("width"), 0));
62
- h = NUM2UINT(rb_funcall(self, rb_intern("height"), 0));
63
- ary = (PIXEL*)malloc( w*h*sizeof(PIXEL));
64
-
65
- for(i=0; i<w*h; i++) {
66
- ary[i] = NUM2UINT(rb_ary_entry(pixels, i));
67
- }
68
-
69
- return ary;
70
- }
71
-
72
- PIXEL raw_interpolate_cubic(double t, PIXEL p0, PIXEL p1, PIXEL p2, PIXEL p3) {
73
- BYTE new_r, new_g, new_b, new_a;
74
-
75
- new_r = interpolate_char(t, R_BYTE(p0), R_BYTE(p1), R_BYTE(p2), R_BYTE(p3));
76
- new_g = interpolate_char(t, G_BYTE(p0), G_BYTE(p1), G_BYTE(p2), G_BYTE(p3));
77
- new_b = interpolate_char(t, B_BYTE(p0), B_BYTE(p1), B_BYTE(p2), B_BYTE(p3));
78
- new_a = interpolate_char(t, A_BYTE(p0), A_BYTE(p1), A_BYTE(p2), A_BYTE(p3));
79
-
80
- return BUILD_PIXEL(new_r, new_g, new_b, new_a);
81
- }
82
-
83
- BYTE interpolate_char(double t, BYTE c0, BYTE c1, BYTE c2, BYTE c3) {
84
- double a, b, c, d, res;
85
- a = - 0.5 * c0 + 1.5 * c1 - 1.5 * c2 + 0.5 * c3;
86
- b = c0 - 2.5 * c1 + 2 * c2 - 0.5 * c3;
87
- c = 0.5 * c2 - 0.5 * c0;
88
- d = c1;
89
- res = a * t * t * t + b * t * t + c * t + d + 0.5;
90
- if(res < 0) {
91
- res = 0;
92
- } else if(res > 255) {
93
- res = 255;
94
- };
95
- return (BYTE)(res);
96
- };
97
-
98
- PIXEL raw_merge_pixels(PIXEL* merge_pixels, unsigned long int size) {
99
- unsigned long int i, real_colors, acum_r, acum_g, acum_b, acum_a;
100
- BYTE new_r, new_g, new_b, new_a;
101
- PIXEL pix;
102
-
103
- acum_r = 0;
104
- acum_g = 0;
105
- acum_b = 0;
106
- acum_a = 0;
107
-
108
- new_r = 0;
109
- new_g = 0;
110
- new_b = 0;
111
- new_a = 0;
112
-
113
- real_colors = 0;
114
-
115
- for(i=0; i < size; i++) {
116
- pix = merge_pixels[i];
117
- if(A_BYTE(pix) != 0) {
118
- acum_r += R_BYTE(pix);
119
- acum_g += G_BYTE(pix);
120
- acum_b += B_BYTE(pix);
121
- acum_a += A_BYTE(pix);
122
- real_colors += 1;
123
- };
124
- };
125
-
126
- if(real_colors > 0) {
127
- new_r = (BYTE)(acum_r/real_colors);
128
- new_g = (BYTE)(acum_g/real_colors);
129
- new_b = (BYTE)(acum_b/real_colors);
130
- };
131
- new_a = (BYTE)(acum_a/size);
132
- return BUILD_PIXEL(new_r, new_g, new_b, new_a);
133
- };
134
-
135
- void setup_steps_residues(unsigned long int *steps, double *residues,
136
- unsigned long int src_dimension, unsigned long int dst_dimension) {
137
- unsigned long int i;
138
- double step = (double) (src_dimension - 1) / (dst_dimension - 1);
139
- for(i = 0; i < dst_dimension - 1; i++) {
140
- steps[i] = (unsigned long int) i*step;
141
- residues[i] = i*step - steps[i];
142
- };
143
-
144
- steps[dst_dimension - 1] = src_dimension - 2;
145
- residues[dst_dimension - 1] = 1;
146
- };
147
-
148
- PIXEL get_line_pixel(PIXEL* source, unsigned long int line, long int pixel,
149
- unsigned long int src_dimension_x) {
150
- if(pixel >= 0 && pixel < (long int)src_dimension_x) {
151
- return source[line * src_dimension_x + pixel];
152
- } else {
153
- return 0;
154
- };
155
- };
156
-
157
- PIXEL get_column_pixel(PIXEL* source,
158
- unsigned long int column, long int pixel,
159
- unsigned long int src_dimension_y, unsigned long int src_dimension_x) {
160
-
161
- if(pixel >=0 && pixel < (long int)src_dimension_y) {
162
- return source[src_dimension_x * pixel + column];
163
- } else {
164
- return 0;
165
- };
166
- };
167
-
168
- PIXEL* get_bicubic_points(PIXEL* source_array,
169
- unsigned long int src_dimension_x, unsigned long int src_dimension_y,
170
- unsigned long int dst_dimension_x, unsigned long int dst_dimension_y) {
171
- PIXEL* dest, *source;
172
- unsigned long int index_y, index, y, x;
173
- unsigned long int* steps;
174
- double* residues;
175
-
176
- steps = (unsigned long int*) malloc(dst_dimension_x * sizeof(unsigned long int));
177
- residues = (double*) malloc(dst_dimension_x * sizeof(double));
178
- setup_steps_residues(steps, residues, src_dimension_x, dst_dimension_x);
179
-
180
- source = source_array;
181
- dest = (PIXEL*)malloc( src_dimension_y*dst_dimension_x*sizeof(PIXEL) );
182
-
183
- for (y=0; y < src_dimension_y; y++) {
184
- index_y = dst_dimension_x * y;
185
- for (x=0; x < dst_dimension_x; x++) {
186
- index = index_y + x;
187
- dest[index] = raw_interpolate_cubic(residues[x],
188
- get_line_pixel(source, y, steps[x] - 1, src_dimension_x),
189
- get_line_pixel(source, y, steps[x], src_dimension_x),
190
- get_line_pixel(source, y, steps[x] + 1, src_dimension_x),
191
- get_line_pixel(source, y, steps[x] + 2, src_dimension_x)
192
- );
193
- };
194
- };
195
-
196
- steps = realloc(steps, dst_dimension_y * sizeof(unsigned long int));
197
- residues = realloc(residues, dst_dimension_y * sizeof(double));
198
- setup_steps_residues(steps, residues, src_dimension_y, dst_dimension_y);
199
-
200
- free(source);
201
- source = dest;
202
- dest = (PIXEL*)malloc( dst_dimension_x * dst_dimension_y * sizeof(PIXEL));
203
-
204
- for (y=0; y < dst_dimension_x; y++) {
205
- for (x=0; x < dst_dimension_y; x++) {
206
- index = dst_dimension_x * x + y;
207
- dest[index] = raw_interpolate_cubic(residues[x],
208
- get_column_pixel(source, y, steps[x] - 1, src_dimension_y, dst_dimension_x),
209
- get_column_pixel(source, y, steps[x], src_dimension_y, dst_dimension_x),
210
- get_column_pixel(source, y, steps[x] + 1, src_dimension_y, dst_dimension_x),
211
- get_column_pixel(source, y, steps[x] + 2, src_dimension_y, dst_dimension_x)
212
- );
213
- };
214
- };
215
-
216
- free(source);
217
- free(steps);
218
- free(residues);
219
-
220
- return dest;
221
- };
222
-
223
- PIXEL* c_scale_points(PIXEL* source, unsigned long int dst_width, unsigned long int dst_height,
224
- unsigned long int w_m, unsigned long int h_m) {
225
-
226
- unsigned long int y_pos, x_pos, index, i, j, x, y, buffer_size, buffer_index;
227
- PIXEL* pixels_to_merge;
228
- PIXEL* result;
229
-
230
- pixels_to_merge = malloc(w_m*h_m*sizeof(PIXEL));
231
- result = malloc(dst_width * dst_height * sizeof(PIXEL));
232
-
233
- buffer_size = h_m * w_m;
234
-
235
- for (i = 0; i < dst_height; i++) {
236
- for (j = 0; j < dst_width; j++) {
237
- buffer_index = 0;
238
- for (y = 0; y < h_m; y++) {
239
- y_pos = i * h_m + y;
240
- for (x = 0; x < w_m; x++) {
241
- x_pos = j * w_m + x;
242
- pixels_to_merge[buffer_index++] = source[dst_width * w_m * y_pos + x_pos];
243
- };
244
- };
245
- index = i * dst_width + j;
246
- result[index] = raw_merge_pixels(pixels_to_merge, buffer_size);
247
-
248
- };
249
- };
250
- free(source);
251
- return result;
252
- };
@@ -1,28 +0,0 @@
1
- #ifndef APPLITOOLS_RESAMPLING_EXT
2
- #define APPLITOOLS_RESAMPLING_EXT
3
- #include "ruby.h"
4
-
5
- typedef uint32_t PIXEL; // Pixels use 32 bits unsigned integers
6
- typedef unsigned char BYTE; // Bytes use 8 bits unsigned integers
7
-
8
- #define R_BYTE(pixel) ((BYTE) (((pixel) & (PIXEL) 0xff000000) >> 24))
9
- #define G_BYTE(pixel) ((BYTE) (((pixel) & (PIXEL) 0x00ff0000) >> 16))
10
- #define B_BYTE(pixel) ((BYTE) (((pixel) & (PIXEL) 0x0000ff00) >> 8))
11
- #define A_BYTE(pixel) ((BYTE) (((pixel) & (PIXEL) 0x000000ff)))
12
-
13
- #define BUILD_PIXEL(r, g, b, a) (((PIXEL) (r) << 24) + ((PIXEL) (g) << 16) + ((PIXEL) (b) << 8) + (PIXEL) (a))
14
- #define INT8_MULTIPLY(a, b) (((((a) * (b) + 0x80) >> 8) + ((a) * (b) + 0x80)) >> 8)
15
-
16
- BYTE interpolate_char(double, BYTE, BYTE, BYTE, BYTE);
17
-
18
- PIXEL* get_bicubic_points(PIXEL*, unsigned long int, unsigned long int, unsigned long int, unsigned long int);
19
-
20
- PIXEL* get_c_array(VALUE);
21
- VALUE c_resampling_first_step(VALUE, VALUE, VALUE);
22
- VALUE get_ruby_array(VALUE, PIXEL*, unsigned long int);
23
- PIXEL get_line_pixel(PIXEL*, unsigned long int, long int, unsigned long int);
24
- PIXEL get_column_pixel(PIXEL*, unsigned long int, long int, unsigned long int, unsigned long int);
25
- PIXEL raw_merge_pixels(PIXEL*, unsigned long int);
26
- PIXEL* c_scale_points(PIXEL*, unsigned long int, unsigned long int, unsigned long int, unsigned long int);
27
-
28
- #endif
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'region_provider'
4
- module Applitools
5
- module Appium
6
- class AndroidRegionProvider < ::Applitools::Appium::RegionProvider
7
- private
8
-
9
- def convert_element_coordinates
10
- Applitools::Region.from_location_size(eye_region.location, eye_region.size)
11
- end
12
-
13
- def convert_viewport_rect_coordinates
14
- region = viewport_rect
15
-
16
- session_info = Applitools::Appium::Utils.session_capabilities(driver)
17
- if session_info['deviceScreenSize']
18
- device_height = session_info['deviceScreenSize'].split('x').last.to_i
19
- system_bars_height = driver.get_system_bars.map {|_,v| v['height'] }.sum
20
- region['height'] = device_height - system_bars_height
21
- end
22
-
23
- Applitools::Region.new(
24
- region['left'],
25
- region['top'],
26
- region['width'],
27
- region['height']
28
- )
29
- end
30
- end
31
- end
32
- end
@@ -1,21 +0,0 @@
1
- require_relative './screenshot.rb'
2
- module Applitools
3
- module Appium
4
- class AndroidScreenshot < Applitools::Appium::Screenshot
5
- def convert_region_location(region, from, to)
6
- # converted_size = region.size.dup.scale_it!(1 / device_pixel_ratio)
7
- # converted_location = region.location.dup.offset_negative(Applitools::Location.new(0, status_bar_height)).scale_it!(1 / device_pixel_ratio)
8
- # Applitools::Region.from_location_size(converted_location, converted_size)
9
- Applitools::Region.from_location_size(
10
- convert_location(region.location, nil, nil),
11
- region.size
12
- ).scale_it!(1.to_f / device_pixel_ratio)
13
- end
14
-
15
- def convert_location(location, _from, _to)
16
- location.offset_negative(Applitools::Location.new(0, status_bar_height))
17
- end
18
-
19
- end
20
- end
21
- end
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Applitools::Appium
4
- class Driver < Applitools::Selenium::Driver
5
- def initialize(eyes, options)
6
- super(eyes, options)
7
- end
8
- module AppiumLib
9
- extend self
10
- end
11
- end
12
- end
@@ -1,189 +0,0 @@
1
- # frozen_string_literal: false
2
-
3
- class Applitools::Appium::Eyes < Applitools::Selenium::SeleniumEyes
4
- attr_accessor :status_bar_height
5
-
6
- def perform_driver_settings_for_appium_driver
7
- self.region_visibility_strategy = Applitools::Selenium::NopRegionVisibilityStrategy.new
8
- self.force_driver_resolution_as_viewport_size = true
9
- end
10
-
11
- def initialize(*args)
12
- super
13
- self.dont_get_title = true
14
- self.runner = Applitools::ClassicRunner.new unless runner
15
- self.base_agent_id = "eyes.appium.ruby/#{Applitools::VERSION}".freeze
16
- self.status_bar_height = 0
17
- self.utils = Applitools::Appium::Utils
18
- end
19
-
20
- private :perform_driver_settings_for_appium_driver
21
-
22
- def check(*args)
23
- args.compact!
24
- case (first_arg = args.shift)
25
- when String
26
- name = first_arg
27
- target = args.shift
28
- when Applitools::Selenium::Target
29
- target = first_arg
30
- when Hash
31
- target = first_arg[:target]
32
- name = first_arg[:name] || first_arg[:tag]
33
- end
34
-
35
- logger.info "check(#{name}) is called"
36
- self.tag_for_debug = name
37
- Applitools::ArgumentGuard.one_of? target, 'target', [Applitools::Selenium::Target, Applitools::Appium::Target]
38
-
39
- # target.fully(false) if target.options[:stitch_content].nil?
40
-
41
- return universal_check(name, target)
42
- return check_native(name, target) if native_app?
43
- super
44
- end
45
-
46
- attr_accessor :eyes_element_to_check, :region_provider
47
- private :eyes_element_to_check, :eyes_element_to_check=, :region_provider, :region_provider=
48
-
49
- def check_native(name, target)
50
- logger.info "check_native(#{name}) is called"
51
- update_scaling_params
52
- target_to_check = target.finalize
53
- match_data = Applitools::MatchWindowData.new(default_match_settings)
54
- match_data.tag = name
55
- timeout = target_to_check.options[:timeout] || USE_DEFAULT_MATCH_TIMEOUT
56
-
57
- eyes_element = target_to_check.region_to_check.call(driver)
58
- self.eyes_element_to_check = eyes_element
59
- region_provider = region_provider_class.new(driver, eyes_element)
60
- match_data.read_target(target_to_check, driver)
61
-
62
- check_window_base(
63
- region_provider, timeout, match_data
64
- )
65
- end
66
-
67
- def native_app?
68
- return true if driver.current_context == 'NATIVE_APP'
69
- false
70
- end
71
-
72
- def capture_screenshot
73
- logger.info 'Getting screenshot (capture_screenshot() has been invoked)'
74
- case eyes_element_to_check
75
- when Applitools::Region
76
- viewport_screenshot
77
- when Selenium::WebDriver::Element, Applitools::Selenium::Element
78
- element_screenshot
79
- end
80
- end
81
-
82
- def get_app_output_with_screenshot(*args)
83
- result = super do |screenshot|
84
- if scale_provider
85
- scaled_image = scale_provider.scale_image(screenshot.image)
86
- self.screenshot = screenshot_class.new(
87
- Applitools::Screenshot.from_image(
88
- case scaled_image
89
- # when ChunkyPNG::Image
90
- # scaled_image
91
- when Applitools::Screenshot::Datastream
92
- scaled_image.image
93
- else
94
- raise Applitools::EyesError.new('Unknown image format after scale!')
95
- end
96
- ),
97
- status_bar_height: self.utils.status_bar_height(driver),
98
- device_pixel_ratio: self.utils.device_pixel_ratio(driver)
99
- )
100
- end
101
- end
102
- self.screenshot_url = nil
103
- result
104
- end
105
-
106
- def dom_data
107
- {}
108
- end
109
-
110
- def check_window(tag = nil, match_timeout = USE_DEFAULT_MATCH_TIMEOUT)
111
- target = Applitools::Appium::Target.window.tap do |t|
112
- t.timeout(match_timeout)
113
- end
114
- check(tag, target)
115
- end
116
-
117
- def check_region(*args)
118
- options = { timeout: USE_DEFAULT_MATCH_TIMEOUT, tag: nil }.merge! Applitools::Utils.extract_options!(args)
119
- target = Applitools::Appium::Target.new.region(*args).timeout(options[:match_timeout])
120
- check(options[:tag], target)
121
- end
122
-
123
- def set_mobile_capabilities(nmg_caps, nml_api_key, eyes_server_url, proxy_settings)
124
- new_caps = {}
125
-
126
- if nml_api_key.nil? || nml_api_key.empty?
127
- nml_api_key = ENV['APPLITOOLS_API_KEY']
128
- if nml_api_key.nil? || nml_api_key.empty?
129
- raise Applitools::EyesError.new('No API key was given, or is an empty string.')
130
- end
131
- end
132
- new_caps[:NML_API_KEY] = nml_api_key
133
-
134
- if eyes_server_url.nil? || eyes_server_url.empty?
135
- eyes_server_url = ENV['APPLITOOLS_SERVER_URL']
136
- end
137
- new_caps[:NML_SERVER_URL] = eyes_server_url if eyes_server_url
138
-
139
- if proxy_settings.nil? || proxy_settings.empty?
140
- proxy_settings = ENV['APPLITOOLS_HTTP_PROXY']
141
- end
142
- new_caps[:NML_PROXY_URL] = proxy_settings if proxy_settings
143
-
144
- nmg_caps[:optionalIntentArguments] = "--es APPLITOOLS '" + new_caps.to_json + "'"
145
- nmg_caps[:processArguments] = {
146
- args: [],
147
- env: new_caps.merge(DYLD_INSERT_LIBRARIES: "@executable_path/Frameworks/UFG_lib.xcframework/ios-arm64/UFG_lib.framework/UFG_lib:@executable_path/Frameworks/UFG_lib.xcframework/ios-arm64_x86_64-simulator/UFG_lib.framework/UFG_lib")
148
- }
149
- end
150
-
151
- alias set_nmg_capabilities set_mobile_capabilities
152
-
153
- def use_system_screenshot(value = true)
154
- self.screenshot_mode = !value ? 'applitools-lib' : 'default'
155
- self
156
- end
157
-
158
- private
159
-
160
- def viewport_screenshot
161
- logger.info 'Viewport screenshot requested...'
162
- obtain_viewport_screenshot
163
- end
164
-
165
- def element_screenshot
166
- logger.info 'Element screenshot requested...'
167
- obtain_viewport_screenshot
168
- end
169
-
170
- def obtain_viewport_screenshot
171
- self.screenshot = screenshot_class.new(
172
- Applitools::Screenshot.from_datastream(driver.screenshot_as(:png)),
173
- status_bar_height: self.utils.status_bar_height(driver),
174
- device_pixel_ratio: self.utils.device_pixel_ratio(driver)
175
- )
176
- end
177
-
178
- def screenshot_class
179
- return Applitools::Appium::IosScreenshot if self.utils.ios?(Applitools::Appium::Driver::AppiumLib)
180
- return Applitools::Appium::AndroidScreenshot if self.utils.android?(Applitools::Appium::Driver::AppiumLib)
181
- raise Applitools::EyesError, 'Unknown device type'
182
- end
183
-
184
- def region_provider_class
185
- return Applitools::Appium::IosRegionProvider if self.utils.ios?(Applitools::Appium::Driver::AppiumLib)
186
- return Applitools::Appium::AndroidRegionProvider if self.utils.android?(Applitools::Appium::Driver::AppiumLib)
187
- raise Applitools::EyesError, 'Unknown device type'
188
- end
189
- end
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
- #
3
- require_relative 'region_provider'
4
- module Applitools
5
- module Appium
6
- class IosRegionProvider < ::Applitools::Appium::RegionProvider
7
- private
8
-
9
- def convert_element_coordinates
10
- Applitools::Region.from_location_size(eye_region.location, eye_region.size).
11
- scale_it!(scale_factor)
12
- end
13
-
14
- def convert_viewport_rect_coordinates
15
- region = viewport_rect
16
- Applitools::Region.new(
17
- region['left'],
18
- region['top'],
19
- region['width'],
20
- region['height']
21
- )
22
- end
23
- end
24
- end
25
- end
@@ -1,10 +0,0 @@
1
- require_relative './screenshot.rb'
2
- module Applitools
3
- module Appium
4
- class IosScreenshot < Applitools::Appium::Screenshot
5
- def convert_location(location, _from, _to)
6
- location.offset_negative(Applitools::Location.new(0, status_bar_height))
7
- end
8
- end
9
- end
10
- end
@@ -1,51 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Applitools
4
- module Appium
5
- class RegionProvider
6
- attr_accessor :driver, :eye_region, :region_to_check
7
-
8
- def initialize(driver, eye_region)
9
- self.driver = driver
10
- self.eye_region = eye_region
11
- self.region_to_check = Applitools::Region::EMPTY
12
- convert_region_coordinates
13
- end
14
-
15
- def region
16
- region_to_check
17
- end
18
-
19
- def coordinate_type
20
- nil
21
- end
22
-
23
- private
24
-
25
- def viewport_rect
26
- Applitools::Appium::Utils.viewport_rect(driver)
27
- end
28
-
29
- def convert_region_coordinates
30
- self.region_to_check = case eye_region
31
- when ::Selenium::WebDriver::Element, Applitools::Selenium::Element
32
- convert_element_coordinates
33
- else
34
- convert_viewport_rect_coordinates
35
- end
36
- end
37
-
38
- def convert_element_coordinates
39
- raise Applitools::AbstractMethodCalled.new(:convert_region_coordinates, 'Applitools::Appium::RegionProvider')
40
- end
41
-
42
- def convert_viewport_rect_coordinates
43
- raise Applitools::AbstractMethodCalled.new(:convert_viewport_rect_coordinates, 'Applitools::Appium::RegionProvider')
44
- end
45
-
46
- def scale_factor
47
- Applitools::Appium::Utils.device_pixel_ratio(driver)
48
- end
49
- end
50
- end
51
- end
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Applitools
4
- module Appium
5
- class Screenshot < Applitools::EyesScreenshot
6
-
7
- attr_reader :status_bar_height, :device_pixel_ratio
8
-
9
- def initialize(*args)
10
- options = Applitools::Utils.extract_options!(args)
11
- @status_bar_height = options[:status_bar_height] || 0
12
- @device_pixel_ratio = options[:device_pixel_ratio] || 1
13
- super
14
- end
15
-
16
- def sub_screenshot(region, _coordinate_type, _throw_if_clipped = false, _force_nil_if_clipped = false)
17
- self.class.new(
18
- Applitools::Screenshot.from_image(
19
- image.crop(region.x, region.y, region.width, region.height)
20
- )
21
- )
22
- end
23
-
24
- def convert_location(location, _from, _to)
25
- raise 'Applitools::Appium::Screenshot is an abstract class.' \
26
- ' You should implement :convert_location method in a descendant class.'
27
- end
28
- end
29
- end
30
- end