pdf_matcher-testing 1.0.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 1180934421898ae4c82ed36fdaeb5b1be6d17463e0b7aff3ded1e975a364c59d
4
+ data.tar.gz: 65694222ad05b8e5ea9c8a0ce093be916b2a22be843f0e6922b46e8df04063b5
5
+ SHA512:
6
+ metadata.gz: d7d862a85f7d4b2018ced2dd13a919c6273d116403db6ded9268be800fe2c42a08c52d0847e9de96e00fbf3c27d025d7cd0beb68c7b49d1f14be465de32987d5
7
+ data.tar.gz: 8463c6623b18a2e97a3e9313fb36d2e0a8ed838052f0550ff4653f06c53bdef4317f73386c55b796e35f4773ab61957f29005b928edfa06ffc2aa9db99a30c33
@@ -0,0 +1,35 @@
1
+ name: Test
2
+
3
+ on: [push, pull_request]
4
+
5
+ jobs:
6
+ test:
7
+ name: Test on ruby ${{ matrix.ruby_version }}
8
+ runs-on: ubuntu-latest
9
+
10
+ if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository
11
+
12
+ strategy:
13
+ matrix:
14
+ ruby_version:
15
+ - 2.6
16
+ - 2.7
17
+ - 3.0
18
+
19
+ steps:
20
+ - uses: actions/checkout@v2
21
+
22
+ - uses: hidakatsuya/setup-diff-pdf@v1
23
+ with:
24
+ diff-pdf-version: 0.5
25
+
26
+ - name: Set up Ruby ${{ matrix.ruby_version }}
27
+ uses: ruby/setup-ruby@v1
28
+ with:
29
+ ruby-version: ${{ matrix.ruby_version }}
30
+
31
+ - name: Install dependencies
32
+ run: bundle install --jobs 4 --retry 3
33
+
34
+ - name: Run Tests
35
+ run: bundle exec rake test
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ /.bundle/
2
+ /pkg/
3
+ /tmp/
4
+ /Gemfile.lock
data/CHANGELOG.md ADDED
@@ -0,0 +1,3 @@
1
+ ## 1.0.0
2
+
3
+ The first stable release.
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ gem 'rake'
6
+ gem 'minitest'
7
+ gem 'test-unit'
8
+ gem 'rspec'
9
+ gem 'prawn'
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2021 Katsuya Hidaka
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,144 @@
1
+ # PdfMatcher::Testing
2
+
3
+ [![Test](https://github.com/hidakatsuya/pdf_matcher-testing/actions/workflows/test.yml/badge.svg?branch=main)](https://github.com/hidakatsuya/pdf_matcher-testing/actions/workflows/test.yml)
4
+
5
+ This gem allows testing frameworks such as [Test::Unit](https://github.com/test-unit/test-unit), [RSpec](https://github.com/rspec/rspec) and [Minitest](https://github.com/seattlerb/minitest) to perform PDF matching tests with the [pdf_matcher gem](https://github.com/hidakatsuya/pdf_matcher).
6
+
7
+ ## Prerequisites
8
+
9
+ This gem works with diff-pdf and pdf_matcher gem. See [the documentation of the pdf_matcher gem](https://github.com/hidakatsuya/pdf_matcher#prerequisites).
10
+
11
+ ## Installation
12
+
13
+ Add this line to your application's Gemfile:
14
+
15
+ ```ruby
16
+ gem 'pdf_matcher-testing', require: false
17
+ ```
18
+
19
+ And then execute:
20
+
21
+ $ bundle install
22
+
23
+ Or install it yourself as:
24
+
25
+ $ gem install pdf_matcher-testing
26
+
27
+ ## Usage
28
+
29
+ ### Test::Unit
30
+
31
+ ```ruby
32
+ require 'pdf_matcher/testing/test_unit_adapter'
33
+ ```
34
+
35
+ You will be able to use the `assert_match_pdf`:
36
+
37
+ ```ruby
38
+ assert_match_pdf expected_pdf_data, actual_pdf_data
39
+ assert_match_pdf '/path/to/expected.pdf', '/path/to/actual.pdf'
40
+ assert_match_pdf Pathname('/path/to/expected.pdf'), Pathname('/path/to/actual.pdf')
41
+
42
+ # Generating a difference PDF
43
+ assert_match_pdf expected_pdf_data, actual_pdf_data, output_diff: '/path/to/diff.pdf'
44
+ ```
45
+
46
+ Or, you can enable the assertion manually:
47
+
48
+ ```ruby
49
+ require 'pdf_matcher/testing/assertion'
50
+
51
+ # Enabling globally
52
+ class Test::Unit::TestCase
53
+ include PdfMatcher::Testing::Assertion
54
+ end
55
+
56
+ # Enabling individually
57
+ class FooTest < Test::Unit::TestCase
58
+ include PdfMatcher::Testing::Assertion
59
+ end
60
+ ```
61
+
62
+ ### Minitest
63
+
64
+ ```ruby
65
+ require 'pdf_matcher/testing/minitest_adapter'
66
+ ```
67
+
68
+ You will be able to use the `assert_match_pdf` and the `must_match_pdf`:
69
+
70
+ Assertion:
71
+ ```ruby
72
+ assert_match_pdf expected_pdf_data, actual_pdf_data
73
+ ```
74
+
75
+ Expectation:
76
+ ```ruby
77
+ expect(actual_pdf_data).to must_match_pdf(expected_pdf_data)
78
+ expect('/path/to/actual.pdf').to must_match_pdf('/path/to/expected.pdf')
79
+ expect(Pathname('/path/to/actual.pdf')).to must_match_pdf(Pathname('/path/to/expected.pdf'))
80
+
81
+ # Generating a difference PDF
82
+ expect(actual_pdf_data).to must_match_pdf(expected_pdf_data, output_diff: '/path/to/diff.pdf')
83
+ ```
84
+
85
+ Or, you can setup the assertion manually as described in Test::Unit.
86
+
87
+ ### RSpec
88
+
89
+ ```ruby
90
+ require 'pdf_matcher/testing/rspec_adapter'
91
+ ```
92
+
93
+ You will be able to use the `match_pdf`:
94
+
95
+ ```ruby
96
+ expect(actual_pdf_data).to match_pdf(expected_pdf_data)
97
+ expect('/path/to/actual.pdf').to match_pdf('/path/to/expected.pdf')
98
+ expect(Pathname('/path/to/actual.pdf')).to match_pdf(Pathname('/path/to/expected.pdf'))
99
+
100
+ # Generating a differnce PDF
101
+ expect(actual_pdf_data).to match_pdf(expected_pdf_data, output_diff: '/path/to/diff.pdf')
102
+ ```
103
+
104
+ Or, you can enable the matcher manually:
105
+
106
+ ```ruby
107
+ require 'pdf_matcher/testing/matcher'
108
+
109
+ # Enabling globally
110
+ RSpec.configure do |config|
111
+ config.include PdfMatcher::Testing::Matcher
112
+ end
113
+
114
+ # Enabling individually
115
+ RSpec.describe 'foo' do
116
+ include PdfMatcher::Testing::Matcher
117
+ end
118
+ ```
119
+
120
+ ### Configuring diff-pdf command options
121
+
122
+ ```ruby
123
+ PdfMatcher.config.diff_pdf_opts = %w(
124
+ --mark-differences
125
+ --channel-tolerance=40
126
+ )
127
+ ```
128
+
129
+ See `diff-pdf --help` for the available diff-pdf options.
130
+
131
+ ## Contributing
132
+
133
+ Bug reports and pull requests are welcome on GitHub at https://github.com/hidakatsuya/pdf_matcher-testing.
134
+
135
+ ## Testing
136
+
137
+ ```
138
+ $ bundle install
139
+ $ bundle exec rake test
140
+ ```
141
+
142
+ ## License
143
+
144
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rake/testtask'
5
+
6
+ Rake::TestTask.new(:test) do |t|
7
+ t.libs << 'test'
8
+ t.libs << 'lib'
9
+ t.test_files = FileList['test/**/*_test.rb', 'test/**/*_spec.rb']
10
+ end
11
+
12
+ task :default => :test
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'pdf_matcher'
4
+ require_relative 'failure_message'
5
+
6
+ module PdfMatcher
7
+ module Testing
8
+ module Assertion
9
+ def assert_match_pdf(expected_pdf, actual_pdf, options = nil)
10
+ output_diff = options&.fetch(:output_diff)
11
+ failure_message = FailureMessage.build(output_diff)
12
+
13
+ assert PdfMatcher.match?(expected_pdf, actual_pdf, output_diff: output_diff), failure_message
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PdfMatcher
4
+ module Testing
5
+ module FailureMessage
6
+ BASE_MESSAGE = 'The PDF contents did not match.'
7
+
8
+ module_function
9
+
10
+ def build(output_diff = nil)
11
+ [BASE_MESSAGE, message_for_checking_output_diff(output_diff)].compact.join(' ')
12
+ end
13
+
14
+ def message_for_checking_output_diff(output_diff)
15
+ output_diff ? "Check #{output_diff} for details of the differences." : nil
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'pdf_matcher'
4
+ require_relative 'failure_message'
5
+
6
+ module PdfMatcher
7
+ module Testing
8
+ module Matcher
9
+ def match_pdf(expected_pdf, output_diff: nil)
10
+ MatchPdf.new(expected_pdf, output_diff)
11
+ end
12
+
13
+ class MatchPdf
14
+ include ::RSpec::Matchers::Composable
15
+
16
+ def initialize(expected_pdf, output_diff)
17
+ @expected_pdf = expected_pdf
18
+ @output_diff = output_diff
19
+ end
20
+
21
+ def matches?(actual_pdf)
22
+ PdfMatcher.match?(@expected_pdf, actual_pdf, output_diff: @output_diff)
23
+ end
24
+
25
+ def failure_message
26
+ FailureMessage.build(@output_diff)
27
+ end
28
+
29
+ def description
30
+ 'match the expected pdf'
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'minitest'
4
+ require_relative 'assertion'
5
+
6
+ module Minitest
7
+ class Test
8
+ include PdfMatcher::Testing::Assertion
9
+ end
10
+
11
+ module Expectations
12
+ infect_an_assertion :assert_match_pdf, :must_match_pdf
13
+ end
14
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rspec'
4
+
5
+ require_relative 'matcher'
6
+
7
+ RSpec.configure do |c|
8
+ c.include PdfMatcher::Testing::Matcher
9
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test/unit'
4
+ require_relative 'assertion'
5
+
6
+ module Test
7
+ module Unit
8
+ TestCase.include PdfMatcher::Testing::Assertion
9
+ end
10
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PdfMatcher
4
+ module Testing
5
+ VERSION = '1.0.0'
6
+ end
7
+ end
@@ -0,0 +1,25 @@
1
+ require_relative 'lib/pdf_matcher/testing/version'
2
+
3
+ Gem::Specification.new do |spec|
4
+ spec.name = 'pdf_matcher-testing'
5
+ spec.version = PdfMatcher::Testing::VERSION
6
+ spec.authors = ['Katsuya Hidaka']
7
+ spec.email = ['hidakatsuya@gmail.com']
8
+
9
+ spec.description = 'This gem allows testing frameworks such as Test::Unit, RSpec and Minitest to perform PDF matching tests with the pdf_matcher gem.'
10
+ spec.summary = spec.description
11
+ spec.homepage = 'https://github.com/hidakatsuya/pdf_matcher-testing'
12
+ spec.license = 'MIT'
13
+ spec.required_ruby_version = Gem::Requirement.new('>= 2.6.0')
14
+
15
+ spec.metadata['homepage_uri'] = spec.homepage
16
+ spec.metadata['source_code_uri'] = spec.homepage
17
+ spec.metadata['changelog_uri'] = 'https://github.com/hidakatsuya/pdf_matcher-testing/blob/main/CHANGELOG.md'
18
+
19
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
20
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^test/}) }
21
+ end
22
+ spec.require_paths = ['lib']
23
+
24
+ spec.add_dependency 'pdf_matcher', '>= 1.0.0'
25
+ end
metadata ADDED
@@ -0,0 +1,77 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pdf_matcher-testing
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Katsuya Hidaka
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-05-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: pdf_matcher
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 1.0.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 1.0.0
27
+ description: This gem allows testing frameworks such as Test::Unit, RSpec and Minitest
28
+ to perform PDF matching tests with the pdf_matcher gem.
29
+ email:
30
+ - hidakatsuya@gmail.com
31
+ executables: []
32
+ extensions: []
33
+ extra_rdoc_files: []
34
+ files:
35
+ - ".github/workflows/test.yml"
36
+ - ".gitignore"
37
+ - CHANGELOG.md
38
+ - Gemfile
39
+ - LICENSE.txt
40
+ - README.md
41
+ - Rakefile
42
+ - lib/pdf_matcher/testing/assertion.rb
43
+ - lib/pdf_matcher/testing/failure_message.rb
44
+ - lib/pdf_matcher/testing/matcher.rb
45
+ - lib/pdf_matcher/testing/minitest_adapter.rb
46
+ - lib/pdf_matcher/testing/rspec_adapter.rb
47
+ - lib/pdf_matcher/testing/test_unit_adapter.rb
48
+ - lib/pdf_matcher/testing/version.rb
49
+ - pdf_matcher-testing.gemspec
50
+ homepage: https://github.com/hidakatsuya/pdf_matcher-testing
51
+ licenses:
52
+ - MIT
53
+ metadata:
54
+ homepage_uri: https://github.com/hidakatsuya/pdf_matcher-testing
55
+ source_code_uri: https://github.com/hidakatsuya/pdf_matcher-testing
56
+ changelog_uri: https://github.com/hidakatsuya/pdf_matcher-testing/blob/main/CHANGELOG.md
57
+ post_install_message:
58
+ rdoc_options: []
59
+ require_paths:
60
+ - lib
61
+ required_ruby_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: 2.6.0
66
+ required_rubygems_version: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ requirements: []
72
+ rubygems_version: 3.1.6
73
+ signing_key:
74
+ specification_version: 4
75
+ summary: This gem allows testing frameworks such as Test::Unit, RSpec and Minitest
76
+ to perform PDF matching tests with the pdf_matcher gem.
77
+ test_files: []