rspec 0.5.8 → 0.5.9
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +7 -0
- data/README +17 -1
- data/Rakefile +7 -1
- data/bin/test2spec +17 -1
- data/doc/src/tools/test2spec.page +22 -6
- data/lib/spec/tool/ruby2ruby.rb +6 -5
- data/lib/spec/tool/translation_test_runner.rb +33 -13
- data/lib/spec/version.rb +1 -1
- metadata +2 -2
data/CHANGES
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
= RSpec Changelog
|
2
2
|
|
3
|
+
== Version 0.5.9
|
4
|
+
This release improves test2spec by allowing more control over the output
|
5
|
+
|
6
|
+
* Added --template option to test2spec, which allows for custom output driven by ERB
|
7
|
+
* Added --quiet option to test2spec
|
8
|
+
* Removed unnecessary dependency on RubyToC
|
9
|
+
|
3
10
|
== Version 0.5.8
|
4
11
|
This release features a new Test::Unit to RSpec translation tool.
|
5
12
|
Also note that the RubyGem of the previous release (0.5.7) was corrupt.
|
data/README
CHANGED
@@ -1 +1,17 @@
|
|
1
|
-
|
1
|
+
In order to run RSpec's tests and generate the website, you must have RubyGems.
|
2
|
+
Then you must install the following gems:
|
3
|
+
|
4
|
+
* rake
|
5
|
+
* rcov
|
6
|
+
* RubyInline
|
7
|
+
* ParseTree (Ignore the message: test/test_parse_tree.rb:190:38: ':' not followed by identified or operator)
|
8
|
+
* webgen
|
9
|
+
* RedCloth
|
10
|
+
* syntax
|
11
|
+
|
12
|
+
Note that RSpec itself - once built - doesn't have any dependencies outside the Ruby core
|
13
|
+
and stdlib - with a few exceptions:
|
14
|
+
* test2spec uses RubyInline, RubyToC and ParseTree
|
15
|
+
* The spectask needs rcov if rcov is enabled.
|
16
|
+
|
17
|
+
See http://rspec.rubyforge.org for further documentation.
|
data/Rakefile
CHANGED
@@ -45,8 +45,13 @@ Rcov::RcovTask.new do |t|
|
|
45
45
|
t.rcov_opts = []
|
46
46
|
end
|
47
47
|
|
48
|
+
desc 'Translate our own tests to specs'
|
49
|
+
task :test2spec do
|
50
|
+
`bin/test2spec --template spec/test2spec.erb --specdir spec test`
|
51
|
+
end
|
52
|
+
|
48
53
|
desc 'Generate HTML documentation'
|
49
|
-
task :doc do
|
54
|
+
task :doc => :test2spec do
|
50
55
|
sh %{pushd doc; webgen; popd}
|
51
56
|
end
|
52
57
|
|
@@ -114,6 +119,7 @@ end
|
|
114
119
|
|
115
120
|
task :clobber do
|
116
121
|
rm_rf 'doc/output'
|
122
|
+
rm_rf 'spec/spec'
|
117
123
|
end
|
118
124
|
|
119
125
|
task :release => [:clobber, :verify_committed, :verify_user, :verify_password, :test, :publish_packages, :tag, :publish_website, :publish_news]
|
data/bin/test2spec
CHANGED
@@ -25,6 +25,18 @@ opts = OptionParser.new do |opts|
|
|
25
25
|
$test2spec_options[:specdir] = dir
|
26
26
|
end
|
27
27
|
|
28
|
+
opts.on("-t", "--template FILE",
|
29
|
+
"ERB template that will be used to create each file. The template",
|
30
|
+
"has access toi the following variables:",
|
31
|
+
" translation : the translated source code",
|
32
|
+
" depth : the directory depth of the file to be written",
|
33
|
+
" relative_path : the relative name of the file to be written",
|
34
|
+
"Example:",
|
35
|
+
"<%= @translation %>"
|
36
|
+
) do |file|
|
37
|
+
$test2spec_options[:template] = file
|
38
|
+
end
|
39
|
+
|
28
40
|
opts.on("-c", "--chmod MODIFIERS", Integer, "Change file modifiers on written files (POSIX only)") do |mods|
|
29
41
|
$test2spec_options[:chmod] = mods
|
30
42
|
end
|
@@ -37,13 +49,17 @@ opts = OptionParser.new do |opts|
|
|
37
49
|
$test2spec_options[:collision] = :force
|
38
50
|
end
|
39
51
|
|
52
|
+
opts.on("-q", "--quiet", "Don't print anything to stdout") do
|
53
|
+
$test2spec_options[:quiet] = true
|
54
|
+
end
|
55
|
+
|
40
56
|
opts.on("-v", "--version", "Show version") do
|
41
57
|
puts "test2spec #{Spec::VERSION::DESCRIPTION}"
|
42
58
|
exit
|
43
59
|
end
|
44
60
|
|
45
61
|
opts.on("-d", "--dry-run", "Don't write anything - just verify that translation works") do
|
46
|
-
|
62
|
+
$test2spec_options[:dry_run] = true
|
47
63
|
end
|
48
64
|
|
49
65
|
opts.on_tail("-h", "--help", "You're looking at it") do
|
@@ -7,7 +7,7 @@ h2. Test::Unit migration
|
|
7
7
|
RSpec's test2spec command line tool translates existing Test::Unit classes to RSpec.
|
8
8
|
|
9
9
|
Before you can use test2spec you must gem install ParseTree and RubyInline.
|
10
|
-
RubyInline only
|
10
|
+
RubyInline only works on systems that have a C compiler - i.e. most anything except Windows.
|
11
11
|
|
12
12
|
If you're stuck on Windows, ask a friend who has a POSIX system to translate your specs.
|
13
13
|
Once translated they can run on any Ruby platform (including Windows). After all, it's
|
@@ -23,17 +23,24 @@ test2spec --help
|
|
23
23
|
A typical invocation might look like this:
|
24
24
|
|
25
25
|
<pre>
|
26
|
-
test2spec --specdir spec test
|
26
|
+
test2spec --template spec/test2spec.erb --specdir spec test
|
27
27
|
</pre>
|
28
28
|
|
29
|
-
|
29
|
+
Where spec/test2spec.erb contains the following:
|
30
|
+
|
31
|
+
<pre>
|
32
|
+
{includeFile: {filename: ../../../spec/test2spec.erb, processOutput: false}}
|
33
|
+
</pre>
|
34
|
+
|
35
|
+
|
36
|
+
h2. Sample translation
|
30
37
|
|
31
38
|
<notextile>
|
32
39
|
<table>
|
33
40
|
<thead>
|
34
41
|
<tr>
|
35
|
-
<td>Test::Unit</td>
|
36
|
-
<td>RSpec (
|
42
|
+
<td>Test::Unit (input)</td>
|
43
|
+
<td>RSpec (output)</td>
|
37
44
|
</tr>
|
38
45
|
</thead>
|
39
46
|
<tbody>
|
@@ -42,13 +49,22 @@ h2. Sample output
|
|
42
49
|
<ruby file="../test/spec/tool/test_unit_api_test.rb"/>
|
43
50
|
</td>
|
44
51
|
<td>
|
45
|
-
<ruby file="../
|
52
|
+
<ruby file="../spec/spec/tool/test_unit_api_spec.rb"/>
|
46
53
|
</td>
|
47
54
|
</tr>
|
48
55
|
</tbody>
|
49
56
|
</table>
|
50
57
|
</notextile>
|
51
58
|
|
59
|
+
h2. What's translated?
|
60
|
+
|
61
|
+
test2spec only translates classes that extend from Test::Unit - and their methods. It will not bring over any
|
62
|
+
code that isn't inside a Test::Unit class. This means that require statements at the top of your file, any other
|
63
|
+
classes in the same file as the test class etc *will not be translated*.
|
64
|
+
|
65
|
+
So, there is a fair chance that you will have to do some manual editing after test2spec has run. We're only
|
66
|
+
aiming to get most of the translation job done for you - not all of it.
|
67
|
+
|
52
68
|
h2. Troubleshooting
|
53
69
|
|
54
70
|
In some cases, test2spec will not be able to translate a test class. In that case, please submit a bug report
|
data/lib/spec/tool/ruby2ruby.rb
CHANGED
@@ -1,10 +1,12 @@
|
|
1
1
|
# Taken from http://dark.fhtr.org/ruby2ruby.rb
|
2
2
|
|
3
3
|
require 'rubygems'
|
4
|
-
|
5
|
-
require '
|
6
|
-
require 'sexp_processor'
|
7
|
-
|
4
|
+
begin
|
5
|
+
require 'parse_tree'
|
6
|
+
require 'sexp_processor'
|
7
|
+
rescue LoadError
|
8
|
+
$stderr.puts "You must gem install ParseTree (and RubyInline)"
|
9
|
+
end
|
8
10
|
|
9
11
|
class RubySource < String
|
10
12
|
|
@@ -72,7 +74,6 @@ class RubyToRuby < SexpProcessor
|
|
72
74
|
|
73
75
|
def initialize
|
74
76
|
super
|
75
|
-
@env = Environment.new
|
76
77
|
@indent = " "
|
77
78
|
self.auto_shift_type = true
|
78
79
|
self.strict = true
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'spec/tool/test_unit_translator'
|
2
2
|
require 'fileutils'
|
3
|
+
require 'erb'
|
3
4
|
|
4
5
|
module Spec
|
5
6
|
module Tool
|
@@ -12,7 +13,7 @@ module Spec
|
|
12
13
|
end
|
13
14
|
|
14
15
|
def initialize(suite)
|
15
|
-
|
16
|
+
log "Writing translated specs to #{$test2spec_options[:specdir]}"
|
16
17
|
translator = TestUnitTranslator.new
|
17
18
|
ObjectSpace.each_object(Class) do |klass|
|
18
19
|
if klass < ::Test::Unit::TestCase
|
@@ -21,14 +22,17 @@ module Spec
|
|
21
22
|
|
22
23
|
unless $test2spec_options[:dry_run]
|
23
24
|
relative_path = underscore(klass.name)
|
25
|
+
template = $test2spec_options[:template] ? IO.read($test2spec_options[:template]) : nil
|
26
|
+
source = render(translation, relative_path, template)
|
27
|
+
|
24
28
|
relative_path.gsub! /_test$/, "_spec"
|
25
29
|
relative_path += ".rb"
|
26
|
-
write(
|
30
|
+
write(source, relative_path)
|
27
31
|
else
|
28
|
-
|
32
|
+
log "Successfully translated #{klass}"
|
29
33
|
end
|
30
34
|
rescue SexpProcessorError => e
|
31
|
-
|
35
|
+
log "Failed to translate #{klass}"
|
32
36
|
end
|
33
37
|
end
|
34
38
|
end
|
@@ -40,6 +44,24 @@ module Spec
|
|
40
44
|
end
|
41
45
|
|
42
46
|
private
|
47
|
+
|
48
|
+
def render(translation, relative_path, template)
|
49
|
+
unless template.nil?
|
50
|
+
depth = relative_path.split('/').length-1
|
51
|
+
erb = ERB.new(template)
|
52
|
+
erb.result(binding)
|
53
|
+
else
|
54
|
+
translation
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def log(msg)
|
59
|
+
puts msg unless quiet?
|
60
|
+
end
|
61
|
+
|
62
|
+
def quiet?
|
63
|
+
$test2spec_options[:quiet] == true
|
64
|
+
end
|
43
65
|
|
44
66
|
def destination_path(relative_destination)
|
45
67
|
File.join($test2spec_options[:specdir], relative_destination)
|
@@ -49,7 +71,7 @@ module Spec
|
|
49
71
|
destination = destination_path(relative_destination)
|
50
72
|
destination_exists = File.exists?(destination)
|
51
73
|
if destination_exists and identical?(source, destination)
|
52
|
-
return
|
74
|
+
return log("Identical : #{relative_destination}")
|
53
75
|
end
|
54
76
|
|
55
77
|
if destination_exists
|
@@ -57,21 +79,19 @@ module Spec
|
|
57
79
|
when :ask then force_file_collision?(relative_destination)
|
58
80
|
when :force then :force
|
59
81
|
when :skip then :skip
|
60
|
-
else raise "Invalid collision option: #{$test2spec_options[:collision].inspect}"
|
61
82
|
end
|
62
83
|
|
63
84
|
case choice
|
64
|
-
when :force then
|
65
|
-
when :skip then return(
|
66
|
-
else raise "Invalid collision choice: #{choice}.inspect"
|
85
|
+
when :force then log("Forcing : #{relative_destination}")
|
86
|
+
when :skip then return(log("Skipping : #{relative_destination}"))
|
67
87
|
end
|
68
88
|
else
|
69
89
|
dir = File.dirname(destination)
|
70
90
|
unless File.directory?(dir)
|
71
|
-
|
91
|
+
log "Creating : #{dir}"
|
72
92
|
mkdir_p dir
|
73
93
|
end
|
74
|
-
|
94
|
+
log "Creating : #{destination}"
|
75
95
|
end
|
76
96
|
|
77
97
|
File.open(destination, 'w') do |df|
|
@@ -96,10 +116,10 @@ module Spec
|
|
96
116
|
case $stdin.gets
|
97
117
|
when /a/i
|
98
118
|
$test2spec_options[:collision] = :force
|
99
|
-
|
119
|
+
log "Forcing ALL"
|
100
120
|
:force
|
101
121
|
when /q/i
|
102
|
-
|
122
|
+
puts "Quitting"
|
103
123
|
raise SystemExit
|
104
124
|
when /n/i then :skip
|
105
125
|
else :force
|
data/lib/spec/version.rb
CHANGED
metadata
CHANGED
@@ -3,9 +3,9 @@ rubygems_version: 0.8.11
|
|
3
3
|
specification_version: 1
|
4
4
|
name: rspec
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.5.
|
6
|
+
version: 0.5.9
|
7
7
|
date: 2006-06-09 00:00:00 -05:00
|
8
|
-
summary: RSpec-0.5.
|
8
|
+
summary: RSpec-0.5.9 - BDD for Ruby http://rspec.rubyforge.org/
|
9
9
|
require_paths:
|
10
10
|
- lib
|
11
11
|
email: rspec-devel@rubyforge.org
|