capybara-screenshot-diff 1.6.2 → 1.6.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 20b4db107019526c96ab897a33d33b216bbe4dc177422593788edfea085e7209
4
- data.tar.gz: 07b4e70a28fa8c85475dd7d804eb2e5f808e7e86a6e95892ade41341b9284736
3
+ metadata.gz: ecb7108c89946f6489787b491c0cd831f096d09ee656e68674887952682aee7a
4
+ data.tar.gz: d41e23dae6a64663d26b586235ccc4cdc10d02a43b3fefa6a8563327cde563bd
5
5
  SHA512:
6
- metadata.gz: 8f3f56d3bbc74dcba0fe48a5f6e281a5df381f49caf1ce0e49ebe04e813f2d634f6939e9221285e23e6dc2b759ff832320feeee3dc82105360b1c00ba860758f
7
- data.tar.gz: 343cc3cc4f16d9c24c90814375ea44df8c8ddf7f8e89e36a7da55e2a642539c71f400870ef29d2665619e20f8a77a8ec9ec7ba930af95102ece8f4a4e70b8f9b
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)
@@ -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.2"
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,19 +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
- if defined?(failures)
100
- failures << e
101
- else
102
- raise e
103
- end
104
- 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
105
112
  end
106
113
  end
107
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.2
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-05-10 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