capybara-screenshot-diff 0.12.0 → 0.12.1
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 +4 -4
- data/.rubocop_todo.yml +1 -1
- data/.travis.yml +2 -2
- data/capybara-screenshot-diff.gemspec +2 -2
- data/gemfiles/rails52.gemfile +3 -0
- data/lib/capybara/screenshot/diff/image_compare.rb +9 -0
- data/lib/capybara/screenshot/diff/os.rb +1 -0
- data/lib/capybara/screenshot/diff/stabilization.rb +5 -0
- data/lib/capybara/screenshot/diff/test_methods.rb +4 -0
- data/lib/capybara/screenshot/diff/version.rb +1 -1
- data/matrix_test.rb +1 -0
- metadata +13 -6
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 7f8a739e8e6e8f3de068e2d6dab4317017025730dbbeeb72459f73eb8dcb9e1a
         | 
| 4 | 
            +
              data.tar.gz: e214590aca05de27eea1874fd64a8389c792b00801f215d813acf3e5f82ddf18
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: d7e28f6579e2ccb54e42d64889806884bad3434283ad5bd50caf18c758a0482a0e8c0c248d4c9c15131e671f2250964753dbd1c9aa9c56bf62cb0e1dca8a2db5
         | 
| 7 | 
            +
              data.tar.gz: 8d3bca6920baf9c8f46c2a7914491fb49540d0abe7e53a770dff6aad163f24db1b685b4ef124870d244cd9f479b02248cca9bed00dd8a626e73b20107b668fe1
         | 
    
        data/.rubocop_todo.yml
    CHANGED
    
    
    
        data/.travis.yml
    CHANGED
    
    | @@ -2,13 +2,13 @@ language: ruby | |
| 2 2 | 
             
            sudo: false
         | 
| 3 3 | 
             
            cache: bundler
         | 
| 4 4 | 
             
            rvm:
         | 
| 5 | 
            -
              - jruby-9. | 
| 5 | 
            +
              - jruby-9.2.0.0
         | 
| 6 6 | 
             
              - ruby-2.5.1
         | 
| 7 7 | 
             
              - ruby-2.4.4
         | 
| 8 8 | 
             
              - ruby-2.3.7
         | 
| 9 | 
            -
              - ruby-2.2.10
         | 
| 10 9 |  | 
| 11 10 | 
             
            gemfile:
         | 
| 11 | 
            +
              - gemfiles/rails52.gemfile
         | 
| 12 12 | 
             
              - gemfiles/rails51.gemfile
         | 
| 13 13 | 
             
              - gemfiles/rails50.gemfile
         | 
| 14 14 | 
             
              - gemfiles/rails42.gemfile
         | 
| @@ -18,8 +18,8 @@ Gem::Specification.new do |spec| | |
| 18 18 | 
             
              spec.executables   = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
         | 
| 19 19 | 
             
              spec.require_paths = ['lib']
         | 
| 20 20 |  | 
| 21 | 
            -
              spec.add_runtime_dependency 'actionpack', '>= 4.2', '<5.3'
         | 
| 22 | 
            -
              spec.add_runtime_dependency 'capybara', ' | 
| 21 | 
            +
              spec.add_runtime_dependency 'actionpack', '>= 4.2', '< 5.3'
         | 
| 22 | 
            +
              spec.add_runtime_dependency 'capybara', '>= 2', '< 4'
         | 
| 23 23 | 
             
              spec.add_runtime_dependency 'chunky_png', '~> 1.3'
         | 
| 24 24 |  | 
| 25 25 | 
             
              spec.add_development_dependency 'bundler', '~> 1.11'
         | 
| @@ -36,8 +36,10 @@ module Capybara | |
| 36 36 | 
             
                    def quick_equal?
         | 
| 37 37 | 
             
                      return nil unless old_file_exists?
         | 
| 38 38 | 
             
                      return true if new_file_size == old_file_size
         | 
| 39 | 
            +
             | 
| 39 40 | 
             
                      old_bytes, new_bytes = load_image_files(@old_file_name, @new_file_name)
         | 
| 40 41 | 
             
                      return true if old_bytes == new_bytes
         | 
| 42 | 
            +
             | 
| 41 43 | 
             
                      images = load_images(old_bytes, new_bytes)
         | 
| 42 44 | 
             
                      old_bytes = new_bytes = nil # rubocop: disable Lint/UselessAssignment
         | 
| 43 45 | 
             
                      crop_images(images, @dimensions) if @dimensions
         | 
| @@ -147,6 +149,8 @@ module Capybara | |
| 147 149 | 
             
                    def calculate_max_color_distance(new_image, old_image)
         | 
| 148 150 | 
             
                      pixel_pairs = old_image.pixels.zip(new_image.pixels)
         | 
| 149 151 | 
             
                      @max_color_distance = pixel_pairs.inject(0) do |max, (p1, p2)|
         | 
| 152 | 
            +
                        next max unless p1 && p2
         | 
