snap_diff-capybara 0.0.1 → 2.0.0.alpha1

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.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +167 -0
  3. data/CODE_OF_CONDUCT.md +129 -0
  4. data/LICENSE.txt +21 -0
  5. data/Rakefile +65 -0
  6. data/capybara-screenshot-diff.gemspec +29 -0
  7. data/docs/RELEASE_PREP.md +44 -0
  8. data/docs/UPGRADING.md +475 -0
  9. data/docs/architecture.md +267 -0
  10. data/docs/ci-integration.md +238 -0
  11. data/docs/configuration.md +395 -0
  12. data/docs/docker-testing.md +24 -0
  13. data/docs/drivers.md +102 -0
  14. data/docs/framework-setup.md +87 -0
  15. data/docs/images/snap_diff_annotated.png +0 -0
  16. data/docs/images/snap_diff_web_ui.png +0 -0
  17. data/docs/migration-guide.md +286 -0
  18. data/docs/organization.md +204 -0
  19. data/docs/reporters.md +46 -0
  20. data/docs/thread_safety.md +112 -0
  21. data/gems.rb +39 -0
  22. data/lib/capybara/screenshot/diff/annotation_service.rb +7 -0
  23. data/lib/capybara/screenshot/diff/area_calculator.rb +7 -0
  24. data/lib/capybara/screenshot/diff/browser_helpers.rb +7 -0
  25. data/lib/capybara/screenshot/diff/config_legacy.rb +113 -0
  26. data/lib/capybara/screenshot/diff/cucumber.rb +3 -0
  27. data/lib/capybara/screenshot/diff/difference.rb +8 -0
  28. data/lib/capybara/screenshot/diff/drivers/base_driver.rb +9 -0
  29. data/lib/capybara/screenshot/diff/drivers/chunky_png_driver.rb +7 -0
  30. data/lib/capybara/screenshot/diff/drivers/vips_driver.rb +7 -0
  31. data/lib/capybara/screenshot/diff/drivers.rb +9 -0
  32. data/lib/capybara/screenshot/diff/image_compare.rb +12 -0
  33. data/lib/capybara/screenshot/diff/image_preprocessor.rb +7 -0
  34. data/lib/capybara/screenshot/diff/os.rb +14 -0
  35. data/lib/capybara/screenshot/diff/region.rb +107 -0
  36. data/lib/capybara/screenshot/diff/reporters/default.rb +109 -0
  37. data/lib/capybara/screenshot/diff/screenshot_matcher.rb +7 -0
  38. data/lib/capybara/screenshot/diff/screenshoter.rb +7 -0
  39. data/lib/capybara/screenshot/diff/stable_screenshoter.rb +7 -0
  40. data/lib/capybara/screenshot/diff/utils.rb +7 -0
  41. data/lib/capybara/screenshot/diff/vcs.rb +7 -0
  42. data/lib/capybara/screenshot/diff/version.rb +15 -0
  43. data/lib/capybara/screenshot/diff.rb +3 -0
  44. data/lib/capybara-screenshot-diff.rb +3 -0
  45. data/lib/capybara_screenshot_diff/attempts_reporter.rb +7 -0
  46. data/lib/capybara_screenshot_diff/cucumber.rb +8 -0
  47. data/lib/capybara_screenshot_diff/dsl.rb +12 -0
  48. data/lib/capybara_screenshot_diff/error_with_filtered_backtrace.rb +8 -0
  49. data/lib/capybara_screenshot_diff/minitest.rb +14 -0
  50. data/lib/capybara_screenshot_diff/reporters/html.rb +7 -0
  51. data/lib/capybara_screenshot_diff/rspec.rb +8 -0
  52. data/lib/capybara_screenshot_diff/screenshot_assertion.rb +71 -0
  53. data/lib/capybara_screenshot_diff/screenshot_namer.rb +7 -0
  54. data/lib/capybara_screenshot_diff/snap.rb +7 -0
  55. data/lib/capybara_screenshot_diff/snap_manager.rb +7 -0
  56. data/lib/capybara_screenshot_diff/static.rb +9 -0
  57. data/lib/capybara_screenshot_diff.rb +50 -0
  58. data/lib/snap_diff/annotation_service.rb +84 -0
  59. data/lib/snap_diff/area_calculator.rb +56 -0
  60. data/lib/snap_diff/attempts_reporter.rb +51 -0
  61. data/lib/snap_diff/browser_helpers.rb +121 -0
  62. data/lib/snap_diff/capture/viewport.rb +40 -0
  63. data/lib/snap_diff/comparison.rb +238 -0
  64. data/lib/snap_diff/comparison_result.rb +104 -0
  65. data/lib/snap_diff/config.rb +78 -0
  66. data/lib/snap_diff/deprecation.rb +84 -0
  67. data/lib/snap_diff/driver.rb +37 -0
  68. data/lib/snap_diff/drivers/chunky_png_driver.rb +298 -0
  69. data/lib/snap_diff/drivers/vips_driver.rb +171 -0
  70. data/lib/snap_diff/drivers.rb +14 -0
  71. data/lib/snap_diff/dsl.rb +143 -0
  72. data/lib/snap_diff/error_with_filtered_backtrace.rb +32 -0
  73. data/lib/snap_diff/image_preprocessor.rb +68 -0
  74. data/lib/snap_diff/integrations/cucumber.rb +22 -0
  75. data/lib/snap_diff/integrations/minitest.rb +70 -0
  76. data/lib/snap_diff/integrations/rspec.rb +68 -0
  77. data/lib/snap_diff/legacy_shims.rb +99 -0
  78. data/lib/snap_diff/os.rb +17 -0
  79. data/lib/snap_diff/reporters/html.rb +143 -0
  80. data/lib/snap_diff/reporters/templates/report.html.erb +463 -0
  81. data/lib/snap_diff/reporting.rb +53 -0
  82. data/lib/snap_diff/screenshot_assertion.rb +143 -0
  83. data/lib/snap_diff/screenshot_matcher.rb +113 -0
  84. data/lib/snap_diff/screenshot_namer.rb +81 -0
  85. data/lib/snap_diff/screenshoter.rb +129 -0
  86. data/lib/snap_diff/snap.rb +66 -0
  87. data/lib/snap_diff/snap_manager.rb +125 -0
  88. data/lib/snap_diff/stable_screenshoter.rb +103 -0
  89. data/lib/snap_diff/static.rb +11 -0
  90. data/lib/snap_diff/utils.rb +38 -0
  91. data/lib/snap_diff/vcs.rb +35 -0
  92. data/lib/snap_diff/version.rb +5 -0
  93. data/lib/snap_diff.rb +65 -0
  94. metadata +160 -10
  95. data/README.md +0 -3
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "open3"
4
+ require_relative "os"
5
+
6
+ module SnapDiff
7
+ module Vcs
8
+ def self.checkout_vcs(root, screenshot_path, checkout_path)
9
+ root_path = root.to_s
10
+ git_root, _, status = Open3.capture3("git", "-C", root_path, "rev-parse", "--show-toplevel")
11
+ return false unless status.success?
12
+
13
+ git_root = git_root.chomp
14
+ vcs_file_path = Pathname.new(screenshot_path).expand_path.relative_path_from(Pathname.new(git_root)).to_s
15
+
16
+ if Capybara::Screenshot.use_lfs
17
+ tmp_path = "#{checkout_path}.tmp"
18
+ success = system("git", "-C", root_path, "show", "HEAD:#{vcs_file_path}", out: tmp_path, err: File::NULL)
19
+ if success
20
+ system("git", "-C", root_path, "lfs", "smudge", in: tmp_path, out: checkout_path.to_s, err: File::NULL)
21
+ end
22
+ File.delete(tmp_path) if File.exist?(tmp_path)
23
+ else
24
+ success = system("git", "-C", root_path, "show", "HEAD:#{vcs_file_path}", out: checkout_path.to_s, err: File::NULL)
25
+ end
26
+
27
+ unless success
28
+ checkout_path.delete if checkout_path.exist?
29
+ return false
30
+ end
31
+
32
+ true
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SnapDiff
4
+ VERSION = "2.0.0.alpha1"
5
+ end
data/lib/snap_diff.rb ADDED
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+
3
+ # None of these requires ever leads back to this file: config_legacy is a
4
+ # leaf (see its own header comment), the image_compare forwarder pulls in
5
+ # snap_diff/comparison plus the legacy const_missing shims, and
6
+ # "capybara/dsl" is the base gem. That keeps this file's require graph
7
+ # acyclic -- it never requires "capybara_screenshot_diff" back, unlike the
8
+ # old autoload-based wiring this replaced. The forwarder path (not
9
+ # "snap_diff/comparison" directly) is deliberate: it installs
10
+ # snap_diff/legacy_shims, so the old Capybara::Screenshot::Diff constants
11
+ # stay resolvable (now with deprecation warnings) even in processes that
12
+ # only ever require "snap_diff".
13
+ # "capybara/dsl" is needed directly (not just transitively) so
14
+ # `Capybara.default_max_wait_time` in Diff.default_options resolves even
15
+ # when "snap_diff" is required standalone (SnapDiffTest's
16
+ # "standalone-loadable in a fresh process" regression test).
17
+ require "capybara/dsl"
18
+ require "capybara/screenshot/diff/config_legacy"
19
+ require "capybara/screenshot/diff/image_compare"
20
+ require "snap_diff/config"
21
+
22
+ # Forward-looking namespace for the gem, per ADR-004.
23
+ #
24
+ # Since v2 step 5 the comparison implementation lives here
25
+ # ({SnapDiff::Comparison}, {SnapDiff::ComparisonResult}); since step 6 the
26
+ # old +Capybara::Screenshot::Diff+ constants are same-object const_missing
27
+ # shims (snap_diff/legacy_shims) that emit a deprecation warning once per
28
+ # constant per process. See ADR-004 for the full migration plan.
29
+ module SnapDiff
30
+ def self.compare(...)
31
+ Capybara::Screenshot::Diff.compare(...)
32
+ end
33
+
34
+ # v1-style configuration: yields the two existing mattr_accessor holders
35
+ # (+Capybara::Screenshot+, +Capybara::Screenshot::Diff+) exactly as
36
+ # +Capybara::Screenshot::Diff.configure+ always has. Kept byte-for-byte
37
+ # identical to +Diff.configure+ for existing callers migrating namespaces
38
+ # without changing call shape.
39
+ #
40
+ # SnapDiff.start do |screenshot, diff|
41
+ # screenshot.window_size = [1280, 1024]
42
+ # diff.tolerance = 0.0005
43
+ # end
44
+ def self.start(&block)
45
+ Capybara::Screenshot::Diff.configure(&block)
46
+ end
47
+
48
+ # Forward-looking configuration: yields the single consolidated
49
+ # {SnapDiff::Config} object instead of the two old holders. Same
50
+ # underlying storage as +start+ / the old mattr_accessors -- this is a
51
+ # different *shape* of the same settings, not a second source of truth.
52
+ #
53
+ # SnapDiff.configure do |config|
54
+ # config.window_size = [1280, 1024]
55
+ # config.tolerance = 0.0005
56
+ # end
57
+ def self.configure
58
+ yield config
59
+ end
60
+
61
+ # The single consolidated settings object. See {SnapDiff::Config}.
62
+ def self.config
63
+ @config ||= Config.new
64
+ end
65
+ end
metadata CHANGED
@@ -1,28 +1,178 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: snap_diff-capybara
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 2.0.0.alpha1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Uwe Kubosch
8
- - Paul Keen
9
- bindir: bin
8
+ bindir: exe
10
9
  cert_chain: []
