easytest 0.4.0 → 0.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e87217a9622ad5c57a2b97d64fc8e0a6cf32c264b53901644740b4727363d1bf
4
- data.tar.gz: 5703988217fdf9bc1e0aad99c2c5609a6e159e80d546124f0108ba4414dc1638
3
+ metadata.gz: b72dfc70d7a8d0661cc8db8f80722598819cd167ff8eaeceeb15804088df94f0
4
+ data.tar.gz: 9e3fa802e2efb674630998420f726c32a24021b9eb5bac8df77696ed9e3aeb23
5
5
  SHA512:
6
- metadata.gz: 98e353f726337a6d5b2b9aaad59a4bca8801f06885dc2e9f8f5c0dce6655e2d8e5ab178ede9f7d3b229e2e4f92b8896a5895454d211c8222570cf8e81ababea5
7
- data.tar.gz: 88eff8410c841dffd3457beb20a3f78aaba46347ce724a680d9420f0e7831ce37d1ddcef9233a29758049a8b5e336f183781dc572b89531cd7472276984e5bb5
6
+ metadata.gz: 956aa6d38ccbbca19cde275ecd821453c8858ff7ce2652528233a480563304ec71c0c1ace5337904a0895287a26aa088e0bd5a5622d602a43e89bd82e402078c
7
+ data.tar.gz: ab7b14d3296cf0b37c517ff61f57b5b46b5697c9fd01af278f2fb1ca44ebe11b6f085a14565f8094ea41660a5eebfc7ef123b5d1b542ddfd6281ceef2a4a48e5
data/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## 0.5.0
6
+
7
+ - [Breaking] Rename `to_not_raise` to `to_raise_nothing`.
8
+ - Add `to_match` matcher.
9
+ - Add `only` to run only any cases.
10
+
5
11
  ## 0.4.0
6
12
 
7
13
  - Add `skip` and `test` without block for todo.
data/README.md CHANGED
@@ -75,19 +75,32 @@ The test now passes! 🎉
75
75
 
76
76
  ### Skip
77
77
 
78
- If you want to skip a case, you can change `test` to `skip`:
78
+ If you want to skip any cases, you can change `test` to `skip`:
79
79
 
80
80
  ```diff
81
81
  -test "addition" do
82
82
  +skip "addition" do
83
- expect(1 + 2).to_eq 2
84
- end
85
83
  ```
86
84
 
85
+ Skipped cases will be reported as "skipped".
86
+
87
+ ### Only
88
+
89
+ If you want to run only any cases, you can use `test` to `only`:
90
+
91
+ ```diff
92
+ -test "addition" do
93
+ +only "addition" do
94
+ ```
95
+
96
+ Only cases with `only` will be run, and other cases will be skipped.
97
+
87
98
  ### To-do
88
99
 
89
- If you want to write a to-do case, you can use `test` without a block:
100
+ If you want to write to-do cases, you can use `test` without a block:
90
101
 
91
102
  ```ruby
92
103
  test "addition"
93
104
  ```
105
+
106
+ To-do cases will be reported as "todo".
data/lib/easytest/case.rb CHANGED
@@ -4,27 +4,30 @@ module Easytest
4
4
  attr_reader :file
5
5
  attr_reader :block
6
6
  attr_reader :skipped
7
+ attr_reader :only
8
+
7
9
  alias skipped? skipped
10
+ alias only? only
8
11
 
9
- def initialize(name:, file:, skipped: false, &block)
12
+ def initialize(name:, file:, skipped: false, only: false, &block)
10
13
  @name = name
11
14
  @file = file
12
15
  @block = block
13
16
  @skipped = skipped
17
+ @only = only
14
18
  end
15
19
 
16
20
  def todo?
17
21
  block.nil?
18
22
  end
19
23
 
20
- def run
21
- if todo?
22
- return [:todo, Reporter.new(name).report_todo]
23
- end
24
+ def skip!
25
+ @skipped = true
26
+ end
24
27
 
25
- if skipped?
26
- return [:skipped, Reporter.new(name).report_skip]
27
- end
28
+ def run
29
+ return [:todo, Reporter.new(name).report_todo] if todo?
30
+ return [:skipped, Reporter.new(name).report_skip] if skipped?
28
31
 
