test-unit-ext 0.1.0 → 0.2.0
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/NEWS.en +6 -0
- data/NEWS.ja +6 -0
- data/html/news.html +9 -1
- data/html/news.html.en +9 -1
- data/html/news.html.ja +9 -1
- data/lib/test-unit-ext.rb +2 -0
- data/lib/test-unit-ext/assertions.rb +30 -0
- data/lib/test-unit-ext/diff.rb +375 -83
- data/lib/test-unit-ext/priority.rb +2 -2
- data/lib/test-unit-ext/version.rb +1 -1
- data/lib/test-unit-ext/xml-report.rb +226 -0
- data/test/test_diff.rb +275 -34
- data/test/test_metadata.rb +14 -5
- data/test/test_xml_report.rb +163 -0
- metadata +6 -2
@@ -150,14 +150,14 @@ module Test
|
|
150
150
|
end
|
151
151
|
end
|
152
152
|
|
153
|
-
alias_method :
|
153
|
+
alias_method :run_without_priority_support, :run
|
154
154
|
def run(*args, &block)
|
155
155
|
priority_mode = @@priority_mode
|
156
156
|
if priority_mode
|
157
157
|
@original_tests = @tests
|
158
158
|
apply_priority
|
159
159
|
end
|
160
|
-
|
160
|
+
run_without_priority_support(*args, &block)
|
161
161
|
ensure
|
162
162
|
@tests = @original_tests if priority_mode
|
163
163
|
end
|
@@ -0,0 +1,226 @@
|
|
1
|
+
require "erb"
|
2
|
+
require "test/unit/failure"
|
3
|
+
require "test/unit/error"
|
4
|
+
require "test/unit/testresult"
|
5
|
+
require "test/unit/testsuite"
|
6
|
+
require "test/unit/autorunner"
|
7
|
+
|
8
|
+
module Test
|
9
|
+
module Unit
|
10
|
+
module XMLReportable
|
11
|
+
include ERB::Util
|
12
|
+
|
13
|
+
def to_xml
|
14
|
+
<<-XML.gsub(/\s*(\n <result>|\n<\/test_log>)/m, "\\1")
|
15
|
+
<test_log>
|
16
|
+
<test_case>
|
17
|
+
<name>#{h(@test.class.name)}</name>
|
18
|
+
<description/>
|
19
|
+
</test_case>
|
20
|
+
<name>#{h(@test.method_name)}</name>
|
21
|
+
<description/>
|
22
|
+
#{metadata_xml}
|
23
|
+
<result>
|
24
|
+
<status>#{h(status_name)}</status>
|
25
|
+
<detail>#{h(message)}</detail>
|
26
|
+
<elapsed>#{h(elapsed_time)}</elapsed>
|
27
|
+
</result>
|
28
|
+
#{backtrace_xml}
|
29
|
+
</test_log>
|
30
|
+
XML
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
def metadata_xml
|
35
|
+
return "" if @test.metadata.empty?
|
36
|
+
item = @test.metadata.collect do |key, value|
|
37
|
+
<<-XML
|
38
|
+
<item>
|
39
|
+
<name>#{h(key)}</name>
|
40
|
+
<value>#{h(value)}</value>
|
41
|
+
</item>
|
42
|
+
XML
|
43
|
+
end
|
44
|
+
" <metadata>\n#{item.join()} </metadata>"
|
45
|
+
end
|
46
|
+
|
47
|
+
def backtrace_xml
|
48
|
+
entries = backtrace_entries_xml
|
49
|
+
if entries.empty?
|
50
|
+
""
|
51
|
+
else
|
52
|
+
<<-XML
|
53
|
+
<backtrace>
|
54
|
+
#{entries.join.rstrip}
|
55
|
+
</backtrace>
|
56
|
+
XML
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def backtrace_entries_xml
|
61
|
+
location.collect do |location|
|
62
|
+
file, line, info = location.split(/:(\d+):/)
|
63
|
+
<<-XML
|
64
|
+
<entry>
|
65
|
+
<file>#{h(file)}</file>
|
66
|
+
<line>#{h(line)}</line>
|
67
|
+
<info>#{h(info.to_s.strip)}</info>
|
68
|
+
</entry>
|
69
|
+
XML
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
class Success
|
75
|
+
include XMLReportable
|
76
|
+
|
77
|
+
attr_reader :test, :elapsed_time
|
78
|
+
def initialize(test, elapsed_time)
|
79
|
+
@test = test
|
80
|
+
@elapsed_time = elapsed_time
|
81
|
+
end
|
82
|
+
|
83
|
+
def message
|
84
|
+
nil
|
85
|
+
end
|
86
|
+
|
87
|
+
def location
|
88
|
+
[]
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_name
|
92
|
+
@test.name
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_case_name
|
96
|
+
/\((.*)\)\z/ =~ test_name
|
97
|
+
$1
|
98
|
+
end
|
99
|
+
|
100
|
+
def status_name
|
101
|
+
"success"
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
class Failure
|
106
|
+
include XMLReportable
|
107
|
+
|
108
|
+
attr_accessor :test, :elapsed_time
|
109
|
+
|
110
|
+
def status_name
|
111
|
+
"failure"
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
class Error
|
116
|
+
include XMLReportable
|
117
|
+
|
118
|
+
attr_accessor :test, :elapsed_time
|
119
|
+
|
120
|
+
def status_name
|
121
|
+
"error"
|
122
|
+
end
|
123
|
+
|
124
|
+
def location
|
125
|
+
filter_backtrace(@exception.backtrace)
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
class TestCase
|
130
|
+
alias_method(:run_without_success_notify, :run)
|
131
|
+
def run(result, &block)
|
132
|
+
@_start_time = Time.now
|
133
|
+
run_result = run_without_success_notify(result, &block)
|
134
|
+
result.add_success(Success.new(self, Time.now - @_start_time)) if passed?
|
135
|
+
run_result
|
136
|
+
end
|
137
|
+
|
138
|
+
alias_method(:add_failure_without_test_case_set, :add_failure)
|
139
|
+
def add_failure(*args)
|
140
|
+
add_failure_without_test_case_set(*args)
|
141
|
+
failure = @_result.failures.last
|
142
|
+
failure.test = self
|
143
|
+
failure.elapsed_time = Time.now - @_start_time
|
144
|
+
end
|
145
|
+
|
146
|
+
alias_method(:add_error_without_test_case_set, :add_error)
|
147
|
+
def add_error(*args)
|
148
|
+
add_error_without_test_case_set(*args)
|
149
|
+
error = @_result.errors.last
|
150
|
+
error.test = self
|
151
|
+
error.elapsed_time = Time.now - @_start_time
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
class TestResult
|
156
|
+
attr_reader :failures, :errors
|
157
|
+
|
158
|
+
alias_method(:initialize_without_successes, :initialize)
|
159
|
+
def initialize
|
160
|
+
initialize_without_successes
|
161
|
+
@successes = []
|
162
|
+
@logs = []
|
163
|
+
end
|
164
|
+
|
165
|
+
def add_success(success)
|
166
|
+
@logs << success
|
167
|
+
@successes << success
|
168
|
+
end
|
169
|
+
|
170
|
+
alias_method(:add_failure_without_logs_store, :add_failure)
|
171
|
+
def add_failure(failure)
|
172
|
+
@logs << failure
|
173
|
+
add_failure_without_logs_store(failure)
|
174
|
+
end
|
175
|
+
|
176
|
+
alias_method(:add_error_without_logs_store, :add_error)
|
177
|
+
def add_error(error)
|
178
|
+
@logs << error
|
179
|
+
add_error_without_logs_store(error)
|
180
|
+
end
|
181
|
+
|
182
|
+
def to_xml
|
183
|
+
return "<test_logs/>" if @logs.empty?
|
184
|
+
xml = @logs.collect {|log| log.to_xml.gsub(/^/, " ")}.join
|
185
|
+
"<test_logs>\n#{xml}</test_logs>\n"
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
class TestSuite
|
190
|
+
attr_reader :result
|
191
|
+
|
192
|
+
alias_method(:run_without_keep_result, :run)
|
193
|
+
def run(result, &block)
|
194
|
+
@result = result
|
195
|
+
run_without_keep_result(result, &block)
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
class AutoRunner
|
200
|
+
alias_method(:options_without_xml_report_support, :options)
|
201
|
+
def options
|
202
|
+
opt = options_without_xml_report_support
|
203
|
+
@xml_report_support_option_added ||= false
|
204
|
+
unless @xml_report_support_option_added
|
205
|
+
@xml_report_file = nil
|
206
|
+
opt.on('--xml-report=FILE',
|
207
|
+
"Output test report in XML to FILE.") do |file|
|
208
|
+
@xml_report_file = file
|
209
|
+
end
|
210
|
+
end
|
211
|
+
opt
|
212
|
+
end
|
213
|
+
|
214
|
+
alias_method(:run_without_xml_report_support, :run)
|
215
|
+
def run
|
216
|
+
passed = run_without_xml_report_support
|
217
|
+
if @xml_report_file
|
218
|
+
File.open(@xml_report_file, "w") do |f|
|
219
|
+
f.print(@suite.result.to_xml)
|
220
|
+
end
|
221
|
+
end
|
222
|
+
passed
|
223
|
+
end
|
224
|
+
end
|
225
|
+
end
|
226
|
+
end
|
data/test/test_diff.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
|
-
require 'test-unit-ext'
|
2
|
-
|
3
1
|
class TestDiff < Test::Unit::TestCase
|
4
2
|
def test_to_indexes
|
5
3
|
assert_to_indexes({"abc def" => [0, 2], "abc" => [1]},
|
6
4
|
["abc def", "abc", "abc def"])
|
5
|
+
|
6
|
+
assert_to_indexes({?a => [0, 3], ?b => [1], ?c => [2], ?d => [4]},
|
7
|
+
"abcad")
|
7
8
|
end
|
8
9
|
|
9
10
|
def test_longest_match
|
@@ -19,46 +20,221 @@ class TestDiff < Test::Unit::TestCase
|
|
19
20
|
assert_longest_match([1, 0, 2],
|
20
21
|
%w(q a b x c d), %w(a b y c d f),
|
21
22
|
0, 5, 0, 5)
|
23
|
+
assert_longest_match([4, 3, 2],
|
24
|
+
%w(q a b x c d), %w(a b y c d f),
|
25
|
+
3, 5, 2, 5)
|
26
|
+
|
27
|
+
assert_longest_match([1, 0, 2], "qabxcd", "abycdf", 0, 5, 0, 5)
|
28
|
+
assert_longest_match([0, 0, 1], "efg", "eg", 0, 2, 0, 1)
|
29
|
+
assert_longest_match([2, 1, 1], "efg", "eg", 1, 2, 1, 1)
|
22
30
|
end
|
23
31
|
|
24
|
-
def
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
32
|
+
def test_longest_match_with_junk_filter
|
33
|
+
assert_longest_match([0, 4, 5], " abcd", "abcd abcd", 0, 4, 0, 8)
|
34
|
+
assert_longest_match([1, 0, 4], " abcd", "abcd abcd", 0, 4, 0, 8) do |x|
|
35
|
+
x == ' '[0]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_blocks
|
40
|
+
assert_blocks([[0, 0, 2],
|
41
|
+
[3, 2, 2],
|
42
|
+
[5, 4, 0]],
|
43
|
+
%w(a b x c d), %w(a b c d))
|
44
|
+
assert_blocks([[1, 0, 2],
|
45
|
+
[4, 3, 2],
|
46
|
+
[6, 6, 0]],
|
47
|
+
%w(q a b x c d), %w(a b y c d f))
|
48
|
+
|
49
|
+
assert_blocks([[1, 0, 2],
|
50
|
+
[4, 3, 2],
|
51
|
+
[6, 6, 0]],
|
52
|
+
"qabxcd", "abycdf")
|
53
|
+
assert_blocks([[0, 0, 1],
|
54
|
+
[2, 1, 1],
|
55
|
+
[3, 2, 0]],
|
56
|
+
"efg", "eg")
|
33
57
|
end
|
34
58
|
|
35
59
|
def test_operations
|
60
|
+
assert_operations([], %w(), %w())
|
61
|
+
|
36
62
|
assert_operations([[:delete, 0, 1, 0, 0],
|
37
63
|
[:equal, 1, 3, 0, 2],
|
38
64
|
[:replace, 3, 4, 2, 3],
|
39
65
|
[:equal, 4, 6, 3, 5],
|
40
66
|
[:insert, 6, 6, 5, 6]],
|
41
67
|
%w(q a b x c d), %w(a b y c d f))
|
68
|
+
|
69
|
+
assert_operations([[:delete, 0, 1, 0, 0],
|
70
|
+
[:equal, 1, 3, 0, 2],
|
71
|
+
[:replace, 3, 4, 2, 3],
|
72
|
+
[:equal, 4, 6, 3, 5],
|
73
|
+
[:insert, 6, 6, 5, 6]],
|
74
|
+
"qabxcd", "abycdf")
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_grouped_operations
|
78
|
+
assert_grouped_operations([[[:equal, 0, 0, 0, 0]]],
|
79
|
+
%w(),
|
80
|
+
%w())
|
81
|
+
|
82
|
+
assert_grouped_operations([[[:equal, 0, 3, 0, 3]]],
|
83
|
+
%w(a b c),
|
84
|
+
%w(a b c))
|
85
|
+
|
86
|
+
assert_grouped_operations([[[:equal, 0, 1, 0, 1],
|
87
|
+
[:replace, 1, 2, 1, 2],
|
88
|
+
[:equal, 2, 5, 2, 5]],
|
89
|
+
[[:equal, 8, 11, 8, 11],
|
90
|
+
[:replace, 11, 12, 11, 12],
|
91
|
+
[:equal, 12, 13, 12, 13],
|
92
|
+
[:delete, 13, 16, 13, 13],
|
93
|
+
[:equal, 16, 17, 13, 14],
|
94
|
+
[:replace, 17, 18, 14, 15],
|
95
|
+
[:equal, 18, 20, 15, 17]]],
|
96
|
+
%w(1 2 3 4 5 6 7 8 9 a b c d e f g h i j k),
|
97
|
+
%w(1 i 3 4 5 6 7 8 9 a b cX d h iX j k))
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_ratio
|
101
|
+
assert_ratio(0.75, "abcd", "bcde")
|
102
|
+
assert_ratio(0.80, "efg", "eg")
|
103
|
+
end
|
104
|
+
|
105
|
+
def test_same_contents_readable_diff
|
106
|
+
assert_readable_diff(" aaa", ["aaa"], ["aaa"])
|
107
|
+
assert_readable_diff(" aaa\n" \
|
108
|
+
" bbb",
|
109
|
+
["aaa", "bbb"], ["aaa", "bbb"])
|
110
|
+
end
|
111
|
+
|
112
|
+
def test_deleted_readable_diff
|
113
|
+
assert_readable_diff(" aaa\n" \
|
114
|
+
"- bbb",
|
115
|
+
["aaa", "bbb"], ["aaa"])
|
116
|
+
assert_readable_diff(" aaa\n" \
|
117
|
+
"- bbb\n" \
|
118
|
+
"- ccc\n" \
|
119
|
+
"- ddd",
|
120
|
+
["aaa", "bbb", "ccc", "ddd"], ["aaa"])
|
121
|
+
end
|
122
|
+
|
123
|
+
def test_inserted_readable_diff
|
124
|
+
assert_readable_diff(" aaa\n" \
|
125
|
+
"+ bbb\n" \
|
126
|
+
"+ ccc\n" \
|
127
|
+
"+ ddd",
|
128
|
+
["aaa"], ["aaa", "bbb", "ccc", "ddd"])
|
129
|
+
end
|
130
|
+
|
131
|
+
def test_replace_readable_diff
|
132
|
+
assert_readable_diff(" aaa\n" \
|
133
|
+
"- bbb\n" \
|
134
|
+
"+ BbB\n" \
|
135
|
+
" ccc\n" \
|
136
|
+
"- ddd\n" \
|
137
|
+
"- efg\n" \
|
138
|
+
"? -\n" \
|
139
|
+
"+ eg",
|
140
|
+
["aaa", "bbb", "ccc", "ddd", "efg"],
|
141
|
+
["aaa", "BbB", "ccc", "eg"])
|
142
|
+
|
143
|
+
assert_readable_diff("- abcd xyz abc\n" \
|
144
|
+
"? -\n" \
|
145
|
+
"+ abcd abcd xyz abc\n" \
|
146
|
+
"? +++++",
|
147
|
+
[" abcd xyz abc"],
|
148
|
+
["abcd abcd xyz abc"])
|
149
|
+
end
|
150
|
+
|
151
|
+
def test_complex_readable_diff
|
152
|
+
assert_readable_diff(" aaa\n" \
|
153
|
+
"- bbb\n" \
|
154
|
+
"- ccc\n" \
|
155
|
+
"+ \n" \
|
156
|
+
"+ # \n" \
|
157
|
+
" ddd",
|
158
|
+
["aaa", "bbb", "ccc", "ddd"],
|
159
|
+
["aaa", "", " # ", "ddd"])
|
160
|
+
|
161
|
+
assert_readable_diff("- one1\n" \
|
162
|
+
"? ^\n" \
|
163
|
+
"+ ore1\n" \
|
164
|
+
"? ^\n" \
|
165
|
+
"- two2\n" \
|
166
|
+
"- three3\n" \
|
167
|
+
"? - -\n" \
|
168
|
+
"+ tree\n" \
|
169
|
+
"+ emu",
|
170
|
+
["one1", "two2", "three3"],
|
171
|
+
["ore1", "tree", "emu"])
|
172
|
+
end
|
173
|
+
|
174
|
+
def test_unified_diff
|
175
|
+
assert_unified_diff("",
|
176
|
+
["one", "two", "three"],
|
177
|
+
["one", "two", "three"],
|
178
|
+
"content 1",
|
179
|
+
"content 2")
|
180
|
+
|
181
|
+
assert_unified_diff("--- Original Sat Jan 26 23:30:50 1991\n" \
|
182
|
+
"+++ Current Fri Jun 06 10:20:52 2003\n" \
|
183
|
+
"@@ -1,4 +1,4 @@\n" \
|
184
|
+
"+zero\n" \
|
185
|
+
" one\n" \
|
186
|
+
"-two\n" \
|
187
|
+
"-three\n" \
|
188
|
+
"+tree\n" \
|
189
|
+
" four",
|
190
|
+
["one", "two", "three", "four"],
|
191
|
+
["zero", "one", "tree", "four"],
|
192
|
+
"Original Sat Jan 26 23:30:50 1991",
|
193
|
+
"Current Fri Jun 06 10:20:52 2003",
|
194
|
+
:show_context => false)
|
195
|
+
|
196
|
+
from = File.read(__FILE__).split(/\n/)
|
197
|
+
to = from.dup
|
198
|
+
target_line = __LINE__
|
199
|
+
to[target_line - 1, 1] = []
|
200
|
+
context = " def test_unified_diff"
|
201
|
+
summary = "@@ -#{target_line - 3},7 +#{target_line - 3},6 @@ #{context}"
|
202
|
+
assert_unified_diff((["--- revision 10",
|
203
|
+
"+++ revision 11",
|
204
|
+
summary] +
|
205
|
+
from[target_line - 4, 3].collect {|line| " #{line}"} +
|
206
|
+
["-#{from[target_line - 1]}"] +
|
207
|
+
from[target_line, 3].collect {|line| " #{line}"}
|
208
|
+
).join("\n"),
|
209
|
+
from, to,
|
210
|
+
"revision 10",
|
211
|
+
"revision 11")
|
42
212
|
end
|
43
213
|
|
44
|
-
def
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
214
|
+
def test_diff_lines
|
215
|
+
assert_diff_lines(["- ddd",
|
216
|
+
"- efg",
|
217
|
+
"? -",
|
218
|
+
"+ eg"],
|
219
|
+
["aaa", "bbb", "ccc", "ddd", "efg"],
|
220
|
+
["aaa", "BbB", "ccc", "eg"],
|
221
|
+
3, 5, 3, 4)
|
49
222
|
end
|
50
223
|
|
51
|
-
def
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
224
|
+
def test_diff_line
|
225
|
+
assert_diff_line(["- abcDefghiJkl",
|
226
|
+
"? ^ ^ ^",
|
227
|
+
"+ abcdefGhijkl",
|
228
|
+
"? ^ ^ ^"],
|
229
|
+
"abcDefghiJkl",
|
230
|
+
"abcdefGhijkl")
|
231
|
+
|
232
|
+
assert_diff_line(["- bcDefghiJklx",
|
233
|
+
"? ^ ^ ^ -",
|
234
|
+
"+ abcdefGhijkl",
|
235
|
+
"? + ^ ^ ^"],
|
236
|
+
"bcDefghiJklx",
|
237
|
+
"abcdefGhijkl")
|
62
238
|
end
|
63
239
|
|
64
240
|
def test_format_diff_point
|
@@ -70,6 +246,33 @@ class TestDiff < Test::Unit::TestCase
|
|
70
246
|
"\t\tabcdefGhijkl",
|
71
247
|
" ^ ^ ^ ",
|
72
248
|
"+ ^ ^ ^ ")
|
249
|
+
assert_format_diff_point(["- efg",
|
250
|
+
"? ^",
|
251
|
+
"+ eg"],
|
252
|
+
"efg",
|
253
|
+
"eg",
|
254
|
+
" ^",
|
255
|
+
"")
|
256
|
+
end
|
257
|
+
|
258
|
+
def test_interesting_line
|
259
|
+
from = ["class X",
|
260
|
+
" def find(x=0)",
|
261
|
+
" body",
|
262
|
+
" end",
|
263
|
+
"end"]
|
264
|
+
to = ["def xxx",
|
265
|
+
" raise 'not call me'",
|
266
|
+
"end"]
|
267
|
+
assert_interesting_line(" def find(x=0)",
|
268
|
+
from, to,
|
269
|
+
2, 1)
|
270
|
+
assert_interesting_line("def xxx",
|
271
|
+
from, to,
|
272
|
+
2, 0)
|
273
|
+
assert_interesting_line("class X",
|
274
|
+
from, to,
|
275
|
+
0, 0)
|
73
276
|
end
|
74
277
|
|
75
278
|
private
|
@@ -80,15 +283,15 @@ class TestDiff < Test::Unit::TestCase
|
|
80
283
|
|
81
284
|
def assert_longest_match(expected, from, to,
|
82
285
|
from_start, from_end,
|
83
|
-
to_start, to_end)
|
84
|
-
matcher = Test::Diff::SequenceMatcher.new(from, to)
|
286
|
+
to_start, to_end, &junk_predicate)
|
287
|
+
matcher = Test::Diff::SequenceMatcher.new(from, to, &junk_predicate)
|
85
288
|
assert_equal(expected, matcher.longest_match(from_start, from_end,
|
86
289
|
to_start, to_end))
|
87
290
|
end
|
88
291
|
|
89
|
-
def
|
292
|
+
def assert_blocks(expected, from, to)
|
90
293
|
matcher = Test::Diff::SequenceMatcher.new(from, to)
|
91
|
-
assert_equal(expected, matcher.
|
294
|
+
assert_equal(expected, matcher.blocks)
|
92
295
|
end
|
93
296
|
|
94
297
|
def assert_operations(expected, from, to)
|
@@ -96,14 +299,52 @@ class TestDiff < Test::Unit::TestCase
|
|
96
299
|
assert_equal(expected, matcher.operations)
|
97
300
|
end
|
98
301
|
|
99
|
-
def
|
100
|
-
|
302
|
+
def assert_grouped_operations(expected, from, to)
|
303
|
+
matcher = Test::Diff::SequenceMatcher.new(from, to)
|
304
|
+
assert_equal(expected, matcher.grouped_operations)
|
305
|
+
end
|
306
|
+
|
307
|
+
def assert_ratio(expected, from, to)
|
308
|
+
matcher = Test::Diff::SequenceMatcher.new(from, to)
|
309
|
+
assert_in_delta(expected, 0.001, matcher.ratio)
|
310
|
+
end
|
311
|
+
|
312
|
+
def assert_readable_diff(expected, from, to)
|
313
|
+
assert_equal(expected, Test::Diff.readable(from.join("\n"), to.join("\n")))
|
314
|
+
end
|
315
|
+
|
316
|
+
def assert_unified_diff(expected, from, to, from_label, to_label, options={})
|
317
|
+
options = options.merge(:from_label => from_label,
|
318
|
+
:to_label => to_label)
|
319
|
+
assert_equal(expected, Test::Diff.unified(from.join("\n"), to.join("\n"),
|
320
|
+
options))
|
321
|
+
end
|
322
|
+
|
323
|
+
def assert_diff_lines(expected, from, to,
|
324
|
+
from_start, from_end,
|
325
|
+
to_start, to_end)
|
326
|
+
differ = Test::Diff::ReadableDiffer.new(from, to)
|
327
|
+
assert_equal(expected, differ.send(:diff_lines,
|
328
|
+
from_start, from_end,
|
329
|
+
to_start, to_end))
|
330
|
+
end
|
331
|
+
|
332
|
+
def assert_diff_line(expected, from_line, to_line)
|
333
|
+
differ = Test::Diff::ReadableDiffer.new([""], [""])
|
334
|
+
assert_equal(expected, differ.send(:diff_line, from_line, to_line))
|
101
335
|
end
|
102
336
|
|
103
337
|
def assert_format_diff_point(expected, from_line, to_line, from_tags, to_tags)
|
104
|
-
differ = Test::Diff::
|
338
|
+
differ = Test::Diff::ReadableDiffer.new([""], [""])
|
105
339
|
assert_equal(expected, differ.send(:format_diff_point,
|
106
340
|
from_line, to_line,
|
107
341
|
from_tags, to_tags))
|
108
342
|
end
|
343
|
+
|
344
|
+
def assert_interesting_line(expected, from, to, from_start, to_start)
|
345
|
+
differ = Test::Diff::UnifiedDiffer.new(from, to)
|
346
|
+
assert_equal(expected, differ.send(:find_interesting_line,
|
347
|
+
from_start, to_start,
|
348
|
+
:define_line?))
|
349
|
+
end
|
109
350
|
end
|