test-unit 2.3.0 → 2.3.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 (47) hide show
  1. data/COPYING +9 -1
  2. data/{README.txt → README.textile} +24 -17
  3. data/Rakefile +301 -27
  4. data/lib/test/unit/assertions.rb +49 -23
  5. data/lib/test/unit/attribute.rb +1 -1
  6. data/lib/test/unit/collector/load.rb +3 -3
  7. data/lib/test/unit/runner/console.rb +11 -4
  8. data/lib/test/unit/testcase.rb +1 -1
  9. data/lib/test/unit/ui/console/outputlevel.rb +3 -2
  10. data/lib/test/unit/ui/console/testrunner.rb +101 -22
  11. data/lib/test/unit/version.rb +1 -1
  12. data/test/test-assertions.rb +20 -0
  13. data/test/test-data.rb +1 -1
  14. data/test/test-priority.rb +17 -2
  15. data/test/test-testcase.rb +3 -3
  16. metadata +62 -111
  17. data/History.txt +0 -302
  18. data/Manifest.txt +0 -118
  19. data/html/bar.png +0 -0
  20. data/html/bar.svg +0 -153
  21. data/html/developer.png +0 -0
  22. data/html/developer.svg +0 -469
  23. data/html/famfamfam-logo.png +0 -0
  24. data/html/favicon.ico +0 -0
  25. data/html/favicon.png +0 -0
  26. data/html/favicon.svg +0 -82
  27. data/html/github-logo.png +0 -0
  28. data/html/heading-mark.png +0 -0
  29. data/html/heading-mark.svg +0 -393
  30. data/html/index.html +0 -291
  31. data/html/index.html.ja +0 -306
  32. data/html/install.png +0 -0
  33. data/html/install.svg +0 -636
  34. data/html/jp.png +0 -0
  35. data/html/kinotan-failure.png +0 -0
  36. data/html/kinotan-pass.png +0 -0
  37. data/html/logo.png +0 -0
  38. data/html/logo.svg +0 -483
  39. data/html/reference.png +0 -0
  40. data/html/rubyforge.png +0 -0
  41. data/html/tango-logo.png +0 -0
  42. data/html/test-unit.css +0 -346
  43. data/html/tutorial.png +0 -0
  44. data/html/tutorial.svg +0 -559
  45. data/html/us.png +0 -0
  46. data/images/color-diff.png +0 -0
  47. data/test/fixtures/plus.csv +0 -3
data/COPYING CHANGED
@@ -1,4 +1,7 @@
1
- Ruby is copyrighted free software by Yukihiro Matsumoto <matz@netlab.jp>.
1
+ test-unit is copyrighted free software by Kouhei Sutou
2
+ <kou@cozmixng.org>, Ryan Davis <ryand-ruby@zenspider.com>
3
+ and Nathaniel Talbott <nathaniel@talbott.ws>.
4
+
2
5
  You can redistribute it and/or modify it under either the terms of the GPL
3
6
  version 2 (see the file GPL), or the conditions below:
4
7
 
@@ -54,3 +57,8 @@ version 2 (see the file GPL), or the conditions below:
54
57
  IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
55
58
  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
56
59
  PURPOSE.
60
+
61
+ Exceptions
62
+ ----------
63
+
64
+ * lib/test/unit/diff.rb: PSFL
@@ -1,17 +1,17 @@
1
- = Test::Unit 2.x
1
+ h1. test-unit 2
2
2
 
3
- * http://rubyforge.org/projects/test-unit/
3
+ http://rubyforge.org/projects/test-unit/
4
4
 
5
- == DESCRIPTION
5
+ h2. Description
6
6
 
7
- Test::Unit 2.x - Improved version of Test::Unit bundled in
8
- Ruby 1.8.x.
7
+ test-unit 2 - Improved version of Test::Unit bundled in Ruby
8
+ 1.8.x.
9
9
 
10
10
  Ruby 1.9.x bundles minitest not Test::Unit. Test::Unit
11
11
  bundled in Ruby 1.8.x had not been improved but unbundled
12
- Test::Unit (Test::Unit 2.x) will be improved actively.
12
+ Test::Unit (test-unit 2) will be improved actively.
13
13
 
14
- == FEATURES
14
+ h2. Features
15
15
 
