assert 1.1.0 → 2.0.0.rc.1
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.
- data/.assert.rb +3 -0
- data/README.md +182 -108
- data/Rakefile +0 -3
- data/bin/assert +1 -1
- data/lib/assert.rb +75 -4
- data/lib/assert/assert_runner.rb +76 -0
- data/lib/assert/cli.rb +25 -46
- data/lib/assert/context.rb +3 -3
- data/lib/assert/result.rb +65 -55
- data/lib/assert/runner.rb +19 -38
- data/lib/assert/suite.rb +0 -7
- data/lib/assert/test.rb +4 -16
- data/lib/assert/version.rb +1 -1
- data/lib/assert/view.rb +23 -0
- data/lib/assert/view/base.rb +10 -19
- data/lib/assert/view/default_view.rb +16 -11
- data/lib/assert/view/helpers/ansi_styles.rb +1 -1
- data/lib/assert/view/helpers/common.rb +37 -16
- data/test/assert_test.rb +29 -14
- data/test/context/class_methods_test.rb +2 -2
- data/test/context_test.rb +28 -50
- data/test/helper.rb +4 -2
- data/test/runner_test.rb +5 -4
- data/test/suite_test.rb +1 -1
- data/test/test_test.rb +8 -15
- data/test/view/base_tests.rb +20 -37
- metadata +17 -39
- data/lib/assert/autorun.rb +0 -37
- data/lib/assert/options.rb +0 -43
- data/lib/assert/rake_tasks.rb +0 -75
- data/lib/assert/rake_tasks/irb.rb +0 -33
- data/lib/assert/rake_tasks/scope.rb +0 -100
- data/lib/assert/rake_tasks/test_task.rb +0 -66
- data/lib/assert/result_set.rb +0 -17
- data/lib/assert/setup.rb +0 -3
- data/lib/assert/setup/all.rb +0 -5
- data/lib/assert/setup/helpers.rb +0 -72
- data/lib/assert/setup/options.rb +0 -6
- data/lib/assert/setup/runner.rb +0 -13
- data/lib/assert/setup/suite.rb +0 -13
- data/lib/assert/setup/view.rb +0 -39
- data/lib/assert/view/helpers/capture_output.rb +0 -23
- data/test/default_view_test.rb +0 -16
- data/test/irb.rb +0 -5
- data/test/options_test.rb +0 -40
- data/test/rake_tasks/irb_test.rb +0 -45
- data/test/rake_tasks/scope_test.rb +0 -63
- data/test/rake_tasks/test_task_test.rb +0 -80
- data/test/result_set_test.rb +0 -72
data/lib/assert/version.rb
CHANGED
data/lib/assert/view.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'assert/view/default_view'
|
2
|
+
|
3
|
+
module Assert::View
|
4
|
+
|
5
|
+
# this method is used to bring in custom user-specific views
|
6
|
+
# require views by passing either a full path to the view ruby file
|
7
|
+
# or passing the name of a view installed in ~/.assert/views
|
8
|
+
|
9
|
+
def self.require_user_view(view)
|
10
|
+
views_file = File.join(Assert.config.user_test_dir, 'views', view, 'lib', view)
|
11
|
+
|
12
|
+
if File.exists?(view) || File.exists?(view+'.rb')
|
13
|
+
require view
|
14
|
+
elsif File.exists?(views_file+'.rb')
|
15
|
+
require views_file
|
16
|
+
else
|
17
|
+
msg = "[WARN] Can't find or require #{view.inspect} view."
|
18
|
+
msg << " Did you install it in `~/.assert/views`?" if !view.match(/\A\//)
|
19
|
+
warn msg
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
data/lib/assert/view/base.rb
CHANGED
@@ -1,38 +1,29 @@
|
|
1
1
|
require 'assert/result'
|
2
|
-
require 'assert/options'
|
3
2
|
|
4
3
|
module Assert::View
|
5
4
|
|
6
5
|
class Base
|
7
6
|
|
8
|
-
# setup some default options for all views
|
9
|
-
|
10
|
-
include Assert::Options
|
11
|
-
options do
|
12
|
-
default_pass_abbrev '.'
|
13
|
-
default_fail_abbrev 'F'
|
14
|
-
default_ignore_abbrev 'I'
|
15
|
-
default_skip_abbrev 'S'
|
16
|
-
default_error_abbrev 'E'
|
17
|
-
end
|
18
|
-
|
19
7
|
# include a bunch of common helper methods
|
20
8
|
|
21
9
|
require 'assert/view/helpers/common'
|
22
10
|
include Helpers::Common
|
23
11
|
|
24
|
-
|
12
|
+
# setup options and their default values
|
25
13
|
|
26
|
-
|
27
|
-
|
28
|
-
|
14
|
+
option 'pass_abbrev', '.'
|
15
|
+
option 'fail_abbrev', 'F'
|
16
|
+
option 'ignore_abbrev', 'I'
|
17
|
+
option 'skip_abbrev', 'S'
|
18
|
+
option 'error_abbrev', 'E'
|
29
19
|
|
30
|
-
|
31
|
-
|
32
|
-
|
20
|
+
def initialize(output_io, suite=nil)
|
21
|
+
@output_io, @suite = output_io, suite
|
22
|
+
@output_io.sync = true if @output_io.respond_to?(:sync=)
|
33
23
|
end
|
34
24
|
|
35
25
|
def view; self; end
|
26
|
+
def suite; @suite || Assert.suite; end
|
36
27
|
|
37
28
|
def fire(callback, *args)
|
38
29
|
self.send(callback, *args)
|
@@ -6,19 +6,23 @@ module Assert::View
|
|
6
6
|
# designed for terminal viewing.
|
7
7
|
|
8
8
|
class DefaultView < Base
|
9
|
-
require 'assert/view/helpers/capture_output'
|
10
|
-
include Helpers::CaptureOutput
|
11
|
-
|
12
9
|
require 'assert/view/helpers/ansi_styles'
|
13
10
|
include Helpers::AnsiStyles
|
14
11
|
|
15
|
-
options
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
12
|
+
# setup options and their default values
|
13
|
+
|
14
|
+
option 'styled', true
|
15
|
+
option 'pass_styles', :green
|
16
|
+
option 'fail_styles', :red, :bold
|
17
|
+
option 'error_styles', :yellow, :bold
|
18
|
+
option 'skip_styles', :cyan
|
19
|
+
option 'ignore_styles', :magenta
|
20
|
+
|
21
|
+
def before_load(test_files)
|
22
|
+
if Assert.config.debug
|
23
|
+
puts "Loading test files:"
|
24
|
+
test_files.each{ |f| puts " #{f}" }
|
25
|
+
end
|
22
26
|
end
|
23
27
|
|
24
28
|
def after_load
|
@@ -32,7 +36,7 @@ module Assert::View
|
|
32
36
|
end
|
33
37
|
|
34
38
|
def on_result(result)
|
35
|
-
result_abbrev =
|
39
|
+
result_abbrev = self.send("#{result.to_sym}_abbrev")
|
36
40
|
styled_abbrev = ansi_styled_msg(result_abbrev, result_ansi_styles(result))
|
37
41
|
|
38
42
|
print styled_abbrev
|
@@ -55,6 +59,7 @@ module Assert::View
|
|
55
59
|
output = details.output
|
56
60
|
puts captured_output(output) if output && !output.empty?
|
57
61
|
|
62
|
+
# add an empty line between each result detail
|
58
63
|
puts
|
59
64
|
end
|
60
65
|
end
|
@@ -1,18 +1,10 @@
|
|
1
1
|
module Assert::View::Helpers
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
attr_reader :result, :test_index, :test, :output
|
3
|
+
module Common
|
6
4
|
|
7
|
-
def
|
8
|
-
|
9
|
-
@test = test
|
10
|
-
@test_index = test_index
|
11
|
-
@output = test.output
|
5
|
+
def self.included(receiver)
|
6
|
+
receiver.class_eval{ extend ClassMethods }
|
12
7
|
end
|
13
|
-
end
|
14
|
-
|
15
|
-
module Common
|
16
8
|
|
17
9
|
# get the formatted suite run time
|
18
10
|
def run_time(format='%.6f')
|
@@ -20,7 +12,7 @@ module Assert::View::Helpers
|
|
20
12
|
end
|
21
13
|
|
22
14
|
def runner_seed
|
23
|
-
|
15
|
+
Assert.config.runner_seed
|
24
16
|
end
|
25
17
|
|
26
18
|
def count(type)
|
@@ -63,11 +55,10 @@ module Assert::View::Helpers
|
|
63
55
|
tests.collect do |test|
|
64
56
|
test_index += 1
|
65
57
|
|
66
|
-
details = test.results.
|
67
|
-
|
68
|
-
|
58
|
+
details = test.results.collect do |result|
|
59
|
+
ResultDetails.new(result, test, test_index)
|
60
|
+
end
|
69
61
|
details.reverse! if result_order == :reversed
|
70
|
-
|
71
62
|
details
|
72
63
|
end.compact.flatten
|
73
64
|
end
|
@@ -95,6 +86,13 @@ module Assert::View::Helpers
|
|
95
86
|
([:skip, :ignore].include?(result.to_sym) && result.message)
|
96
87
|
end
|
97
88
|
|
89
|
+
# show any captured output
|
90
|
+
def captured_output(output)
|
91
|
+
"--- stdout ---\n"\
|
92
|
+
"#{output}"\
|
93
|
+
"--------------"
|
94
|
+
end
|
95
|
+
|
98
96
|
# return a list of result symbols that have actually occurred
|
99
97
|
def ocurring_result_types
|
100
98
|
@result_types ||= [
|
@@ -149,6 +147,29 @@ module Assert::View::Helpers
|
|
149
147
|
end
|
150
148
|
end
|
151
149
|
|
150
|
+
class ResultDetails
|
151
|
+
attr_reader :result, :test_index, :test, :output
|
152
|
+
|
153
|
+
def initialize(result, test, test_index)
|
154
|
+
@result = result
|
155
|
+
@test = test
|
156
|
+
@test_index = test_index
|
157
|
+
@output = test.output
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
module ClassMethods
|
162
|
+
def option(name, *default_vals)
|
163
|
+
default = default_vals.size > 1 ? default_vals : default_vals.first
|
164
|
+
define_method(name) do |*args|
|
165
|
+
if !(value = args.size > 1 ? args : args.first).nil?
|
166
|
+
instance_variable_set("@#{name}", value)
|
167
|
+
end
|
168
|
+
(val = instance_variable_get("@#{name}")).nil? ? default : val
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
152
173
|
end
|
153
174
|
|
154
175
|
end
|
data/test/assert_test.rb
CHANGED
@@ -1,30 +1,45 @@
|
|
1
1
|
require 'assert'
|
2
|
-
|
3
|
-
require 'assert/options'
|
4
2
|
require 'assert/view/default_view'
|
5
3
|
require 'assert/runner'
|
6
4
|
require 'assert/suite'
|
7
5
|
|
8
6
|
module Assert
|
9
|
-
class AssertOptionsTest < Assert::Context
|
10
|
-
desc "options for Assert"
|
11
|
-
subject { Assert.options }
|
12
7
|
|
13
|
-
|
14
|
-
|
15
|
-
|
8
|
+
class BaseTests < Assert::Context
|
9
|
+
desc "the Assert module"
|
10
|
+
subject { Assert }
|
11
|
+
|
12
|
+
should have_imeths :view, :suite, :runner, :config, :configure, :init
|
16
13
|
|
17
|
-
should "
|
18
|
-
|
14
|
+
should "know its config singleton" do
|
15
|
+
assert_same Config, subject.config
|
19
16
|
end
|
20
17
|
|
21
|
-
should "
|
22
|
-
|
18
|
+
should "map its view, suite and runner to its config" do
|
19
|
+
assert_same subject.config.view, subject.view
|
20
|
+
assert_same subject.config.suite, subject.suite
|
21
|
+
assert_same subject.config.runner, subject.runner
|
23
22
|
end
|
24
23
|
|
25
|
-
|
26
|
-
|
24
|
+
# Note: don't really need to explicitly test the configure/init meths
|
25
|
+
# nothing runs as expected if they aren't working
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
class ConfigTests < Assert::Context
|
30
|
+
desc "the Assert Config singleton"
|
31
|
+
subject { Config }
|
32
|
+
|
33
|
+
should have_imeths :suite, :view, :runner, :test_dir, :test_helper
|
34
|
+
should have_imeths :runner_seed, :show_output, :halt_on_fail, :debug
|
35
|
+
should have_imeths :apply
|
36
|
+
|
37
|
+
should "default the view, suite, and runner" do
|
38
|
+
assert_kind_of Assert::View::DefaultView, subject.view
|
39
|
+
assert_kind_of Assert::Suite, subject.suite
|
40
|
+
assert_kind_of Assert::Runner, subject.runner
|
27
41
|
end
|
28
42
|
|
29
43
|
end
|
44
|
+
|
30
45
|
end
|
@@ -6,13 +6,13 @@ class Assert::Context
|
|
6
6
|
desc "Assert context class"
|
7
7
|
setup do
|
8
8
|
@orig_assert_suite = Assert.suite
|
9
|
-
Assert.
|
9
|
+
Assert.config.suite TEST_ASSERT_SUITE
|
10
10
|
@test = Factory.test
|
11
11
|
@context_class = @test.context_class
|
12
12
|
end
|
13
13
|
teardown do
|
14
14
|
TEST_ASSERT_SUITE.tests.clear
|
15
|
-
Assert.
|
15
|
+
Assert.config.suite @orig_assert_suite
|
16
16
|
end
|
17
17
|
subject{ @context_class }
|
18
18
|
|
data/test/context_test.rb
CHANGED
@@ -91,37 +91,37 @@ class Assert::Context
|
|
91
91
|
|
92
92
|
|
93
93
|
|
94
|
-
class
|
95
|
-
desc "
|
94
|
+
class FlunkTests < BasicTest
|
95
|
+
desc "flunk method"
|
96
96
|
setup do
|
97
|
-
@
|
97
|
+
@flunk_msg = "It flunked."
|
98
|
+
@result = @context.flunk(@flunk_msg)
|
98
99
|
end
|
99
100
|
subject{ @result }
|
100
101
|
|
101
102
|
should "create a fail result" do
|
102
103
|
assert_kind_of Assert::Result::Fail, subject
|
103
104
|
end
|
104
|
-
should "set the
|
105
|
-
|
106
|
-
assert_equal Factory.context_info_called_from, subject.trace
|
105
|
+
should "set the message passed to it on the result" do
|
106
|
+
assert_equal @flunk_msg, subject.message
|
107
107
|
end
|
108
|
+
|
108
109
|
end
|
109
110
|
|
110
|
-
class
|
111
|
-
desc "
|
111
|
+
class FailTests < BasicTest
|
112
|
+
desc "fail method"
|
112
113
|
setup do
|
113
|
-
@
|
114
|
-
@result = @context.flunk(@flunk_msg)
|
114
|
+
@result = @context.fail
|
115
115
|
end
|
116
116
|
subject{ @result }
|
117
117
|
|
118
118
|
should "create a fail result" do
|
119
119
|
assert_kind_of Assert::Result::Fail, subject
|
120
120
|
end
|
121
|
-
should "set the
|
122
|
-
|
121
|
+
should "set the calling backtrace on the result" do
|
122
|
+
assert_kind_of Array, subject.backtrace
|
123
|
+
assert_equal Factory.context_info_called_from, subject.trace
|
123
124
|
end
|
124
|
-
|
125
125
|
end
|
126
126
|
|
127
127
|
class StringMessageTests < FailTests
|
@@ -150,57 +150,35 @@ class Assert::Context
|
|
150
150
|
|
151
151
|
end
|
152
152
|
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
class SaveRestoreHaltOnFailTests < BasicTest
|
159
|
-
desc "when not halting on fails"
|
153
|
+
class HaltOnFailTests < FailTests
|
154
|
+
desc "when halting on fails"
|
160
155
|
setup do
|
161
|
-
@
|
162
|
-
@
|
156
|
+
@orig_halt_fail = Assert.config.halt_on_fail
|
157
|
+
@fail_msg = "something failed"
|
163
158
|
end
|
164
159
|
teardown do
|
165
|
-
Assert
|
166
|
-
ENV['halt_on_fail'] = @prev_halt_envvar
|
167
|
-
end
|
168
|
-
end
|
169
|
-
|
170
|
-
class HaltOnFailTests < SaveRestoreHaltOnFailTests
|
171
|
-
setup do
|
172
|
-
ENV['halt_on_fail'] = 'true'
|
173
|
-
Assert::Test.options.halt_on_fail true
|
160
|
+
Assert.config.halt_on_fail @orig_halt_fail
|
174
161
|
end
|
175
|
-
|
162
|
+
subject{ @result }
|
176
163
|
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
@fail_msg = "something failed"
|
181
|
-
begin
|
164
|
+
should "raise an exception with the failure's message" do
|
165
|
+
Assert.config.halt_on_fail true
|
166
|
+
err = begin
|
182
167
|
@context.fail @fail_msg
|
183
|
-
rescue Exception =>
|
168
|
+
rescue Exception => exception
|
169
|
+
exception
|
184
170
|
end
|
185
|
-
|
186
|
-
|
187
|
-
subject{ @result }
|
171
|
+
assert_kind_of Assert::Result::TestFailure, err
|
172
|
+
assert_equal @fail_msg, err.message
|
188
173
|
|
189
|
-
|
190
|
-
|
191
|
-
end
|
192
|
-
should "raise the exception with the message passed to it" do
|
193
|
-
assert_equal @fail_msg, @exception.message
|
194
|
-
end
|
195
|
-
should "set the message passed to it on the result" do
|
196
|
-
assert_equal @fail_msg, subject.message
|
174
|
+
result = Assert::Result::Fail.new(Factory.test("something"), err)
|
175
|
+
assert_equal @fail_msg, result.message
|
197
176
|
end
|
198
177
|
|
199
178
|
end
|
200
179
|
|
201
180
|
|
202
181
|
|
203
|
-
|
204
182
|
class AssertTest < BasicTest
|
205
183
|
desc "assert method"
|
206
184
|
setup do
|
data/test/helper.rb
CHANGED
@@ -27,8 +27,10 @@ end
|
|
27
27
|
# anywhere we test halt on fail behavior, we take care of it in the specific context
|
28
28
|
class Assert::Context
|
29
29
|
def setup
|
30
|
-
|
31
|
-
Assert
|
30
|
+
Assert.config.halt_on_fail false
|
31
|
+
# Note: don't mess with `Assert.config.output` in this setup block - it will
|
32
|
+
# break the capture output tests. If you really need to set it one way or
|
33
|
+
# another, do it in the `.assert.rb` local settings file.
|
32
34
|
end
|
33
35
|
end
|
34
36
|
|
data/test/runner_test.rb
CHANGED
@@ -10,14 +10,15 @@ class Assert::Runner
|
|
10
10
|
desc "a basic runner"
|
11
11
|
setup do
|
12
12
|
@suite = Assert::Suite.new
|
13
|
-
@view = Assert::View::Base.new(
|
13
|
+
@view = Assert::View::Base.new(StringIO.new("", "w+"), @suite)
|
14
|
+
@runner = Assert::Runner.new
|
14
15
|
end
|
15
|
-
subject {
|
16
|
+
subject { @runner }
|
16
17
|
|
17
|
-
should have_instance_methods :run
|
18
|
+
should have_instance_methods :run
|
18
19
|
|
19
20
|
should "return an integer exit code" do
|
20
|
-
assert_equal 0, subject.run
|
21
|
+
assert_equal 0, subject.run(@suite, @view)
|
21
22
|
end
|
22
23
|
|
23
24
|
end
|