29
32
  block.call
30
33
  [:passed, nil]
data/lib/easytest/dsl.rb CHANGED
@@ -2,19 +2,26 @@ module Easytest
2
2
  module DSL
3
3
  refine Kernel do
4
4
  def test(name, &block)
5
- raise FatalError, "`test` requires a name" if name.nil? || name.empty?
5
+ Utils.raise_if_no_test_name(name, method: "test")
6
6
 
7
7
  file = caller_locations(1, 1).first.absolute_path
8
8
  Easytest.add_case Case.new(name: name, file: file, &block)
9
9
  end
10
10
 
11
11
  def skip(name, &block)
12
- raise FatalError, "`skip` requires a name" if name.nil? || name.empty?
12
+ Utils.raise_if_no_test_name(name, method: "skip")
13
13
 
14
14
  file = caller_locations(1, 1).first.absolute_path
15
15
  Easytest.add_case Case.new(name: name, file: file, skipped: true, &block)
16
16
  end
17
17
 
18
+ def only(name, &block)
19
+ Utils.raise_if_no_test_name(name, method: "only")
20
+
21
+ file = caller_locations(1, 1).first.absolute_path
22
+ Easytest.add_case Case.new(name: name, file: file, only: true, &block)
23
+ end
24
+
18
25
  def expect(actual = nil, &block)
19
26
  Expectation.new(actual, &block)
20
27
  end
@@ -41,18 +41,22 @@ module Easytest
41
41
  Matcher::Include.new(actual: actual, expected: expected, negate: negate).match!
42
42
  end
43
43
 
44
+ def to_match(expected)
45
+ Matcher::Match.new(actual: actual, expected: expected, negate: negate).match!
46
+ end
47
+
44
48
  def to_raise(expected)
45
49
  raise FatalError, "`to_raise` requires a block like `expect { ... }.to_raise`" unless block
46
- raise FatalError, "`not.to_raise` can cause a false positive, so use `to_not_raise` instead" if negate?
50
+ raise FatalError, "`not.to_raise` can cause a false positive, so use `to_raise_nothing` instead" if negate?
47
51
  raise FatalError, "`to_raise` requires a Class, String, or Regexp" unless [Class, String, Regexp].any? { expected.is_a? _1 }
48
52
 
49
53
  Matcher::Raise.new(actual: block, expected: expected, negate: negate).match!
50
54
  end
51
55
 
52
- def to_not_raise
53
- raise FatalError, "`to_not_raise` requires a block like `expect { ... }.to_not_raise`" unless block
56
+ def to_raise_nothing
57
+ raise FatalError, "`to_raise_nothing` requires a block like `expect { ... }.to_raise_nothing`" unless block
54
58
 
55
- Matcher::NotRaise.new(actual: block).match!
59
+ Matcher::RaiseNothing.new(actual: block).match!
56
60
  end
57
61
 
58
62
  private
@@ -0,0 +1,13 @@
1
+ module Easytest
2
+ module Matcher
3
+ class Match < Base
4
+ def match?
5
+ actual.match? expected
6
+ end
7
+
8
+ def message
9
+ "match"
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,6 +1,6 @@
1
1
  module Easytest
2
2
  module Matcher
3
- class NotRaise < Base
3
+ class RaiseNothing < Base
4
4
  def initialize(actual:)
5
5
  super(actual: actual, expected: nil)
6
6
  end
@@ -20,7 +20,7 @@ module Easytest
20
20
  end
21
21
 
22
22
  def message
23
- "not raise"
23
+ "raise nothing"
24
24
  end
25
25
  end
26
26
  end
@@ -17,13 +17,19 @@ module Easytest
17
17
  end
18
18
 
19
19
  def run
20
- cases_by_file = cases.group_by { |c| c.file }
21
- cases_by_file.each do |file, cases|
20
+ include_only_case = cases.any?(&:only?)
21
+
22
+ cases.group_by(&:file).each do |file, cases_per_file|
22
23
  self.file_count += 1
23
24
 
24
25
  reports = []
25
26
 
26
- cases.each do |c|
27
+
28
+ cases_per_file.each do |c|
29
+ if include_only_case && !c.only?
30
+ c.skip!
31
+ end
32
+
27
33
  result, report = c.run