16
16
  * Test::Unit 1.2.3 is the original Test::Unit, taken
17
17
  straight from the ruby distribution. It is being
@@ -19,7 +19,7 @@ Test::Unit (Test::Unit 2.x) will be improved actively.
19
19
  stand-alone package. (The test framework in ruby is going
20
20
  to radically change very soon).
21
21
 
22
- * Test::Unit 2.x will be improved actively and may break
22
+ * test-unit 2 will be improved actively and may break
23
23
  compatiblity with Test::Unit 1.2.3. (We will not hope it
24
24
  if it isn't needed.)
25
25
 
@@ -28,15 +28,19 @@ Test::Unit (Test::Unit 2.x) will be improved actively.
28
28
  provides for installing all Test::Unit related gems
29
29
  easily.
30
30
 
31
- == INSTALL
31
+ h2. Install
32
32
 
33
- % sudo gem install test-unit
33
+ <pre>
34
+ % sudo gem install test-unit
35
+ </pre>
34
36
 
35
37
  If you want to use full Test::Unit features:
36
38
 
37
- % sudo gem install test-unit-full
39
+ <pre>
40
+ % sudo gem install test-unit-full
41
+ </pre>
38
42
 
39
- == LICENSE
43
+ h2. License
40
44
 
41
45
  (The Ruby License)
42
46
 
@@ -45,23 +49,23 @@ This software is distributed under the same terms as ruby.
45
49
  Exception: lib/test/unit/diff.rb is a dual license of the
46
50
  Ruby license and PSF license.
47
51
 
48
- == AUTHORS
52
+ h2. Authors
49
53
 
50
- === Active
54
+ h3. Active
51
55
 
52
56
  * Kouhei Sutou: The current maintainer
53
57
  * Haruka Yoshihara: Data driven test supports.
54
58
 
55
- === Inactive
59
+ h3. Inactive
56
60
 
57
61
  * Nathaniel Talbott: The original author
58
62
  * Ryan Davis: The second maintainer
59
63
 
60
- === Images
64
+ h3. Images
61
65
 
62
66
  * Mayu & Co.: kinotan icons: http://cocooooooon.com/kinotan/
63
67
 
64
- == Thanks
68
+ h2. Thanks
65
69
 
66
70
  * Daniel Berger: Suggestions and bug reports.
67
71
  * Designing Patterns: Suggestions.
@@ -74,3 +78,6 @@ Ruby license and PSF license.
74
78
  * Andrew Grimm: A bug report.
75
79
  * Champak Ch: A bug report.
76
80
  * Florian Frank: A bug report.
81
+ * grafi-tt: A bug fix.
82
+ * Jeremy Stephens: A bug report.
83
+ * Hans de Graaff: Bug reports.
data/Rakefile CHANGED
@@ -2,51 +2,325 @@
2
2
 
3
3
  Encoding.default_internal = "UTF-8" if defined?(Encoding.default_internal)
4
4
 
5
- require 'rubygems'
6
- gem 'rdoc'
7
- require 'hoe'
8
- require './lib/test/unit/version.rb'
5
+ require "erb"
6
+ require "yaml"
7
+ require "rubygems"
8
+ require "rake/clean"
9
+ require "yard"
10
+ require "jeweler"
11
+ require "./lib/test/unit/version.rb"
9
12
 
10
- ENV["NODOT"] = "yes"
13
+ def cleanup_white_space(entry)
14
+ entry.gsub(/(\A\n+|\n+\z)/, '') + "\n"
15
+ end
11
16
 
12
- version = Test::Unit::VERSION
17
+ version = Test::Unit::VERSION.dup
13
18
  ENV["VERSION"] = version
14
- project = Hoe.spec('test-unit') do
15
- Hoe::Test::SUPPORTED_TEST_FRAMEWORKS[:testunit2] = "test/run-test.rb"
16
- self.version = version
17
- developer('Kouhei Sutou', 'kou@cozmixng.org')
18
- developer('Ryan Davis', 'ryand-ruby@zenspider.com')
19
+ spec = nil
20
+ Jeweler::Tasks.new do |_spec|
21
+ spec = _spec
22
+ spec.name = "test-unit"
23
+ spec.version = version
24
+ spec.rubyforge_project = "test-unit"
25
+ spec.homepage = "http://test-unit.rubyforge.org/"
26
+ spec.authors = ["Kouhei Sutou", "Haruka Yoshihara"]
27
+ spec.email = ["kou@cozmixng.org", "yoshihara@clear-code.com"]
28
+ entries = File.read("README.textile").split(/^h2\.\s(.*)$/)
29
+ description = cleanup_white_space(entries[entries.index("Description") + 1])
30
+ spec.summary, spec.description, = description.split(/\n\n+/, 3)
31
+ spec.license = "Ruby's and PSFL (lib/test/unit/diff.rb)"
32
+ spec.files = FileList["lib/**/*.rb",
33
+ "bin/*",
34
+ "sample/*.rb",
35
+ "README.textile",
36
+ "TODO",
37
+ "Rakefile",
38
+ "COPYING",
39
+ "GPL",
40
+ "PSFL"]
41
+ spec.test_files = FileList["test/**/*.rb"]
42
+ end
43
+
44
+ Rake::Task["release"].prerequisites.clear
45
+ Jeweler::RubygemsDotOrgTasks.new do
46
+ end
47
+
48
+ reference_base_dir = Pathname.new("doc/reference")
49
+ doc_en_dir = reference_base_dir + "en"
50
+ html_base_dir = Pathname.new("doc/html")
51
+ html_reference_dir = html_base_dir + spec.name
52
+ YARD::Rake::YardocTask.new do |task|
53
+ task.options += ["--title", spec.name]
54
+ # task.options += ["--charset", "UTF-8"]
55
+ task.options += ["--readme", "README.textile"]
56
+ task.options += ["--files", "doc/text/**/*"]
57
+ task.options += ["--output-dir", doc_en_dir.to_s]
58
+ task.options += ["--charset", "utf-8"]
59
+ task.files += FileList["lib/**/*.rb"]
60
+ end
19
61
 
20
- # Ex-Parrot:
21
- # developer('Nathaniel Talbott', 'nathaniel@talbott.ws')
62
+ task :yard do
63
+ doc_en_dir.find do |path|
64
+ next if path.extname != ".html"
65
+ html = path.read
66
+ html = html.gsub(/<div id="footer">.+<\/div>/m,
67
+ "<div id=\"footer\"></div>")
68
+ path.open("w") do |html_file|
69
+ html_file.print(html)
70
+ end
71
+ end
22
72
  end
23
73
 
24
- task :check_manifest => :clean_test_result
25
- task :check_manifest => :clean_coverage
74
+ include ERB::Util
75
+
76
+ def apply_template(content, paths, templates, language)
77
+ content = content.sub(/lang="en"/, "lang=\"#{language}\"")
78
+
79
+ title = nil
80
+ content = content.sub(/<title>(.+?)<\/title>/m) do
81
+ title = $1
82
+ templates[:head].result(binding)
83
+ end
84
+
85
+ content = content.sub(/<body(?:.*?)>/) do |body_start|
86
+ "#{body_start}\n#{templates[:header].result(binding)}\n"
87
+ end
88
+
89
+ content = content.sub(/<\/body/) do |body_end|
90
+ "\n#{templates[:footer].result(binding)}\n#{body_end}"
91
+ end
26
92
 
27
- task :clean_test_result do
28
- test_results = Dir.glob("**/.test-result")
29
- sh("rm", "-rf", *test_results) unless test_results.empty?
93
+ content
30
94
  end
31
95
 
32
- task :clean_coverage do
33
- sh("rm", "-rf", "coverage")
96
+ def erb_template(name)
97
+ file = File.join("doc/templates", "#{name}.html.erb")
98
+ template = File.read(file)
99
+ erb = ERB.new(template, nil, "-")
100
+ erb.filename = file
101
+ erb
34
102
  end
35
103
 
36
- desc "Publish HTML to Web site."
37
- task :publish_html do
104
+ def rsync_to_rubyforge(spec, source, destination, options={})
38
105
  config = YAML.load(File.read(File.expand_path("~/.rubyforge/user-config.yml")))
39
106
  host = "#{config["username"]}@rubyforge.org"
40
107
 
41
- rsync_args = "-av --exclude '*.erb' --exclude '*.svg' --exclude .svn"
42
- remote_dir = "/var/www/gforge-projects/#{project.rubyforge_name}/"
43
- sh "rsync #{rsync_args} html/ #{host}:#{remote_dir}"
108
+ rsync_args = "-av --exclude '*.erb' --chmod=ug+w"
109
+ rsync_args << " --delete" if options[:delete]
110
+ remote_dir = "/var/www/gforge-projects/#{spec.rubyforge_project}/"
111
+ sh("rsync #{rsync_args} #{source} #{host}:#{remote_dir}#{destination}")
44
112
  end
45
113
 
114
+ def rake(*arguments)
115
+ ruby($0, *arguments)
116
+ end
117
+
118
+ namespace :reference do
119
+ translate_languages = [:ja]
120
+ supported_languages = [:en, *translate_languages]
121
+ html_files = FileList[doc_en_dir + "**/*.html"].to_a
122
+
123
+ directory reference_base_dir.to_s
124
+ CLOBBER.include(reference_base_dir.to_s)
125
+
126
+ po_dir = "doc/po"
127
+ pot_file = "#{po_dir}/#{spec.name}.pot"
128
+ namespace :pot do
129
+ directory po_dir
130
+ file pot_file => [po_dir, *html_files] do |t|
131
+ sh("xml2po", "--keep-entities", "--output", t.name, *html_files)
132
+ end
133
+
134
+ desc "Generates pot file."
135
+ task :generate => pot_file
136
+ end
137
+
138
+ namespace :po do
139
+ translate_languages.each do |language|
140
+ namespace language do
141
+ po_file = "#{po_dir}/#{language}.po"
142
+
143
+ if File.exist?(po_file)
144
+ file po_file => html_files do |t|
145
+ sh("xml2po", "--keep-entities", "--update", t.name, *html_files)
146
+ end
147
+ else
148
+ file po_file => pot_file do |t|
149
+ sh("msginit",
150
+ "--input=#{pot_file}",
151
+ "--output=#{t.name}",
152
+ "--locale=#{language}")
153
+ end
154
+ end
155
+
156
+ desc "Updates po file for #{language}."
157
+ task :update => po_file
158
+ end
159
+ end
160
+
161
+ desc "Updates po files."
162
+ task :update do
163
+ ruby($0, "clobber")
164
+ ruby($0, "yard")
165
+ translate_languages.each do |language|
166
+ ruby($0, "reference:po:#{language}:update")
167
+ end
168
+ end
169
+ end
170
+
171
+ namespace :translate do
172
+ translate_languages.each do |language|
173
+ po_file = "#{po_dir}/#{language}.po"
174
+ translate_doc_dir = "#{reference_base_dir}/#{language}"
175
+
176
+ desc "Translates documents to #{language}."
177
+ task language => [po_file, reference_base_dir, *html_files] do
178
+ doc_en_dir.find do |path|
179
+ base_path = path.relative_path_from(doc_en_dir)
180
+ translated_path = "#{translate_doc_dir}/#{base_path}"
181
+ if path.directory?
182
+ mkdir_p(translated_path)
183
+ next
184
+ end
185
+ case path.extname
186
+ when ".html"
187
+ sh("xml2po --keep-entities " +
188
+ "--po-file #{po_file} --language #{language} " +
189
+ "#{path} > #{translated_path}")
190
+ else
191
+ cp(path.to_s, translated_path, :preserve => true)
192
+ end
193
+ end
194
+ end
195
+ end
196
+ end
197
+
198
+ translate_task_names = translate_languages.collect do |language|
199
+ "reference:translate:#{language}"
200
+ end
201
+ desc "Translates references."
202
+ task :translate => translate_task_names
203
+
204
+ desc "Generates references."
205
+ task :generate => [:yard, :translate]
206
+
207
+ namespace :publication do
208
+ task :prepare do
209
+ supported_languages.each do |language|
210
+ raw_reference_dir = reference_base_dir + language.to_s
211
+ prepared_reference_dir = html_reference_dir + language.to_s
212
+ rm_rf(prepared_reference_dir.to_s)
213
+ head = erb_template("head.#{language}")
214
+ header = erb_template("header.#{language}")
215
+ footer = erb_template("footer.#{language}")
216
+ raw_reference_dir.find do |path|
217
+ relative_path = path.relative_path_from(raw_reference_dir)
218
+ prepared_path = prepared_reference_dir + relative_path
219
+ if path.directory?
220
+ mkdir_p(prepared_path.to_s)
221
+ else
222
+ case path.basename.to_s
223
+ when /(?:file|method|class)_list\.html\z/
224
+ cp(path.to_s, prepared_path.to_s)
225
+ when /\.html\z/
226
+ relative_dir_path = relative_path.dirname
227
+ current_path = relative_dir_path + path.basename
228
+ if current_path.basename.to_s == "index.html"
229
+ current_path = current_path.dirname
230
+ end
231
+ top_path = html_base_dir.relative_path_from(prepared_path.dirname)
232
+ paths = {
233
+ :top => top_path,
234
+ :current => current_path,
235
+ }
236
+ templates = {
237
+ :head => head,
238
+ :header => header,
239
+ :footer => footer
240
+ }
241
+ content = apply_template(File.read(path.to_s),
242
+ paths,
243
+ templates,
244
+ language)
245
+ File.open(prepared_path.to_s, "w") do |file|
246
+ file.print(content)
247
+ end
248
+ else
249
+ cp(path.to_s, prepared_path.to_s)
250
+ end
251
+ end
252
+ end
253
+ end
254
+ File.open("#{html_reference_dir}/.htaccess", "w") do |file|
255
+ file.puts("RedirectMatch permanent ^/#{spec.name}/$ " +
256
+ "#{spec.homepage}#{spec.name}/en/")
257
+ end
258
+ end
259
+ end
260
+
261
+ desc "Upload document to rubyforge."
262
+ task :publish => [:generate, "reference:publication:prepare"] do
263
+ rsync_to_rubyforge(spec, "#{html_reference_dir}/", spec.name)
264
+ end
265
+ end
266
+
267
+ namespace :html do
268
+ desc "Publish HTML to Web site."
269
+ task :publish do
270
+ rsync_to_rubyforge(spec, "#{html_base_dir}/", "")
271
+ end
272
+ end
273
+
274
+ desc "Upload document and HTML to rubyforge."
275
+ task :publish => ["html:publish", "reference:publish"]
276
+
46
277
  desc "Tag the current revision."
47
278
  task :tag do
48
- message = "Released Test::Unit #{version}!"
49
- sh 'git', 'tag', '-a', version, '-m', message
279
+ sh("git tag -a #{version} -m 'release #{version}!!!'")
280
+ end
281
+
282
+ namespace :release do
283
+ namespace :info do
284
+ desc "update version in index HTML."
285
+ task :update do
286
+ old_version = ENV["OLD_VERSION"]
287
+ old_release_date = ENV["OLD_RELEASE_DATE"]
288
+ new_release_date = ENV["RELEASE_DATE"] || Time.now.strftime("%Y-%m-%d")
289
+ new_version = ENV["VERSION"]
290
+
291
+ empty_options = []
292
+ empty_options << "OLD_VERSION" if old_version.nil?
293
+ empty_options << "OLD_RELEASE_DATE" if old_release_date.nil?
294
+
295
+ unless empty_options.empty?
296
+ raise ArgumentError, "Specify option(s) of #{empty_options.join(", ")}."
297
+ end
298
+
299
+ indexes = ["doc/html/index.html", "doc/html/index.html.ja"]
300
+ indexes.each do |index|
301
+ content = replaced_content = File.read(index)
302
+ [[old_version, new_version],
303
+ [old_release_date, new_release_date]].each do |old, new|
304
+ replaced_content = replaced_content.gsub(/#{Regexp.escape(old)}/, new)
305
+ if /\./ =~ old
306
+ old_underscore = old.gsub(/\./, '-')
307
+ new_underscore = new.gsub(/\./, '-')
308
+ replaced_content =
309
+ replaced_content.gsub(/#{Regexp.escape(old_underscore)}/,
310
+ new_underscore)
311
+ end
312
+ end
313
+
314
+ next if replaced_content == content
315
+ File.open(index, "w") do |output|
316
+ output.print(replaced_content)
317
+ end
318
+ end
319
+ end
320
+ end
321
+
322
+ desc "Release to RubyForge."
323
+ task :rubyforge => "release:rubyforge:upload"
50
324
  end
51
325
 
52
326
  # vim: syntax=Ruby