eyes_core 3.18.4 → 4.0.0
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/lib/applitools/appium/eyes.rb +1 -0
- data/lib/applitools/appium/target.rb +218 -193
- data/lib/applitools/connectivity/proxy.rb +11 -3
- data/lib/applitools/connectivity/server_connector.rb +2 -1
- data/lib/applitools/core/accessibility_level.rb +11 -0
- data/lib/applitools/core/batch_info.rb +24 -2
- data/lib/applitools/core/classic_runner.rb +8 -1
- data/lib/applitools/core/eyes_base.rb +80 -28
- data/lib/applitools/core/eyes_base_configuration.rb +22 -1
- data/lib/applitools/core/eyes_runner.rb +12 -0
- data/lib/applitools/core/floating_region.rb +17 -8
- data/lib/applitools/core/image_match_settings.rb +54 -0
- data/lib/applitools/core/match_level.rb +3 -1
- data/lib/applitools/core/test_results.rb +2 -2
- data/lib/applitools/core/universal_eyes_checks.rb +66 -0
- data/lib/applitools/core/universal_eyes_open.rb +100 -0
- data/lib/applitools/core/universal_new_api.rb +43 -0
- data/lib/applitools/universal_sdk/universal_check_settings.rb +184 -0
- data/lib/applitools/universal_sdk/universal_client.rb +142 -0
- data/lib/applitools/universal_sdk/universal_client_socket.rb +110 -0
- data/lib/applitools/universal_sdk/universal_eyes.rb +45 -0
- data/lib/applitools/universal_sdk/universal_eyes_config.rb +203 -0
- data/lib/applitools/universal_sdk/universal_eyes_manager.rb +40 -0
- data/lib/applitools/universal_sdk/universal_eyes_manager_config.rb +62 -0
- data/lib/applitools/universal_sdk/universal_server.rb +81 -0
- data/lib/applitools/utils/utils.rb +13 -0
- data/lib/applitools/version.rb +2 -1
- data/lib/eyes_core.rb +3 -0
- metadata +69 -2
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# require_relative 'universal_eyes'
|
4
|
+
|
5
|
+
module Applitools
|
6
|
+
class UniversalEyesManager
|
7
|
+
|
8
|
+
extend Forwardable
|
9
|
+
def_delegators 'Applitools::EyesLogger', :logger
|
10
|
+
|
11
|
+
def initialize(manager, universal_client)
|
12
|
+
@manager = manager
|
13
|
+
@universal_client = universal_client
|
14
|
+
end
|
15
|
+
|
16
|
+
def open_eyes(driver_config_json, config)
|
17
|
+
# Applitools::EyesLogger.logger.debug "Driver: #{driver_config_json}"
|
18
|
+
# Applitools::EyesLogger.logger.debug "open config: #{config}"
|
19
|
+
|
20
|
+
@eyes = @universal_client.eyes_manager_make_eyes(@manager, driver_config_json, config)
|
21
|
+
|
22
|
+
if @eyes[:message] && @eyes[:stack]
|
23
|
+
Applitools::EyesLogger.logger.debug "Eyes not opened: #{@eyes[:message]}"
|
24
|
+
Applitools::EyesLogger.logger.debug "Stack for #{Applitools::Connectivity::UniversalClient::EYES_MANAGER_MAKE_EYES} : #{@eyes[:stack]}"
|
25
|
+
return nil
|
26
|
+
end
|
27
|
+
|
28
|
+
Applitools::EyesLogger.logger.debug "Eyes applitools-ref-id: #{@eyes[:"applitools-ref-id"]}"
|
29
|
+
# U-Notes : !!! Eyes.new
|
30
|
+
Applitools::UniversalEyes.new(@eyes, @universal_client)
|
31
|
+
end
|
32
|
+
|
33
|
+
def close_all_eyes
|
34
|
+
@universal_client.eyes_manager_close_all_eyes(@manager)
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
# U-Notes : Added internal Applitools::UniversalEyesManager
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Applitools
|
4
|
+
class UniversalEyesManagerConfig
|
5
|
+
|
6
|
+
def self.classic
|
7
|
+
new(type: CLASSIC)
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.vg(concurrent_open_sessions=1)
|
11
|
+
new(type: VG, concurrency: concurrent_open_sessions, legacy: false)
|
12
|
+
end
|
13
|
+
|
14
|
+
# export type EyesManagerConfig<TType extends 'vg' | 'classic' = 'vg' | 'classic'> = {
|
15
|
+
# type: TType
|
16
|
+
# concurrency?: TType extends 'vg' ? number : never
|
17
|
+
# legacy?: TType extends 'vg' ? boolean : never
|
18
|
+
# }
|
19
|
+
attr_reader :type, :concurrency, :legacy
|
20
|
+
|
21
|
+
VG = 'vg'.freeze
|
22
|
+
CLASSIC = 'classic'.freeze
|
23
|
+
def type_enum_values
|
24
|
+
[VG, CLASSIC]
|
25
|
+
end
|
26
|
+
|
27
|
+
def initialize(*args)
|
28
|
+
options = Applitools::Utils.extract_options!(args)
|
29
|
+
self.type = options[:type].to_s
|
30
|
+
self.concurrency = options[:concurrency]
|
31
|
+
self.legacy = options[:legacy]
|
32
|
+
end
|
33
|
+
|
34
|
+
# enum_field :type, Applitools::UniversalEyesManagerConfig.type_enum_values
|
35
|
+
def type=(value)
|
36
|
+
available_values_array = type_enum_values
|
37
|
+
unless available_values_array.include? value
|
38
|
+
msg = "Unknown type #{value}. Allowed type values: #{available_values_array.join(', ')}"
|
39
|
+
raise(Applitools::EyesIllegalArgument, msg)
|
40
|
+
end
|
41
|
+
@type = value
|
42
|
+
end
|
43
|
+
|
44
|
+
def concurrency=(value)
|
45
|
+
@concurrency = value.to_i if type == VG
|
46
|
+
end
|
47
|
+
|
48
|
+
def legacy=(value)
|
49
|
+
@legacy = !!value if type == VG
|
50
|
+
end
|
51
|
+
|
52
|
+
def to_hash
|
53
|
+
result = {}
|
54
|
+
result[:type] = type
|
55
|
+
result[:concurrency] = concurrency if concurrency
|
56
|
+
result[:legacy] = legacy if legacy
|
57
|
+
result.compact
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
end
|
62
|
+
# U-Notes : Added internal Applitools::UniversalEyesManagerConfig
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'open-uri'
|
4
|
+
require 'digest'
|
5
|
+
require 'fileutils'
|
6
|
+
|
7
|
+
module Applitools::Connectivity
|
8
|
+
module UniversalServer
|
9
|
+
extend self
|
10
|
+
|
11
|
+
DEFAULT_SERVER_IP = '127.0.0.1'
|
12
|
+
DEFAULT_SERVER_PORT = 21077
|
13
|
+
|
14
|
+
def run
|
15
|
+
raise 'Universal server unrecognized' unless find_server_file?
|
16
|
+
pid = spawn(filepath, '--singleton --lazy', [:out, :err] => ["log", 'w'])
|
17
|
+
Process.detach(pid)
|
18
|
+
end
|
19
|
+
|
20
|
+
def confirm_is_up(ip, port, attempt = 1)
|
21
|
+
raise 'Universal server unavailable' if (attempt === 16)
|
22
|
+
begin
|
23
|
+
TCPSocket.new(ip, port)
|
24
|
+
rescue Errno::ECONNREFUSED
|
25
|
+
sleep 1
|
26
|
+
confirm_is_up(ip, port, attempt + 1)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def check_or_run(ip = DEFAULT_SERVER_IP, port = DEFAULT_SERVER_PORT)
|
31
|
+
server_uri = "#{ip}:#{port}"
|
32
|
+
socket_uri = "ws://#{server_uri}/eyes"
|
33
|
+
begin
|
34
|
+
TCPSocket.new(ip, port)
|
35
|
+
msg = "Connect to #{server_uri}"
|
36
|
+
rescue Errno::ECONNREFUSED
|
37
|
+
run
|
38
|
+
confirm_is_up(ip, port)
|
39
|
+
msg = "Connect to #{server_libname} : #{filename}"
|
40
|
+
end
|
41
|
+
|
42
|
+
Applitools::EyesLogger.logger.debug(msg) if ENV['APPLITOOLS_SHOW_LOGS']
|
43
|
+
socket_uri
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def filename
|
49
|
+
case RUBY_PLATFORM
|
50
|
+
when /mswin|windows/i
|
51
|
+
'eyes-universal-win.exe'
|
52
|
+
when /linux|arch/i
|
53
|
+
'eyes-universal-linux'
|
54
|
+
when /darwin/i
|
55
|
+
'eyes-universal-macos'
|
56
|
+
else
|
57
|
+
raise 'Unsupported platform'
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def server_libname
|
62
|
+
'eyes_universal'
|
63
|
+
end
|
64
|
+
|
65
|
+
def server_lib
|
66
|
+
Gem::Specification.find_by_name(server_libname)
|
67
|
+
rescue Gem::MissingSpecError
|
68
|
+
nil
|
69
|
+
end
|
70
|
+
|
71
|
+
def filepath
|
72
|
+
server_lib ? File.join(server_lib.gem_dir, 'ext', 'eyes-universal', filename) : ''
|
73
|
+
end
|
74
|
+
|
75
|
+
def find_server_file?
|
76
|
+
File.exist?(filepath) && File.executable?(filepath)
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
end
|
81
|
+
# U-Notes : Added internal Applitools::Connectivity::UniversalServer
|
@@ -84,6 +84,19 @@ module Applitools::Utils
|
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
87
|
+
def deep_stringify_keys(value)
|
88
|
+
case value
|
89
|
+
when Hash
|
90
|
+
value.each_with_object({}) do |(key, val), result|
|
91
|
+
result[key.to_s] = deep_stringify_keys(val)
|
92
|
+
end
|
93
|
+
when Array
|
94
|
+
value.map { |e| deep_stringify_keys(e) }
|
95
|
+
else
|
96
|
+
value
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
87
100
|
private
|
88
101
|
|
89
102
|
def convert_hash_keys(value, method)
|
data/lib/applitools/version.rb
CHANGED
data/lib/eyes_core.rb
CHANGED
@@ -31,6 +31,8 @@ module Applitools
|
|
31
31
|
# @!visibility private
|
32
32
|
class UnknownNetworkStackError < EyesError; end
|
33
33
|
|
34
|
+
class NotUniversalServerRequestError < EyesError; end
|
35
|
+
|
34
36
|
# @!visibility private
|
35
37
|
class AbstractMethodCalled < EyesError
|
36
38
|
attr_accessor :method_name, :object
|
@@ -68,5 +70,6 @@ require_relative 'applitools/chunky_png_patch'
|
|
68
70
|
Applitools.require_dir 'utils'
|
69
71
|
Applitools.require_dir 'core'
|
70
72
|
Applitools.require_dir 'connectivity'
|
73
|
+
Applitools.require_dir 'universal_sdk'
|
71
74
|
|
72
75
|
require_relative 'applitools/eyes_logger'
|
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:
|
4
|
+
version: 4.0.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:
|
11
|
+
date: 2022-01-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: oily_png
|
@@ -94,6 +94,62 @@ dependencies:
|
|
94
94
|
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: colorize
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: faye-websocket
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: eventmachine
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: eyes_universal
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: 1.0.6
|
146
|
+
type: :runtime
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: 1.0.6
|
97
153
|
- !ruby/object:Gem::Dependency
|
98
154
|
name: bundler
|
99
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -352,11 +408,22 @@ files:
|
|
352
408
|
- lib/applitools/core/test_results.rb
|
353
409
|
- lib/applitools/core/text_trigger.rb
|
354
410
|
- lib/applitools/core/trigger.rb
|
411
|
+
- lib/applitools/core/universal_eyes_checks.rb
|
412
|
+
- lib/applitools/core/universal_eyes_open.rb
|
413
|
+
- lib/applitools/core/universal_new_api.rb
|
355
414
|
- lib/applitools/extensions.rb
|
356
415
|
- lib/applitools/eyes_logger.rb
|
357
416
|
- lib/applitools/method_tracer.rb
|
358
417
|
- lib/applitools/rspec/target_matcher.rb
|
359
418
|
- lib/applitools/sauce.rb
|
419
|
+
- lib/applitools/universal_sdk/universal_check_settings.rb
|
420
|
+
- lib/applitools/universal_sdk/universal_client.rb
|
421
|
+
- lib/applitools/universal_sdk/universal_client_socket.rb
|
422
|
+
- lib/applitools/universal_sdk/universal_eyes.rb
|
423
|
+
- lib/applitools/universal_sdk/universal_eyes_config.rb
|
424
|
+
- lib/applitools/universal_sdk/universal_eyes_manager.rb
|
425
|
+
- lib/applitools/universal_sdk/universal_eyes_manager_config.rb
|
426
|
+
- lib/applitools/universal_sdk/universal_server.rb
|
360
427
|
- lib/applitools/utils/eyes_selenium_utils.rb
|
361
428
|
- lib/applitools/utils/image_delta_compressor.rb
|
362
429
|
- lib/applitools/utils/image_utils.rb
|