capybara-screenshot-diff 0.5.1 → 0.5.2

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
  SHA1:
3
- metadata.gz: 604ae93ede2004c5acaadd0ac94aae73bb200e9f
4
- data.tar.gz: 987614ec8c0a6a5b2d6c1ebf4645af12671299ce
3
+ metadata.gz: 31b02395af8b464ceeb774dbf6364497e0127daa
4
+ data.tar.gz: 2bd199042023db6a41d51e0312fb791d2da0ece6
5
5
  SHA512:
6
- metadata.gz: c11c1da55ef26edd154478afcbfafa5ac741225527abe2e40fd4dbb255b98295aedab740f3a759d8b6dfce0e99370e24f7adfca77ef0c99afabac59b094ce308
7
- data.tar.gz: 15c6a5317ef11703fee0d76fe4d1d607afec3f6c3f0e313afa3ec45826e6e36db2b5c2cd044a2305b5a5651f39194e78213b1a4a645ddb09b6b534510ad9e562
6
+ metadata.gz: 116bc4c1258f770998f2451ab3abcb124bc4b6926961e4cae7edf3cb32e128d990fed362b18b1226d9c84fdfb92fb88e21bffb5691fe6faf5077884bd1d6e7e9
7
+ data.tar.gz: a40a2b6e2f471d9762fc0e2cfe8da22ec3a89bf5ccbb0971ef5afb43944386193a3636849281194094c2810e24905a755ede1e3ac700580057d32cc1da02912d
@@ -127,8 +127,10 @@ module ActionDispatch
127
127
 
128
128
  FileUtils.mkdir_p File.dirname(file_name)
129
129
  committed_file_name = check_vcs(name, file_name, org_name)
130
- take_stable_screenshot(file_name)
131
- return unless committed_file_name && File.exist?(committed_file_name)
130
+ previous_file_exists = committed_file_name && File.exist?(committed_file_name)
131
+ previous_size = File.size(committed_file_name) if previous_file_exists
132
+ take_stable_screenshot(file_name, previous_size)
133
+ return unless previous_file_exists
132
134
  (@test_screenshots ||= []) << [caller[0], name, file_name, committed_file_name, new_name, org_name]
133
135
  end
134
136
 
@@ -182,38 +184,46 @@ EOF
182
184
  pending_image = evaluate_script IMAGE_WAIT_SCRIPT
183
185
  break unless pending_image
184
186
  assert (Time.now - start) < timeout,
185
- "Image not loaded after #{timeout}s: #{pending_image.inspect}"
187
+ "Images not loaded after #{timeout}s: #{pending_image.inspect}"
186
188
  sleep 0.1
187
189
  end
188
190
  end
189
191
 
190
- def take_stable_screenshot(file_name)
192
+ def take_stable_screenshot(file_name, original_file_size = nil)
191
193
  assert_images_loaded
192
- old_file_size = nil
194
+ old_file_size = original_file_size
195
+ screeenshot_started_at = last_image_change_at = Time.now
193
196
  loop do
194
197
  save_screenshot(file_name)
195
198
 
196
- # FIXME(uwe): Remove when chromedriver take right size screenshots
197
- # Reduce Retina image size
198
- if self.class.macos? && selenium? && Capybara::Screenshot.window_size
199
- saved_image = ChunkyPNG::Image.from_file(file_name)
200
- width = Capybara::Screenshot.window_size[0]
201
- if saved_image.width >= width * 2
202
- height = (width * saved_image.height) / saved_image.width
203
- resized_image = saved_image.resample_bilinear(width, height)
204
- resized_image.save(file_name)
205
- end
206
- end
199
+ # TODO(uwe): Remove when chromedriver take right size screenshots
200
+ reduce_retina_image_size(file_name)
207
201
  # EMXIF
208
202
 
209
203
  break unless Capybara::Screenshot.stability_time_limit
210
204
  new_file_size = File.size(file_name)
211
- break if new_file_size == old_file_size
205
+ break if new_file_size == original_file_size
206
+ break if new_file_size == old_file_size &&
207
+ (Time.now - last_image_change_at) > Capybara::Screenshot.stability_time_limit
208
+ last_image_change_at = Time.now if new_file_size != old_file_size
212
209
  old_file_size = new_file_size
213
- sleep Capybara::Screenshot.stability_time_limit
210
+ sleep 0.1
211
+
212
+ assert (Time.now - screeenshot_started_at) < Capybara.default_max_wait_time,
213
+ "Could not get stable screenshot within #{Capybara.default_max_wait_time}s"
214
214
  end
215
215
  end
216
216
 
217
+ private def reduce_retina_image_size(file_name)
218
+ return if !self.class.macos? || !selenium? || !Capybara::Screenshot.window_size
219
+ saved_image = ChunkyPNG::Image.from_file(file_name)
220
+ width = Capybara::Screenshot.window_size[0]
221
+ return if saved_image.width < width * 2
222
+ height = (width * saved_image.height) / saved_image.width
223
+ resized_image = saved_image.resample_bilinear(width, height)
224
+ resized_image.save(file_name)
225
+ end
226
+
217
227
  def assert_image_not_changed(caller, name, file_name, committed_file_name, new_name, org_name)
218
228
  if Capybara::Screenshot::Diff::ImageCompare.compare(committed_file_name, file_name,
219
229
  Capybara::Screenshot.window_size)
@@ -3,7 +3,7 @@
3
3
  module Capybara
4
4
  module Screenshot
5
5
  module Diff
6
- VERSION = '0.5.1'.freeze
6
+ VERSION = '0.5.2'.freeze
7
7
  end
8
8
  end
9
9
  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: 0.5.1
4
+ version: 0.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Uwe Kubosch
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-06-22 00:00:00.000000000 Z
11
+ date: 2017-06-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionpack