rspec 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +7 -12
- data/Rakefile +17 -12
- data/TUTORIAL +1 -1
- data/WHY_RSPEC +115 -0
- data/bin/spec +17 -4
- data/bin/test2rspec +35 -0
- data/examples/airport_spec.rb +35 -0
- data/examples/mocking_spec.rb +16 -0
- data/examples/spec_framework_spec.rb +28 -0
- data/examples/stack.rb +36 -0
- data/examples/stack_spec.rb +112 -0
- data/lib/spec.rb +5 -18
- data/lib/spec/api.rb +4 -0
- data/lib/spec/{exceptions.rb → api/exceptions.rb} +1 -1
- data/lib/spec/{expectations.rb → api/expectations.rb} +5 -4
- data/lib/spec/api/helper.rb +10 -0
- data/lib/spec/{have_helper.rb → api/helper/have_helper.rb} +1 -1
- data/lib/spec/{instance_helper.rb → api/helper/instance_helper.rb} +0 -0
- data/lib/spec/{instance_negator.rb → api/helper/instance_negator.rb} +0 -0
- data/lib/spec/{kind_helper.rb → api/helper/kind_helper.rb} +0 -0
- data/lib/spec/{kind_negator.rb → api/helper/kind_negator.rb} +0 -0
- data/lib/spec/{respond_helper.rb → api/helper/respond_helper.rb} +0 -0
- data/lib/spec/{respond_negator.rb → api/helper/respond_negator.rb} +0 -0
- data/lib/spec/{should_base.rb → api/helper/should_base.rb} +6 -4
- data/lib/spec/{should_helper.rb → api/helper/should_helper.rb} +12 -0
- data/lib/spec/{should_negator.rb → api/helper/should_negator.rb} +11 -0
- data/lib/spec/api/mock.rb +184 -0
- data/lib/spec/rake/spectask.rb +153 -0
- data/lib/spec/runner.rb +9 -0
- data/lib/spec/runner/backtrace_tweaker.rb +17 -0
- data/lib/spec/runner/context.rb +47 -0
- data/lib/spec/runner/context_runner.rb +52 -0
- data/lib/spec/runner/execution_context.rb +15 -0
- data/lib/spec/runner/instance_exec.rb +15 -0
- data/lib/spec/runner/kernel_ext.rb +6 -0
- data/lib/spec/runner/option_parser.rb +41 -0
- data/lib/spec/runner/rdoc_formatter.rb +17 -0
- data/lib/spec/runner/simple_text_reporter.rb +92 -0
- data/lib/spec/runner/specification.rb +42 -0
- data/lib/spec/tool/command_line.rb +39 -0
- data/lib/spec/tool/test_unit_translator.rb +112 -0
- data/lib/spec/version.rb +13 -0
- data/test/spec/api/helper/arbitrary_predicate_test.rb +121 -0
- data/test/spec/api/helper/containment_test.rb +117 -0
- data/test/spec/api/helper/equality_test.rb +46 -0
- data/test/spec/api/helper/identity_test.rb +68 -0
- data/test/spec/api/helper/raising_test.rb +50 -0
- data/test/spec/api/helper/regex_matching_test.rb +38 -0
- data/test/spec/api/helper/should_satisfy_test.rb +37 -0
- data/test/spec/api/helper/throwing_test.rb +56 -0
- data/test/spec/api/helper/true_false_special_case_test.rb +87 -0
- data/test/spec/api/helper/typing_test.rb +107 -0
- data/test/spec/api/mock_test.rb +161 -0
- data/test/spec/runner/backtrace_tweaker_test.rb +20 -0
- data/test/spec/runner/context_runner_test.rb +19 -0
- data/test/spec/runner/context_test.rb +29 -0
- data/test/spec/runner/execution_context_test.rb +13 -0
- data/test/spec/runner/option_parser_test.rb +50 -0
- data/test/spec/runner/rdoc_formatter_test.rb +23 -0
- data/test/spec/runner/simple_text_reporter_test.rb +128 -0
- data/test/spec/runner/specification_test.rb +70 -0
- data/test/spec/tool/command_line_test.rb +22 -0
- data/test/spec/tool/test_unit_api_spec.rb +61 -0
- data/test/spec/tool/test_unit_api_test.rb +61 -0
- data/test/spec/tool/test_unit_translator_test.rb +29 -0
- data/test/test_helper.rb +8 -0
- metadata +89 -67
- data/examples/add_specification_spec.rb +0 -15
- data/examples/craps.rb +0 -15
- data/examples/craps_spec.rb +0 -105
- data/examples/dsl_spec.rb +0 -8
- data/examples/movie.rb +0 -7
- data/examples/movie_list.rb +0 -19
- data/examples/movie_spec.rb +0 -37
- data/lib/spec/collector.rb +0 -17
- data/lib/spec/context.rb +0 -89
- data/lib/spec/dsl.rb +0 -23
- data/lib/spec/gui_runner.rb +0 -59
- data/lib/spec/mock.rb +0 -183
- data/lib/spec/text_runner.rb +0 -75
- data/test/collection_owner.rb +0 -48
- data/test/context_fixtures_test.rb +0 -71
- data/test/context_run_test.rb +0 -174
- data/test/dsl_test.rb +0 -48
- data/test/error_reporting_test.rb +0 -225
- data/test/expectations_for_should_have_test.rb +0 -144
- data/test/expectations_test.rb +0 -592
- data/test/get_classes.rb +0 -6
- data/test/gui_runner_test.rb +0 -162
- data/test/mock_test.rb +0 -157
- data/test/spec_collection_test.rb +0 -39
- data/test/specification_addition_test.rb +0 -29
- data/test/specification_identification_test.rb +0 -71
- data/test/text_runner_test.rb +0 -146
data/lib/spec/runner.rb
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
require 'spec/runner/instance_exec'
|
2
|
+
require 'spec/runner/context'
|
3
|
+
require 'spec/runner/specification'
|
4
|
+
require 'spec/runner/execution_context'
|
5
|
+
require 'spec/runner/context_runner'
|
6
|
+
require 'spec/runner/option_parser'
|
7
|
+
require 'spec/runner/backtrace_tweaker'
|
8
|
+
require 'spec/runner/rdoc_formatter'
|
9
|
+
require 'spec/runner/simple_text_reporter'
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Spec
|
2
|
+
module Runner
|
3
|
+
class BacktraceTweaker
|
4
|
+
def tweak_backtrace error, spec_name
|
5
|
+
return if error.backtrace.nil?
|
6
|
+
tweaked_backtrace = []
|
7
|
+
error.backtrace.each do |line|
|
8
|
+
if line.include?('__instance_exec')
|
9
|
+
line = line.split(':in')[0] + ":in `#{spec_name}'"
|
10
|
+
end
|
11
|
+
tweaked_backtrace.push line
|
12
|
+
end
|
13
|
+
error.set_backtrace tweaked_backtrace
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Spec
|
2
|
+
module Runner
|
3
|
+
class Context
|
4
|
+
@@context_runner = nil
|
5
|
+
|
6
|
+
def self.context_runner= runner
|
7
|
+
@@context_runner = runner
|
8
|
+
end
|
9
|
+
|
10
|
+
def initialize(name, &context_block)
|
11
|
+
@setup_block = nil
|
12
|
+
@teardown_block = nil
|
13
|
+
@specifications = []
|
14
|
+
@name = name
|
15
|
+
instance_exec(&context_block)
|
16
|
+
@@context_runner.add_context(self) unless @@context_runner.nil?
|
17
|
+
ContextRunner.standalone(self) if @@context_runner.nil?
|
18
|
+
end
|
19
|
+
|
20
|
+
def run(reporter)
|
21
|
+
reporter.add_context(@name)
|
22
|
+
@specifications.each do |specification|
|
23
|
+
specification.run(reporter, @setup_block, @teardown_block)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def run_docs(reporter)
|
28
|
+
reporter.add_context(@name)
|
29
|
+
@specifications.each do |specification|
|
30
|
+
specification.run_docs(reporter)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def setup(&block)
|
35
|
+
@setup_block = block
|
36
|
+
end
|
37
|
+
|
38
|
+
def teardown(&block)
|
39
|
+
@teardown_block = block
|
40
|
+
end
|
41
|
+
|
42
|
+
def specify(spec_name, &block)
|
43
|
+
@specifications << Specification.new(spec_name, &block)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec'
|
2
|
+
|
3
|
+
module Spec
|
4
|
+
module Runner
|
5
|
+
class ContextRunner
|
6
|
+
|
7
|
+
def self.standalone context
|
8
|
+
context_runner = ContextRunner.new(ARGV)
|
9
|
+
context_runner.add_context context
|
10
|
+
context_runner.run
|
11
|
+
end
|
12
|
+
|
13
|
+
def initialize(args)
|
14
|
+
options = OptionParser.parse(args)
|
15
|
+
@contexts = []
|
16
|
+
@out = options.out
|
17
|
+
@out = File.open(@out, 'w') if @out.is_a? String
|
18
|
+
@doc = options.doc
|
19
|
+
@listener = RDocFormatter.new(@out) if @doc
|
20
|
+
@listener = SimpleTextReporter.new(@out, options.verbose) unless @doc
|
21
|
+
end
|
22
|
+
|
23
|
+
def add_context(context)
|
24
|
+
@contexts << context
|
25
|
+
self
|
26
|
+
end
|
27
|
+
|
28
|
+
def run
|
29
|
+
run_specs unless @doc
|
30
|
+
run_docs if @doc
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def run_specs
|
36
|
+
@listener.start
|
37
|
+
@contexts.each do |context|
|
38
|
+
context.run(@listener)
|
39
|
+
end
|
40
|
+
@listener.end
|
41
|
+
@listener.dump
|
42
|
+
end
|
43
|
+
|
44
|
+
def run_docs
|
45
|
+
@contexts.each do |context|
|
46
|
+
context.run_docs(@listener)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# http://eigenclass.org/hiki.rb?cmd=view&p=instance_exec&key=instance_exec
|
2
|
+
class Object
|
3
|
+
module InstanceExecHelper; end
|
4
|
+
include InstanceExecHelper
|
5
|
+
def instance_exec(*args, &block) # !> method redefined; discarding old instance_exec
|
6
|
+
mname = "__instance_exec_#{Thread.current.object_id.abs}_#{object_id.abs}"
|
7
|
+
InstanceExecHelper.module_eval{ define_method(mname, &block) }
|
8
|
+
begin
|
9
|
+
ret = send(mname, *args)
|
10
|
+
ensure
|
11
|
+
InstanceExecHelper.module_eval{ undef_method(mname) } rescue nil
|
12
|
+
end
|
13
|
+
ret
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
require 'optparse'
|
3
|
+
module Spec
|
4
|
+
module Runner
|
5
|
+
class OptionParser
|
6
|
+
|
7
|
+
def self.parse(args)
|
8
|
+
options = OpenStruct.new
|
9
|
+
options.out = $stdout
|
10
|
+
options.verbose = false;
|
11
|
+
options.doc = false;
|
12
|
+
|
13
|
+
opts = ::OptionParser.new do |opts|
|
14
|
+
opts.banner = "Usage: specdoc [options] FILE|DIRECTORY"
|
15
|
+
opts.separator ""
|
16
|
+
|
17
|
+
opts.on("-o", "--of [FILE]", "Set the output file (defaults to STDOUT)") do |outfile|
|
18
|
+
options.out = outfile unless outfile.nil?
|
19
|
+
exit if outfile.nil?
|
20
|
+
end
|
21
|
+
|
22
|
+
opts.on("-v", "--verbose") do
|
23
|
+
options.verbose = true
|
24
|
+
end
|
25
|
+
|
26
|
+
opts.on("-d", "--doc", "Generate documentation") do
|
27
|
+
options.doc = true
|
28
|
+
end
|
29
|
+
|
30
|
+
opts.on_tail("-h", "--help", "Show this message") do
|
31
|
+
puts opts
|
32
|
+
exit
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
opts.parse!(args)
|
37
|
+
options
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Spec
|
2
|
+
module Runner
|
3
|
+
class RDocFormatter
|
4
|
+
def initialize(output=STDOUT)
|
5
|
+
@output = output
|
6
|
+
end
|
7
|
+
|
8
|
+
def add_context(name)
|
9
|
+
@output << "# #{name}\n"
|
10
|
+
end
|
11
|
+
|
12
|
+
def add_spec(name)
|
13
|
+
@output << "# * #{name}\n"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
module Spec
|
2
|
+
module Runner
|
3
|
+
class SimpleTextReporter
|
4
|
+
def initialize(output=STDOUT,verbose=false,backtrace_tweaker=BacktraceTweaker.new)
|
5
|
+
@output = output
|
6
|
+
@context_names = []
|
7
|
+
@errors = []
|
8
|
+
@spec_names = []
|
9
|
+
@verbose = verbose
|
10
|
+
@backtrace_tweaker = backtrace_tweaker
|
11
|
+
end
|
12
|
+
|
13
|
+
def add_context(name)
|
14
|
+
@output << "\n" if @context_names.empty? unless @verbose
|
15
|
+
@output << "\n#{name}\n" if @verbose
|
16
|
+
@context_names << name
|
17
|
+
end
|
18
|
+
|
19
|
+
def add_spec(name, errors=[])
|
20
|
+
if errors.empty?
|
21
|
+
spec_passed(name)
|
22
|
+
else
|
23
|
+
errors.each { |error| @backtrace_tweaker.tweak_backtrace(error, name) }
|
24
|
+
# only show the first one (there might be more)
|
25
|
+
spec_failed(name, errors[0])
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def start
|
30
|
+
@start_time = Time.new
|
31
|
+
end
|
32
|
+
|
33
|
+
def end
|
34
|
+
@end_time = Time.new
|
35
|
+
end
|
36
|
+
|
37
|
+
def dump
|
38
|
+
unless @verbose
|
39
|
+
@output << "\n"
|
40
|
+
dump_failures
|
41
|
+
@output << "\n\n" unless @errors.empty?
|
42
|
+
end
|
43
|
+
@output << "\n" if @errors.empty?
|
44
|
+
@output << "Finished in " << (duration).to_s << " seconds\n\n"
|
45
|
+
@output << "#{@context_names.length} context#{'s' unless @context_names.length == 1 }, "
|
46
|
+
@output << "#{@spec_names.length} specification#{'s' unless @spec_names.length == 1 }, "
|
47
|
+
@output << "#{@errors.length} failure#{'s' unless @errors.length == 1 }"
|
48
|
+
@output << "\n"
|
49
|
+
end
|
50
|
+
|
51
|
+
def dump_failures
|
52
|
+
return if @errors.empty?
|
53
|
+
@output << "\n"
|
54
|
+
@errors.inject(1) do |index, error|
|
55
|
+
@output << "\n\n" if index > 1
|
56
|
+
@output << index.to_s << ") "
|
57
|
+
@output << "#{error.message} (#{error.class.name})\n"
|
58
|
+
dump_backtrace(error.backtrace)
|
59
|
+
index + 1
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def dump_backtrace(trace)
|
64
|
+
@output << trace.join("\n") unless trace.nil?
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
|
69
|
+
def duration
|
70
|
+
return @end_time - @start_time unless (@end_time.nil? or @start_time.nil?)
|
71
|
+
return "0.0"
|
72
|
+
end
|
73
|
+
|
74
|
+
def spec_passed(name)
|
75
|
+
@spec_names << name
|
76
|
+
@output << "- #{name}\n" if @verbose
|
77
|
+
@output << '.' unless @verbose
|
78
|
+
end
|
79
|
+
|
80
|
+
def spec_failed(name, error)
|
81
|
+
@spec_names << name
|
82
|
+
@errors << error
|
83
|
+
if @verbose
|
84
|
+
@output << "- #{name} (FAILED)\n#{error.message} (#{error.class.name})\n#{error.backtrace.join("\n")}\n"
|
85
|
+
else
|
86
|
+
@output << 'F'
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Spec
|
2
|
+
module Runner
|
3
|
+
class Specification
|
4
|
+
|
5
|
+
def initialize(name, &block)
|
6
|
+
@name = name
|
7
|
+
@block = block
|
8
|
+
@mocks = []
|
9
|
+
@errors = []
|
10
|
+
end
|
11
|
+
|
12
|
+
def run(reporter=nil, setup_block=nil, teardown_block=nil)
|
13
|
+
execution_context = ::Spec::Runner::ExecutionContext.new(self)
|
14
|
+
begin
|
15
|
+
execution_context.instance_exec(&setup_block) unless setup_block.nil?
|
16
|
+
execution_context.instance_exec(&@block)
|
17
|
+
rescue => e
|
18
|
+
@errors << e
|
19
|
+
end
|
20
|
+
|
21
|
+
begin
|
22
|
+
execution_context.instance_exec(&teardown_block) unless teardown_block.nil?
|
23
|
+
@mocks.each do |mock|
|
24
|
+
mock.__verify
|
25
|
+
end
|
26
|
+
rescue => e
|
27
|
+
@errors << e
|
28
|
+
end
|
29
|
+
|
30
|
+
reporter.add_spec(@name, @errors) unless reporter.nil?
|
31
|
+
end
|
32
|
+
|
33
|
+
def run_docs(reporter)
|
34
|
+
reporter.add_spec(@name)
|
35
|
+
end
|
36
|
+
|
37
|
+
def add_mock(mock)
|
38
|
+
@mocks << mock
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'find'
|
2
|
+
require 'fileutils'
|
3
|
+
|
4
|
+
module Spec
|
5
|
+
module Tool
|
6
|
+
class CommandLine
|
7
|
+
def initialize(filesystem=nil)
|
8
|
+
@filesystem = filesystem.nil? ? self : filesystem
|
9
|
+
@translator = TestUnitTranslator.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def run(source, dest, out)
|
13
|
+
if FileTest.directory?(source)
|
14
|
+
raise "DEST must be a directory when SOURCE is a directory" if FileTest.file?(dest)
|
15
|
+
Find.find(source) do |path|
|
16
|
+
if FileTest.file?(path) and File.extname(path) == '.rb'
|
17
|
+
relative_path = path[source.length+1..-1]
|
18
|
+
dest_path = File.join dest, relative_path
|
19
|
+
run path, dest_path, out
|
20
|
+
end
|
21
|
+
end
|
22
|
+
else
|
23
|
+
raise "DEST must be a file when SOURCE is a file" if FileTest.directory?(dest)
|
24
|
+
out.puts "Writing: #{dest}"
|
25
|
+
@filesystem.write_translation(source, dest)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def write_translation(source, dest)
|
30
|
+
dir = File.dirname(dest)
|
31
|
+
FileUtils.mkdir_p(dir) unless File.directory?(dir)
|
32
|
+
File.open(dest, "w") do |io|
|
33
|
+
translation = @translator.translate(source)
|
34
|
+
io.write(translation)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
module Spec
|
2
|
+
module Tool
|
3
|
+
# Translates Test::Unit tests to RSpec specs.
|
4
|
+
class TestUnitTranslator
|
5
|
+
ONE_ARG_TRANSLATIONS = {
|
6
|
+
"assert" => "should.not.be nil",
|
7
|
+
"assert_nil" => "should.be nil",
|
8
|
+
"assert_not_nil" => "should.not.be nil"
|
9
|
+
|
10
|
+
}
|
11
|
+
TWO_ARG_TRANSLATIONS = {
|
12
|
+
"assert_equal" => "should.equal",
|
13
|
+
"assert_instance_of" => "should.be.instance.of",
|
14
|
+
"assert_kind_of" => "should.be.kind.of",
|
15
|
+
"assert_match" => "should.match",
|
16
|
+
"assert_no_match" => "should.not.match",
|
17
|
+
"assert_not_equal" => "should.not.equal",
|
18
|
+
"assert_not_same" => "should.not.be",
|
19
|
+
"assert_same" => "should.be"
|
20
|
+
}
|
21
|
+
RAISE_TRANSLATIONS = {
|
22
|
+
"assert_nothing_raised" => "should.not.raise",
|
23
|
+
"assert_nothing_thrown" => "should.not.throw",
|
24
|
+
"assert_raise" => "should.raise",
|
25
|
+
"assert_raises" => "should.raise",
|
26
|
+
"assert_throws" => "should.throw",
|
27
|
+
}
|
28
|
+
|
29
|
+
def translate(test_unit_file)
|
30
|
+
content = File.open(test_unit_file)
|
31
|
+
end_replacement = nil
|
32
|
+
translated = ""
|
33
|
+
content.each do |line|
|
34
|
+
if line =~ /^require .*test.*/
|
35
|
+
line = "require 'spec'\n"
|
36
|
+
elsif line =~ /^(\s*)def\s+setup/
|
37
|
+
spaces = $1
|
38
|
+
line = "#{spaces}setup do\n"
|
39
|
+
elsif line =~ /^(\s*)def\s+teardown/
|
40
|
+
spaces = $1
|
41
|
+
line = "#{spaces}teardown do\n"
|
42
|
+
elsif line =~ /^(\s*)class\s+(.*)\s+<\s+Test::Unit::TestCase/
|
43
|
+
spaces = $1
|
44
|
+
class_name = $2
|
45
|
+
|
46
|
+
context_name = class_name.match(/(.*)Test/)[1]
|
47
|
+
line = "#{spaces}context \"#{context_name}\" do\n"
|
48
|
+
|
49
|
+
elsif line =~ /(\s*)def\s+test_(.*)/
|
50
|
+
spaces = $1
|
51
|
+
method_meaning = $2
|
52
|
+
|
53
|
+
specification_name = method_meaning.gsub(/_/, " ").capitalize
|
54
|
+
line = "#{spaces}specify \"#{specification_name}\" do\n"
|
55
|
+
|
56
|
+
elsif line =~ /(\s*)(assert[^\s$\(]*)\s*\(?([^\)^\{]*)\)?\s*(.*)/
|
57
|
+
spaces = $1
|
58
|
+
assertion = $2
|
59
|
+
args = $3
|
60
|
+
suffix = $4
|
61
|
+
|
62
|
+
if(args =~ /^do/n and suffix =="")
|
63
|
+
# hack to handle methods taking no args and do at the end
|
64
|
+
args = ""
|
65
|
+
suffix = "do"
|
66
|
+
end
|
67
|
+
|
68
|
+
if translation = TWO_ARG_TRANSLATIONS[assertion]
|
69
|
+
expected, actual, message = args.split(",").collect{|arg| arg.strip}
|
70
|
+
line = "#{spaces}#{actual}.#{translation} #{expected}\n"
|
71
|
+
|
72
|
+
elsif assertion == "assert_respond_to"
|
73
|
+
actual, method, message = args.split(",").collect{|arg| arg.strip}
|
74
|
+
line = "#{spaces}#{actual}.should.respond.to #{method}\n"
|
75
|
+
|
76
|
+
elsif translation = ONE_ARG_TRANSLATIONS[assertion]
|
77
|
+
actual, message = args.split(",").collect{|arg| arg.strip}
|
78
|
+
line = "#{spaces}#{actual}.#{translation}\n"
|
79
|
+
|
80
|
+
elsif translation = RAISE_TRANSLATIONS[assertion] and suffix =~ /\{.*\}/
|
81
|
+
expected, message = args.split(",").collect{|arg| arg.strip}
|
82
|
+
line = "#{spaces}lambda #{suffix}.#{translation} #{expected}\n"
|
83
|
+
|
84
|
+
elsif translation = RAISE_TRANSLATIONS[assertion]
|
85
|
+
expected, message = args.split(",").collect{|arg| arg.strip}
|
86
|
+
line = "#{spaces}lambda do\n"
|
87
|
+
end_replacement = "#{translation} #{expected}\n"
|
88
|
+
|
89
|
+
elsif assertion == "assert_block" and suffix =~ /\{.*\}/
|
90
|
+
line = "#{spaces}lambda #{suffix}.should.be true\n"
|
91
|
+
|
92
|
+
elsif assertion == "assert_block"
|
93
|
+
line = "#{spaces}lambda do\n"
|
94
|
+
end_replacement = "should.be true\n"
|
95
|
+
|
96
|
+
elsif assertion == "assert_in_delta"
|
97
|
+
expected, actual, delta, message = args.split(",").collect{|arg| arg.strip}
|
98
|
+
line = "#{spaces}#{actual}.should.be.close #{expected}, #{delta}\n"
|
99
|
+
end
|
100
|
+
elsif end_replacement && line =~ /(\s+)end/
|
101
|
+
spaces = $1
|
102
|
+
line = "#{spaces}end.#{end_replacement}"
|
103
|
+
end_replacement = nil
|
104
|
+
end
|
105
|
+
|
106
|
+
translated += line unless line.nil?
|
107
|
+
end
|
108
|
+
translated
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|