rroonga 0.9.4-x86-mingw32 → 0.9.5-x86-mingw32

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.
Files changed (153) hide show
  1. data/NEWS.ja.rdoc +29 -0
  2. data/NEWS.rdoc +29 -0
  3. data/Rakefile +6 -6
  4. data/ext/groonga/rb-grn-array.c +1 -1
  5. data/ext/groonga/rb-grn-context.c +15 -28
  6. data/ext/groonga/rb-grn-exception.c +46 -1
  7. data/ext/groonga/rb-grn-expression.c +22 -13
  8. data/ext/groonga/rb-grn-fix-size-column.c +2 -8
  9. data/ext/groonga/rb-grn-hash.c +8 -1
  10. data/ext/groonga/rb-grn-object.c +1 -1
  11. data/ext/groonga/rb-grn-patricia-trie.c +23 -1
  12. data/ext/groonga/rb-grn-table-key-support.c +22 -0
  13. data/ext/groonga/rb-grn-table.c +37 -5
  14. data/ext/groonga/rb-grn-utils.c +20 -2
  15. data/ext/groonga/rb-grn.h +1 -1
  16. data/ext/groonga/rb-groonga.c +76 -38
  17. data/extconf.rb +17 -1
  18. data/html/developer.html +32 -7
  19. data/html/footer.html.erb +5 -0
  20. data/html/heading-mark.svg +393 -0
  21. data/html/index.html +33 -3
  22. data/lib/1.8/groonga.so +0 -0
  23. data/lib/1.9/groonga.so +0 -0
  24. data/lib/groonga.rb +3 -7
  25. data/lib/groonga/context.rb +2 -13
  26. data/lib/groonga/expression-builder.rb +273 -67
  27. data/lib/groonga/pagination.rb +143 -0
  28. data/lib/groonga/record.rb +2 -0
  29. data/lib/groonga/schema.rb +140 -29
  30. data/pkg/rroonga-0.9.5/NEWS.ja.rdoc +156 -0
  31. data/pkg/rroonga-0.9.5/NEWS.rdoc +158 -0
  32. data/pkg/rroonga-0.9.5/README.ja.rdoc +65 -0
  33. data/pkg/rroonga-0.9.5/README.rdoc +66 -0
  34. data/pkg/rroonga-0.9.5/text/TUTORIAL.ja.rdoc +394 -0
  35. data/pkg/rroonga-0.9.5/text/expression.rdoc +285 -0
  36. data/rroonga-build.rb +2 -2
  37. data/test-unit/Rakefile +40 -0
  38. data/test-unit/TODO +5 -0
  39. data/test-unit/bin/testrb +5 -0
  40. data/test-unit/html/classic.html +15 -0
  41. data/test-unit/html/index.html +25 -0
  42. data/test-unit/html/index.html.ja +27 -0
  43. data/test-unit/lib/test/unit.rb +323 -0
  44. data/test-unit/lib/test/unit/assertionfailederror.rb +25 -0
  45. data/test-unit/lib/test/unit/assertions.rb +1230 -0
  46. data/test-unit/lib/test/unit/attribute.rb +125 -0
  47. data/test-unit/lib/test/unit/autorunner.rb +360 -0
  48. data/test-unit/lib/test/unit/collector.rb +36 -0
  49. data/test-unit/lib/test/unit/collector/descendant.rb +23 -0
  50. data/test-unit/lib/test/unit/collector/dir.rb +108 -0
  51. data/test-unit/lib/test/unit/collector/load.rb +144 -0
  52. data/test-unit/lib/test/unit/collector/objectspace.rb +34 -0
  53. data/test-unit/lib/test/unit/color-scheme.rb +102 -0
  54. data/test-unit/lib/test/unit/color.rb +96 -0
  55. data/test-unit/lib/test/unit/diff.rb +724 -0
  56. data/test-unit/lib/test/unit/error.rb +130 -0
  57. data/test-unit/lib/test/unit/exceptionhandler.rb +39 -0
  58. data/test-unit/lib/test/unit/failure.rb +136 -0
  59. data/test-unit/lib/test/unit/fixture.rb +176 -0
  60. data/test-unit/lib/test/unit/notification.rb +129 -0
  61. data/test-unit/lib/test/unit/omission.rb +191 -0
  62. data/test-unit/lib/test/unit/pending.rb +150 -0
  63. data/test-unit/lib/test/unit/priority.rb +180 -0
  64. data/test-unit/lib/test/unit/runner/console.rb +52 -0
  65. data/test-unit/lib/test/unit/runner/emacs.rb +8 -0
  66. data/test-unit/lib/test/unit/runner/tap.rb +8 -0
  67. data/test-unit/lib/test/unit/testcase.rb +476 -0
  68. data/test-unit/lib/test/unit/testresult.rb +89 -0
  69. data/test-unit/lib/test/unit/testsuite.rb +110 -0
  70. data/test-unit/lib/test/unit/ui/console/outputlevel.rb +14 -0
  71. data/test-unit/lib/test/unit/ui/console/testrunner.rb +466 -0
  72. data/test-unit/lib/test/unit/ui/emacs/testrunner.rb +63 -0
  73. data/test-unit/lib/test/unit/ui/tap/testrunner.rb +92 -0
  74. data/test-unit/lib/test/unit/ui/testrunner.rb +28 -0
  75. data/test-unit/lib/test/unit/ui/testrunnermediator.rb +77 -0
  76. data/test-unit/lib/test/unit/ui/testrunnerutilities.rb +41 -0
  77. data/test-unit/lib/test/unit/util/backtracefilter.rb +41 -0
  78. data/test-unit/lib/test/unit/util/method-owner-finder.rb +28 -0
  79. data/test-unit/lib/test/unit/util/observable.rb +90 -0
  80. data/test-unit/lib/test/unit/util/procwrapper.rb +48 -0
  81. data/test-unit/lib/test/unit/version.rb +7 -0
  82. data/test-unit/sample/adder.rb +13 -0
  83. data/test-unit/sample/subtracter.rb +12 -0
  84. data/test-unit/sample/test_adder.rb +20 -0
  85. data/test-unit/sample/test_subtracter.rb +20 -0
  86. data/test-unit/sample/test_user.rb +23 -0
  87. data/test-unit/test/collector/test-descendant.rb +133 -0
  88. data/test-unit/test/collector/test-load.rb +442 -0
  89. data/test-unit/test/collector/test_dir.rb +406 -0
  90. data/test-unit/test/collector/test_objectspace.rb +100 -0
  91. data/test-unit/test/run-test.rb +15 -0
  92. data/test-unit/test/test-attribute.rb +86 -0
  93. data/test-unit/test/test-color-scheme.rb +67 -0
  94. data/test-unit/test/test-color.rb +47 -0
  95. data/test-unit/test/test-diff.rb +518 -0
  96. data/test-unit/test/test-emacs-runner.rb +60 -0
  97. data/test-unit/test/test-fixture.rb +287 -0
  98. data/test-unit/test/test-notification.rb +33 -0
  99. data/test-unit/test/test-omission.rb +81 -0
  100. data/test-unit/test/test-pending.rb +70 -0
  101. data/test-unit/test/test-priority.rb +119 -0
  102. data/test-unit/test/test-testcase.rb +544 -0
  103. data/test-unit/test/test_assertions.rb +1151 -0
  104. data/test-unit/test/test_error.rb +26 -0
  105. data/test-unit/test/test_failure.rb +33 -0
  106. data/test-unit/test/test_testresult.rb +113 -0
  107. data/test-unit/test/test_testsuite.rb +129 -0
  108. data/test-unit/test/testunit-test-util.rb +14 -0
  109. data/test-unit/test/ui/test_testrunmediator.rb +20 -0
  110. data/test-unit/test/util/test-method-owner-finder.rb +38 -0
  111. data/test-unit/test/util/test_backtracefilter.rb +41 -0
  112. data/test-unit/test/util/test_observable.rb +102 -0
  113. data/test-unit/test/util/test_procwrapper.rb +36 -0
  114. data/test/groonga-test-utils.rb +3 -2
  115. data/test/run-test.rb +14 -2
  116. data/test/test-column.rb +7 -7
  117. data/test/test-context-select.rb +34 -11
  118. data/test/test-exception.rb +3 -0
  119. data/test/test-expression-builder.rb +11 -0
  120. data/test/test-expression.rb +3 -6
  121. data/test/test-gqtp.rb +3 -5
  122. data/test/test-pagination.rb +249 -0
  123. data/test/test-record.rb +36 -8
  124. data/test/test-remote.rb +11 -4
  125. data/test/test-schema-create-table.rb +251 -0
  126. data/test/test-schema.rb +4 -24
  127. data/test/test-table-offset-and-limit.rb +3 -5
  128. data/test/test-table-select-mecab.rb +80 -0
  129. data/test/test-table-select-weight.rb +104 -0
  130. data/test/test-table.rb +22 -4
  131. data/test/test-version.rb +1 -1
  132. data/text/TUTORIAL.ja.rdoc +2 -0
  133. data/text/expression.rdoc +1 -0
  134. data/vendor/local/bin/grntest.exe +0 -0
  135. data/vendor/local/bin/groonga.exe +0 -0
  136. data/vendor/local/bin/libgroonga-0.dll +0 -0
  137. data/vendor/local/include/{groonga.h → groonga/groonga.h} +93 -32
  138. data/vendor/local/lib/groonga/modules/functions/cast.dll +0 -0
  139. data/vendor/local/lib/groonga/modules/functions/cast.la +41 -0
  140. data/vendor/local/lib/pkgconfig/groonga.pc +12 -0
  141. data/vendor/local/share/groonga/admin_html/css/admin.css +104 -0
  142. data/vendor/local/share/groonga/admin_html/css/ui-lightness/jquery-ui-1.8.1.custom.css +486 -0
  143. data/vendor/local/share/groonga/admin_html/index.html +1355 -0
  144. data/vendor/local/share/groonga/admin_html/js/jquery-1.4.2.min.js +154 -0
  145. data/vendor/local/share/groonga/admin_html/js/jquery-ui-1.8.1.custom.min.js +756 -0
  146. data/vendor/local/share/groonga/munin/plugins/groonga_cpu_load +47 -0
  147. data/vendor/local/share/groonga/munin/plugins/groonga_cpu_time +57 -0
  148. data/vendor/local/share/groonga/munin/plugins/groonga_disk +162 -0
  149. data/vendor/local/share/groonga/munin/plugins/groonga_memory +51 -0
  150. data/vendor/local/share/groonga/munin/plugins/groonga_n_records +110 -0
  151. data/vendor/local/share/groonga/munin/plugins/groonga_query_performance +133 -0
  152. data/vendor/local/share/groonga/munin/plugins/groonga_status +84 -0
  153. metadata +126 -36
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $VERBOSE = true
4
+
5
+ $KCODE = "utf8" unless "".respond_to?(:encoding)
6
+
7
+ base_dir = File.expand_path(File.join(File.dirname(__FILE__), ".."))
8
+ lib_dir = File.join(base_dir, "lib")
9
+ test_dir = File.join(base_dir, "test")
10
+
11
+ $LOAD_PATH.unshift(lib_dir)
12
+
13
+ require 'test/unit'
14
+
15
+ exit Test::Unit::AutoRunner.run(true, test_dir)
@@ -0,0 +1,86 @@
1
+ class TestUnitAttribute < Test::Unit::TestCase
2
+ class TestStack < Test::Unit::TestCase
3
+ class << self
4
+ def suite
5
+ Test::Unit::TestSuite.new(name)
6
+ end
7
+ end
8
+
9
+ class Stack
10
+ def initialize
11
+ @data = []
12
+ end
13
+
14
+ def push(data)
15
+ @data.push(data)
16
+ end
17
+
18
+ def peek
19
+ @data[-2]
20
+ end
21
+
22
+ def empty?
23
+ @data.empty?
24
+ end
25
+
26
+ def size
27
+ @data.size + 11
28
+ end
29
+ end
30
+
31
+ def setup
32
+ @stack = Stack.new
33
+ end
34
+
35
+ attribute :category, :accessor
36
+ def test_peek
37
+ @stack.push(1)
38
+ @stack.push(2)
39
+ assert_equal(2, @stack.peek)
40
+ end
41
+
42
+ attribute :bug, 1234
43
+ def test_bug_1234
44
+ assert_equal(0, @stack.size)
45
+ end
46
+
47
+ def test_no_attributes
48
+ assert(@stack.empty?)
49
+ @stack.push(1)
50
+ assert(!@stack.empty?)
51
+ assert_equal(1, @stack.size)
52
+ end
53
+ end
54
+
55
+ def test_set_attributes
56
+ test_for_accessor_category = TestStack.new("test_peek")
57
+ assert_equal({"category" => :accessor},
58
+ test_for_accessor_category.attributes)
59
+
60
+ test_for_bug_1234 = TestStack.new("test_bug_1234")
61
+ assert_equal({"bug" => 1234}, test_for_bug_1234.attributes)
62
+
63
+ test_no_attributes = TestStack.new("test_no_attributes")
64
+ assert_equal({}, test_no_attributes.attributes)
65
+ end
66
+
67
+ def test_callback
68
+ changed_attributes = []
69
+ observer = Proc.new do |test_case, key, old_value, value, method_name|
70
+ changed_attributes << [test_case, key, old_value, value, method_name]
71
+ end
72
+
73
+ test_case = Class.new(TestStack) do
74
+ register_attribute_observer(:bug, &observer)
75
+ attribute("bug", 9876, "test_bug_1234")
76
+ attribute(:description, "Test for peek", "test_peek")
77
+ attribute(:bug, 29, "test_peek")
78
+ end
79
+
80
+ assert_equal([
81
+ [test_case, "bug", 1234, 9876, "test_bug_1234"],
82
+ [test_case, "bug", nil, 29, "test_peek"],
83
+ ],
84
+ changed_attributes)
85
+ end
86
+ end
@@ -0,0 +1,67 @@
1
+ class TestUnitColorScheme < Test::Unit::TestCase
2
+ def test_default
3
+ assert_equal({
4
+ "success" => color("green", :bold => true),
5
+ "failure" => color("red", :bold => true),
6
+ "pending" => color("magenta", :bold => true),
7
+ "omission" => color("blue", :bold => true),
8
+ "notification" => color("cyan", :bold => true),
9
+ "error" => color("yellow", :bold => true) +
10
+ color("black", :foreground => false),
11
+ "case" => color("white", :bold => true) +
12
+ color("blue", :foreground => false),
13
+ "suite" => color("white", :bold => true) +
14
+ color("green", :foreground => false),
15
+ "diff-inserted-tag" => color("red", :bold => true),
16
+ "diff-deleted-tag" => color("green", :bold => true),
17
+ "diff-difference-tag" => color("cyan", :bold => true),
18
+ "diff-inserted" => color("red", :foreground => false) +
19
+ color("white", :bold => true),
20
+ "diff-deleted" => color("green", :foreground => false) +
21
+ color("white", :bold => true),
22
+ },
23
+ Test::Unit::ColorScheme.default.to_hash)
24
+ end
25
+
26
+ def test_register
27
+ inverted_scheme_spec = {
28
+ "success" => {:name => "red"},
29
+ "failure" => {:name => "green"},
30
+ }
31
+ Test::Unit::ColorScheme["inverted"] = inverted_scheme_spec
32
+ assert_equal({
33
+ "success" => color("red"),
34
+ "failure" => color("green"),
35
+ },
36
+ Test::Unit::ColorScheme["inverted"].to_hash)
37
+ end
38
+
39
+ def test_new_with_colors
40
+ scheme = Test::Unit::ColorScheme.new(:success => color("blue"),
41
+ "failure" => color("green",
42
+ :underline => true))
43
+ assert_equal({
44
+ "success" => color("blue"),
45
+ "failure" => color("green", :underline => true),
46
+ },
47
+ scheme.to_hash)
48
+ end
49
+
50
+ def test_new_with_spec
51
+ scheme = Test::Unit::ColorScheme.new(:success => {
52
+ :name => "blue",
53
+ :bold => true
54
+ },
55
+ "failure" => {:name => "green"})
56
+ assert_equal({
57
+ "success" => color("blue", :bold => true),
58
+ "failure" => color("green"),
59
+ },
60
+ scheme.to_hash)
61
+ end
62
+
63
+ private
64
+ def color(name, options={})
65
+ Test::Unit::Color.new(name, options)
66
+ end
67
+ end
@@ -0,0 +1,47 @@
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
+ def test_equal
24
+ red = color("red")
25
+ red_bold = color("red", :bold => true)
26
+
27
+ assert_operator(red, :==, red)
28
+ assert_not_equal(red, nil)
29
+ assert_equal(red, color("red"))
30
+ assert_not_equal(red, red_bold)
31
+ end
32
+
33
+ private
34
+ def color(name, options={})
35
+ Test::Unit::Color.new(name, options)
36
+ end
37
+
38
+ def mix_color(colors)
39
+ Test::Unit::MixColor.new(colors)
40
+ end
41
+
42
+ def assert_escape_sequence(expected, color)
43
+ assert_equal(expected, color.sequence)
44
+ assert_match(/\e\[(?:\d+;)*\d+m/, color.escape_sequence)
45
+ assert_equal(expected, color.escape_sequence[2..-2].split(";"))
46
+ end
47
+ end
@@ -0,0 +1,518 @@
1
+ class TestUnitDiff < Test::Unit::TestCase
2
+ def test_binary_search_ranges
3
+ assert_found_binary_search_ranges(5, [1..2, 4..5, 7..9])
4
+ assert_not_found_binary_search_ranges(3, [1..2, 4..5, 7..9])
5
+ end
6
+
7
+ def test_to_indexes
8
+ assert_to_indexes({"abc def" => [0, 2], "abc" => [1]},
9
+ ["abc def", "abc", "abc def"])
10
+
11
+ assert_to_indexes({?a => [0, 3], ?b => [1], ?c => [2], ?d => [4]},
12
+ "abcad")
13
+
14
+ assert_to_indexes({
15
+ ?1 => [0, 35],
16
+ ?t => [2, 5, 16],
17
+ ?e => [3, 14, 31, 38],
18
+ ?s => [4, 6, 12, 13, 20, 32, 44],
19
+ ?, => [7, 21, 33],
20
+ ?0 => [9, 23],
21
+ ?a => [11, 26],
22
+ ?r => [15, 30],
23
+ ?i => [17, 27, 41],
24
+ ?o => [18],
25
+ ?n => [19, 39, 42],
26
+ ?f => [25],
27
+ ?l => [28],
28
+ ?u => [29],
29
+ ?p => [37],
30
+ ?d => [40],
31
+ ?g => [43],
32
+ },
33
+ "1 tests, 0 assertions, 0 failures, 1 pendings") do |x|
34
+ x == " "[0]
35
+ end
36
+ end
37
+
38
+ def test_longest_match
39
+ assert_longest_match([0, 1, 3],
40
+ %w(b c d), %w(a b c d x y z),
41
+ 0, 2, 0, 7)
42
+ assert_longest_match([1, 2, 2],
43
+ %w(b c d), %w(a b c d x y z),
44
+ 1, 2, 0, 6)
45
+ assert_longest_match([0, 0, 0],
46
+ %w(a b), %w(c),
47
+ 0, 1, 0, 0)
48
+ assert_longest_match([1, 0, 2],
49
+ %w(q a b x c d), %w(a b y c d f),
50
+ 0, 5, 0, 5)
51
+ assert_longest_match([4, 3, 2],
52
+ %w(q a b x c d), %w(a b y c d f),
53
+ 3, 5, 2, 5)
54
+
55
+ assert_longest_match([1, 0, 2], "qabxcd", "abycdf", 0, 5, 0, 5)
56
+ assert_longest_match([0, 0, 1], "efg", "eg", 0, 2, 0, 1)
57
+ assert_longest_match([2, 1, 1], "efg", "eg", 1, 2, 1, 1)
58
+ end
59
+
60
+ def test_longest_match_with_junk_predicate
61
+ assert_longest_match([0, 4, 5], " abcd", "abcd abcd", 0, 4, 0, 8)
62
+ assert_longest_match([1, 0, 4], " abcd", "abcd abcd", 0, 4, 0, 8) do |x|
63
+ x == ' '[0]
64
+ end
65
+ end
66
+
67
+ def test_matches
68
+ assert_matches([[0, 0, 2],
69
+ [3, 2, 2]],
70
+ %w(a b x c d), %w(a b c d))
71
+ assert_matches([[1, 0, 2],
72
+ [4, 3, 2]],
73
+ %w(q a b x c d), %w(a b y c d f))
74
+
75
+ assert_matches([[1, 0, 2],
76
+ [4, 3, 2]],
77
+ "qabxcd", "abycdf")
78
+ assert_matches([[0, 0, 1],
79
+ [2, 1, 1]],
80
+ "efg", "eg")
81
+ end
82
+
83
+ def test_matches_with_junk_predicate
84
+ assert_matches([[0, 0, 23],
85
+ [24, 24, 11],
86
+ [36, 36, 9]],
87
+ "1 tests, 0 assertions, 1 failures, 0 pendings",
88
+ "1 tests, 0 assertions, 0 failures, 1 pendings")
89
+
90
+ assert_matches([[0, 0, 1],
91
+ [1, 1, 8],
92
+ [9, 9, 1],
93
+ [10, 10, 13],
94
+ [24, 24, 11],
95
+ [36, 36, 9]],
96
+ "1 tests, 0 assertions, 1 failures, 0 pendings",
97
+ "1 tests, 0 assertions, 0 failures, 1 pendings") do |x|
98
+ x == " "[0]
99
+ end
100
+ end
101
+
102
+ def test_blocks
103
+ assert_blocks([[0, 0, 2],
104
+ [3, 2, 2],
105
+ [5, 4, 0]],
106
+ %w(a b x c d), %w(a b c d))
107
+ assert_blocks([[1, 0, 2],
108
+ [4, 3, 2],
109
+ [6, 6, 0]],
110
+ %w(q a b x c d), %w(a b y c d f))
111
+
112
+ assert_blocks([[1, 0, 2],
113
+ [4, 3, 2],
114
+ [6, 6, 0]],
115
+ "qabxcd", "abycdf")
116
+ assert_blocks([[0, 0, 1],
117
+ [2, 1, 1],
118
+ [3, 2, 0]],
119
+ "efg", "eg")
120
+ end
121
+
122
+ def test_blocks_with_junk_predicate
123
+ assert_blocks([[0, 0, 23],
124
+ [24, 24, 11],
125
+ [36, 36, 9],
126
+ [45, 45, 0]],
127
+ "1 tests, 0 assertions, 1 failures, 0 pendings",
128
+ "1 tests, 0 assertions, 0 failures, 1 pendings") do |x|
129
+ x == " "[0]
130
+ end
131
+ end
132
+
133
+ def test_operations
134
+ assert_operations([], %w(), %w())
135
+
136
+ assert_operations([[:delete, 0, 1, 0, 0],
137
+ [:equal, 1, 3, 0, 2],
138
+ [:replace, 3, 4, 2, 3],
139
+ [:equal, 4, 6, 3, 5],
140
+ [:insert, 6, 6, 5, 6]],
141
+ %w(q a b x c d), %w(a b y c d f))
142
+
143
+ assert_operations([[:delete, 0, 1, 0, 0],
144
+ [:equal, 1, 3, 0, 2],
145
+ [:replace, 3, 4, 2, 3],
146
+ [:equal, 4, 6, 3, 5],
147
+ [:insert, 6, 6, 5, 6]],
148
+ "qabxcd", "abycdf")
149
+
150
+ assert_operations([[:equal, 0, 23, 0, 23],
151
+ [:replace, 23, 24, 23, 24],
152
+ [:equal, 24, 35, 24, 35],
153
+ [:replace, 35, 36, 35, 36],
154
+ [:equal, 36, 45, 36, 45]],
155
+ "1 tests, 0 assertions, 1 failures, 0 pendings",
156
+ "1 tests, 0 assertions, 0 failures, 1 pendings")
157
+
158
+ assert_operations([[:equal, 0, 23, 0, 23],
159
+ [:replace, 23, 24, 23, 24],
160
+ [:equal, 24, 35, 24, 35],
161
+ [:replace, 35, 36, 35, 36],
162
+ [:equal, 36, 45, 36, 45]],
163
+ "1 tests, 0 assertions, 1 failures, 0 pendings",
164
+ "1 tests, 0 assertions, 0 failures, 1 pendings") do |x|
165
+ x == " "[0]
166
+ end
167
+ end
168
+
169
+ def test_grouped_operations
170
+ assert_grouped_operations([[[:equal, 0, 0, 0, 0]]],
171
+ %w(),
172
+ %w())
173
+
174
+ assert_grouped_operations([[[:equal, 0, 3, 0, 3]]],
175
+ %w(a b c),
176
+ %w(a b c))
177
+
178
+ assert_grouped_operations([[[:equal, 0, 1, 0, 1],
179
+ [:replace, 1, 2, 1, 2],
180
+ [:equal, 2, 5, 2, 5]],
181
+ [[:equal, 8, 11, 8, 11],
182
+ [:replace, 11, 12, 11, 12],
183
+ [:equal, 12, 13, 12, 13],
184
+ [:delete, 13, 16, 13, 13],
185
+ [:equal, 16, 17, 13, 14],
186
+ [:replace, 17, 18, 14, 15],
187
+ [:equal, 18, 20, 15, 17]]],
188
+ %w(1 2 3 4 5 6 7 8 9 a b c d e f g h i j k),
189
+ %w(1 i 3 4 5 6 7 8 9 a b cX d h iX j k))
190
+ end
191
+
192
+ def test_ratio
193
+ assert_ratio(0.75, "abcd", "bcde")
194
+ assert_ratio(0.80, "efg", "eg")
195
+ end
196
+
197
+ def test_1_length_readable_diff
198
+ differ = Test::Unit::Diff::ReadableDiffer.new(["0"], ["1"])
199
+ def differ.cut_off_ratio
200
+ 0
201
+ end
202
+ def differ.default_ratio
203
+ 0
204
+ end
205
+ assert_equal("- 0\n" +
206
+ "? ^\n" +
207
+ "+ 1\n" +
208
+ "? ^",
209
+ differ.diff.join("\n"))
210
+ end
211
+
212
+ def test_same_contents_readable_diff
213
+ assert_readable_diff(" aaa", ["aaa"], ["aaa"])
214
+ assert_readable_diff(" aaa\n" \
215
+ " bbb",
216
+ ["aaa", "bbb"], ["aaa", "bbb"])
217
+ end
218
+
219
+ def test_deleted_readable_diff
220
+ assert_readable_diff(" aaa\n" \
221
+ "- bbb",
222
+ ["aaa", "bbb"], ["aaa"])
223
+ assert_readable_diff(" aaa\n" \
224
+ "- bbb\n" \
225
+ "- ccc\n" \
226
+ "- ddd",
227
+ ["aaa", "bbb", "ccc", "ddd"], ["aaa"])
228
+ end
229
+
230
+ def test_inserted_readable_diff
231
+ assert_readable_diff(" aaa\n" \
232
+ "+ bbb\n" \
233
+ "+ ccc\n" \
234
+ "+ ddd",
235
+ ["aaa"], ["aaa", "bbb", "ccc", "ddd"])
236
+ end
237
+
238
+ def test_replace_readable_diff
239
+ assert_readable_diff(" aaa\n" \
240
+ "- bbb\n" \
241
+ "+ BbB\n" \
242
+ " ccc\n" \
243
+ "- ddd\n" \
244
+ "- efg\n" \
245
+ "? -\n" \
246
+ "+ eg",
247
+ ["aaa", "bbb", "ccc", "ddd", "efg"],
248
+ ["aaa", "BbB", "ccc", "eg"])
249
+
250
+ assert_readable_diff("- abcd xyz abc\n" \
251
+ "? -\n" \
252
+ "+ abcd abcd xyz abc\n" \
253
+ "? +++++",
254
+ [" abcd xyz abc"],
255
+ ["abcd abcd xyz abc"])
256
+ end
257
+
258
+ def test_difference_readable_diff
259
+ assert_readable_diff("- 1 tests, 0 assertions, 1 failures, 0 pendings\n" \
260
+ "? ^ ^\n" \
261
+ "+ 1 tests, 0 assertions, 0 failures, 1 pendings\n" \
262
+ "? ^ ^",
263
+ ["1 tests, 0 assertions, 1 failures, 0 pendings"],
264
+ ["1 tests, 0 assertions, 0 failures, 1 pendings"])
265
+ end
266
+
267
+ def test_complex_readable_diff
268
+ assert_readable_diff(" aaa\n" \
269
+ "- bbb\n" \
270
+ "- ccc\n" \
271
+ "+ \n" \
272
+ "+ # \n" \
273
+ " ddd",
274
+ ["aaa", "bbb", "ccc", "ddd"],
275
+ ["aaa", "", " # ", "ddd"])
276
+
277
+ assert_readable_diff("- one1\n" \
278
+ "? ^\n" \
279
+ "+ ore1\n" \
280
+ "? ^\n" \
281
+ "- two2\n" \
282
+ "- three3\n" \
283
+ "? - -\n" \
284
+ "+ tree\n" \
285
+ "+ emu",
286
+ ["one1", "two2", "three3"],
287
+ ["ore1", "tree", "emu"])
288
+ end
289
+
290
+ def test_empty_readable_diff
291
+ assert_readable_diff("", [""], [""])
292
+ end
293
+
294
+ def test_unified_diff
295
+ assert_unified_diff("",
296
+ ["one", "two", "three"],
297
+ ["one", "two", "three"],
298
+ "content 1",
299
+ "content 2")
300
+
301
+ assert_unified_diff("--- Original Sat Jan 26 23:30:50 1991\n" \
302
+ "+++ Current Fri Jun 06 10:20:52 2003\n" \
303
+ "@@ -1,4 +1,4 @@\n" \
304
+ "+zero\n" \
305
+ " one\n" \
306
+ "-two\n" \
307
+ "-three\n" \
308
+ "+tree\n" \
309
+ " four",
310
+ ["one", "two", "three", "four"],
311
+ ["zero", "one", "tree", "four"],
312
+ "Original Sat Jan 26 23:30:50 1991",
313
+ "Current Fri Jun 06 10:20:52 2003",
314
+ :show_context => false)
315
+
316
+ from = File.read(__FILE__).split(/\n/)
317
+ to = from.dup
318
+ target_line = __LINE__
319
+ to[target_line - 1, 1] = []
320
+ context = " def test_unified_diff"
321
+ summary = "@@ -#{target_line - 3},7 +#{target_line - 3},6 @@ #{context}"
322
+ assert_unified_diff((["--- revision 10",
323
+ "+++ revision 11",
324
+ summary] +
325
+ from[target_line - 4, 3].collect {|line| " #{line}"} +
326
+ ["-#{from[target_line - 1]}"] +
327
+ from[target_line, 3].collect {|line| " #{line}"}
328
+ ).join("\n"),
329
+ from, to,
330
+ "revision 10",
331
+ "revision 11")
332
+ end
333
+
334
+ def test_empty_unified_diff
335
+ assert_unified_diff("", [""], [""], "From", "To")
336
+ assert_unified_diff("", [], [], "From", "To")
337
+ end
338
+
339
+ def test_diff_lines
340
+ assert_diff_lines(["- ddd",
341
+ "- efg",
342
+ "? -",
343
+ "+ eg"],
344
+ ["aaa", "bbb", "ccc", "ddd", "efg"],
345
+ ["aaa", "BbB", "ccc", "eg"],
346
+ 3, 5, 3, 4)
347
+ end
348
+
349
+ def test_diff_line
350
+ assert_diff_line(["- abcDefghiJkl",
351
+ "? ^ ^ ^",
352
+ "+ abcdefGhijkl",
353
+ "? ^ ^ ^"],
354
+ "abcDefghiJkl",
355
+ "abcdefGhijkl")
356
+
357
+ assert_diff_line(["- bcDefghiJklx",
358
+ "? ^ ^ ^ -",
359
+ "+ abcdefGhijkl",
360
+ "? + ^ ^ ^"],
361
+ "bcDefghiJklx",
362
+ "abcdefGhijkl")
363
+ end
364
+
365
+ def test_empty_diff_line
366
+ assert_diff_line(["- ",
367
+ "+ "],
368
+ "", "")
369
+ end
370
+
371
+ def test_format_diff_point
372
+ assert_format_diff_point(["- \tabcDefghiJkl",
373
+ "? \t ^ ^ ^",
374
+ "+ \t\tabcdefGhijkl",
375
+ "? \t ^ ^ ^"],
376
+ "\tabcDefghiJkl",
377
+ "\t\tabcdefGhijkl",
378
+ " ^ ^ ^ ",
379
+ "+ ^ ^ ^ ")
380
+ assert_format_diff_point(["- efg",
381
+ "? ^",
382
+ "+ eg"],
383
+ "efg",
384
+ "eg",
385
+ " ^",
386
+ "")
387
+ end
388
+
389
+ def test_interesting_line
390
+ from = ["class X",
391
+ " def find(x=0)",
392
+ " body",
393
+ " end",
394
+ "end"]
395
+ to = ["def xxx",
396
+ " raise 'not call me'",
397
+ "end"]
398
+ assert_interesting_line(" def find(x=0)",
399
+ from, to,
400
+ 2, 1)
401
+ assert_interesting_line("def xxx",
402
+ from, to,
403
+ 2, 0)
404
+ assert_interesting_line("class X",
405
+ from, to,
406
+ 0, 0)
407
+ end
408
+
409
+ private
410
+ def assert_found_binary_search_ranges(numeric, ranges)
411
+ assert_true(Test::Unit::Diff::UTF8Line.send(:binary_search_ranges,
412
+ numeric,
413
+ ranges))
414
+ end
415
+
416
+ def assert_not_found_binary_search_ranges(numeric, ranges)
417
+ assert_false(Test::Unit::Diff::UTF8Line.send(:binary_search_ranges,
418
+ numeric,
419
+ ranges))
420
+ end
421
+
422
+ def assert_to_indexes(expected, to, &junk_predicate)
423
+ matcher = Test::Unit::Diff::SequenceMatcher.new([""], to, &junk_predicate)
424
+ assert_equal(expected, matcher.instance_variable_get("@to_indexes"))
425
+ end
426
+
427
+ def assert_find_best_match_position(expected, from, to,
428
+ from_start, from_end,
429
+ to_start, to_end, &junk_predicate)
430
+ matcher = Test::Unit::Diff::SequenceMatcher.new(from, to, &junk_predicate)
431
+ assert_equal(expected, matcher.send(:find_best_match_position,
432
+ from_start, from_end,
433
+ to_start, to_end))
434
+ end
435
+
436
+ def assert_longest_match(expected, from, to,
437
+ from_start, from_end,
438
+ to_start, to_end, &junk_predicate)
439
+ matcher = Test::Unit::Diff::SequenceMatcher.new(from, to, &junk_predicate)
440
+ assert_equal(expected, matcher.longest_match(from_start, from_end,
441
+ to_start, to_end))
442
+ end
443
+
444
+ def assert_matches(expected, from, to, &junk_predicate)
445
+ matcher = Test::Unit::Diff::SequenceMatcher.new(from, to, &junk_predicate)
446
+ assert_equal(expected, matcher.send(:matches))
447
+ end
448
+
449
+ def assert_blocks(expected, from, to, &junk_predicate)
450
+ matcher = Test::Unit::Diff::SequenceMatcher.new(from, to, &junk_predicate)
451
+ assert_equal(expected, matcher.blocks)
452
+ end
453
+
454
+ def assert_operations(expected, from, to, &junk_predicate)
455
+ matcher = Test::Unit::Diff::SequenceMatcher.new(from, to, &junk_predicate)
456
+ assert_equal(expected, matcher.operations)
457
+ end
458
+
459
+ def assert_grouped_operations(expected, from, to)
460
+ matcher = Test::Unit::Diff::SequenceMatcher.new(from, to)
461
+ assert_equal(expected, matcher.grouped_operations)
462
+ end
463
+
464
+ def assert_ratio(expected, from, to)
465
+ matcher = Test::Unit::Diff::SequenceMatcher.new(from, to)
466
+ assert_in_delta(expected, 0.001, matcher.ratio)
467
+ end
468
+
469
+ def assert_readable_diff(expected, from, to)
470
+ assert_equal(expected,
471
+ Test::Unit::Diff.readable(from.join("\n"), to.join("\n")))
472
+ end
473
+
474
+ def assert_unified_diff(expected, from, to, from_label, to_label, options={})
475
+ options = options.merge(:from_label => from_label,
476
+ :to_label => to_label)
477
+ assert_equal(expected,
478
+ Test::Unit::Diff.unified(from.join("\n"), to.join("\n"),
479
+ options))
480
+ end
481
+
482
+ def assert_diff_lines(expected, from, to,
483
+ from_start, from_end,
484
+ to_start, to_end)
485
+ differ = Test::Unit::Diff::ReadableDiffer.new(from, to)
486
+ result = []
487
+ differ.instance_variable_set("@result", result)
488
+ differ.send(:diff_lines,
489
+ from_start, from_end,
490
+ to_start, to_end)
491
+ assert_equal(expected, result)
492
+ end
493
+
494
+ def assert_diff_line(expected, from_line, to_line)
495
+ differ = Test::Unit::Diff::ReadableDiffer.new([""], [""])
496
+ result = []
497
+ differ.instance_variable_set("@result", result)
498
+ differ.send(:diff_line, from_line, to_line)
499
+ assert_equal(expected, result)
500
+ end
501
+
502
+ def assert_format_diff_point(expected, from_line, to_line, from_tags, to_tags)
503
+ differ = Test::Unit::Diff::ReadableDiffer.new([""], [""])
504
+ result = []
505
+ differ.instance_variable_set("@result", result)
506
+ differ.send(:format_diff_point,
507
+ from_line, to_line,
508
+ from_tags, to_tags)
509
+ assert_equal(expected, result)
510
+ end
511
+
512
+ def assert_interesting_line(expected, from, to, from_start, to_start)
513
+ differ = Test::Unit::Diff::UnifiedDiffer.new(from, to)
514
+ assert_equal(expected, differ.send(:find_interesting_line,
515
+ from_start, to_start,
516
+ :define_line?))
517
+ end
518
+ end