capybara-screenshot-diff 0.12.0 → 0.12.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/.rubocop_todo.yml +1 -1
- data/.travis.yml +2 -2
- data/capybara-screenshot-diff.gemspec +2 -2
- data/gemfiles/rails52.gemfile +3 -0
- data/lib/capybara/screenshot/diff/image_compare.rb +9 -0
- data/lib/capybara/screenshot/diff/os.rb +1 -0
- data/lib/capybara/screenshot/diff/stabilization.rb +5 -0
- data/lib/capybara/screenshot/diff/test_methods.rb +4 -0
- data/lib/capybara/screenshot/diff/version.rb +1 -1
- data/matrix_test.rb +1 -0
- metadata +13 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7f8a739e8e6e8f3de068e2d6dab4317017025730dbbeeb72459f73eb8dcb9e1a
|
4
|
+
data.tar.gz: e214590aca05de27eea1874fd64a8389c792b00801f215d813acf3e5f82ddf18
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d7e28f6579e2ccb54e42d64889806884bad3434283ad5bd50caf18c758a0482a0e8c0c248d4c9c15131e671f2250964753dbd1c9aa9c56bf62cb0e1dca8a2db5
|
7
|
+
data.tar.gz: 8d3bca6920baf9c8f46c2a7914491fb49540d0abe7e53a770dff6aad163f24db1b685b4ef124870d244cd9f479b02248cca9bed00dd8a626e73b20107b668fe1
|
data/.rubocop_todo.yml
CHANGED
data/.travis.yml
CHANGED
@@ -2,13 +2,13 @@ language: ruby
|
|
2
2
|
sudo: false
|
3
3
|
cache: bundler
|
4
4
|
rvm:
|
5
|
-
- jruby-9.
|
5
|
+
- jruby-9.2.0.0
|
6
6
|
- ruby-2.5.1
|
7
7
|
- ruby-2.4.4
|
8
8
|
- ruby-2.3.7
|
9
|
-
- ruby-2.2.10
|
10
9
|
|
11
10
|
gemfile:
|
11
|
+
- gemfiles/rails52.gemfile
|
12
12
|
- gemfiles/rails51.gemfile
|
13
13
|
- gemfiles/rails50.gemfile
|
14
14
|
- gemfiles/rails42.gemfile
|
@@ -18,8 +18,8 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.add_runtime_dependency 'actionpack', '>= 4.2', '<5.3'
|
22
|
-
spec.add_runtime_dependency 'capybara', '
|
21
|
+
spec.add_runtime_dependency 'actionpack', '>= 4.2', '< 5.3'
|
22
|
+
spec.add_runtime_dependency 'capybara', '>= 2', '< 4'
|
23
23
|
spec.add_runtime_dependency 'chunky_png', '~> 1.3'
|
24
24
|
|
25
25
|
spec.add_development_dependency 'bundler', '~> 1.11'
|
@@ -36,8 +36,10 @@ module Capybara
|
|
36
36
|
def quick_equal?
|
37
37
|
return nil unless old_file_exists?
|
38
38
|
return true if new_file_size == old_file_size
|
39
|
+
|
39
40
|
old_bytes, new_bytes = load_image_files(@old_file_name, @new_file_name)
|
40
41
|
return true if old_bytes == new_bytes
|
42
|
+
|
41
43
|
images = load_images(old_bytes, new_bytes)
|
42
44
|
old_bytes = new_bytes = nil # rubocop: disable Lint/UselessAssignment
|
43
45
|
crop_images(images, @dimensions) if @dimensions
|
@@ -147,6 +149,8 @@ module Capybara
|
|
147
149
|
def calculate_max_color_distance(new_image, old_image)
|
148
150
|
pixel_pairs = old_image.pixels.zip(new_image.pixels)
|
149
151
|
@max_color_distance = pixel_pairs.inject(0) do |max, (p1, p2)|
|
152
|
+
next max unless p1 && p2
|
153
|
+
|
150
154
|
d = ChunkyPNG::Color.euclidean_distance_rgba(p1, p2)
|
151
155
|
[max, d].max
|
152
156
|
end
|
@@ -194,6 +198,7 @@ module Capybara
|
|
194
198
|
|
195
199
|
def sizes_changed?(org_image, new_image)
|
196
200
|
return unless org_image.dimension != new_image.dimension
|
201
|
+
|
197
202
|
change_msg = [org_image, new_image].map { |i| "#{i.width}x#{i.height}" }.join(' => ')
|
198
203
|
puts "Image size has changed for #{@new_file_name}: #{change_msg}"
|
199
204
|
true
|
@@ -239,6 +244,7 @@ module Capybara
|
|
239
244
|
old_img.height.times do |y|
|
240
245
|
(0...left).find do |x|
|
241
246
|
next if same_color?(old_img, new_img, x, y)
|
247
|
+
|
242
248
|
top ||= y
|
243
249
|
bottom = y
|
244
250
|
left = x
|
@@ -275,6 +281,7 @@ module Capybara
|
|
275
281
|
color_matches = color_distance == 0 || (@color_distance_limit && @color_distance_limit > 0 &&
|
276
282
|
color_distance <= @color_distance_limit)
|
277
283
|
return color_matches if !@shift_distance_limit || @max_shift_distance == Float::INFINITY
|
284
|
+
|
278
285
|
shift_distance =
|
279
286
|
if color_matches
|
280
287
|
0
|
@@ -354,6 +361,7 @@ module Capybara
|
|
354
361
|
end
|
355
362
|
end
|
356
363
|
break if bounds_breached == 4
|
364
|
+
|
357
365
|
shift_distance += 1
|
358
366
|
end
|
359
367
|
Float::INFINITY
|
@@ -362,6 +370,7 @@ module Capybara
|
|
362
370
|
def color_matches(new_img, org_color, dx, dy, color_distance_limit)
|
363
371
|
new_color = new_img[dx, dy]
|
364
372
|
return new_color == org_color unless color_distance_limit
|
373
|
+
|
365
374
|
color_distance = ChunkyPNG::Color.euclidean_distance_rgba(org_color, new_color)
|
366
375
|
color_distance <= color_distance_limit
|
367
376
|
end
|
@@ -27,6 +27,7 @@ module Capybara
|
|
27
27
|
take_right_size_screenshot(comparison)
|
28
28
|
|
29
29
|
break unless Capybara::Screenshot.stability_time_limit
|
30
|
+
|
30
31
|
if comparison.quick_equal?
|
31
32
|
clean_stabilization_images(comparison.new_file_name)
|
32
33
|
break
|
@@ -63,9 +64,11 @@ module Capybara
|
|
63
64
|
|
64
65
|
def reduce_retina_image_size(file_name)
|
65
66
|
return if !ON_MAC || !selenium? || !Capybara::Screenshot.window_size
|
67
|
+
|
66
68
|
saved_image = ChunkyPNG::Image.from_file(file_name)
|
67
69
|
width = Capybara::Screenshot.window_size[0]
|
68
70
|
return if saved_image.width < width * 2
|
71
|
+
|
69
72
|
unless @_csd_retina_warned
|
70
73
|
warn 'Halving retina screenshot. ' \
|
71
74
|
'You should add "force-device-scale-factor=1" to your Chrome chromeOptions args.'
|
@@ -116,10 +119,12 @@ module Capybara
|
|
116
119
|
|
117
120
|
def assert_images_loaded(timeout: Capybara.default_max_wait_time)
|
118
121
|
return unless respond_to? :evaluate_script
|
122
|
+
|
119
123
|
start = Time.now
|
120
124
|
loop do
|
121
125
|
pending_image = evaluate_script IMAGE_WAIT_SCRIPT
|
122
126
|
break unless pending_image
|
127
|
+
|
123
128
|
assert (Time.now - start) < timeout,
|
124
129
|
"Images not loaded after #{timeout}s: #{pending_image.inspect}"
|
125
130
|
sleep 0.1
|
@@ -49,6 +49,7 @@ module Capybara
|
|
49
49
|
|
50
50
|
def poltergeist?
|
51
51
|
return false unless defined?(Capybara::Poltergeist::Driver)
|
52
|
+
|
52
53
|
current_capybara_driver_class <= Capybara::Poltergeist::Driver
|
53
54
|
end
|
54
55
|
|
@@ -60,6 +61,7 @@ module Capybara
|
|
60
61
|
@screenshot_group = name.to_s
|
61
62
|
@screenshot_counter = 0
|
62
63
|
return unless Screenshot.active? && name.present?
|
64
|
+
|
63
65
|
FileUtils.rm_rf screenshot_dir
|
64
66
|
end
|
65
67
|
|
@@ -67,6 +69,7 @@ module Capybara
|
|
67
69
|
shift_distance_limit: Diff.shift_distance_limit, area_size_limit: Diff.area_size_limit)
|
68
70
|
return unless Screenshot.active?
|
69
71
|
return if window_size_is_wrong?
|
72
|
+
|
70
73
|
if @screenshot_counter
|
71
74
|
name = "#{format('%02i', @screenshot_counter)}_#{name}"
|
72
75
|
@screenshot_counter += 1
|
@@ -83,6 +86,7 @@ module Capybara
|
|
83
86
|
shift_distance_limit: shift_distance_limit,
|
84
87
|
area_size_limit: area_size_limit)
|
85
88
|
return unless comparison.old_file_exists?
|
89
|
+
|
86
90
|
(@test_screenshots ||= []) << [caller(1..1).first, name, comparison]
|
87
91
|
end
|
88
92
|
|
data/matrix_test.rb
CHANGED
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: 0.12.
|
4
|
+
version: 0.12.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: 2018-09
|
11
|
+
date: 2018-11-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: actionpack
|
@@ -34,16 +34,22 @@ dependencies:
|
|
34
34
|
name: capybara
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
|
-
- - "
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '2'
|
40
|
+
- - "<"
|
38
41
|
- !ruby/object:Gem::Version
|
39
|
-
version: '
|
42
|
+
version: '4'
|
40
43
|
type: :runtime
|
41
44
|
prerelease: false
|
42
45
|
version_requirements: !ruby/object:Gem::Requirement
|
43
46
|
requirements:
|
44
|
-
- - "
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '2'
|
50
|
+
- - "<"
|
45
51
|
- !ruby/object:Gem::Version
|
46
|
-
version: '
|
52
|
+
version: '4'
|
47
53
|
- !ruby/object:Gem::Dependency
|
48
54
|
name: chunky_png
|
49
55
|
requirement: !ruby/object:Gem::Requirement
|
@@ -165,6 +171,7 @@ files:
|
|
165
171
|
- gemfiles/rails42.gemfile
|
166
172
|
- gemfiles/rails50.gemfile
|
167
173
|
- gemfiles/rails51.gemfile
|
174
|
+
- gemfiles/rails52.gemfile
|
168
175
|
- lib/capybara/screenshot/diff.rb
|
169
176
|
- lib/capybara/screenshot/diff/image_compare.rb
|
170
177
|
- lib/capybara/screenshot/diff/os.rb
|