standard_assert 0.2.1 → 0.3.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 +4 -4
- data/CHANGELOG.md +9 -1
- data/README.md +34 -11
- data/lib/standard_assert.rb +19 -2
- data/lib/standard_assert/assertion_error.rb +8 -0
- data/lib/standard_assert/assertions.rb +34 -0
- data/lib/standard_assert/version.rb +1 -1
- metadata +7 -7
- data/lib/standard_assert/core_ext/assert.rb +0 -12
- data/lib/standard_assert/core_ext/assertion_error.rb +0 -26
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 40f8957293fc716888d3893b998e99667ee02b8c2dfde688138eb921d19f4b84
|
|
4
|
+
data.tar.gz: 7cac84248babb63c2c0d9abfd9756820a8a8afd956360b2368edd3372cf3235f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 34e02026e2f5397ba6b9fea8728a2c95c65a741a314743a6d86bf7a558e9434e956158ac7ca99ecb729cdea9f5eb4040672043a9353ef017ed15a8dd09b8cf0a
|
|
7
|
+
data.tar.gz: 503ac256dbe5da0510e4b4a2e97469a11f9b2b2a98a8aeced91d08994ba6e5ecc9d11b5173e8d0797ef95b5875197f63093b638babd759c6d0527c3d1234a0b8
|
data/CHANGELOG.md
CHANGED
|
@@ -1,11 +1,19 @@
|
|
|
1
1
|
# CHANGELOG
|
|
2
2
|
|
|
3
|
+
## [0.3.0](https://github.com/yasaichi/standard_assert/releases/tag/v0.3.0) (December 21, 2019)
|
|
4
|
+
|
|
5
|
+
### Breaking changes
|
|
6
|
+
|
|
7
|
+
- [Publish only `assert` and `assert_*` methods](https://github.com/yasaichi/standard_assert/pull/3)
|
|
8
|
+
- [Publish the assertion methods as module functions](https://github.com/yasaichi/standard_assert/pull/4)
|
|
9
|
+
- [Migrate the assertion methods' backend to `minitest`](https://github.com/yasaichi/standard_assert/pull/5)
|
|
10
|
+
|
|
3
11
|
## [0.2.1](https://github.com/yasaichi/standard_assert/releases/tag/v0.2.1) (December 14, 2019)
|
|
4
12
|
|
|
5
13
|
### Compatible changes
|
|
6
14
|
|
|
7
|
-
- [Migration testing framework](https://github.com/yasaichi/standard_assert/commit/7d7f692234a099a85a9d79a0cd9b15047963eefc)
|
|
8
15
|
- [Apply RuboCop autofix](https://github.com/yasaichi/standard_assert/commit/a7f0ddf984250fcec588a41b84c380b932af2a5f)
|
|
16
|
+
- [Migration testing framework](https://github.com/yasaichi/standard_assert/commit/7d7f692234a099a85a9d79a0cd9b15047963eefc)
|
|
9
17
|
|
|
10
18
|
## [0.2.0](https://github.com/yasaichi/standard_assert/releases/tag/v0.2.0) (December 14, 2019)
|
|
11
19
|
|
data/README.md
CHANGED
|
@@ -24,28 +24,51 @@ $ bundle
|
|
|
24
24
|
|
|
25
25
|
## Usage
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
Since assertion methods are defined as module functions of `Assert`, you can use them as instance methods
|
|
28
|
+
to any classes that mix in the module:
|
|
28
29
|
|
|
29
30
|
```ruby
|
|
30
31
|
require 'standard_assert'
|
|
31
32
|
|
|
32
|
-
|
|
33
|
-
|
|
33
|
+
class Stack
|
|
34
|
+
include ::Assert
|
|
34
35
|
|
|
35
|
-
|
|
36
|
+
def initialize
|
|
37
|
+
@store = []
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def pop
|
|
41
|
+
assert(!@store.empty?)
|
|
42
|
+
@store.pop
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def push(element)
|
|
46
|
+
@store.push(element)
|
|
47
|
+
self
|
|
48
|
+
end
|
|
49
|
+
end
|
|
36
50
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
51
|
+
Stack.new.pop #=> AssertionError (Expected false to be truthy.)
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Or just call them with the module as a receiver:
|
|
55
|
+
|
|
56
|
+
```ruby
|
|
57
|
+
class Stack
|
|
58
|
+
def peek
|
|
59
|
+
::Assert.assert(!@store.empty?)
|
|
60
|
+
@store.last
|
|
40
61
|
end
|
|
41
62
|
end
|
|
42
63
|
|
|
43
|
-
|
|
44
|
-
#=> AssertionError: <"42"> was expected to be instance_of?
|
|
45
|
-
# [<Float>, <Integer>, <Rational>] but was
|
|
46
|
-
# <String>.
|
|
64
|
+
Stack.new.peek #=> AssertionError (Expected false to be truthy.)
|
|
47
65
|
```
|
|
48
66
|
|
|
67
|
+
Note that `Assert` provides `aseert` and `assert_*` methods same as in `Minitest::Assertions`
|
|
68
|
+
except they throw not `Minitest::Assertion` but `AssertionError` when an assertion fails.
|
|
69
|
+
|
|
70
|
+
See also: http://docs.seattlerb.org/minitest/Minitest/Assertions.html
|
|
71
|
+
|
|
49
72
|
## Contributing
|
|
50
73
|
|
|
51
74
|
You should follow the steps below.
|
data/lib/standard_assert.rb
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative "standard_assert/
|
|
4
|
-
require_relative "standard_assert/core_ext/assertion_error"
|
|
3
|
+
require_relative "standard_assert/assertions"
|
|
5
4
|
require_relative "standard_assert/version"
|
|
5
|
+
|
|
6
|
+
module StandardAssert
|
|
7
|
+
assertion_method_pattern = /\Aassert(?:_\w+)?\z/
|
|
8
|
+
|
|
9
|
+
::StandardAssert::Assertions.instance
|
|
10
|
+
.public_methods
|
|
11
|
+
.select(&assertion_method_pattern.method(:match?))
|
|
12
|
+
.each do |name|
|
|
13
|
+
class_eval <<~CODE, __FILE__, __LINE__ + 1
|
|
14
|
+
module_function def #{name}(*args, &block)
|
|
15
|
+
::StandardAssert::Assertions.instance.public_send(:#{name}, *args, &block)
|
|
16
|
+
end
|
|
17
|
+
CODE
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# HACK: Call `dup` to make `inspect`, `name`, `to_s` and so on return `"Assert"`
|
|
22
|
+
Assert = StandardAssert.dup
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "minitest"
|
|
4
|
+
require "singleton"
|
|
5
|
+
require_relative "assertion_error"
|
|
6
|
+
|
|
7
|
+
module StandardAssert
|
|
8
|
+
class Assertions # :nodoc:
|
|
9
|
+
include ::Minitest::Assertions
|
|
10
|
+
include ::Singleton
|
|
11
|
+
|
|
12
|
+
def initialize
|
|
13
|
+
@assertions = 0
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Override
|
|
17
|
+
def assert(test, msg = nil)
|
|
18
|
+
super
|
|
19
|
+
rescue ::Minitest::Assertion => e
|
|
20
|
+
raise ::AssertionError, e.message
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
protected # rubocop:disable Style/AccessModifierDeclarations
|
|
24
|
+
|
|
25
|
+
attr_reader :assertions
|
|
26
|
+
|
|
27
|
+
# NOTE: `Minitest::Assertions` expects to be able to increment an instance accessor named
|
|
28
|
+
# `assertions`, but we don't need the accessor because it's used for reporting test results.
|
|
29
|
+
# So define a writer that does nothing and always returns the same value.
|
|
30
|
+
def assertions=(_val)
|
|
31
|
+
@assertions
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: standard_assert
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- yasaichi
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2019-12-
|
|
11
|
+
date: 2019-12-21 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -95,19 +95,19 @@ dependencies:
|
|
|
95
95
|
- !ruby/object:Gem::Version
|
|
96
96
|
version: '0'
|
|
97
97
|
- !ruby/object:Gem::Dependency
|
|
98
|
-
name:
|
|
98
|
+
name: minitest
|
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
|
100
100
|
requirements:
|
|
101
101
|
- - ">="
|
|
102
102
|
- !ruby/object:Gem::Version
|
|
103
|
-
version: '
|
|
103
|
+
version: '5.0'
|
|
104
104
|
type: :runtime
|
|
105
105
|
prerelease: false
|
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
107
|
requirements:
|
|
108
108
|
- - ">="
|
|
109
109
|
- !ruby/object:Gem::Version
|
|
110
|
-
version: '
|
|
110
|
+
version: '5.0'
|
|
111
111
|
description: "`standard_assert` is a Standard Library-like library for assertions
|
|
112
112
|
in Ruby. It is aimed at encouraging us to use assertion methods anywhere; Not only
|
|
113
113
|
testing but also production."
|
|
@@ -122,8 +122,8 @@ files:
|
|
|
122
122
|
- README.md
|
|
123
123
|
- Rakefile
|
|
124
124
|
- lib/standard_assert.rb
|
|
125
|
-
- lib/standard_assert/
|
|
126
|
-
- lib/standard_assert/
|
|
125
|
+
- lib/standard_assert/assertion_error.rb
|
|
126
|
+
- lib/standard_assert/assertions.rb
|
|
127
127
|
- lib/standard_assert/version.rb
|
|
128
128
|
homepage: https://github.com/yasaichi/standard_assert
|
|
129
129
|
licenses:
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "test/unit/assertions"
|
|
4
|
-
|
|
5
|
-
module Assert
|
|
6
|
-
%i[public protected private].each do |visibility|
|
|
7
|
-
::Test::Unit::Assertions.public_send("#{visibility}_instance_methods").each do |name|
|
|
8
|
-
define_method name, ::Test::Unit::Assertions.instance_method(name)
|
|
9
|
-
__send__(visibility, name)
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
end
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "forwardable"
|
|
4
|
-
require "test/unit/assertion-failed-error"
|
|
5
|
-
|
|
6
|
-
class AssertionError < StandardError
|
|
7
|
-
extend ::Forwardable
|
|
8
|
-
|
|
9
|
-
OriginalError = ::Test::Unit::AssertionFailedError
|
|
10
|
-
private_constant :OriginalError
|
|
11
|
-
|
|
12
|
-
def_delegators(
|
|
13
|
-
:@original_error,
|
|
14
|
-
*(OriginalError.instance_methods - superclass.instance_methods)
|
|
15
|
-
)
|
|
16
|
-
|
|
17
|
-
def initialize(message = nil, options = nil)
|
|
18
|
-
@original_error = OriginalError.new(message, options)
|
|
19
|
-
super(@original_error.message)
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
Test::Unit.class_exec do
|
|
24
|
-
remove_const :AssertionFailedError
|
|
25
|
-
const_set :AssertionFailedError, AssertionError
|
|
26
|
-
end
|