capybara-screenshot-diff 1.6.0 → 1.6.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e85ce13b84f6e2123eb3ca30dd761437bb1a3d9e06bc7c6ae2ae7baeedab7c2c
4
- data.tar.gz: 9583c84bb295c48ab0b7fe262fccdf1e5f4edd27c551a98722e3951fcc8e0134
3
+ metadata.gz: ecb7108c89946f6489787b491c0cd831f096d09ee656e68674887952682aee7a
4
+ data.tar.gz: d41e23dae6a64663d26b586235ccc4cdc10d02a43b3fefa6a8563327cde563bd
5
5
  SHA512:
6
- metadata.gz: a3aeb660f1307065ac2147153878dbbbb68441c33c34c4fb2e288e227d6abad5714c3a94f7cc0934acddfc02c3c36610b06a3652a5c5b8df21c1f3a60049c1db
7
- data.tar.gz: 17fda8ceb42ed9be84a7548f02bfe8940385a6abd6e8e185c2f9753f8c252c577bcafeea576a1b311e85dfb144825916b51db654d7eebadfa8d17f1231ddbcd5
6
+ metadata.gz: 89501dc8c7ab1b540d182dacd10f8bf2d3b24521851db20bed42eb7c066b484d5a5cfbc766a4a0d5c80539500c1eef342f55be4069da455ba1d2ba14524d2463
7
+ data.tar.gz: 12c02e086af0df03206eaa5ac332306b0b199c33d70b6393c64a60a70a5777e4598b4aedf67afc0a6aa06166247efd7e6a0c21652aa4c2587e13009566363b87
@@ -5,8 +5,8 @@ on:
5
5
  branches: [ master ]
6
6
  pull_request:
7
7
  paths:
8
- - '*.rb'
9
- - '*.gemfile'
8
+ - '**.rb'
9
+ - '**.gemfile'
10
10
  - '!bin/**'
11
11
 
12
12
  env:
@@ -115,7 +115,7 @@ module Capybara
115
115
  end
116
116
 
117
117
  def crop(dimensions, i)
118
- i.crop(0, 0, *dimensions)
118
+ i.crop(*dimensions)
119
119
  end
120
120
 
121
121
  def from_file(filename)
@@ -135,7 +135,7 @@ module Capybara
135
135
 
136
136
  old_image, new_image = _load_images(old_file, new_file)
137
137
  calculate_max_color_distance(new_image, old_image)
138
- calculate_max_shift_limit(new_image, old_image)
138
+ calculate_max_shift_limit(new_image, old_image) if @shift_distance_limit
139
139
  end
140
140
 
141
141
  def calculate_max_color_distance(new_image, old_image)
@@ -18,6 +18,13 @@ module Capybara
18
18
  end
19
19
  result
20
20
  end
21
+
22
+ def self.detect_test_framework_assert
23
+ require "minitest"
24
+ ::Minitest::Assertion
25
+ rescue
26
+ ::RuntimeError
27
+ end
21
28
  end
22
29
  end
23
30
  end
@@ -69,7 +69,7 @@ module Capybara
69
69
  end
70
70
 
71
71
  def crop(dimensions, i)
72
- i.crop(0, 0, *dimensions)
72
+ i.crop(*dimensions)
73
73
  end
74
74
 
75
75
  def filter_image_with_median(image, median_filter_window_size)
@@ -104,8 +104,14 @@ module Capybara
104
104
  image.width
105
105
  end
106
106
 
107
+ PNG_EXTENSION = ".png"
108
+
109
+ # Vips could not work with the same file. Per each process we require to create new file
107
110
  def save_image_to(image, filename)
108
- image.write_to_file(filename)
111
+ ::Dir::Tmpname.create([filename, PNG_EXTENSION]) do |tmp_image_filename|
112
+ image.write_to_file(tmp_image_filename)
113
+ FileUtils.mv(tmp_image_filename, filename)
114
+ end
109
115
  end
110
116
 
111
117
  def resize_image_to(image, new_width, new_height)
@@ -110,11 +110,7 @@ module Capybara
110
110
  new_height = expected_image_width * driver.height_for(saved_image) / driver.width_for(saved_image)
111
111
  resized_image = driver.resize_image_to(saved_image, expected_image_width, new_height)
112
112
 
113
- Dir.mktmpdir do |dir|
114
- resized_image_file = "#{dir}/resized.png"
115
- driver.save_image_to(resized_image, resized_image_file)
116
- FileUtils.mv(resized_image_file, file_name)
117
- end
113
+ driver.save_image_to(resized_image, file_name)
118
114
  end
