capybara-screenshot-diff 0.7.2 → 0.8.0

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