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.
Files changed (49) hide show
  1. data/.assert.rb +3 -0
  2. data/README.md +182 -108
  3. data/Rakefile +0 -3
  4. data/bin/assert +1 -1
  5. data/lib/assert.rb +75 -4
  6. data/lib/assert/assert_runner.rb +76 -0
  7. data/lib/assert/cli.rb +25 -46
  8. data/lib/assert/context.rb +3 -3
  9. data/lib/assert/result.rb +65 -55
  10. data/lib/assert/runner.rb +19 -38
  11. data/lib/assert/suite.rb +0 -7
  12. data/lib/assert/test.rb +4 -16
  13. data/lib/assert/version.rb +1 -1
  14. data/lib/assert/view.rb +23 -0
  15. data/lib/assert/view/base.rb +10 -19
  16. data/lib/assert/view/default_view.rb +16 -11
  17. data/lib/assert/view/helpers/ansi_styles.rb +1 -1
  18. data/lib/assert/view/helpers/common.rb +37 -16
  19. data/test/assert_test.rb +29 -14
  20. data/test/context/class_methods_test.rb +2 -2
  21. data/test/context_test.rb +28 -50
  22. data/test/helper.rb +4 -2
  23. data/test/runner_test.rb +5 -4
  24. data/test/suite_test.rb +1 -1
  25. data/test/test_test.rb +8 -15
  26. data/test/view/base_tests.rb +20 -37
  27. metadata +17 -39
  28. data/lib/assert/autorun.rb +0 -37
  29. data/lib/assert/options.rb +0 -43
  30. data/lib/assert/rake_tasks.rb +0 -75
  31. data/lib/assert/rake_tasks/irb.rb +0 -33
  32. data/lib/assert/rake_tasks/scope.rb +0 -100
  33. data/lib/assert/rake_tasks/test_task.rb +0 -66
  34. data/lib/assert/result_set.rb +0 -17
  35. data/lib/assert/setup.rb +0 -3
  36. data/lib/assert/setup/all.rb +0 -5
  37. data/lib/assert/setup/helpers.rb +0 -72
  38. data/lib/assert/setup/options.rb +0 -6
  39. data/lib/assert/setup/runner.rb +0 -13
  40. data/lib/assert/setup/suite.rb +0 -13
  41. data/lib/assert/setup/view.rb +0 -39
  42. data/lib/assert/view/helpers/capture_output.rb +0 -23
  43. data/test/default_view_test.rb +0 -16
  44. data/test/irb.rb +0 -5
  45. data/test/options_test.rb +0 -40
  46. data/test/rake_tasks/irb_test.rb +0 -45
  47. data/test/rake_tasks/scope_test.rb +0 -63
  48. data/test/rake_tasks/test_task_test.rb +0 -80
  49. data/test/result_set_test.rb +0 -72
@@ -1,3 +1,3 @@
1
1
  module Assert
2
- VERSION = "1.1.0"
2
+ VERSION = "2.0.0.rc.1"
3
3
  end
@@ -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
@@ -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
- attr_accessor :suite, :output_io
12
+ # setup options and their default values
25
13
 
26
- def initialize(output_io, suite=Assert.suite)
27
- @output_io = output_io
28
- @suite = suite
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
- if @output_io.respond_to?(:sync=)
31
- @output_io.sync = true
32
- end
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 do
16
- styled true
17
- pass_styles :green
18
- fail_styles :red, :bold
19
- error_styles :yellow, :bold
20
- skip_styles :cyan
21
- ignore_styles :magenta
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 = options.send("#{result.to_sym}_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
@@ -5,7 +5,7 @@ module Assert::View::Helpers
5
5
  module AnsiStyles
6
6
 
7
7
  def result_ansi_styles(result)
8
- view.options.styled ? view.options.send("#{result.to_sym}_styles") : []
8
+ view.styled ? view.send("#{result.to_sym}_styles") : []
9
9
  end
10
10
 
11
11
  def ansi_styled_msg(msg, styles=[])
@@ -1,18 +1,10 @@
1
1
  module Assert::View::Helpers
2
2
 
3
- class ResultDetails
4
-
5
- attr_reader :result, :test_index, :test, :output
3
+ module Common
6
4
 
7
- def initialize(result, test, test_index)
8
- @result = result
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
- self.suite.runner_seed
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
- collect { |result| ResultDetails.new(result, test, test_index) }
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
@@ -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
- should "be an Options::Base object" do
14
- assert_kind_of Assert::Options::Base, subject
15
- end
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 "default the view option" do
18
- assert_kind_of Assert::View::DefaultView, subject.default_view
14
+ should "know its config singleton" do
15
+ assert_same Config, subject.config
19
16
  end
20
17
 
21
- should "default the suite option" do
22
- assert_kind_of Assert::Suite, subject.default_suite
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
- should "default the runner option" do
26
- assert_equal Assert::Runner, subject.default_runner
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.options.suite TEST_ASSERT_SUITE
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.options.suite @orig_assert_suite
15
+ Assert.config.suite @orig_assert_suite
16
16
  end
17
17
  subject{ @context_class }
18
18
 
@@ -91,37 +91,37 @@ class Assert::Context
91
91
 
92
92
 
93
93
 
94
- class FailTests < BasicTest
95
- desc "fail method"
94
+ class FlunkTests < BasicTest
95
+ desc "flunk method"
96
96
  setup do
97
- @result = @context.fail
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 calling backtrace on the result" do
105
- assert_kind_of Array, subject.backtrace
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 FlunkTest < BasicTest
111
- desc "flunk method"
111
+ class FailTests < BasicTest
112
+ desc "fail method"
112
113
  setup do
113
- @flunk_msg = "It flunked."
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 message passed to it on the result" do
122
- assert_equal @flunk_msg, subject.message
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
- @prev_halt_option = Assert::Test.options.halt_on_fail
162
- @prev_halt_envvar = ENV['halt_on_fail']
156
+ @orig_halt_fail = Assert.config.halt_on_fail
157
+ @fail_msg = "something failed"
163
158
  end
164
159
  teardown do
165
- Assert::Test.options.halt_on_fail @prev_halt_option
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
- end
162
+ subject{ @result }
176
163
 
177
- class HaltFailTests < HaltOnFailTests
178
- desc "fail method"
179
- setup do
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 => @exception
168
+ rescue Exception => exception
169
+ exception
184
170
  end
185
- @result = Assert::Result::Fail.new(Factory.test("something"), @exception)
186
- end
187
- subject{ @result }
171
+ assert_kind_of Assert::Result::TestFailure, err
172
+ assert_equal @fail_msg, err.message
188
173
 
189
- should "raise a test failure exception when called" do
190
- assert_kind_of Assert::Result::TestFailure, @exception
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
@@ -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
- ENV['halt_on_fail'] = 'false'
31
- Assert::Test.options.halt_on_fail false
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
 
@@ -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(@suite, StringIO.new("", "w+"))
13
+ @view = Assert::View::Base.new(StringIO.new("", "w+"), @suite)
14
+ @runner = Assert::Runner.new
14
15
  end
15
- subject { Assert::Runner.new(@suite, @view) }
16
+ subject { @runner }
16
17
 
17
- should have_instance_methods :run, :count
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