petitest 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 +14 -1
- data/README.md +196 -45
- data/images/demo.png +0 -0
- data/lib/petitest.rb +9 -7
- data/lib/petitest/assertion_skip_error.rb +4 -0
- data/lib/petitest/autorun.rb +4 -2
- data/lib/petitest/dsl.rb +27 -0
- data/lib/petitest/subscriber_concerns/time_concern.rb +2 -2
- data/lib/petitest/subscribers/base_subscriber.rb +12 -12
- data/lib/petitest/subscribers/document_report_subscriber.rb +7 -7
- data/lib/petitest/subscribers/json_report_subscriber.rb +13 -13
- data/lib/petitest/subscribers/progress_report_subscriber.rb +5 -5
- data/lib/petitest/test.rb +142 -0
- data/lib/petitest/test_group.rb +35 -125
- data/lib/petitest/test_plan.rb +102 -0
- data/lib/petitest/{test_case.rb → test_runner.rb} +38 -21
- data/lib/petitest/texts/error_message_text.rb +7 -7
- data/lib/petitest/texts/failures_element_text.rb +9 -14
- data/lib/petitest/texts/failures_text.rb +7 -7
- data/lib/petitest/texts/filtered_backtrace_text.rb +6 -6
- data/lib/petitest/texts/raised_code_text.rb +7 -7
- data/lib/petitest/texts/test_counts_text.rb +26 -26
- data/lib/petitest/texts/test_result_character_text.rb +27 -0
- data/lib/petitest/texts/test_result_line_text.rb +37 -0
- data/lib/petitest/texts/tests_result_margin_top_text.rb +24 -0
- data/lib/petitest/texts/{test_cases_result_text.rb → tests_result_text.rb} +14 -12
- data/lib/petitest/version.rb +1 -1
- metadata +12 -8
- data/lib/petitest/test_cases_runner.rb +0 -90
- data/lib/petitest/texts/test_case_result_character_text.rb +0 -27
- data/lib/petitest/texts/test_case_result_line_text.rb +0 -37
- data/lib/petitest/texts/test_cases_result_margin_top_text.rb +0 -24
@@ -1,5 +1,5 @@
|
|
1
1
|
module Petitest
|
2
|
-
class
|
2
|
+
class TestRunner
|
3
3
|
# @return [StandardError, nil]
|
4
4
|
attr_accessor :error
|
5
5
|
|
@@ -9,22 +9,28 @@ module Petitest
|
|
9
9
|
# @return [Time, nil]
|
10
10
|
attr_accessor :started_at
|
11
11
|
|
12
|
-
# @return [
|
13
|
-
attr_reader :
|
12
|
+
# @return [Petitest::Test]
|
13
|
+
attr_reader :test
|
14
14
|
|
15
|
-
# @return [Petitest::
|
16
|
-
attr_reader :
|
15
|
+
# @return [Petitest::TestGroup]
|
16
|
+
attr_reader :test_group
|
17
|
+
|
18
|
+
# @return [Symbol]
|
19
|
+
attr_reader :test_method_name
|
17
20
|
|
18
|
-
# @param
|
19
|
-
# @param
|
21
|
+
# @param test [Petitest::Test]
|
22
|
+
# @param test_group [Petitest::TestGroup]
|
23
|
+
# @param test_method_name [Symbol]
|
20
24
|
def initialize(
|
21
|
-
|
22
|
-
|
25
|
+
test:,
|
26
|
+
test_group:,
|
27
|
+
test_method_name:
|
23
28
|
)
|
24
29
|
@duration = nil
|
25
30
|
@processed = false
|
26
|
-
@
|
27
|
-
@
|
31
|
+
@test = test
|
32
|
+
@test_group = test_group
|
33
|
+
@test_method_name = test_method_name
|
28
34
|
end
|
29
35
|
|
30
36
|
# @return [Array<String>, nil]
|
@@ -36,13 +42,13 @@ module Petitest
|
|
36
42
|
|
37
43
|
# @return [String]
|
38
44
|
def description
|
39
|
-
|
45
|
+
test.class.description_by_method_name[test_method_name] || "##{test_method_name}"
|
40
46
|
end
|
41
47
|
|
42
48
|
# @return [String]
|
43
49
|
def full_description
|
44
50
|
[
|
45
|
-
|
51
|
+
test_group.full_description,
|
46
52
|
description,
|
47
53
|
].join(" ")
|
48
54
|
end
|
@@ -63,7 +69,7 @@ module Petitest
|
|
63
69
|
|
64
70
|
# @return [Boolean]
|
65
71
|
def failed?
|
66
|
-
processed? && !error.nil?
|
72
|
+
processed? && !skipped? && !error.nil?
|
67
73
|
end
|
68
74
|
|
69
75
|
# @return [Array<String>, nil]
|
@@ -81,9 +87,14 @@ module Petitest
|
|
81
87
|
end
|
82
88
|
end
|
83
89
|
|
90
|
+
# @note Override
|
91
|
+
def inspect
|
92
|
+
"#<#{self.class}>"
|
93
|
+
end
|
94
|
+
|
84
95
|
# @return [Boolean]
|
85
96
|
def passed?
|
86
|
-
processed? &&
|
97
|
+
processed? && !skipped? && !failed?
|
87
98
|
end
|
88
99
|
|
89
100
|
# @return [Boolean]
|
@@ -93,7 +104,7 @@ module Petitest
|
|
93
104
|
|
94
105
|
def run
|
95
106
|
self.started_at = ::Time.now
|
96
|
-
|
107
|
+
test.send(test_method_name)
|
97
108
|
true
|
98
109
|
rescue => error
|
99
110
|
self.error = error
|
@@ -103,15 +114,21 @@ module Petitest
|
|
103
114
|
@processed = true
|
104
115
|
end
|
105
116
|
|
106
|
-
# @todo
|
107
117
|
# @return [Boolean]
|
108
118
|
def skipped?
|
109
|
-
|
119
|
+
processed? && error.is_a?(::Petitest::AssertionSkipError)
|
110
120
|
end
|
111
121
|
|
112
|
-
# @return [
|
113
|
-
def
|
114
|
-
|
122
|
+
# @return [Petitest::TestMethod]
|
123
|
+
def test_method
|
124
|
+
@test_method ||= begin
|
125
|
+
source_location = test.public_method(test_method_name).source_location
|
126
|
+
::Petitest::TestMethod.new(
|
127
|
+
line_number: source_location[0],
|
128
|
+
method_name: test_method_name,
|
129
|
+
path: source_location[1],
|
130
|
+
)
|
131
|
+
end
|
115
132
|
end
|
116
133
|
end
|
117
134
|
end
|
@@ -3,19 +3,19 @@ require "petitest/texts/base_text"
|
|
3
3
|
module Petitest
|
4
4
|
module Texts
|
5
5
|
class ErrorMessageText < ::Petitest::Texts::BaseText
|
6
|
-
# @return [Petitest::
|
7
|
-
attr_reader :
|
6
|
+
# @return [Petitest::Test]
|
7
|
+
attr_reader :test
|
8
8
|
|
9
|
-
# @param
|
10
|
-
def initialize(
|
11
|
-
@
|
9
|
+
# @param test [Petitest::Test]
|
10
|
+
def initialize(test:)
|
11
|
+
@test = test
|
12
12
|
end
|
13
13
|
|
14
14
|
# @note Override
|
15
15
|
def to_s
|
16
16
|
elements = []
|
17
|
-
elements <<
|
18
|
-
elements <<
|
17
|
+
elements << test.runner.error_class_name unless test.runner.error.is_a?(::Petitest::AssertionFailureError)
|
18
|
+
elements << test.runner.error_message unless test.runner.error_message.empty?
|
19
19
|
string = elements.join("\n")
|
20
20
|
colorize(string, :error)
|
21
21
|
end
|
@@ -6,14 +6,14 @@ module Petitest
|
|
6
6
|
# @return [Integer]
|
7
7
|
attr_reader :index
|
8
8
|
|
9
|
-
# @return [Petitest::
|
10
|
-
attr_reader :
|
9
|
+
# @return [Petitest::Test]
|
10
|
+
attr_reader :test
|
11
11
|
|
12
12
|
# @param index [Integer]
|
13
|
-
# @param
|
14
|
-
def initialize(index:,
|
13
|
+
# @param test [Petitest::Test]
|
14
|
+
def initialize(index:, test:)
|
15
15
|
@index = index
|
16
|
-
@
|
16
|
+
@test = test
|
17
17
|
end
|
18
18
|
|
19
19
|
# @note Override
|
@@ -29,26 +29,21 @@ module Petitest
|
|
29
29
|
# @return [String]
|
30
30
|
def body
|
31
31
|
[
|
32
|
-
::Petitest::Texts::RaisedCodeText.new(
|
33
|
-
::Petitest::Texts::ErrorMessageText.new(
|
34
|
-
::Petitest::Texts::FilteredBacktraceText.new(
|
32
|
+
::Petitest::Texts::RaisedCodeText.new(test: test),
|
33
|
+
::Petitest::Texts::ErrorMessageText.new(test: test),
|
34
|
+
::Petitest::Texts::FilteredBacktraceText.new(test: test),
|
35
35
|
].join("\n")
|
36
36
|
end
|
37
37
|
|
38
38
|
# @return [String]
|
39
39
|
def heading
|
40
|
-
"#{ordinal_number}) #{
|
40
|
+
"#{ordinal_number}) #{test.class}##{test.runner.test_method_name}"
|
41
41
|
end
|
42
42
|
|
43
43
|
# @return [Integer]
|
44
44
|
def ordinal_number
|
45
45
|
index + 1
|
46
46
|
end
|
47
|
-
|
48
|
-
# @return [String]
|
49
|
-
def test_signature
|
50
|
-
test_case.test_signature
|
51
|
-
end
|
52
47
|
end
|
53
48
|
end
|
54
49
|
end
|
@@ -3,12 +3,12 @@ require "petitest/texts/base_text"
|
|
3
3
|
module Petitest
|
4
4
|
module Texts
|
5
5
|
class FailuresText < ::Petitest::Texts::BaseText
|
6
|
-
# @return [Array<Petitest::
|
7
|
-
attr_reader :
|
6
|
+
# @return [Array<Petitest::Test>]
|
7
|
+
attr_reader :tests
|
8
8
|
|
9
|
-
# @param
|
10
|
-
def initialize(
|
11
|
-
@
|
9
|
+
# @param tests [Array<Petitest::Test>]
|
10
|
+
def initialize(tests:)
|
11
|
+
@tests = tests
|
12
12
|
end
|
13
13
|
|
14
14
|
# @note Override
|
@@ -28,10 +28,10 @@ module Petitest
|
|
28
28
|
|
29
29
|
# @return [Array<Petitest::Textx::FailuresElementText>]
|
30
30
|
def failures_element_texts
|
31
|
-
|
31
|
+
tests.map.with_index do |test, index|
|
32
32
|
::Petitest::Texts::FailuresElementText.new(
|
33
33
|
index: index,
|
34
|
-
|
34
|
+
test: test,
|
35
35
|
)
|
36
36
|
end
|
37
37
|
end
|
@@ -3,17 +3,17 @@ require "petitest/texts/base_text"
|
|
3
3
|
module Petitest
|
4
4
|
module Texts
|
5
5
|
class FilteredBacktraceText < ::Petitest::Texts::BaseText
|
6
|
-
# @return [Petitest::
|
7
|
-
attr_reader :
|
6
|
+
# @return [Petitest::Test]
|
7
|
+
attr_reader :test
|
8
8
|
|
9
|
-
# @param
|
10
|
-
def initialize(
|
11
|
-
@
|
9
|
+
# @param test [Petitest::Test]
|
10
|
+
def initialize(test:)
|
11
|
+
@test = test
|
12
12
|
end
|
13
13
|
|
14
14
|
# @note Override
|
15
15
|
def to_s
|
16
|
-
colorize(
|
16
|
+
colorize(test.runner.filtered_backtrace.join("\n").gsub(/^/, "# "), :detail)
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|
@@ -3,12 +3,12 @@ require "petitest/texts/base_text"
|
|
3
3
|
module Petitest
|
4
4
|
module Texts
|
5
5
|
class RaisedCodeText < ::Petitest::Texts::BaseText
|
6
|
-
# @return [Petitest::
|
7
|
-
attr_reader :
|
6
|
+
# @return [Petitest::Test]
|
7
|
+
attr_reader :test
|
8
8
|
|
9
|
-
# @param
|
10
|
-
def initialize(
|
11
|
-
@
|
9
|
+
# @param test [Petitest::Test]
|
10
|
+
def initialize(test:)
|
11
|
+
@test = test
|
12
12
|
end
|
13
13
|
|
14
14
|
# @note Override
|
@@ -44,8 +44,8 @@ module Petitest
|
|
44
44
|
# @return [Array<String>]
|
45
45
|
def caller_segments
|
46
46
|
@caller_segments ||= begin
|
47
|
-
if
|
48
|
-
|
47
|
+
if test.runner.filtered_backtrace[0]
|
48
|
+
test.runner.filtered_backtrace[0].split(":", 3)
|
49
49
|
else
|
50
50
|
[]
|
51
51
|
end
|
@@ -3,12 +3,12 @@ require "petitest/texts/base_text"
|
|
3
3
|
module Petitest
|
4
4
|
module Texts
|
5
5
|
class TestCountsText < ::Petitest::Texts::BaseText
|
6
|
-
# @return [Array<Petitest::
|
7
|
-
attr_reader :
|
6
|
+
# @return [Array<Petitest::Test>]
|
7
|
+
attr_reader :tests
|
8
8
|
|
9
|
-
# @param
|
10
|
-
def initialize(
|
11
|
-
@
|
9
|
+
# @param tests [Array<Petitest::Test>]
|
10
|
+
def initialize(tests:)
|
11
|
+
@tests = tests
|
12
12
|
end
|
13
13
|
|
14
14
|
# @note Override
|
@@ -24,31 +24,31 @@ module Petitest
|
|
24
24
|
# @return [String]
|
25
25
|
def body
|
26
26
|
[
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
27
|
+
text_of_count_of_tests,
|
28
|
+
text_of_count_of_passed_tests,
|
29
|
+
text_of_count_of_failed_tests,
|
30
|
+
text_of_count_of_skipped_tests,
|
31
31
|
].join("\n")
|
32
32
|
end
|
33
33
|
|
34
34
|
# @return [Integer]
|
35
|
-
def
|
36
|
-
|
35
|
+
def count_of_failed_tests
|
36
|
+
tests.map(&:runner).select(&:failed?).length
|
37
37
|
end
|
38
38
|
|
39
39
|
# @return [Integer]
|
40
|
-
def
|
41
|
-
|
40
|
+
def count_of_passed_tests
|
41
|
+
tests.map(&:runner).select(&:passed?).length
|
42
42
|
end
|
43
43
|
|
44
44
|
# @return [Integer]
|
45
|
-
def
|
46
|
-
|
45
|
+
def count_of_skipped_tests
|
46
|
+
tests.map(&:runner).select(&:skipped?).length
|
47
47
|
end
|
48
48
|
|
49
49
|
# @return [Integer]
|
50
|
-
def
|
51
|
-
|
50
|
+
def count_of_tests
|
51
|
+
tests.length
|
52
52
|
end
|
53
53
|
|
54
54
|
# @return [String]
|
@@ -58,27 +58,27 @@ module Petitest
|
|
58
58
|
|
59
59
|
# @return [Integer]
|
60
60
|
def max_digits_length
|
61
|
-
@max_digits_length ||=
|
61
|
+
@max_digits_length ||= count_of_tests.to_s.length
|
62
62
|
end
|
63
63
|
|
64
64
|
# @return [String]
|
65
|
-
def
|
66
|
-
colorize("%#{max_digits_length}d failures" %
|
65
|
+
def text_of_count_of_failed_tests
|
66
|
+
colorize("%#{max_digits_length}d failures" % count_of_failed_tests, :error)
|
67
67
|
end
|
68
68
|
|
69
69
|
# @return [String]
|
70
|
-
def
|
71
|
-
colorize("%#{max_digits_length}d passes" %
|
70
|
+
def text_of_count_of_passed_tests
|
71
|
+
colorize("%#{max_digits_length}d passes" % count_of_passed_tests, :pass)
|
72
72
|
end
|
73
73
|
|
74
74
|
# @return [String]
|
75
|
-
def
|
76
|
-
colorize("%#{max_digits_length}d skips" %
|
75
|
+
def text_of_count_of_skipped_tests
|
76
|
+
colorize("%#{max_digits_length}d skips" % count_of_skipped_tests, :skip)
|
77
77
|
end
|
78
78
|
|
79
79
|
# @return [String]
|
80
|
-
def
|
81
|
-
"%#{max_digits_length}d tests" %
|
80
|
+
def text_of_count_of_tests
|
81
|
+
"%#{max_digits_length}d tests" % count_of_tests
|
82
82
|
end
|
83
83
|
end
|
84
84
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require "petitest/texts/base_text"
|
2
|
+
|
3
|
+
module Petitest
|
4
|
+
module Texts
|
5
|
+
class TestResultCharacterText < ::Petitest::Texts::BaseText
|
6
|
+
# @return [Petitest::Test]
|
7
|
+
attr_reader :test
|
8
|
+
|
9
|
+
# @param test [Petitest::Test]
|
10
|
+
def initialize(test:)
|
11
|
+
@test = test
|
12
|
+
end
|
13
|
+
|
14
|
+
# @note Override
|
15
|
+
def to_s
|
16
|
+
case
|
17
|
+
when test.runner.failed?
|
18
|
+
colorize("F", :error)
|
19
|
+
when test.runner.skipped?
|
20
|
+
colorize("*", :skip)
|
21
|
+
else
|
22
|
+
"."
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require "petitest/texts/base_text"
|
2
|
+
|
3
|
+
module Petitest
|
4
|
+
module Texts
|
5
|
+
class TestResultLineText < ::Petitest::Texts::BaseText
|
6
|
+
# @return [Petitest::Test]
|
7
|
+
attr_reader :test
|
8
|
+
|
9
|
+
# @param test [Petitest::Test]
|
10
|
+
def initialize(test:)
|
11
|
+
@test = test
|
12
|
+
end
|
13
|
+
|
14
|
+
# @note Override
|
15
|
+
def to_s
|
16
|
+
indent(
|
17
|
+
colorize("##{test.runner.test_method_name}", color_type),
|
18
|
+
2 * (test.runner.test_group.nest_level + 1),
|
19
|
+
)
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
# @return [Symbol]
|
25
|
+
def color_type
|
26
|
+
case
|
27
|
+
when test.runner.failed?
|
28
|
+
:error
|
29
|
+
when test.runner.skipped?
|
30
|
+
:skip
|
31
|
+
else
|
32
|
+
:pass
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|