test-unit 2.4.5 → 2.4.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -28,6 +28,10 @@ h2. Features
28
28
  provides for installing all Test::Unit related gems
29
29
  easily.
30
30
 
31
+ h2. How To
32
+
33
+ * {file:doc/text/how-to.textile}
34
+
31
35
  h2. Install
32
36
 
33
37
  <pre>
@@ -0,0 +1 @@
1
+ require "test/unit"
@@ -359,6 +359,7 @@ module Test
359
359
  def run
360
360
  suite = @collector[self]
361
361
  return false if suite.nil?
362
+ return true if suite.empty?
362
363
  runner = @runner[self]
363
364
  return false if runner.nil?
364
365
  @runner_options[:color_scheme] ||= @color_scheme
@@ -421,5 +422,4 @@ end
421
422
 
422
423
  require 'test/unit/runner/console'
423
424
  require 'test/unit/runner/emacs'
424
- require 'test/unit/runner/tap'
425
425
  require 'test/unit/runner/xml'
@@ -0,0 +1,32 @@
1
+ module Test
2
+ module Unit
3
+ class CodeSnippetFetcher
4
+ def initialize
5
+ @sources = {}
6
+ end
7
+
8
+ def fetch(file, line, options={})
9
+ n_context_line = options[:n_context_line] || 3
10
+ lines = source(file)
11
+ return [] if lines.nil?
12
+ min_line = [line - n_context_line, 1].max
13
+ max_line = [line + n_context_line, lines.length].min
14
+ window = min_line..max_line
15
+ window.collect do |n|
16
+ attributes = {:target_line? => (n == line)}
17
+ [n, lines[n - 1].chomp, attributes]
18
+ end
19
+ end
20
+
21
+ def source(file)
22
+ @sources[file] ||= read_source(file)
23
+ end
24
+
25
+ private
26
+ def read_source(file)
27
+ return nil unless File.exist?(file)
28
+ File.readlines(file)
29
+ end
30
+ end
31
+ end
32
+ end
@@ -7,6 +7,7 @@
7
7
  # License:: Ruby license.
8
8
 
9
9
  require 'test/unit/color-scheme'
10
+ require 'test/unit/code-snippet-fetcher'
10
11
  require 'test/unit/ui/testrunner'
11
12
  require 'test/unit/ui/testrunnermediator'
12
13
  require 'test/unit/ui/console/outputlevel'
@@ -44,6 +45,7 @@ module Test
44
45
  @top_level = true
45
46
  @current_output_level = NORMAL
46
47
  @faults = []
48
+ @code_snippet_fetcher = CodeSnippetFetcher.new
47
49
  end
48
50
 
49
51
  private
@@ -181,26 +183,32 @@ module Test
181
183
 
182
184
  def output_fault_backtrace(fault)
183
185
  backtrace = fault.location
184
- if backtrace.size == 1
185
- output(fault.test_name +
186
- backtrace[0].sub(/\A(.+:\d+).*/, ' [\\1]') +
187
- ":")
188
- else
189
- output(fault.test_name)
190
- backtrace.each_with_index do |entry, i|
191
- if i.zero?
192
- prefix = "["
193
- postfix = ""
194
- elsif i == backtrace.size - 1
195
- prefix = " "
196
- postfix = "]:"
197
- else
198
- prefix = " "
199
- postfix = ""
200
- end
201
- output(" #{prefix}#{entry}#{postfix}")
186
+ output(fault.test_name)
187
+ backtrace.each_with_index do |entry, i|
188
+ output(entry)
189
+ output_code_snippet(entry, fault_color(fault)) if i.zero?
190
+ end
191
+ end
192
+
193
+ def output_code_snippet(entry, target_line_color=nil)
194
+ return unless /\A(.*):(\d+)/ =~ entry
195
+ file = $1
196
+ line = $2.to_i
197
+ lines = @code_snippet_fetcher.fetch(file, line)
198
+ max_n = lines.collect {|n, line, attributes| n}.max
199
+ digits = (Math.log10(max_n) + 1).truncate
200
+ lines.each do |n, line, attributes|
201
+ if attributes[:target_line?]
202
+ line_color = target_line_color
203
+ current_line_mark = "=>"
204
+ else
205
+ line_color = nil
206
+ current_line_mark = ""
202
207
  end
