eyes_core 5.0.0 → 6.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.
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,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
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: false
2
-
3
- module Applitools
4
- VERSION = '5.0.0'.freeze
5
- IMAGES_VERSION = '5.0.0'.freeze
6
- UNIVERSAL_VERSION = '3.6.0'.freeze
7
- UNIVERSAL_CORE_VERSION = '3.6.0'.freeze
8
- end
data/lib/eyes_consts.rb DELETED
@@ -1,4 +0,0 @@
1
- module Applitools
2
- JS_PATH = 'lib/applitools/selenium/scripts/node_modules'.freeze
3
- SCRIPT_TEMPLATES_PATH = 'lib/applitools/selenium/scripts'.freeze
4
- end
data/lib/eyes_rspec.rb DELETED
@@ -1,4 +0,0 @@
1
- # frozen_string_literal: true
2
- #
3
-
4
- Applitools.require_dir('rspec') if defined? RSpec