assert 1.1.0 → 2.0.0.rc.1

Sign up to get free protection for your applications and to get access to all the features.
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