208
+ output(" %2s %*d: %s" % [current_line_mark, digits, n, line],
209
+ line_color)
203
210
  end
211
+ nl
204
212
  end
205
213
 
206
214
  def output_fault_message(fault)
@@ -22,20 +22,6 @@ module Test
22
22
  end
23
23
  end
24
24
 
25
- def output_fault_backtrace(fault)
26
- backtrace = fault.location
27
- if backtrace.size == 1
28
- output(fault.test_name +
29
- backtrace[0].sub(/\A(.+:\d+).*/, ' [\\1]') +
30
- ":")
31
- else
32
- output(fault.test_name)
33
- backtrace.each do |entry|
34
- output(entry)
35
- end
36
- end
37
- end
38
-
39
25
  def format_fault_failure(failure)
40
26
  if failure.location.size == 1
41
27
  location = failure.location[0]
@@ -1,5 +1,5 @@
1
1
  module Test
2
2
  module Unit
3
- VERSION = '2.4.5'
3
+ VERSION = '2.4.6'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,79 +1,94 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: test-unit
3
- version: !ruby/object:Gem::Version
4
- version: 2.4.5
3
+ version: !ruby/object:Gem::Version
4
+ hash: 19
5
5
  prerelease:
6
+ segments:
7
+ - 2
8
+ - 4
9
+ - 6
10
+ version: 2.4.6
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Kouhei Sutou
9
14
  - Haruka Yoshihara
10
15
  autorequire:
11
16
  bindir: bin
12
17
  cert_chain: []
13
- date: 2012-01-16 00:00:00.000000000 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
16
- name: rake
17
- requirement: &7305640 !ruby/object:Gem::Requirement
18
+
19
+ date: 2012-02-09 00:00:00 Z
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ version_requirements: &id001 !ruby/object:Gem::Requirement
18
23
  none: false
19
- requirements:
20
- - - ! '>='
21
- - !ruby/object:Gem::Version
22
- version: '0'
23
- type: :development
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ hash: 3
28
+ segments:
29
+ - 0
30
+ version: "0"
31
+ name: rake
24
32
  prerelease: false
25
- version_requirements: *7305640
26
- - !ruby/object:Gem::Dependency
27
- name: yard
28
- requirement: &7318880 !ruby/object:Gem::Requirement
29
- none: false
30
- requirements:
31
- - - ! '>='
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
33
  type: :development
35
- prerelease: false
36
- version_requirements: *7318880
37
- - !ruby/object:Gem::Dependency
38
- name: jeweler
39
- requirement: &7317320 !ruby/object:Gem::Requirement
34
+ requirement: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ version_requirements: &id002 !ruby/object:Gem::Requirement
40
37
  none: false
41
- requirements:
42
- - - ! '>='
43
- - !ruby/object:Gem::Version
44
- version: '0'
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ hash: 3
42
+ segments:
43
+ - 0
44
+ version: "0"
45
+ name: yard
46
+ prerelease: false
45
47
  type: :development
48
+ requirement: *id002
49
+ - !ruby/object:Gem::Dependency
50
+ version_requirements: &id003 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ hash: 3
56
+ segments:
57
+ - 0
58
+ version: "0"
59
+ name: jeweler
46
60
  prerelease: false
47
- version_requirements: *7317320
48
- description: ! 'Ruby 1.9.x bundles minitest not Test::Unit. Test::Unit
49
-
61
+ type: :development
62
+ requirement: *id003
63
+ description: |
64
+ Ruby 1.9.x bundles minitest not Test::Unit. Test::Unit
50
65
  bundled in Ruby 1.8.x had not been improved but unbundled
51
-
52
66
  Test::Unit (test-unit 2) will be improved actively.
53
67
 
54
- '
55
- email:
68
+ email:
56
69
  - kou@cozmixng.org
57
70
  - yoshihara@clear-code.com
58
- executables:
59
- - testrb
71
+ executables: []
72
+
60
73
  extensions: []
