butterfly_net 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/butterfly_net.rb +1 -0
- data/lib/butterfly_net/commands.rb +8 -8
- data/lib/butterfly_net/definitions.rb +44 -0
- data/lib/butterfly_net/test_unit_method.rb +20 -91
- data/test/butterfly_net_tests.rb +1 -0
- data/test/definitions_test.rb +77 -0
- data/test/test_case_test.rb +2 -1
- data/test/test_unit_method_test.rb +24 -49
- metadata +5 -3
data/lib/butterfly_net.rb
CHANGED
@@ -11,9 +11,9 @@ module ButterflyNet
|
|
11
11
|
module Commands
|
12
12
|
|
13
13
|
def bn_open(file_name=nil)
|
14
|
-
@
|
15
|
-
@
|
16
|
-
Kernel.at_exit { puts @
|
14
|
+
@readline_reader.close if @readline_reader
|
15
|
+
@readline_reader = ReadlineReader.new(file_name)
|
16
|
+
Kernel.at_exit { puts @readline_reader.close if @readline_reader; @readline_reader = nil }
|
17
17
|
true
|
18
18
|
rescue Exception => e
|
19
19
|
puts e
|
@@ -22,9 +22,9 @@ module ButterflyNet
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def bn_close
|
25
|
-
if @
|
26
|
-
status = @
|
27
|
-
@
|
25
|
+
if @readline_reader
|
26
|
+
status = @readline_reader.close
|
27
|
+
@readline_reader = nil
|
28
28
|
status
|
29
29
|
else
|
30
30
|
puts "butterfly_net: First invoke 'bn' or 'bn_open' to begin a session"
|
@@ -33,8 +33,8 @@ module ButterflyNet
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def bn_method(method_name=nil)
|
36
|
-
if @
|
37
|
-
@
|
36
|
+
if @readline_reader
|
37
|
+
@readline_reader.new_assertion_set(method_name)
|
38
38
|
else
|
39
39
|
puts "butterfly_net: First invoke 'bn' or 'bn_open' to begin a session"
|
40
40
|
false
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module ButterflyNet
|
2
|
+
class Definitions
|
3
|
+
|
4
|
+
attr_reader :lines
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@nesting_level = 0
|
8
|
+
@lines = []
|
9
|
+
end
|
10
|
+
|
11
|
+
def empty?
|
12
|
+
@lines.empty?
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.start_def?(line) # todo: extract to line class
|
16
|
+
line =~ /^\s*def\s+|^\s*class\s+|^\s*module\s+/
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.end_def?(line) # todo: extract to line class
|
20
|
+
line =~ /end\s*$/
|
21
|
+
end
|
22
|
+
|
23
|
+
def <<(line)
|
24
|
+
if Definitions.start_def?(line) and Definitions.end_def?(line)
|
25
|
+
@lines << " #{(" " * @nesting_level)}#{line}\n\n"
|
26
|
+
elsif Definitions.start_def?(line)
|
27
|
+
@nesting_level += 1
|
28
|
+
@lines << "#{(" " * @nesting_level)}#{line}\n"
|
29
|
+
elsif Definitions.end_def?(line)
|
30
|
+
@nesting_level -= 1
|
31
|
+
@lines << " #{(" " * @nesting_level)}#{line}\n#{ @nesting_level == 0 ? "\n" : ""}"
|
32
|
+
elsif @nesting_level > 0
|
33
|
+
@lines << " #{(" " * @nesting_level)}#{line}\n" unless @nesting_level == 0
|
34
|
+
else
|
35
|
+
false
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def to_s
|
40
|
+
@lines.join
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
@@ -2,14 +2,27 @@ module ButterflyNet
|
|
2
2
|
class TestUnitMethod
|
3
3
|
|
4
4
|
attr_accessor :name
|
5
|
+
attr_reader :definitions, :lines
|
5
6
|
|
6
7
|
def initialize
|
7
|
-
@commands = []
|
8
|
-
@
|
8
|
+
@commands = [] # todo: merge these 2 arrays in to single array of 2element pairs
|
9
|
+
@lines = []
|
10
|
+
@definitions = Definitions.new
|
9
11
|
end
|
10
12
|
|
11
13
|
def <<(line)
|
12
|
-
@
|
14
|
+
unless @definitions << line
|
15
|
+
begin
|
16
|
+
code = @definitions.to_s + @commands.join("\n") + "\n" + line
|
17
|
+
retval = eval code
|
18
|
+
@commands << line # todo replace def handling below with definitions (work in progress)
|
19
|
+
@lines << final_line_string(line, retval)
|
20
|
+
rescue Exception
|
21
|
+
@commands << "# #{line} # butterfly_net: Could not evaluate."
|
22
|
+
@lines << " # #{line} # butterfly_net: Could not evaluate."
|
23
|
+
end
|
24
|
+
end
|
25
|
+
self
|
13
26
|
end
|
14
27
|
|
15
28
|
def empty?
|
@@ -25,57 +38,12 @@ module ButterflyNet
|
|
25
38
|
line =~ /require\s*['|"]\w+['|"]|[^=<>!*%\/+-\\|&]=[^=~]/
|
26
39
|
end
|
27
40
|
|
28
|
-
def self.start_def?(line) # todo: extract to line class
|
29
|
-
line =~ /^\s*def\s+|^\s*class\s+|^\s*module\s+/
|
30
|
-
end
|
31
|
-
|
32
|
-
def self.end_def?(line) # todo: extract to line class
|
33
|
-
line =~ /end\s*$/
|
34
|
-
end
|
35
|
-
|
36
41
|
def text
|
37
|
-
|
38
|
-
|
39
|
-
lines_string = ""
|
40
|
-
nesting_level = 0
|
41
|
-
@commands.each_with_index do |current_line, i|
|
42
|
-
if TestUnitMethod.start_def?(current_line) and TestUnitMethod.end_def?(current_line)
|
43
|
-
before_test_method += " #{(" " * nesting_level)}#{current_line}\n\n"
|
44
|
-
elsif TestUnitMethod.start_def?(current_line)
|
45
|
-
nesting_level += 1
|
46
|
-
before_test_method += "#{(" " * nesting_level)}#{current_line}\n"
|
47
|
-
elsif TestUnitMethod.end_def?(current_line)
|
48
|
-
nesting_level -= 1
|
49
|
-
before_test_method += " #{(" " * nesting_level)}#{current_line}\n#{ nesting_level == 0 ? "\n" : ""}"
|
50
|
-
elsif nesting_level == 0
|
51
|
-
text = assertion(i)
|
52
|
-
lines_string += " #{text}\n" if text
|
53
|
-
else
|
54
|
-
before_test_method += " #{(" " * nesting_level)}#{current_line}\n"
|
55
|
-
end
|
56
|
-
end
|
57
|
-
before_test_method += " "
|
58
|
-
lines_string.empty? ? nil : "#{before_test_method}def #{@name}\n#{lines_string} end\n\n"
|
42
|
+
lines_string = @lines.inject("") {|result, e| result += " #{e}\n" if e; result}
|
43
|
+
lines_string.empty? ? nil : "#{@definitions.to_s} def #{@name}\n#{lines_string} end\n\n"
|
59
44
|
end
|
60
45
|
|
61
|
-
def
|
62
|
-
|
63
|
-
current_line = @commands[current_i]
|
64
|
-
commands = current_line
|
65
|
-
start_i = current_i
|
66
|
-
|
67
|
-
begin
|
68
|
-
retval = eval commands
|
69
|
-
rescue Exception
|
70
|
-
start_i -= 1
|
71
|
-
commands = @commands[start_i..current_i].join("\n")
|
72
|
-
|
73
|
-
if start_i < 0
|
74
|
-
return nil # give up, can't go further back
|
75
|
-
else
|
76
|
-
retry
|
77
|
-
end
|
78
|
-
end
|
46
|
+
def final_line_string(current_line, retval)
|
79
47
|
if TestUnitMethod.assignment_or_require?(current_line)
|
80
48
|
current_line
|
81
49
|
elsif instances_equal_by_value?(retval) # expression result supports value equality
|
@@ -87,13 +55,10 @@ module ButterflyNet
|
|
87
55
|
else
|
88
56
|
"assert_equal(#{retval.inspect}, #{current_line})"
|
89
57
|
end
|
90
|
-
|
91
58
|
else
|
92
|
-
|
93
59
|
# any other sort of object is handled as a not equal assertion
|
94
|
-
"
|
60
|
+
"assert_not_nil(#{current_line})" # todo assert_not_nil in some cases?
|
95
61
|
end
|
96
|
-
|
97
62
|
end
|
98
63
|
|
99
64
|
def instances_equal_by_value?(instance)
|
@@ -102,40 +67,6 @@ module ButterflyNet
|
|
102
67
|
|
103
68
|
private
|
104
69
|
|
105
|
-
# def extract_definitions # work in progress, todo: handle definitions separately, place at top of file
|
106
|
-
# @commands.each_with_index do |current_line, i|
|
107
|
-
# if TestUnitMethod.start_def?(current_line) or TestUnitMethod.end_def?(current_line)
|
108
|
-
# @definitions << current_line
|
109
|
-
# end
|
110
|
-
# end
|
111
|
-
# end
|
112
|
-
|
113
|
-
def purge_bad_commands
|
114
|
-
begin
|
115
|
-
commands = ""
|
116
|
-
index = 0
|
117
|
-
nesting_level = 0
|
118
|
-
@commands.each_with_index do |current_line, i|
|
119
|
-
index = i
|
120
|
-
commands += current_line + "\n"
|
121
|
-
if TestUnitMethod.start_def?(current_line) and TestUnitMethod.end_def?(current_line)
|
122
|
-
#let it ride
|
123
|
-
elsif TestUnitMethod.start_def?(current_line)
|
124
|
-
nesting_level += 1
|
125
|
-
elsif TestUnitMethod.end_def?(current_line)
|
126
|
-
nesting_level -= 1
|
127
|
-
elsif nesting_level == 0
|
128
|
-
eval commands #todo write tests breaking assumption that definitions are valid code, and impl separate eval's for definitions
|
129
|
-
end
|
130
|
-
end
|
131
|
-
nil
|
132
|
-
rescue Exception
|
133
|
-
# delete offender and start again from the beginning
|
134
|
-
@commands.delete_at index # todo: test if string equality is safe for delete()
|
135
|
-
retry
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
70
|
# Adapted from ActiveSupport Inflector
|
140
71
|
def underscore(name)
|
141
72
|
name.to_s.strip.
|
@@ -146,7 +77,5 @@ module ButterflyNet
|
|
146
77
|
downcase
|
147
78
|
end
|
148
79
|
|
149
|
-
|
150
|
-
|
151
80
|
end
|
152
81
|
end
|
data/test/butterfly_net_tests.rb
CHANGED
@@ -0,0 +1,77 @@
|
|
1
|
+
require "test/unit"
|
2
|
+
$: << File.expand_path(File.dirname(__FILE__))
|
3
|
+
$: << File.join(File.expand_path(File.dirname(__FILE__)), File.join("..", "lib"))
|
4
|
+
require "butterfly_net/definitions"
|
5
|
+
|
6
|
+
class DefinitionsTest < Test::Unit::TestCase
|
7
|
+
include ButterflyNet
|
8
|
+
|
9
|
+
def setup
|
10
|
+
@definitions = Definitions.new
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
def test_method_def_true_whitespace
|
15
|
+
assert Definitions.start_def?(" def timestwo(i); i * 2; end ")
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_class_def_true_whitespace
|
19
|
+
assert Definitions.start_def?(" class MyClass; end ")
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_class_def_true_whitespace
|
23
|
+
assert Definitions.start_def?(" module MyModule; end ")
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_method_def_false_variable
|
27
|
+
assert !Definitions.start_def?("definite == true ")
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
def test_start_def_true_inline
|
32
|
+
assert Definitions.start_def?(" def timestwo(i); i * 2; end ")
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_end_def_true_inline
|
36
|
+
assert Definitions.end_def?(" def timestwo(i); i * 2; end ")
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_end_def_true_whitespace
|
40
|
+
assert Definitions.end_def?(" end ")
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_definitions_inline
|
44
|
+
line = "def timestwo(i); i * 2; end"
|
45
|
+
@definitions << line
|
46
|
+
assert @definitions.lines.include?(" def timestwo(i); i * 2; end\n\n")
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_definitions_class_empty
|
50
|
+
line = "class MyClass"
|
51
|
+
line2 = "end"
|
52
|
+
@definitions << line
|
53
|
+
@definitions << line2
|
54
|
+
assert_equal([" class MyClass\n", " end\n\n"], @definitions.lines)
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_to_s_method_inline
|
58
|
+
@definitions << "def timestwo(i); i * 2; end"
|
59
|
+
assert_equal(" def timestwo(i); i * 2; end\n\n", @definitions.to_s)
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_to_s_class_with_method
|
63
|
+
@definitions << "class MyClass"
|
64
|
+
@definitions << "def name"
|
65
|
+
@definitions << "\"classy\""
|
66
|
+
@definitions << "end"
|
67
|
+
@definitions << "end"
|
68
|
+
assert_equal " class MyClass\n def name\n \"classy\"\n end\n end\n\n", @definitions.to_s
|
69
|
+
end
|
70
|
+
|
71
|
+
# todo write tests breaking assumption that definitions are valid code, and impl separate eval's for definitions
|
72
|
+
# def test_text_bad_input_constant
|
73
|
+
# @definitions << "BADCONSTANT"
|
74
|
+
# assert_equal " # BADCONSTANT # NameError: uninitialized constant BADCONSTANT", @definitions.to_s
|
75
|
+
# end
|
76
|
+
|
77
|
+
end
|
data/test/test_case_test.rb
CHANGED
@@ -2,6 +2,7 @@ require "test/unit"
|
|
2
2
|
$: << File.expand_path(File.dirname(__FILE__))
|
3
3
|
$: << File.join(File.expand_path(File.dirname(__FILE__)), File.join("..", "lib"))
|
4
4
|
require "butterfly_net/file_writer"
|
5
|
+
require "butterfly_net/definitions"
|
5
6
|
require "butterfly_net/test_unit_method"
|
6
7
|
require "butterfly_net/test_unit_adapter"
|
7
8
|
require "butterfly_net/rails_test_unit_adapter"
|
@@ -105,7 +106,7 @@ class TestCaseTest < Test::Unit::TestCase
|
|
105
106
|
def test_test_methods_bad_input
|
106
107
|
@adapter.add_command("BADCOMMAND")
|
107
108
|
@adapter.close_assertion_set
|
108
|
-
|
109
|
+
assert_equal " def test_1\n # BADCOMMAND # butterfly_net: Could not evaluate.\n end\n\n", @adapter.test_methods.first
|
109
110
|
end
|
110
111
|
|
111
112
|
def test_create_file
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require "test/unit"
|
2
2
|
$: << File.expand_path(File.dirname(__FILE__))
|
3
3
|
$: << File.join(File.expand_path(File.dirname(__FILE__)), File.join("..", "lib"))
|
4
|
+
require "butterfly_net/definitions"
|
4
5
|
require "butterfly_net/test_unit_method"
|
5
6
|
|
6
7
|
class TestUnitMethodTest < Test::Unit::TestCase
|
@@ -111,35 +112,6 @@ class TestUnitMethodTest < Test::Unit::TestCase
|
|
111
112
|
assert !TestUnitMethod.assignment_or_require?("a *= 1")
|
112
113
|
end
|
113
114
|
|
114
|
-
def test_method_def_true_whitespace
|
115
|
-
assert TestUnitMethod.start_def?(" def timestwo(i); i * 2; end ")
|
116
|
-
end
|
117
|
-
|
118
|
-
def test_class_def_true_whitespace
|
119
|
-
assert TestUnitMethod.start_def?(" class MyClass; end ")
|
120
|
-
end
|
121
|
-
|
122
|
-
def test_class_def_true_whitespace
|
123
|
-
assert TestUnitMethod.start_def?(" module MyModule; end ")
|
124
|
-
end
|
125
|
-
|
126
|
-
def test_method_def_false_variable
|
127
|
-
assert !TestUnitMethod.start_def?("definite == true ")
|
128
|
-
end
|
129
|
-
|
130
|
-
|
131
|
-
def test_start_def_true_inline
|
132
|
-
assert TestUnitMethod.start_def?(" def timestwo(i); i * 2; end ")
|
133
|
-
end
|
134
|
-
|
135
|
-
def test_end_def_true_inline
|
136
|
-
assert TestUnitMethod.end_def?(" def timestwo(i); i * 2; end ")
|
137
|
-
end
|
138
|
-
|
139
|
-
def test_end_def_true_whitespace
|
140
|
-
assert TestUnitMethod.end_def?(" end ")
|
141
|
-
end
|
142
|
-
|
143
115
|
def test_name_uppercase
|
144
116
|
@method.name = "MYMETHOD"
|
145
117
|
assert_equal("test_mymethod", @method.name)
|
@@ -172,7 +144,7 @@ class TestUnitMethodTest < Test::Unit::TestCase
|
|
172
144
|
|
173
145
|
|
174
146
|
|
175
|
-
# def
|
147
|
+
# def test_text_split_expressions_into_lines todo
|
176
148
|
# @method << "a = 1; a + 1"
|
177
149
|
# assert_equal "def test_1\n a = 1\n assert_equal(2, a + 1)\n end", @method.text
|
178
150
|
# end
|
@@ -181,14 +153,14 @@ class TestUnitMethodTest < Test::Unit::TestCase
|
|
181
153
|
@method << "a = 1"
|
182
154
|
@method << "2b" # syntax error, unexpected tIDENTIFIER, expecting $end
|
183
155
|
@method << "a += 1"
|
184
|
-
assert_equal " def test_1\n a = 1\n assert_equal(2, a += 1)\n end\n\n", @method.text
|
156
|
+
assert_equal " def test_1\n a = 1\n # 2b # butterfly_net: Could not evaluate.\n assert_equal(2, a += 1)\n end\n\n", @method.text
|
185
157
|
end
|
186
158
|
|
187
159
|
def test_purge_unexpected_identifiers
|
188
160
|
@method << "a += 1" # undefined method `+' for nil:NilClass
|
189
161
|
@method << "a = 1"
|
190
162
|
@method << "a += 1"
|
191
|
-
assert_equal " def test_1\n a = 1\n assert_equal(2, a += 1)\n end\n\n", @method.text
|
163
|
+
assert_equal " def test_1\n # a += 1 # butterfly_net: Could not evaluate.\n a = 1\n assert_equal(2, a += 1)\n end\n\n", @method.text
|
192
164
|
end
|
193
165
|
|
194
166
|
def test_text_require
|
@@ -201,68 +173,68 @@ class TestUnitMethodTest < Test::Unit::TestCase
|
|
201
173
|
def test_expected_boolean
|
202
174
|
line = "1 == 1"
|
203
175
|
@method << line
|
204
|
-
assert_equal("assert(#{line})", @method.
|
176
|
+
assert_equal("assert(#{line})", @method.lines[0])
|
205
177
|
end
|
206
178
|
|
207
179
|
def test_assertion_fixnum
|
208
180
|
line = "1"
|
209
181
|
@method << line
|
210
|
-
assert_equal("assert_equal(#{line}, #{line})", @method.
|
182
|
+
assert_equal("assert_equal(#{line}, #{line})", @method.lines[0])
|
211
183
|
end
|
212
184
|
|
213
185
|
def test_assertion_boolean_false
|
214
186
|
line = "1 != 1"
|
215
187
|
@method << line
|
216
|
-
assert_equal("assert_equal(false, #{line})", @method.
|
188
|
+
assert_equal("assert_equal(false, #{line})", @method.lines[0])
|
217
189
|
end
|
218
190
|
|
219
191
|
def test_array_add
|
220
192
|
@method << "a = []"
|
221
193
|
line2 = "a << \"1\""
|
222
194
|
@method << line2
|
223
|
-
assert_equal("assert_equal([\"1\"], #{line2})", @method.
|
195
|
+
assert_equal("assert_equal([\"1\"], #{line2})", @method.lines[1])
|
224
196
|
end
|
225
197
|
|
226
198
|
def test_butterfly_net
|
227
199
|
@method << "method = TestUnitMethod.new"
|
228
200
|
@method << "method << \"1 + 1\""
|
229
|
-
assert_equal("
|
201
|
+
assert_equal("assert_not_nil(method << \"1 + 1\")", @method.lines[1])
|
230
202
|
end
|
231
203
|
|
232
204
|
def test_assertion_boolean
|
233
205
|
line = "1 == 1"
|
234
206
|
@method << line
|
235
|
-
assert_equal("assert(#{line})", @method.
|
207
|
+
assert_equal("assert(#{line})", @method.lines[0])
|
236
208
|
end
|
237
209
|
|
238
210
|
def test_assertion_string
|
239
211
|
line = "'a' + 'b'"
|
240
212
|
@method << line
|
241
|
-
assert_equal("assert_equal(\"ab\", #{line})", @method.
|
213
|
+
assert_equal("assert_equal(\"ab\", #{line})", @method.lines[0])
|
242
214
|
end
|
243
215
|
|
244
216
|
def test_assertion_nil
|
245
217
|
line = "[].first"
|
246
218
|
@method << line
|
247
|
-
assert_equal("assert_nil(#{line})", @method.
|
219
|
+
assert_equal("assert_nil(#{line})", @method.lines[0])
|
248
220
|
end
|
249
221
|
|
250
222
|
def test_assertion_boolean
|
251
223
|
line = "1 == 1"
|
252
224
|
@method << line
|
253
|
-
assert_equal("assert(#{line})", @method.
|
225
|
+
assert_equal("assert(#{line})", @method.lines[0])
|
254
226
|
end
|
255
227
|
|
256
228
|
def test_assertion_object_not_equal
|
257
229
|
line = "Object.new"
|
258
230
|
@method << line
|
259
|
-
assert_equal("
|
231
|
+
assert_equal("assert_not_nil(#{line})", @method.lines[0])
|
260
232
|
end
|
261
233
|
|
262
234
|
def test_assertion_array
|
263
235
|
line = "([1,2,3])[0..0]"
|
264
236
|
@method << line
|
265
|
-
assert_equal("assert_equal([1], #{line})", @method.
|
237
|
+
assert_equal("assert_equal([1], #{line})", @method.lines[0])
|
266
238
|
end
|
267
239
|
|
268
240
|
def test_text_def_method_single_line
|
@@ -272,10 +244,10 @@ class TestUnitMethodTest < Test::Unit::TestCase
|
|
272
244
|
assert_equal(" def timestwo(i); i * 2; end\n\n def test_1\n assert_equal(4, #{line})\n end\n\n", @method.text)
|
273
245
|
end
|
274
246
|
|
275
|
-
def
|
247
|
+
def test_text_illegal_input
|
276
248
|
line = "badtext"
|
277
249
|
@method << line
|
278
|
-
|
250
|
+
assert_equal " def test_1\n # badtext # butterfly_net: Could not evaluate.\n end\n\n", @method.text
|
279
251
|
end
|
280
252
|
|
281
253
|
def test_text
|
@@ -289,17 +261,17 @@ class TestUnitMethodTest < Test::Unit::TestCase
|
|
289
261
|
assert_equal " def test_1\n #{line}\n end\n\n", @method.text
|
290
262
|
end
|
291
263
|
|
292
|
-
def
|
264
|
+
def test_definitions_class_multiline_empty
|
293
265
|
line = "class MyClass"
|
294
266
|
line2 = "end"
|
295
267
|
line3 = "MyClass.new"
|
296
268
|
@method << line
|
297
269
|
@method << line2
|
298
270
|
@method << line3
|
299
|
-
assert_equal " #{line}\n #{line2}\n\n def test_1\n
|
271
|
+
assert_equal " #{line}\n #{line2}\n\n def test_1\n assert_not_nil(#{line3})\n end\n\n", @method.text
|
300
272
|
end
|
301
273
|
|
302
|
-
def
|
274
|
+
def test_definitions_class_with_method
|
303
275
|
@method << "class MyClass"
|
304
276
|
@method << "def name"
|
305
277
|
@method << "\"classy\""
|
@@ -311,8 +283,11 @@ class TestUnitMethodTest < Test::Unit::TestCase
|
|
311
283
|
|
312
284
|
def test_text_bad_input_constant
|
313
285
|
@method << "BADCONSTANT"
|
314
|
-
|
286
|
+
assert_equal " def test_1\n # BADCONSTANT # butterfly_net: Could not evaluate.\n end\n\n", @method.text
|
315
287
|
end
|
288
|
+
|
289
|
+
|
290
|
+
|
316
291
|
# non-project tests (scratchpad)
|
317
292
|
|
318
293
|
def test_eval_scope
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: butterfly_net
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Smith
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-
|
12
|
+
date: 2010-03-01 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -24,6 +24,7 @@ extra_rdoc_files: []
|
|
24
24
|
files:
|
25
25
|
- README.md
|
26
26
|
- lib/butterfly_net/commands.rb
|
27
|
+
- lib/butterfly_net/definitions.rb
|
27
28
|
- lib/butterfly_net/file_writer.rb
|
28
29
|
- lib/butterfly_net/rails_test_unit_adapter.rb
|
29
30
|
- lib/butterfly_net/readline_reader.rb
|
@@ -32,6 +33,7 @@ files:
|
|
32
33
|
- lib/butterfly_net/test_unit_method.rb
|
33
34
|
- lib/butterfly_net.rb
|
34
35
|
- test/butterfly_net_tests.rb
|
36
|
+
- test/definitions_test.rb
|
35
37
|
- test/test_case_test.rb
|
36
38
|
- test/test_unit_method_test.rb
|
37
39
|
has_rdoc: true
|
@@ -61,6 +63,6 @@ rubyforge_project:
|
|
61
63
|
rubygems_version: 1.3.5
|
62
64
|
signing_key:
|
63
65
|
specification_version: 3
|
64
|
-
summary: IRB and Rails console history captured as Test::Unit tests.
|
66
|
+
summary: IRB and Rails console history captured as Test::Unit tests.
|
65
67
|
test_files:
|
66
68
|
- test/butterfly_net_tests.rb
|