28
34
 
29
35
  case result
@@ -123,7 +129,9 @@ module Easytest
123
129
  end
124
130
 
125
131
  list << Rainbow("#{passed_count} passed").green.bright
126
- list << "#{total_count} total #{Rainbow("(#{file_count} files)").dimgray}"
132
+
133
+ files_text = "#{file_count} #{Utils.pluralize("file", file_count)}"
134
+ list << "#{total_count} total #{Rainbow("(#{files_text})").dimgray}"
127
135
 
128
136
  list.join(", ")
129
137
  end
@@ -10,5 +10,15 @@ module Easytest
10
10
  # https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda
11
11
  "\e]8;;file://#{path}\e\\#{Rainbow(dir).dimgray}#{base}\e]8;;\e\\"
12
12
  end
13
+
14
+ def raise_if_no_test_name(name, method:)
15
+ if name.nil? || name.empty?
16
+ raise FatalError.new("`#{method}` requires a name")
17
+ end
18
+ end
19
+
20
+ def pluralize(singular, count)
21
+ count == 1 ? singular : "#{singular}s"
22
+ end
13
23
  end
14
24
  end
@@ -1,3 +1,3 @@
1
1
  module Easytest
2
- VERSION = "0.4.0"
2
+ VERSION = "0.5.0"
3
3
  end
data/lib/easytest.rb CHANGED
@@ -20,9 +20,10 @@ require_relative "easytest/matcher/false"
20
20
  require_relative "easytest/matcher/include"
21
21
  require_relative "easytest/matcher/instance_of"
22
22
  require_relative "easytest/matcher/kind_of"
23
+ require_relative "easytest/matcher/match"
23
24
  require_relative "easytest/matcher/nil"
24
- require_relative "easytest/matcher/not_raise"
25
25
  require_relative "easytest/matcher/raise"
26
+ require_relative "easytest/matcher/raise_nothing"
26
27
  require_relative "easytest/matcher/true"
27
28
 
28
29
  module Easytest
data/sig/easytest.rbs CHANGED
@@ -11,20 +11,20 @@ module Easytest
11
11
  alias to_equal to_eq
12
12
 
13
13
  def to_be: (untyped expected) -> untyped
14
-
15
14
  def to_be_nil: () -> void
15
+ def to_be_false: () -> void
16
+ def to_be_true: () -> void
16
17
 
17
18
  def to_be_a: (Class expected) -> void
18
19
  def to_be_kind_of: (Class expected) -> void
19
20
  def to_be_instance_of: (Class expected) -> void
20
21
 
21
- def to_be_false: () -> void
22
- def to_be_true: () -> void
23
-
24
22
  def to_include: (untyped expected) -> void
25
23
 
24
+ def to_match: (untyped expected) -> void
25
+
26
26
  def to_raise: ((Class | String | Regexp) expected) -> void
27
- def to_not_raise: () -> void
27
+ def to_raise_nothing: () -> void
28
28
  end
29
29
  end
30
30
 
@@ -34,6 +34,8 @@ module Kernel
34
34
 
35
35
  def skip: (String name) { () -> void } -> void
36
36
 
37
+ def only: (String name) { () -> void } -> void
38
+
37
39
  def expect: (untyped actual) -> Easytest::Expectation
38
40
  | { () -> void } -> Easytest::Expectation
39
41
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: easytest
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Masafumi Koba
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-10-06 00:00:00.000000000 Z
11
+ date: 2022-10-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rainbow
@@ -50,9 +50,10 @@ files:
50
50
  - lib/easytest/matcher/include.rb
51
51
  - lib/easytest/matcher/instance_of.rb
52
52
  - lib/easytest/matcher/kind_of.rb
53
+ - lib/easytest/matcher/match.rb
53
54
  - lib/easytest/matcher/nil.rb
54
- - lib/easytest/matcher/not_raise.rb
55
55
  - lib/easytest/matcher/raise.rb
56
+ - lib/easytest/matcher/raise_nothing.rb
56
57
  - lib/easytest/matcher/true.rb
57
58
  - lib/easytest/reporter.rb
58
59
  - lib/easytest/runner.rb