61
- extra_rdoc_files:
74
+
75
+ extra_rdoc_files:
62
76
  - README.textile
63
77
  - TODO
64
- files:
78
+ files:
65
79
  - COPYING
66
80
  - GPL
67
81
  - PSFL
68
82
  - README.textile
69
83
  - Rakefile
70
84
  - TODO
71
- - bin/testrb
85
+ - lib/test-unit.rb
72
86
  - lib/test/unit.rb
73
87
  - lib/test/unit/assertionfailederror.rb
74
88
  - lib/test/unit/assertions.rb
75
89
  - lib/test/unit/attribute.rb
76
90
  - lib/test/unit/autorunner.rb
91
+ - lib/test/unit/code-snippet-fetcher.rb
77
92
  - lib/test/unit/collector.rb
78
93
  - lib/test/unit/collector/descendant.rb
79
94
  - lib/test/unit/collector/dir.rb
@@ -94,7 +109,6 @@ files:
94
109
  - lib/test/unit/priority.rb
95
110
  - lib/test/unit/runner/console.rb
96
111
  - lib/test/unit/runner/emacs.rb
97
- - lib/test/unit/runner/tap.rb
98
112
  - lib/test/unit/runner/xml.rb
99
113
  - lib/test/unit/testcase.rb
100
114
  - lib/test/unit/testresult.rb
@@ -103,7 +117,6 @@ files:
103
117
  - lib/test/unit/ui/console/outputlevel.rb
104
118
  - lib/test/unit/ui/console/testrunner.rb
105
119
  - lib/test/unit/ui/emacs/testrunner.rb
106
- - lib/test/unit/ui/tap/testrunner.rb
107
120
  - lib/test/unit/ui/testrunner.rb
108
121
  - lib/test/unit/ui/testrunnermediator.rb
109
122
  - lib/test/unit/ui/testrunnerutilities.rb
@@ -143,7 +156,6 @@ files:
143
156
  - test/test_testresult.rb
144
157
  - test/test_testsuite.rb
145
158
  - test/testunit-test-util.rb
146
- - test/ui/test_tap.rb
147
159
  - test/ui/test_testrunmediator.rb
148
160
  - test/util/test-method-owner-finder.rb
149
161
  - test/util/test-output.rb
@@ -151,28 +163,37 @@ files:
151
163
  - test/util/test_observable.rb
152
164
  - test/util/test_procwrapper.rb
153
165
  homepage: http://test-unit.rubyforge.org/
154
- licenses:
166
+ licenses:
155
167
  - Ruby's and PSFL (lib/test/unit/diff.rb)
156
168
  post_install_message:
157
169
  rdoc_options: []
158
- require_paths:
170
+
171
+ require_paths:
159
172
  - lib
160
- required_ruby_version: !ruby/object:Gem::Requirement
173
+ required_ruby_version: !ruby/object:Gem::Requirement
161
174
  none: false
162
- requirements:
163
- - - ! '>='
164
- - !ruby/object:Gem::Version
165
- version: '0'
166
- required_rubygems_version: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - ">="
177
+ - !ruby/object:Gem::Version
178
+ hash: 3
179
+ segments:
180
+ - 0
181
+ version: "0"
182
+ required_rubygems_version: !ruby/object:Gem::Requirement
167
183
  none: false
168
- requirements:
169
- - - ! '>='
170
- - !ruby/object:Gem::Version
171
- version: '0'
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ hash: 3
188
+ segments:
189
+ - 0
190
+ version: "0"
172
191
  requirements: []
192
+
173
193
  rubyforge_project: test-unit
174
- rubygems_version: 1.8.11
194
+ rubygems_version: 1.8.15
175
195
  signing_key:
176
196
  specification_version: 3
177
197
  summary: test-unit 2 - Improved version of Test::Unit bundled in Ruby 1.8.x.
178
198
  test_files: []
