capybara-screenshot-diff 0.5.1 → 0.5.2

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
  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