rspec 0.5.9 → 0.5.10
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.
- data/CHANGES +5 -0
- data/README +4 -3
- data/Rakefile +12 -8
- data/bin/test2spec +6 -8
- data/doc/plugin/version.rb +19 -0
- data/doc/src/default.template +1 -1
- data/doc/src/tools/rake.page +1 -1
- data/doc/src/tools/test2spec.page +12 -9
- data/lib/spec/rake/spectask.rb +1 -1
- data/lib/spec/runner/base_text_formatter.rb +1 -2
- data/lib/spec/runner/reporter.rb +1 -1
- data/lib/spec/{tool → test_to_spec}/ruby2ruby.rb +6 -2
- data/lib/spec/test_to_spec/sexp_transformer.rb +189 -0
- data/lib/spec/test_to_spec/test_case_ext.rb +22 -0
- data/lib/spec/{tool → test_to_spec}/translation_test_runner.rb +3 -4
- data/lib/spec/version.rb +1 -1
- data/test/spec/runner/progress_bar_formatter_test.rb +3 -3
- data/test/spec/runner/rdoc_formatter_test.rb +2 -2
- data/test/spec/runner/reporter_test.rb +15 -8
- data/test/spec/runner/specdoc_formatter_test.rb +3 -3
- data/test/spec/{tool → test_to_spec}/ruby_to_ruby_test.rb +2 -2
- data/test/spec/test_to_spec/sexp_transformer_assertion_test.rb +207 -0
- data/test/spec/test_to_spec/sexp_transformer_test.rb +232 -0
- data/test/spec/test_to_spec/test_case_ext_test.rb +25 -0
- data/test/spec/{tool → test_to_spec/testfiles}/test_unit_api_spec.rb +1 -1
- data/test/spec/test_to_spec/testfiles/test_unit_api_test.rb +64 -0
- data/test/test_helper.rb +24 -1
- metadata +14 -10
- data/lib/spec/tool/test_unit_translator.rb +0 -143
- data/test/spec/tool/test_unit_api_test.rb +0 -68
- data/test/spec/tool/test_unit_translator_test.rb +0 -34
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'parse_tree'
|
3
|
+
require 'spec/test_to_spec/sexp_transformer'
|
4
|
+
require 'spec/test_to_spec/ruby2ruby'
|
5
|
+
|
6
|
+
module Test
|
7
|
+
module Unit
|
8
|
+
class TestCase
|
9
|
+
# Returns a String representing the RSpec translation of this class
|
10
|
+
def self.to_rspec
|
11
|
+
tree = ParseTree.new.parse_tree(self).first
|
12
|
+
rspec_tree = Spec::TestToSpec::SexpTransformer.new.process(tree)
|
13
|
+
modules = self.name.split("::")[0..-2]
|
14
|
+
result = ""
|
15
|
+
result += modules.collect{|m| "module #{m}\n"}.join("")
|
16
|
+
result += RubyToRuby.new.process(rspec_tree[0])
|
17
|
+
result += modules.collect{|m| "\nend"}.join("")
|
18
|
+
result
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -1,9 +1,9 @@
|
|
1
|
-
require 'spec/
|
1
|
+
require 'spec/test_to_spec/test_case_ext'
|
2
2
|
require 'fileutils'
|
3
3
|
require 'erb'
|
4
4
|
|
5
5
|
module Spec
|
6
|
-
module
|
6
|
+
module TestToSpec
|
7
7
|
# A Test::Unit runner that doesn't run tests, but translates them instead!
|
8
8
|
class TranslationTestRunner
|
9
9
|
include FileUtils
|
@@ -14,11 +14,10 @@ module Spec
|
|
14
14
|
|
15
15
|
def initialize(suite)
|
16
16
|
log "Writing translated specs to #{$test2spec_options[:specdir]}"
|
17
|
-
translator = TestUnitTranslator.new
|
18
17
|
ObjectSpace.each_object(Class) do |klass|
|
19
18
|
if klass < ::Test::Unit::TestCase
|
20
19
|
begin
|
21
|
-
translation =
|
20
|
+
translation = klass.to_rspec
|
22
21
|
|
23
22
|
unless $test2spec_options[:dry_run]
|
24
23
|
relative_path = underscore(klass.name)
|
data/lib/spec/version.rb
CHANGED
@@ -29,8 +29,8 @@ module Spec
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def test_should_produce_standard_summary
|
32
|
-
@formatter.dump_summary(
|
33
|
-
assert_equal("\nFinished in
|
32
|
+
@formatter.dump_summary(3,2,1)
|
33
|
+
assert_equal("\nFinished in 3 seconds\n\n2 specifications, 1 failure\n", @io.string)
|
34
34
|
end
|
35
35
|
|
36
36
|
def test_should_produce_line_break_on_start_dump
|
@@ -46,7 +46,7 @@ module Spec
|
|
46
46
|
end
|
47
47
|
|
48
48
|
def test_should_not_produce_summary_on_dry_run
|
49
|
-
@formatter.dump_summary(
|
49
|
+
@formatter.dump_summary(3,2,1)
|
50
50
|
assert_equal("", @io.string)
|
51
51
|
end
|
52
52
|
end
|
@@ -24,7 +24,7 @@ module Spec
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def test_should_produce_no_summary
|
27
|
-
@formatter.dump_summary(nil,nil,nil
|
27
|
+
@formatter.dump_summary(nil,nil,nil)
|
28
28
|
assert(@io.string.empty?)
|
29
29
|
end
|
30
30
|
|
@@ -41,7 +41,7 @@ module Spec
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def test_should_not_produce_summary_on_dry_run
|
44
|
-
@formatter.dump_summary(
|
44
|
+
@formatter.dump_summary(3,2,1)
|
45
45
|
assert_equal("", @io.string)
|
46
46
|
end
|
47
47
|
end
|
@@ -14,7 +14,7 @@ module Spec
|
|
14
14
|
def test_should_push_time_to_reporter
|
15
15
|
@formatter.should_receive(:start).with(5)
|
16
16
|
@formatter.should_receive(:start_dump)
|
17
|
-
@formatter.should_receive(:dump_summary) do |time, a, b
|
17
|
+
@formatter.should_receive(:dump_summary) do |time, a, b|
|
18
18
|
assert_match(/[0-9].[0-9|e|-]+/, time.to_s)
|
19
19
|
end
|
20
20
|
@reporter.start(5)
|
@@ -24,7 +24,7 @@ module Spec
|
|
24
24
|
|
25
25
|
def test_should_push_stats_to_reporter_even_with_no_data
|
26
26
|
@formatter.should_receive(:start_dump)
|
27
|
-
@formatter.should_receive(:dump_summary).with(:anything, 0, 0
|
27
|
+
@formatter.should_receive(:dump_summary).with(:anything, 0, 0)
|
28
28
|
@reporter.dump
|
29
29
|
end
|
30
30
|
|
@@ -42,7 +42,7 @@ module Spec
|
|
42
42
|
@formatter.should_receive(:spec_started)
|
43
43
|
@formatter.should_receive(:spec_passed)
|
44
44
|
@formatter.should_receive(:start_dump)
|
45
|
-
@formatter.should_receive(:dump_summary).with(:anything,
|
45
|
+
@formatter.should_receive(:dump_summary).with(:anything, 1, 0)
|
46
46
|
@reporter.spec_started "spec"
|
47
47
|
@reporter.spec_finished "spec"
|
48
48
|
@reporter.dump
|
@@ -54,7 +54,7 @@ module Spec
|
|
54
54
|
@formatter.should_receive(:spec_failed).with("spec", 1, failure)
|
55
55
|
@formatter.should_receive(:start_dump)
|
56
56
|
@formatter.should_receive(:dump_failure).with(1, :anything)
|
57
|
-
@formatter.should_receive(:dump_summary).with(:anything, 1, 1
|
57
|
+
@formatter.should_receive(:dump_summary).with(:anything, 1, 1)
|
58
58
|
@backtrace_tweaker.should.receive(:tweak_backtrace)
|
59
59
|
@reporter.add_context "context"
|
60
60
|
@reporter.spec_started "spec"
|
@@ -63,13 +63,20 @@ module Spec
|
|
63
63
|
end
|
64
64
|
|
65
65
|
def test_should_handle_multiple_contexts_same_name
|
66
|
-
@formatter.should_receive(:add_context).
|
67
|
-
@formatter.
|
66
|
+
@formatter.should_receive(:add_context).exactly(3).times
|
67
|
+
@formatter.should.receive(:spec_started).exactly(3).times
|
68
|
+
@formatter.should.receive(:spec_passed).exactly(3).times
|
68
69
|
@formatter.should_receive(:start_dump)
|
69
|
-
@formatter.should_receive(:dump_summary).with(:anything, 3, 0
|
70
|
+
@formatter.should_receive(:dump_summary).with(:anything, 3, 0)
|
70
71
|
@reporter.add_context "context"
|
72
|
+
@reporter.spec_started "spec 1"
|
73
|
+
@reporter.spec_finished "spec 1"
|
71
74
|
@reporter.add_context "context"
|
75
|
+
@reporter.spec_started "spec 2"
|
76
|
+
@reporter.spec_finished "spec 2"
|
72
77
|
@reporter.add_context "context"
|
78
|
+
@reporter.spec_started "spec 3"
|
79
|
+
@reporter.spec_finished "spec 3"
|
73
80
|
@reporter.dump
|
74
81
|
end
|
75
82
|
|
@@ -82,7 +89,7 @@ module Spec
|
|
82
89
|
@formatter.should_receive(:spec_failed).with("spec", 2, failure)
|
83
90
|
@formatter.should_receive(:dump_failure).exactly(2).times
|
84
91
|
@formatter.should_receive(:start_dump)
|
85
|
-
@formatter.should_receive(:dump_summary).with(:anything,
|
92
|
+
@formatter.should_receive(:dump_summary).with(:anything, 4, 2)
|
86
93
|
@backtrace_tweaker.should.receive(:tweak_backtrace)
|
87
94
|
@reporter.add_context "context"
|
88
95
|
|
@@ -24,8 +24,8 @@ module Spec
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def test_should_produce_standard_summary
|
27
|
-
@formatter.dump_summary(
|
28
|
-
assert_equal("\nFinished in
|
27
|
+
@formatter.dump_summary(3,2,1)
|
28
|
+
assert_equal("\nFinished in 3 seconds\n\n2 specifications, 1 failure\n", @io.string)
|
29
29
|
end
|
30
30
|
|
31
31
|
def test_should_push_nothing_on_start
|
@@ -47,7 +47,7 @@ module Spec
|
|
47
47
|
end
|
48
48
|
|
49
49
|
def test_should_not_produce_summary_on_dry_run
|
50
|
-
@formatter.dump_summary(
|
50
|
+
@formatter.dump_summary(3,2,1)
|
51
51
|
assert_equal("", @io.string)
|
52
52
|
end
|
53
53
|
end
|
@@ -0,0 +1,207 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../test_helper'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'rubygems'
|
4
|
+
require 'parse_tree'
|
5
|
+
require 'spec/test_to_spec/sexp_transformer'
|
6
|
+
|
7
|
+
module Spec
|
8
|
+
module TestToSpec
|
9
|
+
# This Test::Unit class verifies that the core Test::Unit assertions
|
10
|
+
# can be translated to RSpec.
|
11
|
+
# The various test_assert_* methods must follow a rigorous form -
|
12
|
+
#
|
13
|
+
# The first statement must be a Test::Unit assertion, and the second
|
14
|
+
# statement its expected RSpec translation.
|
15
|
+
#
|
16
|
+
# For each of the test_assert_* method, a test_assert_*_translation
|
17
|
+
# method is dynamically added, which will test that the translation
|
18
|
+
# of the 1st statement is effectively equal to the second one.
|
19
|
+
class SexpTransformerAssertionTest < Test::Unit::TestCase
|
20
|
+
def setup
|
21
|
+
@t = SexpTransformer.new
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_assert
|
25
|
+
assert(:foo == :foo)
|
26
|
+
(:foo == :foo).should_be true
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_assert_with_message
|
30
|
+
assert(:foo == :foo, "msg")
|
31
|
+
(:foo == :foo).should_be true
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_assert_nil
|
35
|
+
assert_nil([].index(5))
|
36
|
+
([].index(5)).should_be nil
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_assert_nil_with_message
|
40
|
+
assert_nil([].index(5), "msg")
|
41
|
+
([].index(5)).should_be nil
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_assert_not_nil
|
45
|
+
assert_not_nil([5].index(5))
|
46
|
+
([5].index(5)).should_not_be nil
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_assert_not_nil_with_message
|
50
|
+
assert_not_nil(3, "msg")
|
51
|
+
3.should_not_be nil
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_assert_equal
|
55
|
+
assert_equal(2, 1+1)
|
56
|
+
(1+1).should_equal 2
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_assert_equal_with_message
|
60
|
+
assert_equal(2, 1+1, "1+1 should equal 2")
|
61
|
+
(1+1).should_equal 2
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_assert_equal_with_each
|
65
|
+
[0,1,2].each_with_index do |b, c|
|
66
|
+
assert_equal c, b
|
67
|
+
end
|
68
|
+
[0,1,2].each_with_index do |b, c|
|
69
|
+
b.should_equal c
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_assert_not_equal
|
74
|
+
assert_not_equal(2+3, 1)
|
75
|
+
1.should_not_equal 2+3
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_assert_not_equal_with_message
|
79
|
+
assert_not_equal(2+3, 1, "msg")
|
80
|
+
1.should_not_equal 2+3
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_assert_same
|
84
|
+
assert_same(2, 1+1)
|
85
|
+
(1+1).should_be 2
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_assert_same_with_msg
|
89
|
+
assert_same(2, 1+1, "msg")
|
90
|
+
(1+1).should_be 2
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_assert_not_same
|
94
|
+
assert_not_same(2+3, 1)
|
95
|
+
1.should_not_be 2+3
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_assert_not_same_with_message
|
99
|
+
assert_not_same(2+3, 1, "msg")
|
100
|
+
1.should_not_be 2+3
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_assert_instance_of
|
104
|
+
assert_instance_of Fixnum, 2
|
105
|
+
2.should_be_instance_of Fixnum
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_assert_kind_of
|
109
|
+
assert_kind_of Fixnum, 2
|
110
|
+
2.should_be_kind_of Fixnum
|
111
|
+
end
|
112
|
+
|
113
|
+
def test_assert_match
|
114
|
+
assert_match /foo/, 'foo'
|
115
|
+
'foo'.should_match /foo/
|
116
|
+
end
|
117
|
+
|
118
|
+
def test_assert_no_match
|
119
|
+
assert_no_match /foo/, 'bar'
|
120
|
+
'bar'.should_not_match /foo/
|
121
|
+
end
|
122
|
+
|
123
|
+
def test_assert_respond_to
|
124
|
+
assert_respond_to 2, :to_f
|
125
|
+
2.should_respond_to :to_f
|
126
|
+
end
|
127
|
+
|
128
|
+
def test_assert_respond_to_with_message
|
129
|
+
assert_respond_to 2, :to_f, "msg"
|
130
|
+
2.should_respond_to :to_f
|
131
|
+
end
|
132
|
+
|
133
|
+
def test_assert_in_delta
|
134
|
+
assert_in_delta 123.5, 123.45, 0.1
|
135
|
+
123.45.should_be_close 123.5, 0.1
|
136
|
+
end
|
137
|
+
|
138
|
+
def test_assert_in_delta_with_message
|
139
|
+
assert_in_delta 123.5, 123.45, 0.1, "123.45 should be close to 123.5"
|
140
|
+
123.45.should_be_close 123.5, 0.1
|
141
|
+
end
|
142
|
+
|
143
|
+
def test_assert_raise
|
144
|
+
assert_raise(ZeroDivisionError){ 1/0 }
|
145
|
+
lambda {1/0}.should_raise(ZeroDivisionError)
|
146
|
+
end
|
147
|
+
|
148
|
+
def test_assert_raise_with_message
|
149
|
+
assert_raise(ZeroDivisionError, "msg"){ 1/0 }
|
150
|
+
lambda {1/0}.should_raise(ZeroDivisionError)
|
151
|
+
end
|
152
|
+
|
153
|
+
def test_assert_raises
|
154
|
+
assert_raises(ZeroDivisionError){ 1/0 }
|
155
|
+
lambda {1/0}.should_raise(ZeroDivisionError)
|
156
|
+
end
|
157
|
+
|
158
|
+
def test_assert_nothing_raised
|
159
|
+
assert_nothing_raised{ 0/1 }
|
160
|
+
lambda {0/1}.should_not_raise
|
161
|
+
end
|
162
|
+
|
163
|
+
def test_assert_throws
|
164
|
+
assert_throws(:foo){ throw :foo }
|
165
|
+
lambda {throw :foo}.should_throw(:foo)
|
166
|
+
end
|
167
|
+
|
168
|
+
def test_assert_nothing_thrown
|
169
|
+
assert_nothing_thrown{ 0/1 }
|
170
|
+
lambda {0/1}.should_not_throw
|
171
|
+
end
|
172
|
+
|
173
|
+
def test_assert_block
|
174
|
+
assert_block{:foo != :bar}
|
175
|
+
lambda{:foo != :bar}.should_be true
|
176
|
+
end
|
177
|
+
|
178
|
+
# Returns the body of one of my methods as a Sexp
|
179
|
+
def self.body(sym)
|
180
|
+
t = ParseTree.new.parse_tree_for_method(self, sym)
|
181
|
+
t[2][1][2..-1]
|
182
|
+
end
|
183
|
+
|
184
|
+
# Verifies that the 1st statement in test method +m+ is properly translated
|
185
|
+
# to the 2nd statement.
|
186
|
+
def should_translate(m)
|
187
|
+
body = self.class.body(m)
|
188
|
+
assert_equal 2, body.length
|
189
|
+
test_unit_sexp = body[0]
|
190
|
+
rspec_sexp = body[1]
|
191
|
+
translation = @t.process(test_unit_sexp)
|
192
|
+
verify_sexp_equal(rspec_sexp, translation)
|
193
|
+
end
|
194
|
+
|
195
|
+
# Dynamically define extra test methods
|
196
|
+
methods = self.instance_methods(false).reject do |m|
|
197
|
+
m == "test_translations" || !(m =~ /^test_assert/)
|
198
|
+
end
|
199
|
+
methods.each do |m|
|
200
|
+
define_method "#{m}_translation" do
|
201
|
+
should_translate(m)
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
@@ -0,0 +1,232 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../test_helper'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'rubygems'
|
4
|
+
require 'parse_tree'
|
5
|
+
require 'spec/test_to_spec/sexp_transformer'
|
6
|
+
require 'spec/test_to_spec/ruby2ruby'
|
7
|
+
|
8
|
+
module Spec
|
9
|
+
module TestToSpec
|
10
|
+
class FirstTest < Test::Unit::TestCase
|
11
|
+
def test_foo
|
12
|
+
end
|
13
|
+
end
|
14
|
+
class FirstContext
|
15
|
+
def wrapper
|
16
|
+
context "First" do
|
17
|
+
specify "foo" do
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class SecondTest < Test::Unit::TestCase
|
24
|
+
def test_foo
|
25
|
+
assert_same 3, 1+2
|
26
|
+
assert_match /sla/, 'aslak'
|
27
|
+
end
|
28
|
+
end
|
29
|
+
class SecondContext
|
30
|
+
def wrapper
|
31
|
+
context "Second" do
|
32
|
+
specify "foo" do
|
33
|
+
(1+2).should_be 3
|
34
|
+
'aslak'.should_match(/sla/)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
class ThirdTest < Test::Unit::TestCase
|
41
|
+
def test_bar
|
42
|
+
one = 1
|
43
|
+
two = 2
|
44
|
+
end
|
45
|
+
def test_foo
|
46
|
+
end
|
47
|
+
end
|
48
|
+
class ThirdContext
|
49
|
+
def wrapper
|
50
|
+
context "Third" do
|
51
|
+
specify "bar" do
|
52
|
+
one = 1
|
53
|
+
two = 2
|
54
|
+
end
|
55
|
+
specify "foo" do
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
class FourthTest < Test::Unit::TestCase
|
62
|
+
def setup
|
63
|
+
one = 1
|
64
|
+
end
|
65
|
+
def test_foo
|
66
|
+
two = 2
|
67
|
+
end
|
68
|
+
end
|
69
|
+
class FourthContext
|
70
|
+
def wrapper
|
71
|
+
context "Fourth" do
|
72
|
+
setup do
|
73
|
+
one = 1
|
74
|
+
end
|
75
|
+
specify "foo" do
|
76
|
+
two = 2
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
class FifthTest
|
83
|
+
def setup
|
84
|
+
one = 1
|
85
|
+
end
|
86
|
+
def foo
|
87
|
+
two = 2
|
88
|
+
end
|
89
|
+
end
|
90
|
+
class FifthContext
|
91
|
+
def wrapper
|
92
|
+
context "Fifth" do
|
93
|
+
setup do
|
94
|
+
one = 1
|
95
|
+
def foo
|
96
|
+
two = 2
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
class SixthTest
|
104
|
+
def setup
|
105
|
+
end
|
106
|
+
def foo
|
107
|
+
two = 2
|
108
|
+
end
|
109
|
+
end
|
110
|
+
class SixthContext
|
111
|
+
def wrapper
|
112
|
+
context "Sixth" do
|
113
|
+
setup do
|
114
|
+
def foo
|
115
|
+
two = 2
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
class SeventhTest
|
123
|
+
def foo
|
124
|
+
two = 2
|
125
|
+
end
|
126
|
+
end
|
127
|
+
class SeventhContext
|
128
|
+
def wrapper
|
129
|
+
context "Seventh" do
|
130
|
+
setup do
|
131
|
+
def foo
|
132
|
+
two = 2
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
class EighthTest < Test::Unit::TestCase
|
140
|
+
def foo
|
141
|
+
two = 2
|
142
|
+
end
|
143
|
+
|
144
|
+
def teardown
|
145
|
+
torn = true
|
146
|
+
end
|
147
|
+
|
148
|
+
def test_foo
|
149
|
+
bar = foo
|
150
|
+
assert_equal 2, bar
|
151
|
+
end
|
152
|
+
end
|
153
|
+
class EighthContext
|
154
|
+
def wrapper
|
155
|
+
context "Eighth" do
|
156
|
+
setup do
|
157
|
+
def foo
|
158
|
+
two = 2
|
159
|
+
end
|
160
|
+
end
|
161
|
+
teardown do
|
162
|
+
torn = true
|
163
|
+
end
|
164
|
+
specify "foo" do
|
165
|
+
bar = foo
|
166
|
+
bar.should_equal 2
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
class SexpTransformerTest < Test::Unit::TestCase
|
173
|
+
def test_first
|
174
|
+
should_translate_class_to_context('First')
|
175
|
+
end
|
176
|
+
|
177
|
+
def test_second
|
178
|
+
should_translate_class_to_context('Second')
|
179
|
+
end
|
180
|
+
|
181
|
+
def test_third
|
182
|
+
should_translate_class_to_context('Third')
|
183
|
+
end
|
184
|
+
|
185
|
+
def test_fourth
|
186
|
+
should_translate_class_to_context('Fourth')
|
187
|
+
end
|
188
|
+
|
189
|
+
def test_fifth
|
190
|
+
should_translate_class_to_context('Fifth')
|
191
|
+
end
|
192
|
+
|
193
|
+
def test_sixth
|
194
|
+
should_translate_class_to_context('Sixth')
|
195
|
+
end
|
196
|
+
|
197
|
+
def test_seventh
|
198
|
+
should_translate_class_to_context('Seventh')
|
199
|
+
end
|
200
|
+
|
201
|
+
def test_eighth
|
202
|
+
should_translate_class_to_context('Eighth')
|
203
|
+
end
|
204
|
+
|
205
|
+
def should_translate_class_to_context(name)
|
206
|
+
t = test_class_exp(eval("#{name}Test"))
|
207
|
+
c = context_exp(eval("#{name}Context"))
|
208
|
+
|
209
|
+
trans = @t.process(t)
|
210
|
+
verify_sexp_equal c, trans
|
211
|
+
|
212
|
+
# Verify that we can evaluate it after translated by R2R
|
213
|
+
eval(@r2r.process(trans[0]))
|
214
|
+
end
|
215
|
+
|
216
|
+
def test_class_exp(klass)
|
217
|
+
ParseTree.new.parse_tree(klass)[0]
|
218
|
+
end
|
219
|
+
|
220
|
+
def context_exp(klass)
|
221
|
+
#pp ParseTree.new.parse_tree_for_method(klass, :wrapper)
|
222
|
+
#exit
|
223
|
+
ParseTree.new.parse_tree_for_method(klass, :wrapper)[2][1][2..-1]
|
224
|
+
end
|
225
|
+
|
226
|
+
def setup
|
227
|
+
@t = SexpTransformer.new
|
228
|
+
@r2r = RubyToRuby.new
|
229
|
+
end
|
230
|
+
end
|
231
|
+
end
|
232
|
+
end
|