test-unit 1.2.3 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. data/History.txt +27 -0
  2. data/Manifest.txt +30 -8
  3. data/README.txt +9 -4
  4. data/Rakefile +16 -1
  5. data/bin/testrb +0 -0
  6. data/lib/test/unit/assertions.rb +148 -48
  7. data/lib/test/unit/attribute.rb +125 -0
  8. data/lib/test/unit/autorunner.rb +101 -71
  9. data/lib/test/unit/collector/descendant.rb +23 -0
  10. data/lib/test/unit/collector/dir.rb +1 -1
  11. data/lib/test/unit/collector/load.rb +135 -0
  12. data/lib/test/unit/color.rb +61 -0
  13. data/lib/test/unit/diff.rb +524 -0
  14. data/lib/test/unit/error.rb +70 -2
  15. data/lib/test/unit/exceptionhandler.rb +39 -0
  16. data/lib/test/unit/failure.rb +63 -4
  17. data/lib/test/unit/fixture.rb +185 -0
  18. data/lib/test/unit/notification.rb +125 -0
  19. data/lib/test/unit/omission.rb +143 -0
  20. data/lib/test/unit/pending.rb +146 -0
  21. data/lib/test/unit/priority.rb +146 -0
  22. data/lib/test/unit/runner/console.rb +46 -0
  23. data/lib/test/unit/runner/emacs.rb +8 -0
  24. data/lib/test/unit/testcase.rb +193 -76
  25. data/lib/test/unit/testresult.rb +37 -28
  26. data/lib/test/unit/testsuite.rb +35 -1
  27. data/lib/test/unit/ui/console/outputlevel.rb +14 -0
  28. data/lib/test/unit/ui/console/testrunner.rb +96 -28
  29. data/lib/test/unit/ui/emacs/testrunner.rb +49 -0
  30. data/lib/test/unit/ui/testrunner.rb +20 -0
  31. data/lib/test/unit/ui/testrunnermediator.rb +28 -19
  32. data/lib/test/unit/ui/testrunnerutilities.rb +2 -7
  33. data/lib/test/unit/util/backtracefilter.rb +2 -1
  34. data/lib/test/unit/version.rb +1 -1
  35. data/test/collector/test_descendant.rb +135 -0
  36. data/test/collector/test_load.rb +333 -0
  37. data/test/run-test.rb +13 -0
  38. data/test/test_assertions.rb +221 -56
  39. data/test/test_attribute.rb +86 -0
  40. data/test/test_color.rb +37 -0
  41. data/test/test_diff.rb +477 -0
  42. data/test/test_emacs_runner.rb +60 -0
  43. data/test/test_fixture.rb +275 -0
  44. data/test/test_notification.rb +33 -0
  45. data/test/test_omission.rb +81 -0
  46. data/test/test_pending.rb +70 -0
  47. data/test/test_priority.rb +89 -0
  48. data/test/test_testcase.rb +160 -5
  49. data/test/test_testresult.rb +61 -52
  50. data/test/testunit_test_util.rb +14 -0
  51. data/test/ui/test_testrunmediator.rb +20 -0
  52. metadata +53 -23
  53. data/lib/test/unit/ui/fox/testrunner.rb +0 -268
  54. data/lib/test/unit/ui/gtk/testrunner.rb +0 -416
  55. data/lib/test/unit/ui/gtk2/testrunner.rb +0 -465
  56. data/lib/test/unit/ui/tk/testrunner.rb +0 -260
  57. data/test/runit/test_assert.rb +0 -402
  58. data/test/runit/test_testcase.rb +0 -91
  59. data/test/runit/test_testresult.rb +0 -144
  60. data/test/runit/test_testsuite.rb +0 -49
