capybara-screenshot-diff 0.7.2 → 0.8.0

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: 56328c516cec1f21d0a661ed3db8310bc746fcf2
4
- data.tar.gz: f32f91bba312988edce7a8115a1bfe370a0b382e
3
+ metadata.gz: a3b1581dfd6dfe2bc40dfcff8a5414839ed9cffd
4
+ data.tar.gz: f149dcc7655cdc88216d93de719805ba5369cc96
5
5
  SHA512:
6
- metadata.gz: 93cc396735044fa6ecfd93cb428445fc7ebe4b94241258731056a89182d0db1ed020b8130e6092e6022f3b64982416dfa78aa61b993379649f83ed060e979c8b
7
- data.tar.gz: bba12b95dba9083595e0dc0b6095c657aab5815fed255f78973cdebdc2af3b618227fe5c8950f5622545be576da68953cc19c0b4e99398f097f4ef04be5b9b89
6
+ metadata.gz: c78deed42053ef6d72df85e3d489b458eac585e363370da2753da56d69cbaded5f04c08e736402aa7bb38bbf5b64e0d7d06c08f7302491c9c77e7a27a2c5cab9
7
+ data.tar.gz: 15a51febc69814816067a77ba18708e1919e96f286a01794964671a8c55cf38eded0ce35897a0a92b012d7255998d0b34b3ce14e73fb7f0d88f9fe2b1e20ac87
data/.rubocop_todo.yml CHANGED
@@ -34,7 +34,7 @@ Metrics/MethodLength:
34
34
 
35
35
  # Offense count: 1
36
36
  Metrics/PerceivedComplexity:
37
- Max: 8
37
+ Max: 9
38
38
 
39
39
  # Offense count: 1
40
40
  Performance/Caller:
@@ -126,10 +126,10 @@ module ActionDispatch
126
126
  file_name = "#{self.class.screenshot_area_abs}/#{name}.png"
127
127
 
128
128
  FileUtils.mkdir_p File.dirname(file_name)