119
115
 
120
116
  def stabilization_images(base_file)
@@ -143,16 +139,18 @@ module Capybara
143
139
  end
144
140
 
145
141
  def take_right_size_screenshot(comparison, crop:)
142
+ driver = comparison.driver
143
+
146
144
  save_screenshot(comparison.new_file_name)
147
145
 
148
146
  # TODO(uwe): Remove when chromedriver takes right size screenshots
149
- reduce_retina_image_size(comparison.new_file_name, comparison.driver)
147
+ reduce_retina_image_size(comparison.new_file_name, driver)
150
148
  # ODOT
151
149
 
152
150
  if crop
153
- full_img = comparison.driver.from_file(comparison.new_file_name)
154
- area_img = full_img.crop(crop[0], crop[1], crop[2] - crop[0], crop[3] - crop[1])
155
- comparison.driver.save_image_to(area_img, comparison.new_file_name)
151
+ full_img = driver.from_file(comparison.new_file_name)
152
+ area_img = driver.crop([crop[0], crop[1], crop[2] - crop[0], crop[3] - crop[1]], full_img)
153
+ driver.save_image_to(area_img, comparison.new_file_name)
156
154
  end
157
155
  end
158
156
 
@@ -3,7 +3,7 @@
3
3
  module Capybara
4
4
  module Screenshot
5
5
  module Diff
6
- VERSION = "1.6.0"
6
+ VERSION = "1.6.3"
7
7
  end
8
8
  end
9
9
  end
@@ -52,15 +52,10 @@ module Capybara
52
52
  mattr_accessor :shift_distance_limit
53
53
  mattr_accessor :skip_area
54
54
  mattr_accessor(:driver) { :auto }
55
- mattr_accessor(:tolerance) { 0.001 }
55
+ mattr_accessor :tolerance
56
56
 
57
57
  AVAILABLE_DRIVERS = Utils.detect_available_drivers.freeze
58
- begin
59
- require "minitest"
60
- ASSERTION = Minitest::Assertion
61
- rescue
62
- ASSERTION = RuntimeError
63
- end
58
+ ASSERTION = Utils.detect_test_framework_assert
64
59
 
65
60
  def self.default_options
66
61
  {
@@ -70,7 +65,7 @@ module Capybara
70
65
  shift_distance_limit: shift_distance_limit,
71
66
  skip_area: skip_area,
72
67
  stability_time_limit: Screenshot.stability_time_limit,
73
- tolerance: tolerance,
68
+ tolerance: tolerance || (driver == :vips ? 0.001 : nil),
74
69
  wait: Capybara.default_max_wait_time
75
70
  }
76
71
  end
@@ -89,15 +84,31 @@ module Capybara
89
84
 
90
85
  klass.teardown do
91
86
  if Capybara::Screenshot.active? && @test_screenshots
92
- test_screenshot_errors = @test_screenshots
93
- .map { |caller, name, compare| assert_image_not_changed(caller, name, compare) }
94
- @test_screenshots = nil # release the comparison objects from memory
95
- test_screenshot_errors.compact!
96
- if test_screenshot_errors.any?
97
- e = ASSERTION.new(test_screenshot_errors.join("\n\n"))
98
- e.set_backtrace(caller)
99
- failures << e
100
- end
87
+ track_failures(@test_screenshots, caller)
88
+ @test_screenshots = nil
89
+ end
90
+ end
91
+ end
92
+
93
+ private
94
+
95
+ EMPTY_LINE = "\n\n"
96
+
97
+ def track_failures(screenshots, original_caller)
98
+ test_screenshot_errors = screenshots.map do |caller, name, compare|
99
+ assert_image_not_changed(caller, name, compare)
100
+ end
101
+
102
+ test_screenshot_errors.compact!
103
+
104
+ unless test_screenshot_errors.empty?
105
+ error = ASSERTION.new(test_screenshot_errors.join(EMPTY_LINE))
106
+ error.set_backtrace(original_caller)
107
+
108
+ if is_a?(::Minitest::Runnable)
109
+ failures << error
110
+ else
111
+ raise error
101
112
  end
102
113
  end
103
114
  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.6.0
4
+ version: 1.6.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Uwe Kubosch
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-04-22 00:00:00.000000000 Z
11
+ date: 2022-06-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionpack