eyes_core 5.0.0 → 6.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +508 -0
- data/Rakefile +35 -0
- data/eyes_core.gemspec +60 -0
- data/lib/applitools/core/batch_info.rb +2 -0
- data/lib/applitools/core/eyes_base.rb +106 -18
- data/lib/applitools/core/eyes_base_configuration.rb +9 -3
- data/lib/applitools/core/eyes_runner.rb +3 -2
- data/lib/applitools/core/test_results.rb +6 -1
- data/lib/applitools/core/universal_eyes_checks.rb +2 -1
- data/lib/applitools/core/universal_eyes_open.rb +2 -1
- data/lib/applitools/eyes_core/version.rb +10 -0
- data/lib/applitools/universal_sdk/universal_client.rb +26 -10
- data/lib/applitools/universal_sdk/universal_eyes_config.rb +10 -9
- data/lib/eyes_core.rb +2 -3
- metadata +14 -58
- data/ext/eyes_core/extconf.rb +0 -5
- data/ext/eyes_core/eyes_core.c +0 -252
- data/ext/eyes_core/eyes_core.h +0 -28
- data/lib/applitools/appium/android_region_provider.rb +0 -32
- data/lib/applitools/appium/android_screenshot.rb +0 -21
- data/lib/applitools/appium/driver.rb +0 -12
- data/lib/applitools/appium/eyes.rb +0 -189
- data/lib/applitools/appium/ios_region_provider.rb +0 -25
- data/lib/applitools/appium/ios_screenshot.rb +0 -10
- data/lib/applitools/appium/region_provider.rb +0 -51
- data/lib/applitools/appium/screenshot.rb +0 -30
- data/lib/applitools/appium/target.rb +0 -240
- data/lib/applitools/appium/utils.rb +0 -64
- data/lib/applitools/calabash/calabash_element.rb +0 -64
- data/lib/applitools/calabash/calabash_screenshot_provider.rb +0 -83
- data/lib/applitools/calabash/environment_detector.rb +0 -25
- data/lib/applitools/calabash/eyes.rb +0 -194
- data/lib/applitools/calabash/eyes_calabash_android_screenshot.rb +0 -68
- data/lib/applitools/calabash/eyes_calabash_ios_screenshot.rb +0 -30
- data/lib/applitools/calabash/eyes_calabash_screenshot.rb +0 -80
- data/lib/applitools/calabash/eyes_hooks.rb +0 -51
- data/lib/applitools/calabash/eyes_settings.rb +0 -45
- data/lib/applitools/calabash/full_page_capture_algorithm/android_scroll_view.rb +0 -95
- data/lib/applitools/calabash/full_page_capture_algorithm/base.rb +0 -51
- data/lib/applitools/calabash/full_page_capture_algorithm/ios_ui_table_view.rb +0 -150
- data/lib/applitools/calabash/full_page_capture_algorithm.rb +0 -26
- data/lib/applitools/calabash/os_versions.rb +0 -25
- data/lib/applitools/calabash/rspec_matchers.rb +0 -25
- data/lib/applitools/calabash/steps/android_eyes_session.rb +0 -37
- data/lib/applitools/calabash/steps/android_matchers.rb +0 -36
- data/lib/applitools/calabash/steps/eyes_session.rb +0 -42
- data/lib/applitools/calabash/steps/eyes_settings.rb +0 -59
- data/lib/applitools/calabash/steps/ios_eyes_session.rb +0 -15
- data/lib/applitools/calabash/steps/ios_matchers.rb +0 -17
- data/lib/applitools/calabash/steps/matchers.rb +0 -71
- data/lib/applitools/calabash/target.rb +0 -69
- data/lib/applitools/calabash/utils.rb +0 -74
- data/lib/applitools/calabash_steps.rb +0 -16
- data/lib/applitools/capybara/capybara_settings.rb +0 -25
- data/lib/applitools/capybara/driver.rb +0 -39
- data/lib/applitools/rspec/target_matcher.rb +0 -25
- data/lib/applitools/universal_sdk/executable_finder.rb +0 -57
- data/lib/applitools/universal_sdk/universal_server_control.rb +0 -79
- data/lib/applitools/version.rb +0 -8
- data/lib/eyes_consts.rb +0 -4
- data/lib/eyes_rspec.rb +0 -4
@@ -1,36 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
Then(/^ignore status bar$/) do
|
4
|
-
raise Applitools::EyesError, '@target is not set' unless @target
|
5
|
-
step %(query element "view id:'statusBarBackground'")
|
6
|
-
@target.ignore @current_element if @current_element
|
7
|
-
end
|
8
|
-
|
9
|
-
Then(/^remove status bar$/) do
|
10
|
-
raise Applitools::EyesError, '@target is not set' unless @target
|
11
|
-
step %(query element "view id:'statusBarBackground'")
|
12
|
-
if @current_element
|
13
|
-
viewport_size = Applitools::RectangleSize.from_any_argument(
|
14
|
-
Applitools::Calabash::EyesSettings.instance.viewport_size
|
15
|
-
)
|
16
|
-
region_location = Applitools::Location.new(0, @current_element.size.height)
|
17
|
-
@target.region(Applitools::Region.from_location_size(region_location, viewport_size))
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
Then(/^the whole screen should match a baseline/) do
|
22
|
-
step %(create target)
|
23
|
-
step %(remove status bar)
|
24
|
-
step %(target should match a baseline)
|
25
|
-
end
|
26
|
-
|
27
|
-
Then(/^query element "([^"]*)" and take (\d+)$/) do |query, index|
|
28
|
-
@current_element = nil
|
29
|
-
@current_element = Applitools::Calabash::Utils.get_android_element(self, query, index)
|
30
|
-
end
|
31
|
-
|
32
|
-
Then(/^check for scrollable$/) do
|
33
|
-
unless query('ScrollView').empty?
|
34
|
-
@present_scrollable = Applitools::Calabash::Utils.get_android_element(self, 'ScrollView', 0)
|
35
|
-
end
|
36
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
Then(/^create eyes$/) do
|
4
|
-
eyes_settings = Applitools::Calabash::EyesSettings.instance
|
5
|
-
eyes_settings.eyes ||= Applitools::Calabash::Eyes.new.tap do |eyes|
|
6
|
-
eyes.api_key = eyes_settings.applitools_api_key
|
7
|
-
log_file_path = File.join(eyes_settings.log_prefix, eyes_settings.log_file)
|
8
|
-
eyes.log_handler = Logger.new(File.new(log_file_path, 'w+'))
|
9
|
-
end
|
10
|
-
|
11
|
-
unless eyes_settings.eyes.open?
|
12
|
-
step %(set batch "#{@before_hook_scenario.feature.name}")
|
13
|
-
step %(set OS)
|
14
|
-
step %(set device pixel ratio)
|
15
|
-
step %(set device size)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
Then(/^open eyes$/) do
|
20
|
-
eyes_settings = Applitools::Calabash::EyesSettings.instance
|
21
|
-
eyes_settings.eyes.open eyes_settings.options_for_open unless eyes_settings.eyes.open?
|
22
|
-
end
|
23
|
-
|
24
|
-
When(/^I close eyes session$/) do
|
25
|
-
@test_result = Applitools::Calabash::EyesSettings.instance.eyes.close(false)
|
26
|
-
end
|
27
|
-
|
28
|
-
Then(/^test result should be positive$/) do
|
29
|
-
raise Applitools::EyesError, 'Test result are not present!' unless @test_result
|
30
|
-
expect(@test_result).to be_success
|
31
|
-
end
|
32
|
-
|
33
|
-
Then(/^applitools link should be reported$/) do
|
34
|
-
puts @test_result
|
35
|
-
end
|
36
|
-
|
37
|
-
Then(/^terminate eyes session$/) do
|
38
|
-
step %(I close eyes session)
|
39
|
-
step %(test result should be positive)
|
40
|
-
step %(applitools link should be reported)
|
41
|
-
@test_results = nil
|
42
|
-
end
|
@@ -1,59 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
Given(/^eyes application name is "([^"]*)"$/) do |name|
|
4
|
-
Applitools::Calabash::EyesSettings.instance.app_name = name
|
5
|
-
end
|
6
|
-
|
7
|
-
Given(/^eyes test name is "([^"]*)"$/) do |name|
|
8
|
-
Applitools::Calabash::EyesSettings.instance.test_name = name
|
9
|
-
end
|
10
|
-
|
11
|
-
Given(/^eyes viewport size is "([^"]*)"$/) do |size|
|
12
|
-
Applitools::Calabash::EyesSettings.instance.viewport_size = Applitools::RectangleSize.from_any_argument(size)
|
13
|
-
end
|
14
|
-
|
15
|
-
Given(/^eyes API key "([^"]*)"$/) do |key|
|
16
|
-
Applitools::Calabash::EyesSettings.instance.applitools_api_key = key
|
17
|
-
end
|
18
|
-
|
19
|
-
Given(/^eyes tag is "([^"]*)"$/) do |tag|
|
20
|
-
@tag = tag
|
21
|
-
end
|
22
|
-
|
23
|
-
Given(/^set batch "([^"]*)"/) do |name|
|
24
|
-
@current_batch ||= Applitools::Calabash::EyesSettings.instance.eyes.batch.tap do |batch|
|
25
|
-
batch.name = name
|
26
|
-
end
|
27
|
-
|
28
|
-
Applitools::Calabash::EyesSettings.instance.eyes.batch = @current_batch
|
29
|
-
end
|
30
|
-
|
31
|
-
Given(/^calabash screenshot dir is "([^"]*)"$/) do |path|
|
32
|
-
Applitools::Calabash::EyesSettings.instance.screenshot_dir = path
|
33
|
-
end
|
34
|
-
|
35
|
-
Given(/^calabash temp dir is "([^"]*)"$/) do |path|
|
36
|
-
Applitools::Calabash::EyesSettings.instance.tmp_dir = path
|
37
|
-
end
|
38
|
-
|
39
|
-
Given(/^calabash log path is "([^"]*)"$/) do |path|
|
40
|
-
Applitools::Calabash::EyesSettings.instance.log_dir = path
|
41
|
-
end
|
42
|
-
|
43
|
-
Given(/^eyes logfile is "([^"]*)"$/) do |logfile_path|
|
44
|
-
Applitools::Calabash::EyesSettings.instance.log_file = logfile_path
|
45
|
-
end
|
46
|
-
|
47
|
-
Given(/^clear directories$/) do
|
48
|
-
Applitools::Calabash::Utils.clear_directories(Applitools::Calabash::EyesSettings.instance)
|
49
|
-
end
|
50
|
-
|
51
|
-
Given(/^create directories$/) do
|
52
|
-
Applitools::Calabash::Utils.create_directories(Applitools::Calabash::EyesSettings.instance)
|
53
|
-
end
|
54
|
-
|
55
|
-
Given(/^set it up$/) do
|
56
|
-
step %(clear directories)
|
57
|
-
step %(create directories)
|
58
|
-
Applitools::Calabash::EyesSettings.instance.needs_setting_up = false
|
59
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
Then(/^set OS$/) do
|
4
|
-
Applitools::Calabash::EyesSettings.instance.eyes.host_os = "iOS #{default_device.ios_major_version}"
|
5
|
-
end
|
6
|
-
|
7
|
-
Then(/^set device pixel ratio$/) do
|
8
|
-
dimensions = default_device.screen_dimensions
|
9
|
-
Applitools::Calabash::EyesSettings.instance.eyes.device_pixel_ratio = dimensions[:scale] #:native_scale?
|
10
|
-
end
|
11
|
-
|
12
|
-
Then(/^set device size$/) do
|
13
|
-
dimensions = default_device.screen_dimensions
|
14
|
-
step %(eyes viewport size is "#{dimensions[:width].to_i}x#{dimensions[:height].to_i}")
|
15
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
Then(/^the whole screen should match a baseline/) do
|
4
|
-
step %(create target)
|
5
|
-
step %(target should match a baseline)
|
6
|
-
end
|
7
|
-
|
8
|
-
Then(/^query element "([^"]*)" and take (\d+)$/) do |query, index|
|
9
|
-
@current_element = nil
|
10
|
-
@current_element = Applitools::Calabash::Utils.get_ios_element(self, query, index)
|
11
|
-
end
|
12
|
-
|
13
|
-
Then(/^check for scrollable$/) do
|
14
|
-
unless query('UIScrollView').empty?
|
15
|
-
@present_scrollable = Applitools::Calabash::Utils.get_ios_element(self, 'UIScrollView', 0)
|
16
|
-
end
|
17
|
-
end
|
@@ -1,71 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
Then(/^create target$/) do
|
4
|
-
@target = nil
|
5
|
-
@target = Applitools::Calabash::Target.new
|
6
|
-
end
|
7
|
-
|
8
|
-
Then(/^target should match a baseline$/) do
|
9
|
-
raise Applitools::EyesError, '@target is not set' unless @target
|
10
|
-
@tag ||= ''
|
11
|
-
expect(@target).to match_baseline(@tag)
|
12
|
-
end
|
13
|
-
|
14
|
-
Then(/^the element "([^"]*)" should match a baseline$/) do |query|
|
15
|
-
step %(create target)
|
16
|
-
step %(query element "#{query}")
|
17
|
-
@target.region(@current_element) if @current_element
|
18
|
-
step %(target should match a baseline)
|
19
|
-
end
|
20
|
-
|
21
|
-
Then(/^the entire element "([^"]*)" should match a baseline$/) do |query|
|
22
|
-
step %(create target)
|
23
|
-
step %(query element "#{query}")
|
24
|
-
@target.region(@current_element).fully if @current_element
|
25
|
-
step %(target should match a baseline)
|
26
|
-
end
|
27
|
-
|
28
|
-
Then(/^query element "([^"]*)"$/) do |query|
|
29
|
-
step %(query element "#{query}" and take 0)
|
30
|
-
end
|
31
|
-
|
32
|
-
Then(/^I check viewport window$/) do
|
33
|
-
step %(the whole screen should match a baseline)
|
34
|
-
end
|
35
|
-
|
36
|
-
Then(/^I check viewport window with description "([^"]*)"$/) do |description|
|
37
|
-
step %(eyes tag is "#{description}")
|
38
|
-
step %(I check viewport window)
|
39
|
-
end
|
40
|
-
|
41
|
-
Then(/^I check window$/) do
|
42
|
-
step %(check for scrollable)
|
43
|
-
if @present_scrollable
|
44
|
-
step %(the entire element "#{@present_scrollable.element_query}" should match a baseline)
|
45
|
-
else
|
46
|
-
step %(I check viewport window)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
Then(/^I check window with description "([^"]*)"$/) do |description|
|
51
|
-
step %(eyes tag is "#{description}")
|
52
|
-
step %(I check window)
|
53
|
-
end
|
54
|
-
|
55
|
-
Then(/^I check viewport element "([^"]*)"$/) do |selector|
|
56
|
-
step %(the element "#{selector}" should match a baseline)
|
57
|
-
end
|
58
|
-
|
59
|
-
Then(/^I check viewport element "([^"]*)" with description "([^"]*)"$/) do |selector, description|
|
60
|
-
step %(eyes tag is "#{description}")
|
61
|
-
step %(I check viewport element "#{selector}")
|
62
|
-
end
|
63
|
-
|
64
|
-
Then(/^I check element "([^"]*)"$/) do |selector|
|
65
|
-
step %(the entire element "#{selector}" should match a baseline)
|
66
|
-
end
|
67
|
-
|
68
|
-
Then(/^I check element "([^"]*)" with description "([^"]*)"$/) do |selector, description|
|
69
|
-
step %(eyes tag is "#{description}")
|
70
|
-
step %(I check element "#{selector}")
|
71
|
-
end
|
@@ -1,69 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Applitools
|
4
|
-
module Calabash
|
5
|
-
class Target
|
6
|
-
include Applitools::FluentInterface
|
7
|
-
|
8
|
-
attr_accessor :options, :ignored_regions, :region_to_check, :floating_regions
|
9
|
-
|
10
|
-
def initialize
|
11
|
-
self.ignored_regions = []
|
12
|
-
self.floating_regions = []
|
13
|
-
self.options = {
|
14
|
-
trim: false
|
15
|
-
}
|
16
|
-
end
|
17
|
-
|
18
|
-
def fully
|
19
|
-
options[:stitch_content] = true
|
20
|
-
self
|
21
|
-
end
|
22
|
-
|
23
|
-
def ignore(region = nil)
|
24
|
-
if region
|
25
|
-
Applitools::ArgumentGuard.is_a? region, 'region', Applitools::Calabash::CalabashElement
|
26
|
-
ignored_regions << region.region
|
27
|
-
else
|
28
|
-
self.ignored_regions = []
|
29
|
-
end
|
30
|
-
self
|
31
|
-
end
|
32
|
-
|
33
|
-
def region(region = nil)
|
34
|
-
if region
|
35
|
-
case region
|
36
|
-
when Applitools::Calabash::CalabashElement, Applitools::Region
|
37
|
-
self.region_to_check = region
|
38
|
-
else
|
39
|
-
self.region_to_check = nil
|
40
|
-
raise(
|
41
|
-
Applitools::EyesIllegalArgument,
|
42
|
-
'Expected region to be instance of Applitools::Calabash::CalabashElement or Applitools::Region'
|
43
|
-
)
|
44
|
-
end
|
45
|
-
else
|
46
|
-
self.region_to_check = nil
|
47
|
-
end
|
48
|
-
self
|
49
|
-
end
|
50
|
-
|
51
|
-
# def floating(*args)
|
52
|
-
# value = case args.first
|
53
|
-
# when Applitools::FloatingRegion
|
54
|
-
# proc { args.first.scale_it!(scale_factor) }
|
55
|
-
# when Applitools::Region
|
56
|
-
# proc do
|
57
|
-
# region = args.shift
|
58
|
-
# region.scale_it!(scale_factor)
|
59
|
-
# Applitools::FloatingRegion.new region.left, region.top, region.width, region.height, *args
|
60
|
-
# end
|
61
|
-
# else
|
62
|
-
# self.floating_regions = []
|
63
|
-
# end
|
64
|
-
# floating_regions << value
|
65
|
-
# self
|
66
|
-
# end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
@@ -1,74 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Applitools
|
4
|
-
module Calabash
|
5
|
-
module Utils
|
6
|
-
extend self
|
7
|
-
|
8
|
-
def create_directories(eyes_settings)
|
9
|
-
FileUtils.mkpath(
|
10
|
-
File.join(Dir.getwd, eyes_settings.tmp_dir, eyes_settings.screenshot_dir)
|
11
|
-
)
|
12
|
-
FileUtils.mkpath(
|
13
|
-
File.join(Dir.getwd, eyes_settings.log_dir)
|
14
|
-
)
|
15
|
-
end
|
16
|
-
|
17
|
-
def clear_directories(eyes_settings)
|
18
|
-
tmp_dir = File.join Dir.getwd, eyes_settings.tmp_dir
|
19
|
-
log_dir = File.join Dir.getwd, eyes_settings.log_dir
|
20
|
-
|
21
|
-
FileUtils.remove_dir(tmp_dir) if File.exist?(tmp_dir)
|
22
|
-
FileUtils.remove_dir(log_dir) if File.exist?(log_dir)
|
23
|
-
end
|
24
|
-
|
25
|
-
def using_screenshot(context)
|
26
|
-
return unless block_given?
|
27
|
-
screenshot_options = Applitools::Calabash::EyesSettings.instance.screenshot_names.next
|
28
|
-
yield context.screenshot(screenshot_options)
|
29
|
-
end
|
30
|
-
|
31
|
-
def region_from_element(element)
|
32
|
-
region = Applitools::Region.new(
|
33
|
-
element['rect']['x'],
|
34
|
-
element['rect']['y'],
|
35
|
-
element['rect']['width'],
|
36
|
-
element['rect']['height']
|
37
|
-
)
|
38
|
-
return region if Applitools::Calabash::EnvironmentDetector.android?
|
39
|
-
region.scale_it!(Applitools::Calabash::EyesSettings.instance.eyes.density)
|
40
|
-
end
|
41
|
-
|
42
|
-
def request_element(context, element, method)
|
43
|
-
Applitools::ArgumentGuard.is_a?(element, 'element', Applitools::Calabash::CalabashElement)
|
44
|
-
context.query(element.element_query, method)
|
45
|
-
end
|
46
|
-
|
47
|
-
def grub_android_class_name(context, element)
|
48
|
-
request_element(context, element, :class)
|
49
|
-
end
|
50
|
-
|
51
|
-
def grub_ios_class_name(context, element)
|
52
|
-
request_element(context, element, :className)
|
53
|
-
end
|
54
|
-
|
55
|
-
def get_android_element(context, query, index)
|
56
|
-
element_query = if (id = context.query(query, :getId)[index.to_i]) && id > 0
|
57
|
-
"* id:#{id}"
|
58
|
-
else
|
59
|
-
query + " index:#{index.to_i}"
|
60
|
-
end
|
61
|
-
element = context.query(element_query).first
|
62
|
-
Applitools::Calabash::CalabashElement.new(element, element_query)
|
63
|
-
end
|
64
|
-
|
65
|
-
def get_ios_element(context, query, index)
|
66
|
-
hash = context.query(query, :hash)[index.to_i]
|
67
|
-
return unless hash
|
68
|
-
element_query = "* hash:#{hash}"
|
69
|
-
element = context.query(element_query).first
|
70
|
-
Applitools::Calabash::CalabashElement.new(element, element_query)
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
Applitools::Calabash.require_environment(
|
4
|
-
'applitools/calabash/steps/matchers',
|
5
|
-
Applitools::Calabash::EnvironmentDetector.current_environment
|
6
|
-
)
|
7
|
-
|
8
|
-
Applitools::Calabash.require_environment(
|
9
|
-
'applitools/calabash/steps/eyes_settings',
|
10
|
-
Applitools::Calabash::EnvironmentDetector.current_environment
|
11
|
-
)
|
12
|
-
|
13
|
-
Applitools::Calabash.require_environment(
|
14
|
-
'applitools/calabash/steps/eyes_session',
|
15
|
-
Applitools::Calabash::EnvironmentDetector.current_environment
|
16
|
-
)
|
@@ -1,25 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Applitools
|
4
|
-
module Selenium
|
5
|
-
module Capybara
|
6
|
-
module CapybaraSettings
|
7
|
-
# Registers Capybara driver which will be used by eyes and sets it as default Capybara driver.
|
8
|
-
# The name of the driver is :eyes, and the driver is a descendant of class Capybara::Selenium::Driver.
|
9
|
-
# Options are eventually passed to drivers constructor
|
10
|
-
# @param [Hash] options
|
11
|
-
# @example
|
12
|
-
# Applitools.register_capybara_driver :browser => :chrome
|
13
|
-
# @example
|
14
|
-
# Applitools.register_capybara_driver :browser => :remote, :url => 'remote_url', :desired_capabilities => {}
|
15
|
-
def register_capybara_driver(options = {})
|
16
|
-
::Capybara.register_driver :eyes do |app|
|
17
|
-
Applitools::Selenium::Capybara::Driver.new app, options
|
18
|
-
end
|
19
|
-
::Capybara.default_driver = :eyes
|
20
|
-
::Capybara.javascript_driver = :eyes
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,39 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
if defined? Capybara::Selenium::Driver
|
4
|
-
module Applitools::Selenium::Capybara
|
5
|
-
# @!visibility private
|
6
|
-
class Driver < Capybara::Selenium::Driver
|
7
|
-
def driver_for_eyes(eyes)
|
8
|
-
browser eyes: eyes
|
9
|
-
end
|
10
|
-
|
11
|
-
def browser(options = {})
|
12
|
-
eyes = options.delete(:eyes)
|
13
|
-
@native_browser ||= super()
|
14
|
-
unless eyes.nil?
|
15
|
-
is_mobile_device = @browser.capabilities['platformName'] ? true : false
|
16
|
-
@browser = Applitools::Selenium::Driver.new eyes,
|
17
|
-
options.merge(driver: @browser, is_mobile_device: is_mobile_device)
|
18
|
-
end
|
19
|
-
@browser
|
20
|
-
end
|
21
|
-
|
22
|
-
def use_native_browser
|
23
|
-
@browser = @native_browser
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
if defined? ::Capybara::Session
|
30
|
-
::Capybara::Session.class_eval do
|
31
|
-
def driver_for_eyes(eyes)
|
32
|
-
driver.driver_for_eyes eyes
|
33
|
-
end
|
34
|
-
|
35
|
-
def use_native_browser
|
36
|
-
driver.use_native_browser if driver.respond_to? :use_native_browser
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'rspec/expectations'
|
4
|
-
|
5
|
-
RSpec::Matchers.define :match_baseline do |expected, tag|
|
6
|
-
match do |actual|
|
7
|
-
unless expected.is_a? Applitools::EyesBase
|
8
|
-
raise Applitools::EyesIllegalArgument.new(
|
9
|
-
"Expected #{expected} to be a Applitools::EyesBase instance, but got #{expected.class.name}."
|
10
|
-
)
|
11
|
-
end
|
12
|
-
|
13
|
-
eyes_selenium_target = Applitools::ClassName.new('Applitools::Selenium::Target')
|
14
|
-
eyes_images_target = Applitools::ClassName.new('Applitools::Images::Target')
|
15
|
-
|
16
|
-
case actual
|
17
|
-
when eyes_selenium_target, eyes_images_target
|
18
|
-
result = expected.check(tag, actual)
|
19
|
-
return result if [TrueClass, FalseClass].include?(result.class)
|
20
|
-
return result.as_expected? if result.respond_to? :as_expected?
|
21
|
-
else
|
22
|
-
false
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,57 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Applitools::Connectivity
|
4
|
-
module UniversalServerGemFinder
|
5
|
-
extend self
|
6
|
-
|
7
|
-
SERVER_GEM_NAME = 'eyes_universal'
|
8
|
-
|
9
|
-
def filepath
|
10
|
-
server_lib ? File.join(server_lib.gem_dir, 'ext', 'eyes-universal', filename) : ''
|
11
|
-
end
|
12
|
-
|
13
|
-
def other_filepaths
|
14
|
-
in_gem_path = File.join('gems', server_lib.full_name, 'ext', 'eyes-universal', filename)
|
15
|
-
Gem.path.map {|path| File.expand_path(in_gem_path, path) }
|
16
|
-
end
|
17
|
-
|
18
|
-
def executable_filepath
|
19
|
-
raise 'Universal server not Found' if server_lib.nil?
|
20
|
-
return filepath if valid_file?(filepath)
|
21
|
-
core_path = other_filepaths.find {|path| valid_file?(path) }
|
22
|
-
return core_path if core_path
|
23
|
-
raise 'Universal server unrecognized'
|
24
|
-
end
|
25
|
-
|
26
|
-
private
|
27
|
-
|
28
|
-
def server_lib
|
29
|
-
Gem::Specification.find_by_name(SERVER_GEM_NAME)
|
30
|
-
rescue Gem::MissingSpecError
|
31
|
-
nil
|
32
|
-
end
|
33
|
-
|
34
|
-
def filename
|
35
|
-
return 'core-win.exe' if Gem.win_platform?
|
36
|
-
case RUBY_PLATFORM
|
37
|
-
when /darwin/i
|
38
|
-
'core-macos'
|
39
|
-
when /arm/i
|
40
|
-
'core-linux-arm64'
|
41
|
-
when /mswin|windows|mingw/i
|
42
|
-
'core-win.exe'
|
43
|
-
when /musl/i
|
44
|
-
'core-alpine'
|
45
|
-
when /linux|arch/i
|
46
|
-
'core-linux'
|
47
|
-
else
|
48
|
-
raise 'Unsupported platform'
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def valid_file?(path)
|
53
|
-
File.exist?(path) && File.executable?(path)
|
54
|
-
end
|
55
|
-
|
56
|
-
end
|
57
|
-
end
|
@@ -1,79 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'singleton'
|
4
|
-
|
5
|
-
module Applitools::Connectivity
|
6
|
-
class UniversalServerControl
|
7
|
-
|
8
|
-
include Singleton
|
9
|
-
|
10
|
-
DEFAULT_SERVER_IP = '127.0.0.1'
|
11
|
-
EXECUTABLE_FILEPATH = Applitools::Connectivity::UniversalServerGemFinder.executable_filepath
|
12
|
-
|
13
|
-
def initialize
|
14
|
-
@control_pipe = nil
|
15
|
-
@port_pipe = nil
|
16
|
-
@usdk_pid = nil
|
17
|
-
@monitoring_thread = nil
|
18
|
-
@port = nil
|
19
|
-
start_server_with_pipe
|
20
|
-
@sockets = []
|
21
|
-
end
|
22
|
-
|
23
|
-
def server_port
|
24
|
-
@port
|
25
|
-
end
|
26
|
-
|
27
|
-
def new_server_socket_connection
|
28
|
-
begin
|
29
|
-
socket = TCPSocket.new(DEFAULT_SERVER_IP, @port)
|
30
|
-
@sockets.push(socket)
|
31
|
-
socket
|
32
|
-
rescue Errno::ECONNREFUSED
|
33
|
-
nil
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def server_running?
|
38
|
-
return false if @monitoring_thread.nil?
|
39
|
-
monitoring_result = @monitoring_thread.join(1)
|
40
|
-
monitoring_result.nil?
|
41
|
-
end
|
42
|
-
|
43
|
-
def stop_server
|
44
|
-
return if @control_pipe.nil?
|
45
|
-
@control_pipe.close_write
|
46
|
-
@sockets.each {|socket| socket.close unless socket.closed? }
|
47
|
-
sleep(1)
|
48
|
-
end
|
49
|
-
|
50
|
-
def to_s # for test & debug
|
51
|
-
"SDKServer(port=#{@port}; pid=#{@usdk_pid})"
|
52
|
-
end
|
53
|
-
|
54
|
-
private
|
55
|
-
|
56
|
-
def start_server_with_pipe
|
57
|
-
in_pipe, @control_pipe = IO.pipe
|
58
|
-
@port_pipe, port_w = IO.pipe
|
59
|
-
|
60
|
-
@usdk_pid = spawn(
|
61
|
-
EXECUTABLE_FILEPATH, 'universal', '--no-singleton', '--shutdown-mode', 'stdin',
|
62
|
-
in: in_pipe, out: port_w, err: port_w,
|
63
|
-
# close_others: true
|
64
|
-
)
|
65
|
-
in_pipe.close_read
|
66
|
-
port_w.close_write
|
67
|
-
|
68
|
-
@monitoring_thread = Process.detach(@usdk_pid)
|
69
|
-
|
70
|
-
@port = @port_pipe.readline.strip.to_i
|
71
|
-
@port_pipe.close_read
|
72
|
-
|
73
|
-
if ENV['APPLITOOLS_SHOW_LOGS']
|
74
|
-
Applitools::EyesLogger.logger.debug("Started Universal SDK server at #{@port} pid = #{@usdk_pid}")
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
end
|
79
|
-
end
|
data/lib/applitools/version.rb
DELETED
data/lib/eyes_consts.rb
DELETED
data/lib/eyes_rspec.rb
DELETED