| 153 | 
            +
             | 
| 150 154 | 
             
                        d = ChunkyPNG::Color.euclidean_distance_rgba(p1, p2)
         | 
| 151 155 | 
             
                        [max, d].max
         | 
| 152 156 | 
             
                      end
         | 
| @@ -194,6 +198,7 @@ module Capybara | |
| 194 198 |  | 
| 195 199 | 
             
                    def sizes_changed?(org_image, new_image)
         | 
| 196 200 | 
             
                      return unless org_image.dimension != new_image.dimension
         | 
| 201 | 
            +
             | 
| 197 202 | 
             
                      change_msg = [org_image, new_image].map { |i| "#{i.width}x#{i.height}" }.join(' => ')
         | 
| 198 203 | 
             
                      puts "Image size has changed for #{@new_file_name}: #{change_msg}"
         | 
| 199 204 | 
             
                      true
         | 
| @@ -239,6 +244,7 @@ module Capybara | |
| 239 244 | 
             
                      old_img.height.times do |y|
         | 
| 240 245 | 
             
                        (0...left).find do |x|
         | 
| 241 246 | 
             
                          next if same_color?(old_img, new_img, x, y)
         | 
| 247 | 
            +
             | 
| 242 248 | 
             
                          top ||= y
         | 
| 243 249 | 
             
                          bottom = y
         | 
| 244 250 | 
             
                          left = x
         | 
| @@ -275,6 +281,7 @@ module Capybara | |
| 275 281 | 
             
                      color_matches = color_distance == 0 || (@color_distance_limit && @color_distance_limit > 0 &&
         | 
| 276 282 | 
             
                          color_distance <= @color_distance_limit)
         | 
| 277 283 | 
             
                      return color_matches if !@shift_distance_limit || @max_shift_distance == Float::INFINITY
         | 
| 284 | 
            +
             | 
| 278 285 | 
             
                      shift_distance =
         | 
| 279 286 | 
             
                        if color_matches
         | 
| 280 287 | 
             
                          0
         | 
| @@ -354,6 +361,7 @@ module Capybara | |
| 354 361 | 
             
                          end
         | 
| 355 362 | 
             
                        end
         | 
| 356 363 | 
             
                        break if bounds_breached == 4
         | 
| 364 | 
            +
             | 
| 357 365 | 
             
                        shift_distance += 1
         | 
| 358 366 | 
             
                      end
         | 
| 359 367 | 
             
                      Float::INFINITY
         | 
| @@ -362,6 +370,7 @@ module Capybara | |
| 362 370 | 
             
                    def color_matches(new_img, org_color, dx, dy, color_distance_limit)
         | 
| 363 371 | 
             
                      new_color = new_img[dx, dy]
         | 
| 364 372 | 
             
                      return new_color == org_color unless color_distance_limit
         | 
| 373 | 
            +
             | 
| 365 374 | 
             
                      color_distance = ChunkyPNG::Color.euclidean_distance_rgba(org_color, new_color)
         | 
| 366 375 | 
             
                      color_distance <= color_distance_limit
         | 
| 367 376 | 
             
                    end
         | 
| @@ -27,6 +27,7 @@ module Capybara | |
| 27 27 | 
             
                        take_right_size_screenshot(comparison)
         | 
| 28 28 |  | 
| 29 29 | 
             
                        break unless Capybara::Screenshot.stability_time_limit
         | 
| 30 | 
            +
             | 
| 30 31 | 
             
                        if comparison.quick_equal?
         | 
| 31 32 | 
             
                          clean_stabilization_images(comparison.new_file_name)
         | 
| 32 33 | 
             
                          break
         | 
| @@ -63,9 +64,11 @@ module Capybara | |
| 63 64 |  | 
| 64 65 | 
             
                    def reduce_retina_image_size(file_name)
         | 
| 65 66 | 
             
                      return if !ON_MAC || !selenium? || !Capybara::Screenshot.window_size
         | 
| 67 | 
            +
             | 
| 66 68 | 
             
                      saved_image = ChunkyPNG::Image.from_file(file_name)
         | 
| 67 69 | 
             
                      width = Capybara::Screenshot.window_size[0]
         | 
| 68 70 | 
             
                      return if saved_image.width < width * 2
         | 
| 71 | 
            +
             | 
| 69 72 | 
             
                      unless @_csd_retina_warned
         | 
| 70 73 | 
             
                        warn 'Halving retina screenshot.  ' \
         | 
| 71 74 | 
             
                            'You should add "force-device-scale-factor=1" to your Chrome chromeOptions args.'
         | 
| @@ -116,10 +119,12 @@ module Capybara | |
| 116 119 |  | 
| 117 120 | 
             
                    def assert_images_loaded(timeout: Capybara.default_max_wait_time)
         | 
| 118 121 | 
             
                      return unless respond_to? :evaluate_script
         | 
| 122 | 
            +
             | 