11
10
  date: 1980-01-02 00:00:00.000000000 Z
12
- dependencies: []
13
- description: Name reservation matching the GitHub repository snap-diff/snap_diff-capybara.
14
- Today this library ships as the capybara-screenshot-diff gem, which already exposes
15
- the SnapDiff namespace.
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: actionpack
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '7.1'
19
+ - - "<"
20
+ - !ruby/object:Gem::Version
21
+ version: '9'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ version: '7.1'
29
+ - - "<"
30
+ - !ruby/object:Gem::Version
31
+ version: '9'
32
+ - !ruby/object:Gem::Dependency
33
+ name: activesupport
34
+ requirement: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: '7.1'
39
+ - - "<"
40
+ - !ruby/object:Gem::Version
41
+ version: '9'
42
+ type: :development
43
+ prerelease: false
44
+ version_requirements: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '7.1'
49
+ - - "<"
50
+ - !ruby/object:Gem::Version
51
+ version: '9'
52
+ - !ruby/object:Gem::Dependency
53
+ name: capybara
54
+ requirement: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: '2'
59
+ - - "<"
60
+ - !ruby/object:Gem::Version
61
+ version: '4'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '2'
69
+ - - "<"
70
+ - !ruby/object:Gem::Version
71
+ version: '4'
72
+ description: Save screen shots and track changes with graphical diff
73
+ email:
74
+ - uwe@kubosch.no
16
75
  executables: []