@@ -0,0 +1,37 @@
1
+ class TestUnitColor < Test::Unit::TestCase
2
+ def test_color_escape_sequence
3
+ assert_escape_sequence(["31"], color("red"))
4
+ assert_escape_sequence(["32", "1"], color("green", :bold => true))
5
+ assert_escape_sequence(["0"], color("reset"))
6
+ assert_escape_sequence(["45"], color("magenta", :foreground => false))
7
+ end
8
+
9
+ def test_mix_color_escape_sequence
10
+ assert_escape_sequence(["34", "1"],
11
+ mix_color([color("blue"),
12
+ color("none", :bold => true)]))
13
+ assert_escape_sequence(["34", "1", "4"],
14
+ mix_color([color("blue"),
15
+ color("none", :bold => true)]) +
16
+ color("none", :underline => true))
17
+ assert_escape_sequence(["34", "1", "4"],
18
+ color("blue") +
19
+ color("none", :bold => true) +
20
+ color("none", :underline => true))
21
+ end
22
+
23
+ private
24
+ def color(name, options={})
25
+ Test::Unit::Color.new(name, options)
26
+ end
27
+
28
+ def mix_color(colors)
29
+ Test::Unit::MixColor.new(colors)
30
+ end
31
+
32
+ def assert_escape_sequence(expected, color)
33
+ assert_equal(expected, color.sequence)
34
+ assert_match(/\e\[(?:\d+;)*\d+m/, color.escape_sequence)
35
+ assert_equal(expected, color.escape_sequence[2..-2].split(";"))
36
+ end
37
+ end
@@ -0,0 +1,477 @@
1
+ class TestUnitDiff < Test::Unit::TestCase
2
+ def test_to_indexes
3
+ assert_to_indexes({"abc def" => [0, 2], "abc" => [1]},
4
+ ["abc def", "abc", "abc def"])
5
+
6
+ assert_to_indexes({?a => [0, 3], ?b => [1], ?c => [2], ?d => [4]},
7
+ "abcad")
8
+
9
+ assert_to_indexes({
10
+ ?1 => [0, 35],
11
+ ?t => [2, 5, 16],
12
+ ?e => [3, 14, 31, 38],
13
+ ?s => [4, 6, 12, 13, 20, 32, 44],
14
+ ?, => [7, 21, 33],
15
+ ?0 => [9, 23],
16
+ ?a => [11, 26],
17
+ ?r => [15, 30],
18
+ ?i => [17, 27, 41],
19
+ ?o => [18],
20
+ ?n => [19, 39, 42],
21
+ ?f => [25],
22
+ ?l => [28],
23
+ ?u => [29],
24
+ ?p => [37],
25
+ ?d => [40],
26
+ ?g => [43],
27
+ },
28
+ "1 tests, 0 assertions, 0 failures, 1 pendings") do |x|
29
+ x == " "[0]
30
+ end
31
+ end
32
+
33
+ def test_longest_match
34
+ assert_longest_match([0, 1, 3],
35
+ %w(b c d), %w(a b c d x y z),
36
+ 0, 2, 0, 7)
37
+ assert_longest_match([1, 2, 2],
38
+ %w(b c d), %w(a b c d x y z),
39
+ 1, 2, 0, 6)
40
+ assert_longest_match([0, 0, 0],
41
+ %w(a b), %w(c),
42
+ 0, 1, 0, 0)
43
+ assert_longest_match([1, 0, 2],
44
+ %w(q a b x c d), %w(a b y c d f),
45
+ 0, 5, 0, 5)
46
+ assert_longest_match([4, 3, 2],
47
+ %w(q a b x c d), %w(a b y c d f),
48
+ 3, 5, 2, 5)
49
+
50
+ assert_longest_match([1, 0, 2], "qabxcd", "abycdf", 0, 5, 0, 5)
51
+ assert_longest_match([0, 0, 1], "efg", "eg", 0, 2, 0, 1)
52
+ assert_longest_match([2, 1, 1], "efg", "eg", 1, 2, 1, 1)
53
+ end
54
+
55
+ def test_longest_match_with_junk_predicate
56
+ assert_longest_match([0, 4, 5], " abcd", "abcd abcd", 0, 4, 0, 8)
57
+ assert_longest_match([1, 0, 4], " abcd", "abcd abcd", 0, 4, 0, 8) do |x|
58
+ x == ' '[0]
59
+ end
60
+ end
61
+
62
+ def test_matches
63
+ assert_matches([[0, 0, 2],
64
+ [3, 2, 2]],
65
+ %w(a b x c d), %w(a b c d))
66
+ assert_matches([[1, 0, 2],
67
+ [4, 3, 2]],
68
+ %w(q a b x c d), %w(a b y c d f))
69
+
70
+ assert_matches([[1, 0, 2],
71
+ [4, 3, 2]],
72
+ "qabxcd", "abycdf")
73
+ assert_matches([[0, 0, 1],
74
+ [2, 1, 1]],
75
+ "efg", "eg")
76
+ end
77
+
78
+ def test_matches_with_junk_predicate
79
+ assert_matches([[0, 0, 23],
80
+ [24, 24, 11],
81
+ [36, 36, 9]],
82
+ "1 tests, 0 assertions, 1 failures, 0 pendings",
83
+ "1 tests, 0 assertions, 0 failures, 1 pendings")
84
+
85
+ assert_matches([[0, 0, 1],
86
+ [1, 1, 8],
87
+ [9, 9, 1],
88
+ [10, 10, 13],
89
+ [24, 24, 11],
90
+ [36, 36, 9]],
91
+ "1 tests, 0 assertions, 1 failures, 0 pendings",
92
+ "1 tests, 0 assertions, 0 failures, 1 pendings") do |x|
93
+ x == " "[0]
94
+ end
95
+ end
96
+
97
+ def test_blocks
98
+ assert_blocks([[0, 0, 2],
99
+ [3, 2, 2],
100
+ [5, 4, 0]],
101
+ %w(a b x c d), %w(a b c d))
102
+ assert_blocks([[1, 0, 2],
103
+ [4, 3, 2],
104
+ [6, 6, 0]],
105
+ %w(q a b x c d), %w(a b y c d f))
106
+
107
+ assert_blocks([[1, 0, 2],
108
+ [4, 3, 2],
109
+ [6, 6, 0]],
110
+ "qabxcd", "abycdf")
111
+ assert_blocks([[0, 0, 1],
112
+ [2, 1, 1],
113
+ [3, 2, 0]],
114
+ "efg", "eg")
115
+ end
116
+
117
+ def test_blocks_with_junk_predicate
118
+ assert_blocks([[0, 0, 23],
119
+ [24, 24, 11],
120
+ [36, 36, 9],
121
+ [45, 45, 0]],
122
+ "1 tests, 0 assertions, 1 failures, 0 pendings",
123
+ "1 tests, 0 assertions, 0 failures, 1 pendings") do |x|
124
+ x == " "[0]
125
+ end
126
+ end
127
+
128
+ def test_operations
129
+ assert_operations([], %w(), %w())
130
+
131
+ assert_operations([[:delete, 0, 1, 0, 0],
132
+ [:equal, 1, 3, 0, 2],
133
+ [:replace, 3, 4, 2, 3],
134
+ [:equal, 4, 6, 3, 5],
135
+ [:insert, 6, 6, 5, 6]],
136
+ %w(q a b x c d), %w(a b y c d f))
137
+
138
+ assert_operations([[:delete, 0, 1, 0, 0],
139
+ [:equal, 1, 3, 0, 2],
140
+ [:replace, 3, 4, 2, 3],
141
+ [:equal, 4, 6, 3, 5],
142
+ [:insert, 6, 6, 5, 6]],
143
+ "qabxcd", "abycdf")
144
+
145
+ assert_operations([[:equal, 0, 23, 0, 23],
146
+ [:replace, 23, 24, 23, 24],
147
+ [:equal, 24, 35, 24, 35],
148
+ [:replace, 35, 36, 35, 36],
149
+ [:equal, 36, 45, 36, 45]],
150
+ "1 tests, 0 assertions, 1 failures, 0 pendings",
151
+ "1 tests, 0 assertions, 0 failures, 1 pendings")
152
+
153
+ assert_operations([[:equal, 0, 23, 0, 23],
154
+ [:replace, 23, 24, 23, 24],
155
+ [:equal, 24, 35, 24, 35],
156
+ [:replace, 35, 36, 35, 36],
157
+ [:equal, 36, 45, 36, 45]],
158
+ "1 tests, 0 assertions, 1 failures, 0 pendings",
159
+ "1 tests, 0 assertions, 0 failures, 1 pendings") do |x|
160
+ x == " "[0]
161
+ end
162
+ end
163
+
164
+ def test_grouped_operations
165
+ assert_grouped_operations([[[:equal, 0, 0, 0, 0]]],
166
+ %w(),
167
+ %w())
168
+
169
+ assert_grouped_operations([[[:equal, 0, 3, 0, 3]]],
170
+ %w(a b c),
171
+ %w(a b c))
172
+
173
+ assert_grouped_operations([[[:equal, 0, 1, 0, 1],
174
+ [:replace, 1, 2, 1, 2],
175
+ [:equal, 2, 5, 2, 5]],
176
+ [[:equal, 8, 11, 8, 11],
177
+ [:replace, 11, 12, 11, 12],
178
+ [:equal, 12, 13, 12, 13],
179
+ [:delete, 13, 16, 13, 13],
180
+ [:equal, 16, 17, 13, 14],
181
+ [:replace, 17, 18, 14, 15],
182
+ [:equal, 18, 20, 15, 17]]],
183
+ %w(1 2 3 4 5 6 7 8 9 a b c d e f g h i j k),
184
+ %w(1 i 3 4 5 6 7 8 9 a b cX d h iX j k))
185
+ end
186
+
187
+ def test_ratio
188
+ assert_ratio(0.75, "abcd", "bcde")
189
+ assert_ratio(0.80, "efg", "eg")
190
+ end
191
+
192
+ def test_same_contents_readable_diff
193
+ assert_readable_diff(" aaa", ["aaa"], ["aaa"])
194
+ assert_readable_diff(" aaa\n" \
195
+ " bbb",
196
+ ["aaa", "bbb"], ["aaa", "bbb"])
197
+ end
198
+
199
+ def test_deleted_readable_diff
200
+ assert_readable_diff(" aaa\n" \
201
+ "- bbb",
202
+ ["aaa", "bbb"], ["aaa"])
203
+ assert_readable_diff(" aaa\n" \
204
+ "- bbb\n" \
205
+ "- ccc\n" \
206
+ "- ddd",
207
+ ["aaa", "bbb", "ccc", "ddd"], ["aaa"])
208
+ end
209
+
210
+ def test_inserted_readable_diff
211
+ assert_readable_diff(" aaa\n" \
212
+ "+ bbb\n" \
213
+ "+ ccc\n" \
214
+ "+ ddd",
215
+ ["aaa"], ["aaa", "bbb", "ccc", "ddd"])
216
+ end
217
+
218
+ def test_replace_readable_diff
219
+ assert_readable_diff(" aaa\n" \
220
+ "- bbb\n" \
221
+ "+ BbB\n" \
222
+ " ccc\n" \
223
+ "- ddd\n" \
224
+ "- efg\n" \
225
+ "? -\n" \
226
+ "+ eg",
227
+ ["aaa", "bbb", "ccc", "ddd", "efg"],
228
+ ["aaa", "BbB", "ccc", "eg"])
229
+
230
+ assert_readable_diff("- abcd xyz abc\n" \
231
+ "? -\n" \
232
+ "+ abcd abcd xyz abc\n" \
233
+ "? +++++",
234
+ [" abcd xyz abc"],
235
+ ["abcd abcd xyz abc"])
236
+ end
237
+
238
+ def test_difference_readable_diff
239
+ assert_readable_diff("- 1 tests, 0 assertions, 1 failures, 0 pendings\n" \
240
+ "? ^ ^\n" \
241
+ "+ 1 tests, 0 assertions, 0 failures, 1 pendings\n" \
242
+ "? ^ ^",
243
+ ["1 tests, 0 assertions, 1 failures, 0 pendings"],
244
+ ["1 tests, 0 assertions, 0 failures, 1 pendings"])
245
+ end
246
+
247
+ def test_complex_readable_diff
248
+ assert_readable_diff(" aaa\n" \
249
+ "- bbb\n" \
250
+ "- ccc\n" \
251
+ "+ \n" \
252
+ "+ # \n" \
253
+ " ddd",
254
+ ["aaa", "bbb", "ccc", "ddd"],
255
+ ["aaa", "", " # ", "ddd"])
256
+
257
+ assert_readable_diff("- one1\n" \
258
+ "? ^\n" \
259
+ "+ ore1\n" \
260
+ "? ^\n" \
261
+ "- two2\n" \
262
+ "- three3\n" \
263
+ "? - -\n" \
264
+ "+ tree\n" \
265
+ "+ emu",
266
+ ["one1", "two2", "three3"],
267
+ ["ore1", "tree", "emu"])
268
+ end
269
+
270
+ def test_empty_readable_diff
271
+ assert_readable_diff("", [""], [""])
272
+ end
273
+
274
+ def test_unified_diff
275
+ assert_unified_diff("",
276
+ ["one", "two", "three"],
277
+ ["one", "two", "three"],
278
+ "content 1",
279
+ "content 2")
280
+
281
+ assert_unified_diff("--- Original Sat Jan 26 23:30:50 1991\n" \
282
+ "+++ Current Fri Jun 06 10:20:52 2003\n" \
283
+ "@@ -1,4 +1,4 @@\n" \
284
+ "+zero\n" \
285
+ " one\n" \
286
+ "-two\n" \
287
+ "-three\n" \
288
+ "+tree\n" \
289
+ " four",
290
+ ["one", "two", "three", "four"],
291
+ ["zero", "one", "tree", "four"],
292
+ "Original Sat Jan 26 23:30:50 1991",
293
+ "Current Fri Jun 06 10:20:52 2003",
294
+ :show_context => false)
295
+
296
+ from = File.read(__FILE__).split(/\n/)
297
+ to = from.dup
298
+ target_line = __LINE__
299
+ to[target_line - 1, 1] = []
300
+ context = " def test_unified_diff"
301
+ summary = "@@ -#{target_line - 3},7 +#{target_line - 3},6 @@ #{context}"
302
+ assert_unified_diff((["--- revision 10",
303
+ "+++ revision 11",
304
+ summary] +
305
+ from[target_line - 4, 3].collect {|line| " #{line}"} +
306
+ ["-#{from[target_line - 1]}"] +
307
+ from[target_line, 3].collect {|line| " #{line}"}
308
+ ).join("\n"),
309
+ from, to,
310
+ "revision 10",
311
+ "revision 11")
312
+ end
313
+
314
+ def test_empty_unified_diff
315
+ assert_unified_diff("", [""], [""], "From", "To")
316
+ assert_unified_diff("", [], [], "From", "To")
317
+ end
318
+
319
+ def test_diff_lines
320
+ assert_diff_lines(["- ddd",
321
+ "- efg",
322
+ "? -",
323
+ "+ eg"],
324
+ ["aaa", "bbb", "ccc", "ddd", "efg"],
325
+ ["aaa", "BbB", "ccc", "eg"],
326
+ 3, 5, 3, 4)
327
+ end
328
+
329
+ def test_diff_line
330
+ assert_diff_line(["- abcDefghiJkl",
331
+ "? ^ ^ ^",
332
+ "+ abcdefGhijkl",
333
+ "? ^ ^ ^"],
334
+ "abcDefghiJkl",
335
+ "abcdefGhijkl")
336
+
337
+ assert_diff_line(["- bcDefghiJklx",
338
+ "? ^ ^ ^ -",
339
+ "+ abcdefGhijkl",
340
+ "? + ^ ^ ^"],
341
+ "bcDefghiJklx",
342
+ "abcdefGhijkl")
343
+ end
344
+
345
+ def test_empty_diff_line
346
+ assert_diff_line(["- ",
347
+ "+ "],
348
+ "", "")
349
+ end
350
+
351
+ def test_format_diff_point
352
+ assert_format_diff_point(["- \tabcDefghiJkl",
353
+ "? \t ^ ^ ^",
354
+ "+ \t\tabcdefGhijkl",
355
+ "? \t ^ ^ ^"],
356
+ "\tabcDefghiJkl",
357
+ "\t\tabcdefGhijkl",
358
+ " ^ ^ ^ ",
359
+ "+ ^ ^ ^ ")
360
+ assert_format_diff_point(["- efg",
361
+ "? ^",
362
+ "+ eg"],
363
+ "efg",
364
+ "eg",
365
+ " ^",
366
+ "")
367
+ end
368
+
369
+ def test_interesting_line
370
+ from = ["class X",
371
+ " def find(x=0)",
372
+ " body",
373
+ " end",
374
+ "end"]
375
+ to = ["def xxx",
376
+ " raise 'not call me'",
377
+ "end"]
378
+ assert_interesting_line(" def find(x=0)",
379
+ from, to,
380
+ 2, 1)
381
+ assert_interesting_line("def xxx",
382
+ from, to,
383
+ 2, 0)
384
+ assert_interesting_line("class X",
385
+ from, to,
386
+ 0, 0)
387
+ end
388
+
389
+ private
390
+ def assert_to_indexes(expected, to, &junk_predicate)
391
+ matcher = Test::Unit::Diff::SequenceMatcher.new([""], to, &junk_predicate)
392
+ assert_equal(expected, matcher.instance_variable_get("@to_indexes"))
393
+ end
394
+
395
+ def assert_find_best_match_position(expected, from, to,
396
+ from_start, from_end,
397
+ to_start, to_end, &junk_predicate)
398
+ matcher = Test::Unit::Diff::SequenceMatcher.new(from, to, &junk_predicate)
399
+ assert_equal(expected, matcher.send(:find_best_match_position,
400
+ from_start, from_end,
401
+ to_start, to_end))
402
+ end
403
+
404
+ def assert_longest_match(expected, from, to,
405
+ from_start, from_end,
406
+ to_start, to_end, &junk_predicate)
407
+ matcher = Test::Unit::Diff::SequenceMatcher.new(from, to, &junk_predicate)
408
+ assert_equal(expected, matcher.longest_match(from_start, from_end,
409
+ to_start, to_end))
410
+ end
411
+
412
+ def assert_matches(expected, from, to, &junk_predicate)
413
+ matcher = Test::Unit::Diff::SequenceMatcher.new(from, to, &junk_predicate)
414
+ assert_equal(expected, matcher.send(:matches))
415
+ end
416
+
417
+ def assert_blocks(expected, from, to, &junk_predicate)
418
+ matcher = Test::Unit::Diff::SequenceMatcher.new(from, to, &junk_predicate)
419
+ assert_equal(expected, matcher.blocks)
420
+ end
421
+
422
+ def assert_operations(expected, from, to, &junk_predicate)
423
+ matcher = Test::Unit::Diff::SequenceMatcher.new(from, to, &junk_predicate)
424
+ assert_equal(expected, matcher.operations)
425
+ end
426
+
427
+ def assert_grouped_operations(expected, from, to)
428
+ matcher = Test::Unit::Diff::SequenceMatcher.new(from, to)
429
+ assert_equal(expected, matcher.grouped_operations)
430
+ end
431
+
432
+ def assert_ratio(expected, from, to)
433
+ matcher = Test::Unit::Diff::SequenceMatcher.new(from, to)
434
+ assert_in_delta(expected, 0.001, matcher.ratio)
435
+ end
436
+
437
+ def assert_readable_diff(expected, from, to)
438
+ assert_equal(expected,
439
+ Test::Unit::Diff.readable(from.join("\n"), to.join("\n")))
440
+ end
441
+
442
+ def assert_unified_diff(expected, from, to, from_label, to_label, options={})
443
+ options = options.merge(:from_label => from_label,
444
+ :to_label => to_label)
445
+ assert_equal(expected,
446
+ Test::Unit::Diff.unified(from.join("\n"), to.join("\n"),
447
+ options))
448
+ end
449
+
450
+ def assert_diff_lines(expected, from, to,
451
+ from_start, from_end,
452
+ to_start, to_end)
453
+ differ = Test::Unit::Diff::ReadableDiffer.new(from, to)
454
+ assert_equal(expected, differ.send(:diff_lines,
455
+ from_start, from_end,
456
+ to_start, to_end))
457
+ end
458
+
459
+ def assert_diff_line(expected, from_line, to_line)
460
+ differ = Test::Unit::Diff::ReadableDiffer.new([""], [""])
461
+ assert_equal(expected, differ.send(:diff_line, from_line, to_line))
462
+ end
463
+
464
+ def assert_format_diff_point(expected, from_line, to_line, from_tags, to_tags)
465
+ differ = Test::Unit::Diff::ReadableDiffer.new([""], [""])
466
+ assert_equal(expected, differ.send(:format_diff_point,
467
+ from_line, to_line,
468
+ from_tags, to_tags))
469
+ end
470
+
471
+ def assert_interesting_line(expected, from, to, from_start, to_start)
472
+ differ = Test::Unit::Diff::UnifiedDiffer.new(from, to)
473
+ assert_equal(expected, differ.send(:find_interesting_line,
474
+ from_start, to_start,
475
+ :define_line?))
476
+ end
477
+ end