capybara-screenshot-diff 1.7.1 → 1.8.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/Rakefile +29 -0
- data/capybara-screenshot-diff.gemspec +6 -3
- data/gems.rb +8 -2
- data/lib/capybara/screenshot/diff/browser_helpers.rb +29 -28
- data/lib/capybara/screenshot/diff/cucumber.rb +11 -0
- data/lib/capybara/screenshot/diff/difference.rb +63 -0
- data/lib/capybara/screenshot/diff/drivers/base_driver.rb +42 -0
- data/lib/capybara/screenshot/diff/drivers/chunky_png_driver.rb +188 -260
- data/lib/capybara/screenshot/diff/drivers/utils.rb +18 -0
- data/lib/capybara/screenshot/diff/drivers/vips_driver.rb +54 -104
- data/lib/capybara/screenshot/diff/drivers.rb +16 -0
- data/lib/capybara/screenshot/diff/image_compare.rb +125 -154
- data/lib/capybara/screenshot/diff/os.rb +1 -1
- data/lib/capybara/screenshot/diff/screenshot_matcher.rb +128 -0
- data/lib/capybara/screenshot/diff/screenshoter.rb +136 -0
- data/lib/capybara/screenshot/diff/stabilization.rb +0 -184
- data/lib/capybara/screenshot/diff/stable_screenshoter.rb +106 -0
- data/lib/capybara/screenshot/diff/test_methods.rb +51 -90
- data/lib/capybara/screenshot/diff/vcs.rb +44 -22
- data/lib/capybara/screenshot/diff/version.rb +1 -1
- data/lib/capybara/screenshot/diff.rb +13 -17
- data/sig/capybara/screenshot/diff/diff.rbs +28 -0
- data/sig/capybara/screenshot/diff/difference.rbs +33 -0
- data/sig/capybara/screenshot/diff/drivers/base_driver.rbs +63 -0
- data/sig/capybara/screenshot/diff/drivers/browser_helpers.rbs +36 -0
- data/sig/capybara/screenshot/diff/drivers/chunky_png_driver.rbs +89 -0
- data/sig/capybara/screenshot/diff/drivers/utils.rbs +13 -0
- data/sig/capybara/screenshot/diff/drivers/vips_driver.rbs +25 -0
- data/sig/capybara/screenshot/diff/image_compare.rbs +93 -0
- data/sig/capybara/screenshot/diff/os.rbs +11 -0
- data/sig/capybara/screenshot/diff/region.rbs +43 -0
- data/sig/capybara/screenshot/diff/screenshot_matcher.rbs +60 -0
- data/sig/capybara/screenshot/diff/screenshoter.rbs +48 -0
- data/sig/capybara/screenshot/diff/stable_screenshoter.rbs +29 -0
- data/sig/capybara/screenshot/diff/test_methods.rbs +39 -0
- data/sig/capybara/screenshot/diff/vcs.rbs +17 -0
- metadata +28 -25
- data/.gitattributes +0 -4
- data/.github/dependabot.yml +0 -8
- data/.github/workflows/lint.yml +0 -25
- data/.github/workflows/test.yml +0 -138
- data/.gitignore +0 -14
- data/.standard.yml +0 -12
- data/CONTRIBUTING.md +0 -24
- data/Dockerfile +0 -59
- data/README.md +0 -567
- data/bin/bundle +0 -114
- data/bin/console +0 -15
- data/bin/install-vips +0 -11
- data/bin/rake +0 -27
- data/bin/setup +0 -8
- data/bin/standardrb +0 -29
- data/gemfiles/rails60_gems.rb +0 -8
- data/gemfiles/rails61_gems.rb +0 -7
- data/gemfiles/rails70_gems.rb +0 -7
- data/tmp/.keep +0 -0
@@ -0,0 +1,93 @@
|
|
1
|
+
module Capybara
|
2
|
+
module Screenshot
|
3
|
+
module Diff
|
4
|
+
LOADED_DRIVERS: { vips: ImageCompare::driver_entity, chunky_png: ImageCompare::driver_entity }
|
5
|
+
|
6
|
+
# Compare two images_entities and determine if they are equal, different, or within some comparison
|
7
|
+
# range considering color values and difference area size.
|
8
|
+
class ImageCompare
|
9
|
+
TOLERABLE_OPTIONS: [:tolerance, :color_distance_limit, :shift_distance_limit, :area_size_limit]
|
10
|
+
|
11
|
+
class Comparison
|
12
|
+
|
13
|
+
end
|
14
|
+
|
15
|
+
type driver_entity = (Drivers::VipsDriver | Drivers::ChunkyPNGDriver)
|
16
|
+
type image_entity = (ChunkyPNG::Canvas | Vips::Image)
|
17
|
+
type images_entities = [image_entity, image_entity]
|
18
|
+
type cache_entity = (::Hash[Symbol, top] | top)
|
19
|
+
|
20
|
+
@annotated_base_image_path: Pathname
|
21
|
+
@annotated_image_path: Pathname
|
22
|
+
@difference: Difference
|
23
|
+
@error_message: String?
|
24
|
+
|
25
|
+
attr_reader error_message: String?
|
26
|
+
attr_reader annotated_base_image_path: Pathname
|
27
|
+
attr_reader annotated_image_path: Pathname
|
28
|
+
attr_reader driver: driver_entity
|
29
|
+
attr_reader driver_options: Drivers::BaseDriver::options_entity
|
30
|
+
attr_reader annotated_new_file_name: TestMethods::path_entity
|
31
|
+
attr_reader annotated_old_file_name: TestMethods::path_entity
|
32
|
+
attr_reader new_file_name: String
|
33
|
+
attr_reader old_file_name: String
|
34
|
+
attr_reader skip_area: Array[Region]?
|
35
|
+
attr_accessor shift_distance_limit: Numeric?
|
36
|
+
attr_accessor area_size_limit: Numeric?
|
37
|
+
attr_accessor color_distance_limit: Numeric?
|
38
|
+
|
39
|
+
@median_filter_window_size: Numeric?
|
40
|
+
@dimensions: Drivers::BaseDriver::dimension_entity?
|
41
|
+
@tolerance: Numeric?
|
42
|
+
|
43
|
+
def initialize: (TestMethods::path_entity new_file_name, TestMethods::path_entity old_file_name, ?Drivers::BaseDriver::options_entity options) -> void
|
44
|
+
|
45
|
+
# Compare the two image_entity files and return `true` or `false` as quickly as possible.
|
46
|
+
# Return falsely if the old file does not exist or the image_entity dimensions do not match.
|
47
|
+
def quick_equal?: () -> boolish
|
48
|
+
|
49
|
+
# Compare the two images_entities referenced by this object, and return `true` if they are different,
|
50
|
+
# and `false` if they are the same.
|
51
|
+
def different?: () -> bool
|
52
|
+
|
53
|
+
def clean_tmp_files: () -> void
|
54
|
+
|
55
|
+
def save: (image_entity, TestMethods::path_entity) -> void
|
56
|
+
|
57
|
+
def old_file_exists?: () -> boolish
|
58
|
+
|
59
|
+
def reset: () -> void
|
60
|
+
|
61
|
+
NEW_LINE: "\n"
|
62
|
+
|
63
|
+
private
|
64
|
+
|
65
|
+
def _different?: -> String?
|
66
|
+
|
67
|
+
def different: (Difference images) -> String
|
68
|
+
|
69
|
+
def preprocess_images: (images_entities images) -> images_entities
|
70
|
+
|
71
|
+
def preprocess_image: (image_entity image) -> image_entity
|
72
|
+
|
73
|
+
def old_file_size: () -> Integer
|
74
|
+
|
75
|
+
def new_file_size: () -> Integer
|
76
|
+
|
77
|
+
def not_different: () -> nil
|
78
|
+
|
79
|
+
def annotate_and_save_images: (Difference) -> void
|
80
|
+
|
81
|
+
def annotate_and_save_image: (Difference, image_entity, TestMethods::path_entity) -> void
|
82
|
+
|
83
|
+
DIFF_COLOR: [255, 0, 0, 255]
|
84
|
+
|
85
|
+
def annotate_difference: (image_entity, Region) -> void
|
86
|
+
|
87
|
+
SKIP_COLOR: [255, 192, 0, 255]
|
88
|
+
|
89
|
+
def annotate_skip_areas: (image_entity, Array[Region] skip_areas) -> void
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
class Region
|
2
|
+
type raw_region_entity = [Numeric, Numeric, Numeric, Numeric]
|
3
|
+
|
4
|
+
attr_accessor x: Numeric
|
5
|
+
|
6
|
+
attr_accessor y: Numeric
|
7
|
+
|
8
|
+
attr_accessor width: Numeric
|
9
|
+
|
10
|
+
attr_accessor height: Numeric
|
11
|
+
|
12
|
+
def initialize: (Numeric x, Numeric y, Numeric width, Numeric height) -> void
|
13
|
+
|
14
|
+
def self.from_top_left_corner_coordinates: (Numeric x, Numeric y, Numeric width, Numeric height) -> Region?
|
15
|
+
|
16
|
+
def self.from_edge_coordinates: (Numeric left, Numeric `top`, Numeric right, Numeric bottom) -> Region?
|
17
|
+
|
18
|
+
def to_edge_coordinates: () -> ::Array[Numeric]
|
19
|
+
|
20
|
+
def to_top_left_corner_coordinates: () -> ::Array[Numeric]
|
21
|
+
|
22
|
+
def top: () -> Numeric
|
23
|
+
|
24
|
+
def bottom: () -> Numeric
|
25
|
+
|
26
|
+
def left: () -> Numeric
|
27
|
+
|
28
|
+
def right: () -> Numeric
|
29
|
+
|
30
|
+
def size: () -> Numeric
|
31
|
+
|
32
|
+
def to_a: () -> ::Array[Numeric]
|
33
|
+
|
34
|
+
def find_intersect_with: (Region region) -> Region?
|
35
|
+
|
36
|
+
def intersect?: (Region region) -> boolish
|
37
|
+
|
38
|
+
def move_by: (Numeric right_by, Numeric down_by) -> Region
|
39
|
+
|
40
|
+
def find_relative_intersect: (Region region) -> Region?
|
41
|
+
|
42
|
+
def cover?: (Numeric x, Numeric y) -> boolish
|
43
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Capybara
|
2
|
+
module Screenshot
|
3
|
+
module Diff
|
4
|
+
class ScreenshotMatcher
|
5
|
+
|
6
|
+
type job_entity = Array[top]
|
7
|
+
|
8
|
+
attr_reader base_screenshot_path: TestMethods::path_entity
|
9
|
+
attr_reader driver_options: Drivers::BaseDriver::options_entity
|
10
|
+
attr_reader screenshot_full_name: TestMethods::path_entity
|
11
|
+
attr_reader screenshot_path: Pathname
|
12
|
+
|
13
|
+
def build_screenshot_matches_job: -> job_entity?
|
14
|
+
def cleanup: -> void
|
15
|
+
|
16
|
+
def self.base_image_path_from: (TestMethods::path_entity) -> Pathname
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def build_screenshoter_for: (capture_options_entity capture_options, Drivers::BaseDriver::options_entity driver_options) -> (Screenshoter | StableScreenshoter)
|
21
|
+
|
22
|
+
def checkout_base_screenshot: -> void
|
23
|
+
|
24
|
+
def take_comparison_screenshot: (capture_options_entity capture_options, Drivers::BaseDriver::options_entity driver_options, TestMethods::path_entity screenshot_path) -> void
|
25
|
+
|
26
|
+
def create_output_directory_for: (Pathname file_name) -> void
|
27
|
+
|
28
|
+
type skip_area_entity = String | Region::raw_region_entity
|
29
|
+
type flex_skip_area_entity = (skip_area_entity | Array[skip_area_entity])
|
30
|
+
type flex_crop_entity = (nil | String | Region | Region::raw_region_entity)
|
31
|
+
|
32
|
+
def calculate_skip_area: (flex_skip_area_entity skip_area, flex_crop_entity crop) -> Array[Region]
|
33
|
+
|
34
|
+
type input_region = (Region::raw_region_entity | String | Region)
|
35
|
+
|
36
|
+
type input_options = {
|
37
|
+
area_size_limit: Numeric?,
|
38
|
+
color_distance_limit: Numeric?,
|
39
|
+
driver: (:auto | :vips | :chunky_png | ImageCompare::driver_entity)?,
|
40
|
+
median_filter_window_size: Numeric?,
|
41
|
+
shift_distance_limit: Numeric?,
|
42
|
+
skip_area: nil | Array[input_region] | input_region,
|
43
|
+
stability_time_limit: Numeric?,
|
44
|
+
tolerance: Numeric?,
|
45
|
+
wait: Numeric?
|
46
|
+
}
|
47
|
+
|
48
|
+
def calculate_crop_region: (input_options driver_options) -> Region?
|
49
|
+
|
50
|
+
type capture_options_entity = {
|
51
|
+
stability_time_limit: Numeric?,
|
52
|
+
wait: Numeric?,
|
53
|
+
crop: Region?
|
54
|
+
}
|
55
|
+
|
56
|
+
def build_regions_for: ((Enumerable[Region::raw_region_entity]) coordinates) -> Array[Region?]
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Capybara
|
2
|
+
module Screenshot
|
3
|
+
class Screenshoter
|
4
|
+
@_csd_retina_warned: bool?
|
5
|
+
|
6
|
+
attr_reader capture_options: Diff::ScreenshotMatcher::capture_options_entity
|
7
|
+
|
8
|
+
attr_reader comparison_options: Diff::Drivers::BaseDriver::options_entity
|
9
|
+
|
10
|
+
attr_reader driver: Diff::ImageCompare::driver_entity
|
11
|
+
|
12
|
+
def initialize: (?Diff::ScreenshotMatcher::capture_options_entity capture_options, Diff::ImageCompare::driver_entity driver) -> void
|
13
|
+
|
14
|
+
def crop: () -> Numeric?
|
15
|
+
|
16
|
+
def wait: () -> Numeric?
|
17
|
+
|
18
|
+
def self.attempts_screenshot_paths: (Diff::TestMethods::path_entity base_file) -> Array[String]
|
19
|
+
|
20
|
+
def self.cleanup_attempts_screenshots: (Diff::TestMethods::path_entity base_file) -> void
|
21
|
+
|
22
|
+
# Try to get screenshot from browser.
|
23
|
+
# On `stability_time_limit` it checks that page stop updating by comparison several screenshot attempts
|
24
|
+
# On reaching `wait` limit then it has been failed. On failing we annotate screenshot attempts to help to debug
|
25
|
+
def take_comparison_screenshot: (Diff::TestMethods::path_entity screenshot_path) -> void
|
26
|
+
|
27
|
+
def self.gen_next_attempt_path: (Diff::TestMethods::path_entity screenshot_path, Integer iteration) -> Pathname
|
28
|
+
|
29
|
+
def take_screenshot: (Diff::TestMethods::path_entity screenshot_path) -> void
|
30
|
+
|
31
|
+
def browser_save_screenshot: (Diff::TestMethods::path_entity screenshot_path) -> void
|
32
|
+
|
33
|
+
def process_screenshot: (Diff::TestMethods::path_entity screenshot_path) -> void
|
34
|
+
|
35
|
+
def reduce_retina_image_size: (Diff::TestMethods::path_entity file_name) -> void
|
36
|
+
|
37
|
+
def notice_how_to_avoid_this: () -> void
|
38
|
+
|
39
|
+
def prepare_page_for_screenshot: (timeout: Numeric) -> BrowserHelpers::capybara_element?
|
40
|
+
|
41
|
+
def wait_images_loaded: (timeout: Numeric) -> void
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def selenium_with_retina_screen?: () -> boolish
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Capybara
|
2
|
+
module Screenshot
|
3
|
+
module Diff
|
4
|
+
class StableScreenshoter
|
5
|
+
STABILITY_OPTIONS: [:stability_time_limit, :wait]
|
6
|
+
|
7
|
+
@_csd_retina_warned: boolish
|
8
|
+
|
9
|
+
@comparison_options: Drivers::BaseDriver::options_entity
|
10
|
+
@screenshoter: (StableScreenshoter | Screenshoter)
|
11
|
+
@stability_time_limit: Numeric
|
12
|
+
|
13
|
+
def take_comparison_screenshot: (TestMethods::path_entity screenshot_path) -> void
|
14
|
+
|
15
|
+
def take_stable_screenshot: (TestMethods::path_entity) -> Pathname?
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def annotate_attempts_and_fail!: (TestMethods::path_entity screenshot_path) -> void
|
20
|
+
|
21
|
+
def build_comparison_for: (TestMethods::path_entity attempt_path, TestMethods::path_entity previous_attempt_path) -> ImageCompare
|
22
|
+
|
23
|
+
def prepare_page_for_screenshot: (timeout: Numeric) -> top?
|
24
|
+
|
25
|
+
def annotate_stabilization_images: (Array[String]) -> void
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# Add the `screenshot` method to ActionDispatch::IntegrationTest
|
2
|
+
module Capybara
|
3
|
+
module Screenshot
|
4
|
+
module Diff
|
5
|
+
module TestMethods
|
6
|
+
type name_entity = (Symbol | String)
|
7
|
+
type path_entity = (string | Pathname)
|
8
|
+
|
9
|
+
@screenshot_counter: Numeric?
|
10
|
+
@screenshot_group: String?
|
11
|
+
@screenshot_section: String?
|
12
|
+
@test_screenshot_errors: Array[top]?
|
13
|
+
@test_screenshots: Array[[Array[String]?, String, ImageCompare]]?
|
14
|
+
|
15
|
+
def initialize: (*untyped) -> untyped
|
16
|
+
|
17
|
+
def group_parts: () -> Array[String]
|
18
|
+
|
19
|
+
def build_full_name: (name_entity name) -> String
|
20
|
+
|
21
|
+
def schedule_match_job: ([untyped, untyped, untyped] job) -> true
|
22
|
+
|
23
|
+
def screenshot_dir: () -> String
|
24
|
+
|
25
|
+
def screenshot_section: (name_entity name) -> void
|
26
|
+
|
27
|
+
def screenshot_group: (name_entity? name) -> void
|
28
|
+
|
29
|
+
def screenshot: (name_entity name, ?skip_stack_frames: ::Integer, **untyped options) -> boolish
|
30
|
+
|
31
|
+
def assert_image_not_changed: (String name, ImageCompare comparison) -> ::String?
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def build_screenshot_matches_job: (String, Drivers::BaseDriver::options_entity) -> ScreenshotMatcher::job_entity?
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Capybara
|
2
|
+
module Screenshot
|
3
|
+
module Diff
|
4
|
+
module Vcs
|
5
|
+
SILENCE_ERRORS: String
|
6
|
+
|
7
|
+
def self.checkout_vcs: (Pathname screenshot_path, Pathname checkout_path) -> bool
|
8
|
+
|
9
|
+
def self.restore_git_revision: (Pathname screenshot_path, Pathname checkout_path) -> bool
|
10
|
+
|
11
|
+
def self.restore_svn_revision: -> bool
|
12
|
+
|
13
|
+
def self.svn?: -> bool
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capybara-screenshot-diff
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Uwe Kubosch
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-09-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: actionpack
|
@@ -16,7 +16,7 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '6.
|
19
|
+
version: '6.1'
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: '8'
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: '6.
|
29
|
+
version: '6.1'
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: '8'
|
@@ -71,42 +71,45 @@ executables: []
|
|
71
71
|
extensions: []
|
72
72
|
extra_rdoc_files: []
|
73
73
|
files:
|
74
|
-
- ".gitattributes"
|
75
|
-
- ".github/dependabot.yml"
|
76
|
-
- ".github/workflows/lint.yml"
|
77
|
-
- ".github/workflows/test.yml"
|
78
|
-
- ".gitignore"
|
79
|
-
- ".standard.yml"
|
80
|
-
- CONTRIBUTING.md
|
81
|
-
- Dockerfile
|
82
74
|
- LICENSE.txt
|
83
|
-
- README.md
|
84
75
|
- Rakefile
|
85
|
-
- bin/bundle
|
86
|
-
- bin/console
|
87
|
-
- bin/install-vips
|
88
|
-
- bin/rake
|
89
|
-
- bin/setup
|
90
|
-
- bin/standardrb
|
91
76
|
- capybara-screenshot-diff.gemspec
|
92
|
-
- gemfiles/rails60_gems.rb
|
93
|
-
- gemfiles/rails61_gems.rb
|
94
|
-
- gemfiles/rails70_gems.rb
|
95
77
|
- gems.rb
|
96
78
|
- lib/capybara-screenshot-diff.rb
|
97
79
|
- lib/capybara/screenshot/diff.rb
|
98
80
|
- lib/capybara/screenshot/diff/browser_helpers.rb
|
81
|
+
- lib/capybara/screenshot/diff/cucumber.rb
|
82
|
+
- lib/capybara/screenshot/diff/difference.rb
|
83
|
+
- lib/capybara/screenshot/diff/drivers.rb
|
84
|
+
- lib/capybara/screenshot/diff/drivers/base_driver.rb
|
99
85
|
- lib/capybara/screenshot/diff/drivers/chunky_png_driver.rb
|
100
86
|
- lib/capybara/screenshot/diff/drivers/utils.rb
|
101
87
|
- lib/capybara/screenshot/diff/drivers/vips_driver.rb
|
102
88
|
- lib/capybara/screenshot/diff/image_compare.rb
|
103
89
|
- lib/capybara/screenshot/diff/os.rb
|
104
90
|
- lib/capybara/screenshot/diff/region.rb
|
91
|
+
- lib/capybara/screenshot/diff/screenshot_matcher.rb
|
92
|
+
- lib/capybara/screenshot/diff/screenshoter.rb
|
105
93
|
- lib/capybara/screenshot/diff/stabilization.rb
|
94
|
+
- lib/capybara/screenshot/diff/stable_screenshoter.rb
|
106
95
|
- lib/capybara/screenshot/diff/test_methods.rb
|
107
96
|
- lib/capybara/screenshot/diff/vcs.rb
|
108
97
|
- lib/capybara/screenshot/diff/version.rb
|
109
|
-
-
|
98
|
+
- sig/capybara/screenshot/diff/diff.rbs
|
99
|
+
- sig/capybara/screenshot/diff/difference.rbs
|
100
|
+
- sig/capybara/screenshot/diff/drivers/base_driver.rbs
|
101
|
+
- sig/capybara/screenshot/diff/drivers/browser_helpers.rbs
|
102
|
+
- sig/capybara/screenshot/diff/drivers/chunky_png_driver.rbs
|
103
|
+
- sig/capybara/screenshot/diff/drivers/utils.rbs
|
104
|
+
- sig/capybara/screenshot/diff/drivers/vips_driver.rbs
|
105
|
+
- sig/capybara/screenshot/diff/image_compare.rbs
|
106
|
+
- sig/capybara/screenshot/diff/os.rbs
|
107
|
+
- sig/capybara/screenshot/diff/region.rbs
|
108
|
+
- sig/capybara/screenshot/diff/screenshot_matcher.rbs
|
109
|
+
- sig/capybara/screenshot/diff/screenshoter.rbs
|
110
|
+
- sig/capybara/screenshot/diff/stable_screenshoter.rbs
|
111
|
+
- sig/capybara/screenshot/diff/test_methods.rbs
|
112
|
+
- sig/capybara/screenshot/diff/vcs.rbs
|
110
113
|
homepage: https://github.com/donv/capybara-screenshot-diff
|
111
114
|
licenses:
|
112
115
|
- MIT
|
@@ -120,14 +123,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
120
123
|
requirements:
|
121
124
|
- - ">="
|
122
125
|
- !ruby/object:Gem::Version
|
123
|
-
version:
|
126
|
+
version: 3.0.0
|
124
127
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
125
128
|
requirements:
|
126
129
|
- - ">="
|
127
130
|
- !ruby/object:Gem::Version
|
128
131
|
version: '0'
|
129
132
|
requirements: []
|
130
|
-
rubygems_version: 3.
|
133
|
+
rubygems_version: 3.4.10
|
131
134
|
signing_key:
|
132
135
|
specification_version: 4
|
133
136
|
summary: Track your GUI changes with diff assertions
|
data/.gitattributes
DELETED
data/.github/dependabot.yml
DELETED
data/.github/workflows/lint.yml
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
name: Ruby Linter
|
2
|
-
|
3
|
-
on:
|
4
|
-
pull_request:
|
5
|
-
paths:
|
6
|
-
- '*.rb'
|
7
|
-
- '!bin/**'
|
8
|
-
|
9
|
-
jobs:
|
10
|
-
lint:
|
11
|
-
name: Lint
|
12
|
-
runs-on: ubuntu-latest
|
13
|
-
|
14
|
-
steps:
|
15
|
-
- name: Checkout code
|
16
|
-
uses: actions/checkout@v3
|
17
|
-
|
18
|
-
- name: Set up Ruby
|
19
|
-
uses: ruby/setup-ruby@v1
|
20
|
-
with:
|
21
|
-
ruby-version: '3.1'
|
22
|
-
bundler-cache: true
|
23
|
-
|
24
|
-
- name: Run Standard Ruby linter
|
25
|
-
run: bin/standardrb --no-fix --fail-fast
|
data/.github/workflows/test.yml
DELETED
@@ -1,138 +0,0 @@
|
|
1
|
-
name: Test
|
2
|
-
|
3
|
-
on:
|
4
|
-
push:
|
5
|
-
branches: [ master ]
|
6
|
-
pull_request:
|
7
|
-
paths:
|
8
|
-
- '**.rb'
|
9
|
-
- '**.gemfile'
|
10
|
-
- '!bin/**'
|
11
|
-
|
12
|
-
env:
|
13
|
-
BUNDLE_GEMFILE: 'gemfiles/rails70_gems.rb'
|
14
|
-
FERRUM_PROCESS_TIMEOUT: '15'
|
15
|
-
WD_CACHE_TIME: '864000' # 10 days
|
16
|
-
|
17
|
-
concurrency:
|
18
|
-
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
19
|
-
cancel-in-progress: true
|
20
|
-
|
21
|
-
jobs:
|
22
|
-
test:
|
23
|
-
name: Functional Testing
|
24
|
-
runs-on: ubuntu-22.04 # In order to install libvips 8.9+ version
|
25
|
-
timeout-minutes: 5
|
26
|
-
|
27
|
-
steps:
|
28
|
-
- name: Checkout code
|
29
|
-
uses: actions/checkout@v3
|
30
|
-
|
31
|
-
- name: Set up Ruby
|
32
|
-
uses: ruby/setup-ruby@v1
|
33
|
-
with:
|
34
|
-
ruby-version: '3.1'
|
35
|
-
bundler-cache: true
|
36
|
-
|
37
|
-
- name: Install libvips
|
38
|
-
run: sudo apt install libvips libvips-dev libvips-tools
|
39
|
-
|
40
|
-
- name: Run Tests with coverage
|
41
|
-
run: bundle exec rake test
|
42
|
-
env:
|
43
|
-
COVERAGE: enabled
|
44
|
-
|
45
|
-
- name: Upload Screenshots
|
46
|
-
if: always()
|
47
|
-
uses: actions/upload-artifact@v3
|
48
|
-
with:
|
49
|
-
name: screenshots
|
50
|
-
retention-days: 1
|
51
|
-
path: |
|
52
|
-
test/fixtures/app/doc/screenshots/
|
53
|
-
tmp/capybara/screenshots-diffs/
|
54
|
-
|
55
|
-
- name: Upload Coverage
|
56
|
-
uses: actions/upload-artifact@v3
|
57
|
-
with:
|
58
|
-
name: coverage
|
59
|
-
retention-days: 1
|
60
|
-
path: coverage
|
61
|
-
|
62
|
-
matrix:
|
63
|
-
name: Test Integration Rails & Ruby
|
64
|
-
needs: [ 'test' ]
|
65
|
-
runs-on: ubuntu-20.04
|
66
|
-
timeout-minutes: 5
|
67
|
-
|
68
|
-
strategy:
|
69
|
-
matrix:
|
70
|
-
ruby-version: [ '3.1', '3.0', '2.7', 'jruby' ]
|
71
|
-
gemfile:
|
72
|
-
- 'rails70_gems.rb'
|
73
|
-
- 'rails61_gems.rb'
|
74
|
-
- 'rails60_gems.rb'
|
75
|
-
exclude:
|
76
|
-
- ruby-version: 'jruby'
|
77
|
-
gemfile: 'rails70_gems.rb'
|
78
|
-
env:
|
79
|
-
BUNDLE_GEMFILE: gemfiles/${{ matrix.gemfile }}
|
80
|
-
|
81
|
-
steps:
|
82
|
-
- name: Checkout code
|
83
|
-
uses: actions/checkout@v3
|
84
|
-
|
85
|
-
- name: Set up Ruby
|
86
|
-
uses: ruby/setup-ruby@v1
|
87
|
-
with:
|
88
|
-
ruby-version: ${{ matrix.ruby-version }}
|
89
|
-
bundler-cache: true
|
90
|
-
|
91
|
-
- name: Install libvips
|
92
|
-
run: sudo apt install libvips libvips-dev libvips-tools
|
93
|
-
|
94
|
-
- name: Run tests
|
95
|
-
run: bundle exec rake test
|
96
|
-
|
97
|
-
matrix_screenshot_driver:
|
98
|
-
name: Test Integration Capybara & Image Drivers
|
99
|
-
needs: [ 'test' ]
|
100
|
-
runs-on: ubuntu-20.04
|
101
|
-
timeout-minutes: 5
|
102
|
-
|
103
|
-
strategy:
|
104
|
-
matrix:
|
105
|
-
screenshot-driver: [ 'vips', 'chunky_png' ]
|
106
|
-
capybara-driver: [ 'selenium_headless', 'selenium_chrome_headless' ]
|
107
|
-
include:
|
108
|
-
- screenshot-driver: 'chunky_png'
|
109
|
-
capybara-driver: 'cuprite'
|
110
|
-
|
111
|
-
steps:
|
112
|
-
- name: Checkout code
|
113
|
-
uses: actions/checkout@v3
|
114
|
-
|
115
|
-
- name: Set up Ruby
|
116
|
-
uses: ruby/setup-ruby@v1
|
117
|
-
with:
|
118
|
-
ruby-version: '3.1'
|
119
|
-
bundler-cache: true
|
120
|
-
|
121
|
-
- name: Install libvips
|
122
|
-
run: sudo apt install libvips libvips-dev libvips-tools
|
123
|
-
|
124
|
-
- name: Run tests
|
125
|
-
run: bundle exec rake test:integration
|
126
|
-
env:
|
127
|
-
SCREENSHOT_DRIVER: ${{ matrix.screenshot-driver }}
|
128
|
-
CAPYBARA_DRIVER: ${{ matrix.capybara-driver }}
|
129
|
-
|
130
|
-
- name: Upload Screenshots
|
131
|
-
uses: actions/upload-artifact@v3
|
132
|
-
if: failure()
|
133
|
-
with:
|
134
|
-
name: screenshots-${{ matrix.screenshot-driver }}-${{ matrix.capybara-driver }}
|
135
|
-
retention-days: 1
|
136
|
-
path: |
|
137
|
-
test/fixtures/app/doc/screenshots/
|
138
|
-
tmp/capybara/screenshots-diffs/
|
data/.gitignore
DELETED
data/.standard.yml
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
fix: true # default: false
|
2
|
-
parallel: true # default: false
|
3
|
-
format: progress # default: Standard::Formatter
|
4
|
-
ruby_version: 2.7 # default: RUBY_VERSION
|
5
|
-
default_ignores: false # default: true
|
6
|
-
|
7
|
-
ignore: # default: []
|
8
|
-
- 'bin/**/*'
|
9
|
-
- 'gemfiles/vendor/**/*'
|
10
|
-
- 'gemfiles/**/*':
|
11
|
-
- Security/Eval
|
12
|
-
- 'vendor/**/*'
|