17
76
  extensions: []
18
77
  extra_rdoc_files: []
19
78
  files:
20
- - README.md
79
+ - CHANGELOG.md
80
+ - CODE_OF_CONDUCT.md
81
+ - LICENSE.txt
82
+ - Rakefile
83
+ - capybara-screenshot-diff.gemspec
84
+ - docs/RELEASE_PREP.md
85
+ - docs/UPGRADING.md
86
+ - docs/architecture.md
87
+ - docs/ci-integration.md
88
+ - docs/configuration.md
89
+ - docs/docker-testing.md
90
+ - docs/drivers.md
91
+ - docs/framework-setup.md
92
+ - docs/images/snap_diff_annotated.png
93
+ - docs/images/snap_diff_web_ui.png
94
+ - docs/migration-guide.md
95
+ - docs/organization.md
96
+ - docs/reporters.md
97
+ - docs/thread_safety.md
98
+ - gems.rb
99
+ - lib/capybara-screenshot-diff.rb
100
+ - lib/capybara/screenshot/diff.rb
101
+ - lib/capybara/screenshot/diff/annotation_service.rb
102
+ - lib/capybara/screenshot/diff/area_calculator.rb
103
+ - lib/capybara/screenshot/diff/browser_helpers.rb
104
+ - lib/capybara/screenshot/diff/config_legacy.rb
105
+ - lib/capybara/screenshot/diff/cucumber.rb
106
+ - lib/capybara/screenshot/diff/difference.rb
107
+ - lib/capybara/screenshot/diff/drivers.rb
108
+ - lib/capybara/screenshot/diff/drivers/base_driver.rb
109
+ - lib/capybara/screenshot/diff/drivers/chunky_png_driver.rb
110
+ - lib/capybara/screenshot/diff/drivers/vips_driver.rb
111
+ - lib/capybara/screenshot/diff/image_compare.rb
112
+ - lib/capybara/screenshot/diff/image_preprocessor.rb
113
+ - lib/capybara/screenshot/diff/os.rb
114
+ - lib/capybara/screenshot/diff/region.rb
115
+ - lib/capybara/screenshot/diff/reporters/default.rb
116
+ - lib/capybara/screenshot/diff/screenshot_matcher.rb
117
+ - lib/capybara/screenshot/diff/screenshoter.rb
118
+ - lib/capybara/screenshot/diff/stable_screenshoter.rb
119
+ - lib/capybara/screenshot/diff/utils.rb
120
+ - lib/capybara/screenshot/diff/vcs.rb
121
+ - lib/capybara/screenshot/diff/version.rb
122
+ - lib/capybara_screenshot_diff.rb
123
+ - lib/capybara_screenshot_diff/attempts_reporter.rb
124
+ - lib/capybara_screenshot_diff/cucumber.rb
125
+ - lib/capybara_screenshot_diff/dsl.rb
126
+ - lib/capybara_screenshot_diff/error_with_filtered_backtrace.rb
127
+ - lib/capybara_screenshot_diff/minitest.rb
128
+ - lib/capybara_screenshot_diff/reporters/html.rb
129
+ - lib/capybara_screenshot_diff/rspec.rb
130
+ - lib/capybara_screenshot_diff/screenshot_assertion.rb
131
+ - lib/capybara_screenshot_diff/screenshot_namer.rb
132
+ - lib/capybara_screenshot_diff/snap.rb
133
+ - lib/capybara_screenshot_diff/snap_manager.rb
134
+ - lib/capybara_screenshot_diff/static.rb
135
+ - lib/snap_diff.rb
136
+ - lib/snap_diff/annotation_service.rb
137
+ - lib/snap_diff/area_calculator.rb
138
+ - lib/snap_diff/attempts_reporter.rb
139
+ - lib/snap_diff/browser_helpers.rb
140
+ - lib/snap_diff/capture/viewport.rb
141
+ - lib/snap_diff/comparison.rb
142
+ - lib/snap_diff/comparison_result.rb
143
+ - lib/snap_diff/config.rb
144
+ - lib/snap_diff/deprecation.rb
145
+ - lib/snap_diff/driver.rb
146
+ - lib/snap_diff/drivers.rb
147
+ - lib/snap_diff/drivers/chunky_png_driver.rb
148
+ - lib/snap_diff/drivers/vips_driver.rb
149
+ - lib/snap_diff/dsl.rb
150
+ - lib/snap_diff/error_with_filtered_backtrace.rb
151
+ - lib/snap_diff/image_preprocessor.rb
152
+ - lib/snap_diff/integrations/cucumber.rb
153
+ - lib/snap_diff/integrations/minitest.rb
154
+ - lib/snap_diff/integrations/rspec.rb
155
+ - lib/snap_diff/legacy_shims.rb
156
+ - lib/snap_diff/os.rb
157
+ - lib/snap_diff/reporters/html.rb
158
+ - lib/snap_diff/reporters/templates/report.html.erb
159
+ - lib/snap_diff/reporting.rb
160
+ - lib/snap_diff/screenshot_assertion.rb
161
+ - lib/snap_diff/screenshot_matcher.rb
162
+ - lib/snap_diff/screenshot_namer.rb
163
+ - lib/snap_diff/screenshoter.rb
164
+ - lib/snap_diff/snap.rb
165
+ - lib/snap_diff/snap_manager.rb
166
+ - lib/snap_diff/stable_screenshoter.rb
167
+ - lib/snap_diff/static.rb
168
+ - lib/snap_diff/utils.rb
169
+ - lib/snap_diff/vcs.rb
170
+ - lib/snap_diff/version.rb
21
171
  homepage: https://github.com/snap-diff/snap_diff-capybara
22
172
  licenses:
23
173
  - MIT
24
174
  metadata:
25
- allowed_push_host: https://rubygems.org
175
+ allowed_push_host: https://rubygems.org/
26
176
  rdoc_options: []
27
177
  require_paths:
28
178
  - lib
@@ -39,5 +189,5 @@ required_rubygems_version: !ruby/object:Gem::Requirement
39
189
  requirements: []
40
190
  rubygems_version: 4.0.16
41
191
  specification_version: 4
42
- summary: 'Reserved: future home of the SnapDiff Capybara integration'
192
+ summary: Track your GUI changes with diff assertions
43
193
  test_files: []
data/README.md DELETED
@@ -1,3 +0,0 @@
1
- # snap_diff-capybara
2
-
3
- Name reservation matching [snap-diff/snap_diff-capybara](https://github.com/snap-diff/snap_diff-capybara). Install [capybara-screenshot-diff](https://rubygems.org/gems/capybara-screenshot-diff), which already provides the `SnapDiff` namespace.