199
+
data/bin/testrb DELETED
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require 'test/unit'
3
- (r = Test::Unit::AutoRunner.new(true)).process_args(ARGV) or
4
- abort r.options.banner + " tests..."
5
- exit r.run
@@ -1,8 +0,0 @@
1
- module Test
2
- module Unit
3
- AutoRunner.register_runner(:tap) do |auto_runner|
4
- require 'test/unit/ui/tap/testrunner'
5
- Test::Unit::UI::Tap::TestRunner
6
- end
7
- end
8
- end
@@ -1,82 +0,0 @@
1
- #--
2
- #
3
- # Author:: Kouhei Sutou.
4
- # Copyright:: Copyright (c) 2009-2010 Kouhei Sutou <kou@clear-code.com>.
5
- # License:: Ruby license.
6
-
7
- require 'test/unit/ui/testrunner'
8
- require 'test/unit/ui/testrunnermediator'
9
-
10
- module Test
11
- module Unit
12
- module UI
13
- module Tap
14
-
15
- # Runs a Test::Unit::TestSuite and outputs result
16
- # as TAP format.
17
- class TestRunner < UI::TestRunner
18
- def initialize(suite, options={})
19
- super
20
- @output = @options[:output] || STDOUT
21
- @n_tests = 0
22
- @already_outputted = false
23
- end
24
-
25
- # Begins the test run.
26
- def start
27
- result = super
28
- def result.passed?
29
- true # for prove commend :<
30
- end
31
- result
32
- end
33
-
34
- private
35
- def attach_to_mediator
36
- @mediator.add_listener(TestResult::FAULT, &method(:add_fault))
37
- @mediator.add_listener(TestRunnerMediator::STARTED, &method(:started))
38
- @mediator.add_listener(TestRunnerMediator::FINISHED, &method(:finished))
39
- @mediator.add_listener(TestCase::STARTED, &method(:test_started))
40
- @mediator.add_listener(TestCase::FINISHED, &method(:test_finished))
41
- end
42
-
43
- def add_fault(fault)
44
- puts("not ok #{@n_tests} - #{fault.short_display}")
45
- fault.long_display.each_line do |line|
46
- puts("# #{line}")
47
- end
48
- @already_outputted = true
49
- end
50
-
51
- def started(result)
52
- @result = result
53
- puts("1..#{@suite.size}")
54
- end
55
-
56
- def finished(elapsed_time)
57
- puts("# Finished in #{elapsed_time} seconds.")
58
- @result.to_s.each_line do |line|
59
- puts("# #{line}")
60
- end
61
- end
62
-
63
- def test_started(name)
64
- @n_tests += 1
65
- end
66
-
67
- def test_finished(name)
68
- unless @already_outputted
69
- puts("ok #{@n_tests} - #{name}")
70
- end
71
- @already_outputted = false
72
- end
73
-
74
- def puts(*args)
75
- @output.puts(*args)
76
- @output.flush
77
- end
78
- end
79
- end
80
- end
81
- end
82
- end
@@ -1,33 +0,0 @@
1
- require 'stringio'
2
- require 'test/unit/ui/tap/testrunner'
3
-
4
- class TestTap < Test::Unit::TestCase
5
- def test_run
6
- fail_line = nil
7
- test_case = Class.new(Test::Unit::TestCase) do
8
- def test_success
9
- assert_equal(3, 1 + 2)
10
- end
11
-
12
- def test_fail; assert_equal(3, 1 - 2); end; fail_line = __LINE__
13
- end
14
- output = StringIO.new
15
- runner = Test::Unit::UI::Tap::TestRunner.new(test_case.suite,
16
- :output => output)
17
- result = runner.start; start_line = __LINE__
18
- assert_equal(<<-EOR, output.string.gsub(/[\d\.]+ seconds/, "0.001 seconds"))
19
- 1..2
20
- not ok 1 - test_fail(): <3> expected but was
21
- # Failure:
22
- # test_fail()
23
- # [#{__FILE__}:#{fail_line}:in `test_fail'
24
- # #{__FILE__}:#{start_line}:in `test_run']:
25
- # <3> expected but was
26
- # <-1>.
27
- ok 2 - test_success()
28
- # Finished in 0.001 seconds.
29
- # 2 tests, 2 assertions, 1 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
30
- EOR
31
- assert_true(result.passed?)
32
- end
33
- end