| 119 123 | 
             
                      start = Time.now
         | 
| 120 124 | 
             
                      loop do
         | 
| 121 125 | 
             
                        pending_image = evaluate_script IMAGE_WAIT_SCRIPT
         | 
| 122 126 | 
             
                        break unless pending_image
         | 
| 127 | 
            +
             | 
| 123 128 | 
             
                        assert (Time.now - start) < timeout,
         | 
| 124 129 | 
             
                            "Images not loaded after #{timeout}s: #{pending_image.inspect}"
         | 
| 125 130 | 
             
                        sleep 0.1
         | 
| @@ -49,6 +49,7 @@ module Capybara | |
| 49 49 |  | 
| 50 50 | 
             
                    def poltergeist?
         | 
| 51 51 | 
             
                      return false unless defined?(Capybara::Poltergeist::Driver)
         | 
| 52 | 
            +
             | 
| 52 53 | 
             
                      current_capybara_driver_class <= Capybara::Poltergeist::Driver
         | 
| 53 54 | 
             
                    end
         | 
| 54 55 |  | 
| @@ -60,6 +61,7 @@ module Capybara | |
| 60 61 | 
             
                      @screenshot_group = name.to_s
         | 
| 61 62 | 
             
                      @screenshot_counter = 0
         | 
| 62 63 | 
             
                      return unless Screenshot.active? && name.present?
         | 
| 64 | 
            +
             | 
| 63 65 | 
             
                      FileUtils.rm_rf screenshot_dir
         | 
| 64 66 | 
             
                    end
         | 
| 65 67 |  | 
| @@ -67,6 +69,7 @@ module Capybara | |
| 67 69 | 
             
                        shift_distance_limit: Diff.shift_distance_limit, area_size_limit: Diff.area_size_limit)
         | 
| 68 70 | 
             
                      return unless Screenshot.active?
         | 
| 69 71 | 
             
                      return if window_size_is_wrong?
         | 
| 72 | 
            +
             | 
| 70 73 | 
             
                      if @screenshot_counter
         | 
| 71 74 | 
             
                        name = "#{format('%02i', @screenshot_counter)}_#{name}"
         | 
| 72 75 | 
             
                        @screenshot_counter += 1
         | 
| @@ -83,6 +86,7 @@ module Capybara | |
| 83 86 | 
             
                                                         shift_distance_limit: shift_distance_limit,
         | 
| 84 87 | 
             
                                                         area_size_limit: area_size_limit)
         | 
| 85 88 | 
             
                      return unless comparison.old_file_exists?
         | 
| 89 | 
            +
             | 
| 86 90 | 
             
                      (@test_screenshots ||= []) << [caller(1..1).first, name, comparison]
         | 
| 87 91 | 
             
                    end
         | 
| 88 92 |  | 
    
        data/matrix_test.rb
    CHANGED
    
    
    
        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.12. | 
| 4 | 
            +
              version: 0.12.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Uwe Kubosch
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2018-09 | 
| 11 | 
            +
            date: 2018-11-09 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: actionpack
         | 
| @@ -34,16 +34,22 @@ dependencies: | |
| 34 34 | 
             
              name: capybara
         | 
| 35 35 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 36 36 | 
             
                requirements:
         | 
| 37 | 
            -
                - - " | 
| 37 | 
            +
                - - ">="
         | 
| 38 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 39 | 
            +
                    version: '2'
         | 
| 40 | 
            +
                - - "<"
         | 
| 38 41 | 
             
                  - !ruby/object:Gem::Version
         | 
| 39 | 
            -
                    version: ' | 
| 42 | 
            +
                    version: '4'
         | 
| 40 43 | 
             
              type: :runtime
         | 
| 41 44 | 
             
              prerelease: false
         | 
| 42 45 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 43 46 | 
             
                requirements:
         | 
| 44 | 
            -
                - - " | 
| 47 | 
            +
                - - ">="
         | 
| 48 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 49 | 
            +
                    version: '2'
         | 
| 50 | 
            +
                - - "<"
         | 
| 45 51 | 
             
                  - !ruby/object:Gem::Version
         | 
| 46 | 
            -
                    version: ' | 
| 52 | 
            +
                    version: '4'
         | 
| 47 53 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 48 54 | 
             
              name: chunky_png
         | 
| 49 55 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -165,6 +171,7 @@ files: | |
| 165 171 | 
             
            - gemfiles/rails42.gemfile
         | 
| 166 172 | 
             
            - gemfiles/rails50.gemfile
         | 
| 167 173 | 
             
            - gemfiles/rails51.gemfile
         | 
| 174 | 
            +
            - gemfiles/rails52.gemfile
         | 
| 168 175 | 
             
            - lib/capybara/screenshot/diff.rb
         | 
| 169 176 | 
             
            - lib/capybara/screenshot/diff/image_compare.rb
         | 
| 170 177 | 
             
            - lib/capybara/screenshot/diff/os.rb
         |