assert-view 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +2 -2
- data/lib/assert/view/base.rb +88 -13
- data/lib/assert/view/default_view.rb +27 -63
- data/lib/assert/view/helpers/capture_output.rb +16 -0
- data/lib/assert/view/helpers/leftright_columns.rb +48 -0
- data/lib/assert/view/leftright_view.rb +115 -0
- data/lib/assert/view/redgreen_view.rb +63 -0
- data/lib/assert/view/test_unit_view.rb +66 -0
- data/lib/assert/view/version.rb +1 -1
- data/test/base_test.rb +12 -7
- data/test/default_view_test.rb +2 -4
- data/test/leftright_view_test.rb +19 -0
- data/test/test_unit_test.rb +19 -0
- metadata +13 -4
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
assert-view (0.
|
4
|
+
assert-view (0.4.0)
|
5
5
|
ansi (~> 1.3)
|
6
6
|
undies (~> 1.1)
|
7
7
|
|
@@ -12,7 +12,7 @@ GEM
|
|
12
12
|
assert (0.6.0)
|
13
13
|
assert-view (~> 0.3)
|
14
14
|
rake (0.9.2)
|
15
|
-
undies (1.
|
15
|
+
undies (1.2.0)
|
16
16
|
|
17
17
|
PLATFORMS
|
18
18
|
ruby
|
data/lib/assert/view/base.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'assert/result'
|
1
2
|
require 'assert/options'
|
2
3
|
|
3
4
|
module Assert::View
|
@@ -50,11 +51,11 @@ module Assert::View
|
|
50
51
|
|
51
52
|
include Assert::Options
|
52
53
|
options do
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
54
|
+
default_pass_abbrev '.'
|
55
|
+
default_fail_abbrev 'F'
|
56
|
+
default_ignore_abbrev 'I'
|
57
|
+
default_skip_abbrev 'S'
|
58
|
+
default_error_abbrev 'E'
|
58
59
|
end
|
59
60
|
|
60
61
|
# the Renderer defines the hooks and callbacks needed for the runner to
|
@@ -114,34 +115,108 @@ module Assert::View
|
|
114
115
|
self.count(:tests) > 0
|
115
116
|
end
|
116
117
|
|
117
|
-
def
|
118
|
-
self.count(:
|
118
|
+
def all_pass?
|
119
|
+
self.count(:pass) == self.count(:results)
|
120
|
+
end
|
121
|
+
|
122
|
+
# get a uniq list of contexts for the test suite
|
123
|
+
def suite_contexts
|
124
|
+
@suite_contexts ||= self.suite.tests.inject([]) do |contexts, test|
|
125
|
+
contexts << test.context_info.klass
|
126
|
+
end.uniq
|
127
|
+
end
|
128
|
+
|
129
|
+
def ordered_suite_contexts
|
130
|
+
self.suite_contexts.sort{|a,b| a.to_s <=> b.to_s}
|
131
|
+
end
|
132
|
+
|
133
|
+
# get a uniq list of files containing contexts for the test suite
|
134
|
+
def suite_files
|
135
|
+
@suite_files ||= self.suite.tests.inject([]) do |files, test|
|
136
|
+
files << test.context_info.file
|
137
|
+
end.uniq
|
138
|
+
end
|
139
|
+
|
140
|
+
def ordered_suite_files
|
141
|
+
self.suite_files.sort{|a,b| a.to_s <=> b.to_s}
|
142
|
+
end
|
143
|
+
|
144
|
+
# get all the results that have details to show
|
145
|
+
# in addition, if a block is given...
|
146
|
+
# yield each result with its index, test, and any captured output
|
147
|
+
def detailed_results(test=nil)
|
148
|
+
tests = test.nil? ? self.suite.ordered_tests.reverse : [test]
|
149
|
+
result_index = 0
|
150
|
+
tests.collect do |test|
|
151
|
+
result_index += 1
|
152
|
+
test.results.
|
153
|
+
select { |result| self.show_result_details?(result) }.
|
154
|
+
each {|r| yield r, result_index, test, test.output if block_given?}
|
155
|
+
end.compact.flatten
|
156
|
+
end
|
157
|
+
|
158
|
+
# get all the results for a klass or other
|
159
|
+
def all_results_for(what=nil)
|
160
|
+
tests = if what.kind_of?(Class) && what.ancestors.include?(Assert::Context)
|
161
|
+
# test results for the given context
|
162
|
+
self.suite.ordered_tests.select do |test|
|
163
|
+
test.context_info.klass == what
|
164
|
+
end
|
165
|
+
elsif what.kind_of?(String)
|
166
|
+
# test results for the given test file
|
167
|
+
self.suite.ordered_tests.select do |test|
|
168
|
+
test.context_info.file == what
|
169
|
+
end
|
170
|
+
else
|
171
|
+
selt.suite.ordered_tests
|
172
|
+
end
|
173
|
+
|
174
|
+
result_index = 0
|
175
|
+
tests.collect do |test|
|
176
|
+
result_index += 1
|
177
|
+
test.results.
|
178
|
+
each {|r| yield r, result_index, test, test.output if block_given?}
|
179
|
+
end.compact.flatten
|
180
|
+
end
|
181
|
+
|
182
|
+
# only show result details for failed or errored results
|
183
|
+
# show result details if a skip or passed result was issues w/ a message
|
184
|
+
def show_result_details?(result)
|
185
|
+
([:fail, :error].include?(result.to_sym)) ||
|
186
|
+
([:skip, :ignore].include?(result.to_sym) && result.message)
|
187
|
+
end
|
188
|
+
|
189
|
+
def capture_output_start_msg
|
190
|
+
"--- stdout ---"
|
191
|
+
end
|
192
|
+
def capture_output_end_msg
|
193
|
+
"--------------"
|
119
194
|
end
|
120
195
|
|
121
196
|
# return a list of result symbols that have actually occurred
|
122
197
|
def ocurring_result_types
|
123
198
|
@result_types ||= [
|
124
|
-
:
|
199
|
+
:pass, :fail, :ignore, :skip, :error
|
125
200
|
].select { |result_sym| self.count(result_sym) > 0 }
|
126
201
|
end
|
127
202
|
|
128
203
|
# print a result summary message for a given result type
|
129
204
|
def result_summary_msg(result_type)
|
130
|
-
if result_type == :
|
131
|
-
self.
|
205
|
+
if result_type == :pass && self.all_pass?
|
206
|
+
self.all_pass_result_summary_msg
|
132
207
|
else
|
133
208
|
"#{self.count(result_type)} #{result_type.to_s}"
|
134
209
|
end
|
135
210
|
end
|
136
211
|
|
137
212
|
# generate an appropriate result summary msg for all tests passing
|
138
|
-
def
|
213
|
+
def all_pass_result_summary_msg
|
139
214
|
if self.count(:results) < 1
|
140
215
|
"uhh..."
|
141
216
|
elsif self.count(:results) == 1
|
142
|
-
"
|
217
|
+
"pass"
|
143
218
|
else
|
144
|
-
"all
|
219
|
+
"all pass"
|
145
220
|
end
|
146
221
|
end
|
147
222
|
|
@@ -1,8 +1,6 @@
|
|
1
|
-
require 'assert/result'
|
2
|
-
require 'assert/options'
|
3
|
-
|
4
1
|
require 'assert/view/base'
|
5
2
|
require 'assert/view/helpers/ansi'
|
3
|
+
require 'assert/view/helpers/capture_output'
|
6
4
|
|
7
5
|
module Assert::View
|
8
6
|
|
@@ -10,104 +8,70 @@ module Assert::View
|
|
10
8
|
# designed for terminal viewing.
|
11
9
|
|
12
10
|
class DefaultView < Base
|
11
|
+
helper Helpers::CaptureOutput
|
13
12
|
helper Helpers::AnsiStyles
|
13
|
+
|
14
14
|
options do
|
15
|
-
styled
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
15
|
+
styled true
|
16
|
+
pass_styles :green
|
17
|
+
fail_styles :red, :bold
|
18
|
+
error_styles :yellow, :bold
|
19
|
+
skip_styles :cyan
|
20
|
+
ignore_styles :magenta
|
21
21
|
end
|
22
22
|
|
23
23
|
template do
|
24
|
-
__
|
25
24
|
__ view.loaded_tests_statement
|
26
25
|
|
27
26
|
if view.tests?
|
28
27
|
|
29
28
|
__ view.running_tests_statement
|
30
29
|
|
31
|
-
view.run_tests(runner) do |
|
32
|
-
|
33
|
-
result_abbrev
|
34
|
-
__ ansi_styled_msg(result_abbrev, result_ansi_styles(result_sym)), false
|
30
|
+
view.run_tests(runner) do |result|
|
31
|
+
result_abbrev = view.options.send("#{result.to_sym}_abbrev")
|
32
|
+
__ ansi_styled_msg(result_abbrev, result_ansi_styles(result)), false
|
35
33
|
end
|
36
34
|
__ "\n" # add a newline after streamed runner output
|
37
35
|
|
38
|
-
view.detailed_results do |result, output|
|
36
|
+
view.detailed_results do |result, index, test, output|
|
39
37
|
__ ansi_styled_msg(result.to_s, result_ansi_styles(result))
|
40
|
-
|
41
|
-
if !output.empty?
|
42
|
-
__ view.result_output_start_msg
|
43
|
-
__ output, false
|
44
|
-
__ view.result_output_end_msg
|
45
|
-
end
|
46
|
-
|
38
|
+
__ captured_output(output) if output && !output.empty?
|
47
39
|
__
|
48
40
|
end
|
49
41
|
|
50
42
|
end
|
51
43
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
__ [ view.result_count_statement, ": ", styled_results_breakdown_statement ].join('')
|
44
|
+
__ [ view.result_count_statement, ": ",
|
45
|
+
(view.results_breakdown_statement do |msg, result_sym|
|
46
|
+
ansi_styled_msg(msg, result_ansi_styles(result_sym))
|
47
|
+
end)
|
48
|
+
].join('')
|
58
49
|
__
|
59
50
|
__ view.run_time_statement
|
60
51
|
end
|
61
52
|
|
62
53
|
def loaded_tests_statement
|
63
|
-
"Loaded suite (#{
|
64
|
-
end
|
65
|
-
|
66
|
-
def running_tests_statement
|
67
|
-
"Running tests in random order, seeded with: \"#{self.runner_seed}\""
|
68
|
-
end
|
69
|
-
|
70
|
-
# show test details in reverse order from how they were collected (FILO)
|
71
|
-
def detailed_tests
|
72
|
-
self.suite.ordered_tests.reverse
|
54
|
+
"Loaded suite (#{self.test_count_statement})"
|
73
55
|
end
|
74
56
|
|
75
|
-
|
76
|
-
|
77
|
-
# yield each result with its test output
|
78
|
-
def detailed_results(test=nil)
|
79
|
-
tests = test.nil? ? self.detailed_tests : [test]
|
80
|
-
tests.collect do |test|
|
81
|
-
test.results.
|
82
|
-
select { |result| self.show_result_details?(result) }.
|
83
|
-
each {|r| yield r, test.output if block_given?}
|
84
|
-
end.compact.flatten
|
57
|
+
def test_count_statement
|
58
|
+
"#{self.count(:tests)} test#{'s' if self.count(:tests) != 1}"
|
85
59
|
end
|
86
60
|
|
87
|
-
|
88
|
-
|
89
|
-
def show_result_details?(result)
|
90
|
-
([:failed, :errored].include?(result.to_sym)) ||
|
91
|
-
([:skipped, :ignored].include?(result.to_sym) && result.message)
|
92
|
-
end
|
93
|
-
|
94
|
-
def result_output_start_msg
|
95
|
-
"--- stdout ---"
|
96
|
-
end
|
97
|
-
def result_output_end_msg
|
98
|
-
"--------------"
|
61
|
+
def running_tests_statement
|
62
|
+
"Running tests in random order, seeded with \"#{self.runner_seed}\""
|
99
63
|
end
|
100
64
|
|
101
65
|
# generate a sentence fragment describing the breakdown of test results
|
102
66
|
# if a block is given, yield each msg in the breakdown for custom template formatting
|
103
67
|
def results_breakdown_statement
|
104
|
-
self.to_sentence(self.ocurring_result_types.collect do |
|
105
|
-
yield(self.result_summary_msg(
|
68
|
+
self.to_sentence(self.ocurring_result_types.collect do |result_sym|
|
69
|
+
yield(self.result_summary_msg(result_sym), result_sym) if block_given?
|
106
70
|
end)
|
107
71
|
end
|
108
72
|
|
109
73
|
def result_count_statement
|
110
|
-
"#{self.count(:results)}
|
74
|
+
"#{self.count(:results)} result#{'s' if self.count(:results) != 1}"
|
111
75
|
end
|
112
76
|
|
113
77
|
def run_time_statement
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Assert::View::Helpers
|
2
|
+
|
3
|
+
module CaptureOutput
|
4
|
+
|
5
|
+
def captured_output(output)
|
6
|
+
if !output.empty?
|
7
|
+
# TODO: move to the base view
|
8
|
+
[ view.capture_output_start_msg,
|
9
|
+
output + view.capture_output_end_msg
|
10
|
+
].join("\n")
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Assert::View::Helpers
|
2
|
+
|
3
|
+
module LeftrightColumns
|
4
|
+
|
5
|
+
def left_column(text, opts={})
|
6
|
+
col_width = opts[:width] || self.view.left_column_width
|
7
|
+
__ case view.options.left_column_justify
|
8
|
+
when :left
|
9
|
+
text.to_s+" "*(col_width-(text.to_s.size))
|
10
|
+
else
|
11
|
+
" "*(col_width-(text.to_s.size))+text.to_s+" "
|
12
|
+
end, false
|
13
|
+
end
|
14
|
+
|
15
|
+
def right_column(text, opts={})
|
16
|
+
lines = text.split("\n")
|
17
|
+
right_columnize(lines.first, opts)
|
18
|
+
lines[1..-1].each do |line|
|
19
|
+
self.left_column("")
|
20
|
+
right_columnize(line, opts)
|
21
|
+
end
|
22
|
+
__ if opts[:endline]
|
23
|
+
end
|
24
|
+
|
25
|
+
def right_columnize(text, opts={})
|
26
|
+
col_width = opts[:width] || self.view.right_column_width
|
27
|
+
# split text into array of limit sizes
|
28
|
+
|
29
|
+
n,r = text.size.divmod(col_width)
|
30
|
+
grps = (0..(n-1)).collect do |i|
|
31
|
+
i == 0 ? text[i*col_width,col_width] : " "+text[i*col_width,col_width]
|
32
|
+
end
|
33
|
+
if r > 0
|
34
|
+
grps << (n > 0 ? " "+text[-r,r] : text[-r,r])
|
35
|
+
end
|
36
|
+
|
37
|
+
__ grps.first
|
38
|
+
if grps.size > 1
|
39
|
+
grps[1..-1].each do |g|
|
40
|
+
self.left_column("")
|
41
|
+
__ g
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
@@ -0,0 +1,115 @@
|
|
1
|
+
require 'assert/view/default_view'
|
2
|
+
require 'assert/view/helpers/leftright_columns'
|
3
|
+
|
4
|
+
module Assert::View
|
5
|
+
|
6
|
+
# This is the default view used by assert. It renders ansi test output
|
7
|
+
# designed for terminal viewing.
|
8
|
+
|
9
|
+
class LeftrightView < DefaultView
|
10
|
+
helper Helpers::LeftrightColumns
|
11
|
+
|
12
|
+
options do
|
13
|
+
default_right_column_width 80
|
14
|
+
default_left_column_groupby :context
|
15
|
+
default_left_column_justify :right
|
16
|
+
end
|
17
|
+
|
18
|
+
template do
|
19
|
+
__ view.loaded_suite_statement
|
20
|
+
__ view.started_statement
|
21
|
+
|
22
|
+
if view.tests?
|
23
|
+
__
|
24
|
+
|
25
|
+
view.run_tests(runner)
|
26
|
+
|
27
|
+
view.leftright_groups.each do |grouping|
|
28
|
+
result_abbrevs = ""
|
29
|
+
view.all_results_for(grouping) do |result, index, test, output|
|
30
|
+
result_abbrev = view.options.send("#{result.to_sym}_abbrev")
|
31
|
+
result_abbrevs << ansi_styled_msg(result_abbrev, result_ansi_styles(result))
|
32
|
+
end
|
33
|
+
left_column(view.left_column_display(grouping))
|
34
|
+
right_column(result_abbrevs, {
|
35
|
+
:width => (view.options.styled ? 10 : 1)*view.right_column_width
|
36
|
+
})
|
37
|
+
|
38
|
+
result_details = []
|
39
|
+
view.all_results_for(grouping) do |result, index, test, output|
|
40
|
+
if view.show_result_details?(result)
|
41
|
+
result_details << [
|
42
|
+
ansi_styled_msg(result.to_s, result_ansi_styles(result)),
|
43
|
+
captured_output(output),
|
44
|
+
"\n"
|
45
|
+
].compact.join("\n")
|
46
|
+
end
|
47
|
+
end
|
48
|
+
if result_details.size > 0
|
49
|
+
left_column("")
|
50
|
+
right_column(result_details.join, {:endline => true})
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
__
|
57
|
+
__ [ view.result_count_statement, ": ",
|
58
|
+
(view.results_breakdown_statement do |msg, result_sym|
|
59
|
+
ansi_styled_msg(msg, result_ansi_styles(result_sym))
|
60
|
+
end)
|
61
|
+
].join('')
|
62
|
+
__
|
63
|
+
__ view.run_time_statement
|
64
|
+
end
|
65
|
+
|
66
|
+
def loaded_suite_statement
|
67
|
+
"Loaded suite #{$0.to_s}"
|
68
|
+
end
|
69
|
+
|
70
|
+
def started_statement
|
71
|
+
"Started"
|
72
|
+
end
|
73
|
+
|
74
|
+
def leftright_groups
|
75
|
+
case self.options.left_column_groupby
|
76
|
+
when :context
|
77
|
+
self.ordered_suite_contexts
|
78
|
+
when :file
|
79
|
+
self.ordered_suite_files
|
80
|
+
else
|
81
|
+
[]
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def left_column_display(leftcol_value)
|
86
|
+
case self.options.left_column_groupby
|
87
|
+
when :context
|
88
|
+
leftcol_value.to_s.gsub(/Test$/, '')
|
89
|
+
when :file
|
90
|
+
leftcol_value.to_s.gsub(File.expand_path(".", Dir.pwd), '').gsub(/^\/+test\//, '')
|
91
|
+
else
|
92
|
+
leftcol_value.to_s
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def left_column_width
|
97
|
+
@left_col_width ||= case self.options.left_column_groupby
|
98
|
+
when :context
|
99
|
+
self.suite_contexts.collect{|f| f.to_s.gsub(/Test$/, '')}
|
100
|
+
when :file
|
101
|
+
self.suite_files.collect{|f| f.to_s.gsub(File.expand_path(".", Dir.pwd), '').gsub(/^\/+test\//, '')}
|
102
|
+
else
|
103
|
+
[]
|
104
|
+
end.inject(0) do |max_size, klass|
|
105
|
+
klass.to_s.size > max_size ? klass.to_s.size : max_size
|
106
|
+
end + 1
|
107
|
+
end
|
108
|
+
|
109
|
+
def right_column_width
|
110
|
+
self.options.right_column_width
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|
114
|
+
|
115
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'assert/view/test_unit_view'
|
2
|
+
require 'assert/view/helpers/ansi'
|
3
|
+
|
4
|
+
module Assert::View
|
5
|
+
|
6
|
+
# this view add simple color ansi output to the TestUnitView
|
7
|
+
|
8
|
+
class RedgreenView < TestUnitView
|
9
|
+
helper Helpers::CaptureOutput
|
10
|
+
helper Helpers::AnsiStyles
|
11
|
+
|
12
|
+
options do
|
13
|
+
styled true
|
14
|
+
passed_styles :green
|
15
|
+
failed_styles :red
|
16
|
+
errored_styles :yellow
|
17
|
+
skipped_styles :yellow
|
18
|
+
ignored_styles :yellow
|
19
|
+
end
|
20
|
+
|
21
|
+
# this template is identical to the TestUnitView template, except:
|
22
|
+
# - the run_tests result handler block shows ansi styled output
|
23
|
+
# - each detailed result renders its name styled
|
24
|
+
# - the results_breakdown_statement renders ansi styled
|
25
|
+
template do
|
26
|
+
__ view.loaded_suite_statement
|
27
|
+
__ view.started_statement
|
28
|
+
|
29
|
+
if view.tests?
|
30
|
+
|
31
|
+
view.run_tests(runner) do |each_result|
|
32
|
+
# the run_tests result handler from DefaultView
|
33
|
+
result_sym = each_result.to_sym
|
34
|
+
result_abbrev = view.options.send("#{result_sym}_abbrev")
|
35
|
+
__ ansi_styled_msg(result_abbrev, result_ansi_styles(result_sym)), false
|
36
|
+
end
|
37
|
+
__
|
38
|
+
__ view.finished_statement
|
39
|
+
__
|
40
|
+
|
41
|
+
# same as the test/unit template except styling result name
|
42
|
+
view.detailed_results do |result, index, test, output|
|
43
|
+
# TODO: remove and call directly once result name is in assert
|
44
|
+
result_name = result.respond_to?(:name) ? result.name : ""
|
45
|
+
__ " #{index}) #{ansi_styled_msg(result_name, result_ansi_styles(result.to_sym))}:"
|
46
|
+
__ "#{result.test_name}(#{test.context_class.name}):"
|
47
|
+
__ result.message
|
48
|
+
__ " #{result.backtrace.filtered.first.to_s}"
|
49
|
+
|
50
|
+
__ captured_output(output) if output && !output.empty?
|
51
|
+
__
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
# smae as test/unit, except styled
|
57
|
+
__ ansi_styled_msg(view.results_breakdown_statement, view.all_pass? ? :green : :red)
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'assert/view/base'
|
2
|
+
require 'assert/view/helpers/capture_output'
|
3
|
+
|
4
|
+
module Assert::View
|
5
|
+
|
6
|
+
# this view renders in test/unit style
|
7
|
+
|
8
|
+
class TestUnitView < Base
|
9
|
+
helper Helpers::CaptureOutput
|
10
|
+
|
11
|
+
template do
|
12
|
+
__ view.loaded_suite_statement
|
13
|
+
__ view.started_statement
|
14
|
+
|
15
|
+
if view.tests?
|
16
|
+
|
17
|
+
view.run_tests(runner) do |each_result|
|
18
|
+
__ view.options.send("#{each_result.to_sym}_abbrev"), false
|
19
|
+
end
|
20
|
+
__
|
21
|
+
__ view.finished_statement
|
22
|
+
__
|
23
|
+
|
24
|
+
view.detailed_results do |result, index, test, output|
|
25
|
+
# TODO: remove and call directly once result name is in assert
|
26
|
+
result_name = result.respond_to?(:name) ? result.name : ""
|
27
|
+
__ " #{index}) #{result_name}:"
|
28
|
+
__ "#{result.test_name}(#{test.context_class.name}):"
|
29
|
+
__ result.message
|
30
|
+
__ " #{result.backtrace.filtered.first.to_s}"
|
31
|
+
|
32
|
+
__ captured_output(output) if output && !output.empty?
|
33
|
+
__
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
__ view.results_breakdown_statement
|
39
|
+
end
|
40
|
+
|
41
|
+
def loaded_suite_statement
|
42
|
+
"Loaded suite #{$0.to_s}"
|
43
|
+
end
|
44
|
+
|
45
|
+
def started_statement
|
46
|
+
"Started"
|
47
|
+
end
|
48
|
+
|
49
|
+
def finished_statement
|
50
|
+
"Finished in #{self.run_time} seconds."
|
51
|
+
end
|
52
|
+
|
53
|
+
# generate a sentence fragment describing the breakdown of test results
|
54
|
+
# if a block is given, yield each msg in the breakdown for custom template formatting
|
55
|
+
def results_breakdown_statement
|
56
|
+
[ "#{self.count(:tests)} tests, #{self.count(:results)} assertions",
|
57
|
+
self.to_sentence(self.ocurring_result_types.collect do |result_type|
|
58
|
+
self.result_summary_msg(result_type)
|
59
|
+
end)
|
60
|
+
].join(", ")
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
data/lib/assert/view/version.rb
CHANGED
data/test/base_test.rb
CHANGED
@@ -16,9 +16,14 @@ module Assert::View
|
|
16
16
|
should have_accessors :suite, :output_io, :runtime_result_callback
|
17
17
|
should have_class_method :template
|
18
18
|
should have_instance_methods :run_tests, :handle_runtime_result
|
19
|
-
should have_instance_methods :run_time, :runner_seed, :count, :tests
|
19
|
+
should have_instance_methods :run_time, :runner_seed, :count, :tests?
|
20
|
+
should have_instance_methods :suite_contexts, :ordered_suite_contexts
|
21
|
+
should have_instance_methods :suite_files, :ordered_suite_files
|
22
|
+
should have_instance_methods :show_result_details?, :detailed_results, :all_results_for
|
20
23
|
should have_instance_methods :ocurring_result_types, :result_summary_msg
|
21
|
-
should have_instance_methods :
|
24
|
+
should have_instance_methods :all_pass?, :all_pass_result_summary_msg, :to_sentence
|
25
|
+
should have_instance_methods :capture_output_start_msg, :capture_output_end_msg
|
26
|
+
|
22
27
|
|
23
28
|
# options stuff
|
24
29
|
should have_instance_method :options
|
@@ -41,11 +46,11 @@ module Assert::View
|
|
41
46
|
end
|
42
47
|
|
43
48
|
should "default its result abbreviations" do
|
44
|
-
assert_equal '.', subject.
|
45
|
-
assert_equal 'F', subject.
|
46
|
-
assert_equal 'I', subject.
|
47
|
-
assert_equal 'S', subject.
|
48
|
-
assert_equal 'E', subject.
|
49
|
+
assert_equal '.', subject.default_pass_abbrev
|
50
|
+
assert_equal 'F', subject.default_fail_abbrev
|
51
|
+
assert_equal 'I', subject.default_ignore_abbrev
|
52
|
+
assert_equal 'S', subject.default_skip_abbrev
|
53
|
+
assert_equal 'E', subject.default_error_abbrev
|
49
54
|
end
|
50
55
|
|
51
56
|
end
|
data/test/default_view_test.rb
CHANGED
@@ -5,16 +5,14 @@ require 'stringio'
|
|
5
5
|
|
6
6
|
module Assert::View
|
7
7
|
|
8
|
-
class
|
9
|
-
desc "the
|
8
|
+
class DefaultViewTest < Assert::Context
|
9
|
+
desc "the default view"
|
10
10
|
setup do
|
11
11
|
@view = Assert::View::DefaultView.new(Assert::Suite.new, StringIO.new("", "w+"))
|
12
12
|
end
|
13
13
|
subject{ @view }
|
14
14
|
|
15
15
|
should have_instance_methods :loaded_tests_statement, :running_tests_statement
|
16
|
-
should have_instance_methods :detailed_tests, :detailed_results, :show_result_details?
|
17
|
-
should have_instance_methods :result_output_start_msg, :result_output_end_msg
|
18
16
|
should have_instance_methods :results_breakdown_statement, :result_count_statement
|
19
17
|
should have_instance_methods :run_time_statement
|
20
18
|
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'assert'
|
2
|
+
|
3
|
+
require 'assert/view/leftright_view'
|
4
|
+
require 'stringio'
|
5
|
+
|
6
|
+
module Assert::View
|
7
|
+
|
8
|
+
class LeftrightViewTest < Assert::Context
|
9
|
+
desc "the leftright view"
|
10
|
+
setup do
|
11
|
+
@view = Assert::View::LeftrightView.new(Assert::Suite.new, StringIO.new("", "w+"))
|
12
|
+
end
|
13
|
+
subject{ @view }
|
14
|
+
|
15
|
+
should have_instance_methods :loaded_suite_statement, :started_statement
|
16
|
+
should have_instance_methods :leftright_groups, :left_column_display, :left_column_width
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'assert'
|
2
|
+
|
3
|
+
require 'assert/view/test_unit_view'
|
4
|
+
require 'stringio'
|
5
|
+
|
6
|
+
module Assert::View
|
7
|
+
|
8
|
+
class TestUnitViewTest < Assert::Context
|
9
|
+
desc "the test/unit view"
|
10
|
+
setup do
|
11
|
+
@view = Assert::View::TestUnitView.new(Assert::Suite.new, StringIO.new("", "w+"))
|
12
|
+
end
|
13
|
+
subject{ @view }
|
14
|
+
|
15
|
+
should have_instance_methods :loaded_suite_statement, :started_statement
|
16
|
+
should have_instance_methods :finished_statement, :results_breakdown_statement
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: assert-view
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 4
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 0.4.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Kelly Redding
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-10-11 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
type: :development
|
@@ -96,11 +96,18 @@ files:
|
|
96
96
|
- lib/assert/view/base.rb
|
97
97
|
- lib/assert/view/default_view.rb
|
98
98
|
- lib/assert/view/helpers/ansi.rb
|
99
|
+
- lib/assert/view/helpers/capture_output.rb
|
100
|
+
- lib/assert/view/helpers/leftright_columns.rb
|
101
|
+
- lib/assert/view/leftright_view.rb
|
102
|
+
- lib/assert/view/redgreen_view.rb
|
103
|
+
- lib/assert/view/test_unit_view.rb
|
99
104
|
- lib/assert/view/version.rb
|
100
105
|
- test/base_test.rb
|
101
106
|
- test/default_view_test.rb
|
102
107
|
- test/helper.rb
|
103
108
|
- test/irb.rb
|
109
|
+
- test/leftright_view_test.rb
|
110
|
+
- test/test_unit_test.rb
|
104
111
|
homepage: http://github.com/teaminsight/assert-view
|
105
112
|
licenses: []
|
106
113
|
|
@@ -139,3 +146,5 @@ test_files:
|
|
139
146
|
- test/default_view_test.rb
|
140
147
|
- test/helper.rb
|
141
148
|
- test/irb.rb
|
149
|
+
- test/leftright_view_test.rb
|
150
|
+
- test/test_unit_test.rb
|