capybara-screenshot-diff 1.6.0 → 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: 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