129
- committed_file_name = check_vcs(name, file_name)
130
- comparison = Capybara::Screenshot::Diff::ImageCompare.new(committed_file_name, file_name,
129
+ comparison = Capybara::Screenshot::Diff::ImageCompare.new(file_name,
131
130
  dimensions: Capybara::Screenshot.window_size, color_distance_limit: color_distance_limit,
132
131
  area_size_limit: area_size_limit)
132
+ checkout_vcs(name, comparison)
133
133
  take_stable_screenshot(comparison)
134
134
  return unless comparison.old_file_exists?
135
135
  (@test_screenshots ||= []) << [caller[0], name, comparison]
@@ -142,32 +142,30 @@ module ActionDispatch
142
142
  Selenium::WebDriver::Dimension.new(*Capybara::Screenshot.window_size)
143
143
  end
144
144
 
145
- private def check_vcs(name, file_name)
145
+ private def checkout_vcs(name, comparison)
146
146
  svn_file_name = "#{self.class.screenshot_area_abs}/.svn/text-base/#{name}.png.svn-base"
147
147
  if File.exist?(svn_file_name)
148
148
  committed_file_name = svn_file_name
149
+ FileUtils.cp committed_file_name, comparison.old_file_name
149
150
  else
150
- svn_info = `svn info #{file_name} #{SILENCE_ERRORS}`
151
+ svn_info = `svn info #{comparison.new_file_name} #{SILENCE_ERRORS}`
151
152
  if svn_info.present?
152
153
  wc_root = svn_info.slice(/(?<=Working Copy Root Path: ).*$/)
153
154
  checksum = svn_info.slice(/(?<=Checksum: ).*$/)
154
155
  if checksum
155
156
  committed_file_name = "#{wc_root}/.svn/pristine/#{checksum[0..1]}/#{checksum}.svn-base"
157
+ FileUtils.cp committed_file_name, comparison.old_file_name
156
158
  end
157
159
  else
158
- committed_file_name = restore_git_revision(name,
159
- Capybara::Screenshot::Diff::ImageCompare.annotated_old_file_name(file_name))
160
+ restore_git_revision(name, comparison.old_file_name)
160
161
  end
161
162
  end
162
- committed_file_name
163
163
  end
164
164
 
165
- private def restore_git_revision(name, org_name)
166
- committed_file_name = org_name
167
- redirect_target = "#{committed_file_name} #{SILENCE_ERRORS}"
165
+ private def restore_git_revision(name, target_file_name)
166
+ redirect_target = "#{target_file_name} #{SILENCE_ERRORS}"
168
167
  `git show HEAD~0:./#{self.class.screenshot_area}/#{name}.png > #{redirect_target}`
169
- FileUtils.rm_f(committed_file_name) if File.size(committed_file_name) == 0
170
- committed_file_name
168
+ FileUtils.rm_f(target_file_name) unless $CHILD_STATUS == 0
171
169
  end
172
170
 
173
171
  IMAGE_WAIT_SCRIPT = <<EOF.freeze
@@ -194,35 +192,44 @@ EOF
194
192
  end
195
193
  end
196
194
 
197
- private def take_stable_screenshot(comparison)
195
+ private def take_stable_screenshot(comparison) # rubocop: disable Metrics/AbcSize, Metrics/MethodLength
198
196
  assert_images_loaded
199
197
  if Capybara::Screenshot.blur_active_element
200
- input = page.driver.send :unwrap_script_result, execute_script('ae=document.activeElement;if (ae.nodeName == "INPUT"){ae.blur();return ae};return null')
198
+ active_element =
199
+ execute_script(<<-JS)
200
+ ae=document.activeElement
201
+ if (ae.nodeName == "INPUT" || ae.nodeName == "TEXTAREA"){ae.blur();return ae}
202
+ return null
203
+ JS
204
+ input = page.driver.send :unwrap_script_result, active_element
201
205
  end
202
206
  previous_file_size = comparison.old_file_size
203
207
  screeenshot_started_at = last_image_change_at = Time.now
204
208
  loop do
205
209
  save_screenshot(comparison.new_file_name)
206
210
 
207
- # TODO(uwe): Remove when chromedriver take right size screenshots
211
+ # TODO(uwe): Remove when chromedriver takes right size screenshots
208
212
  reduce_retina_image_size(comparison.new_file_name)
209
213
  # EMXIF
210
214
 
211
215
  break unless Capybara::Screenshot.stability_time_limit
212
216
  break if comparison.quick_equal?
213
217
 
214
- if comparison.new_file_size == previous_file_size
215
- if (Time.now - last_image_change_at) > Capybara::Screenshot.stability_time_limit
216
- break
218
+ new_file_size = comparison.new_file_size
219
+ if previous_file_size
220
+ if new_file_size == previous_file_size
221
+ if (Time.now - last_image_change_at) > Capybara::Screenshot.stability_time_limit
222
+ break
223
+ end
224
+ else
225
+ last_image_change_at = Time.now
217
226
  end
218
- else
219
- last_image_change_at = Time.now
220
- end
221
227
 
222
- assert (Time.now - screeenshot_started_at) < Capybara.default_max_wait_time,
223
- "Could not get stable screenshot within #{Capybara.default_max_wait_time}s"
228
+ assert (Time.now - screeenshot_started_at) < Capybara.default_max_wait_time,
229
+ "Could not get stable screenshot within #{Capybara.default_max_wait_time}s"
230
+ end
224
231
 
225
- previous_file_size = comparison.new_file_size
232
+ previous_file_size = new_file_size
226
233
  comparison.reset
227
234
  end
228
235
  ensure
@@ -6,24 +6,17 @@ module Capybara
6
6
  class ImageCompare
7
7
  include ChunkyPNG::Color
8
8
 
9
- attr_reader :annotated_new_file_name, :annotated_old_file_name, :new_file_name
9
+ attr_reader :annotated_new_file_name, :annotated_old_file_name, :new_file_name,
10
+ :old_file_name
10
11
 
11
- def self.compare(*args)
12
- new(*args).different?
13
- end
14
-
15
- def self.annotated_old_file_name(new_file_name)
16
- "#{new_file_name.chomp('.png')}_0.png~"
17
- end
18
-
19
- def initialize(old_file_name, new_file_name, dimensions: nil, color_distance_limit: nil,
12
+ def initialize(new_file_name, dimensions: nil, color_distance_limit: nil,
20
13
  area_size_limit: nil)
21
- @old_file_name = old_file_name
22
14
  @new_file_name = new_file_name
23
15
  @color_distance_limit = color_distance_limit
24
16
  @area_size_limit = area_size_limit
25
17
  @dimensions = dimensions
26
- @annotated_old_file_name = self.class.annotated_old_file_name(new_file_name)
18
+ @old_file_name = "#{new_file_name}~"
19
+ @annotated_old_file_name = "#{new_file_name.chomp('.png')}_0.png~"
27
20
  @annotated_new_file_name = "#{new_file_name.chomp('.png')}_1.png~"
28
21
  reset
29
22
  end
@@ -93,7 +86,7 @@ module Capybara
93
86
  end
94
87
 
95
88
  private def not_different
96
- clean_tmp_files(@annotated_old_file_name, @annotated_new_file_name)
89
+ clean_tmp_files
97
90
  false
98
91
  end
99
92
 
@@ -138,9 +131,11 @@ module Capybara
138
131
  new_img.save(new_file_name)
139
132
  end
140
133
 
141
- def clean_tmp_files(old_file_name, new_file_name)
142
- File.delete(old_file_name) if File.exist?(old_file_name)
143
- File.delete(new_file_name) if File.exist?(new_file_name)
134
+ def clean_tmp_files
135
+ FileUtils.cp @old_file_name, @new_file_name
136
+ File.delete(@old_file_name) if File.exist?(@annotated_old_file_name)
137
+ File.delete(@annotated_old_file_name) if File.exist?(@annotated_old_file_name)
138
+ File.delete(@annotated_new_file_name) if File.exist?(@annotated_new_file_name)
144
139
  end
145
140
 
146
141
  def load_images(old_file, new_file)
@@ -3,7 +3,7 @@
3
3
  module Capybara
4
4
  module Screenshot
5
5
  module Diff
6
- VERSION = '0.7.2'.freeze
6
+ VERSION = '0.8.0'.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.7.2
4
+ version: 0.8.0
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-07-12 00:00:00.000000000 Z
11
+ date: 2017-07-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionpack