docdiff 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. data/.gitignore +6 -0
  2. data/.travis.yml +7 -0
  3. data/Gemfile +17 -0
  4. data/Guardfile +8 -0
  5. data/Makefile +108 -0
  6. data/Rakefile +17 -0
  7. data/bin/docdiff +179 -0
  8. data/devutil/JIS0208.TXT +6952 -0
  9. data/devutil/char_by_charclass.rb +23 -0
  10. data/devutil/charclass_by_char.rb +21 -0
  11. data/devutil/jis0208.rb +343 -0
  12. data/devutil/testjis0208.rb +38 -0
  13. data/docdiff.conf.example +22 -0
  14. data/docdiff.gemspec +23 -0
  15. data/docdiffwebui.cgi +176 -0
  16. data/docdiffwebui.html +123 -0
  17. data/img/docdiff-screenshot-format-html-digest-firefox.png +0 -0
  18. data/img/docdiff-screenshot-format-html-firefox.png +0 -0
  19. data/img/docdiff-screenshot-format-tty-cmdexe-en.png +0 -0
  20. data/img/docdiff-screenshot-format-tty-cmdexe-ja.png +0 -0
  21. data/img/docdiff-screenshot-format-tty-rxvtunicode-en.png +0 -0
  22. data/img/docdiff-screenshot-format-tty-rxvtunicode-ja.png +0 -0
  23. data/img/docdiff-screenshot-format-tty-xterm-en.png +0 -0
  24. data/img/docdiff-screenshot-format-tty-xterm-ja.png +0 -0
  25. data/img/docdiff-screenshot-resolution-linewordchar-xterm.png +0 -0
  26. data/index.html +181 -0
  27. data/langfilter.rb +14 -0
  28. data/lib/doc_diff.rb +170 -0
  29. data/lib/docdiff.rb +7 -0
  30. data/lib/docdiff/charstring.rb +579 -0
  31. data/lib/docdiff/diff.rb +217 -0
  32. data/lib/docdiff/diff/contours.rb +382 -0
  33. data/lib/docdiff/diff/editscript.rb +148 -0
  34. data/lib/docdiff/diff/rcsdiff.rb +107 -0
  35. data/lib/docdiff/diff/shortestpath.rb +93 -0
  36. data/lib/docdiff/diff/speculative.rb +40 -0
  37. data/lib/docdiff/diff/subsequence.rb +39 -0
  38. data/lib/docdiff/diff/unidiff.rb +124 -0
  39. data/lib/docdiff/difference.rb +92 -0
  40. data/lib/docdiff/document.rb +127 -0
  41. data/lib/docdiff/encoding/en_ascii.rb +97 -0
  42. data/lib/docdiff/encoding/ja_eucjp.rb +269 -0
  43. data/lib/docdiff/encoding/ja_sjis.rb +260 -0
  44. data/lib/docdiff/encoding/ja_utf8.rb +6974 -0
  45. data/lib/docdiff/version.rb +3 -0
  46. data/lib/docdiff/view.rb +476 -0
  47. data/lib/viewdiff.rb +375 -0
  48. data/readme.html +713 -0
  49. data/sample/01.en.ascii.cr +1 -0
  50. data/sample/01.en.ascii.crlf +2 -0
  51. data/sample/01.en.ascii.lf +2 -0
  52. data/sample/01.ja.eucjp.lf +2 -0
  53. data/sample/01.ja.sjis.cr +1 -0
  54. data/sample/01.ja.sjis.crlf +2 -0
  55. data/sample/01.ja.utf8.crlf +2 -0
  56. data/sample/02.en.ascii.cr +1 -0
  57. data/sample/02.en.ascii.crlf +2 -0
  58. data/sample/02.en.ascii.lf +2 -0
  59. data/sample/02.ja.eucjp.lf +2 -0
  60. data/sample/02.ja.sjis.cr +1 -0
  61. data/sample/02.ja.sjis.crlf +2 -0
  62. data/sample/02.ja.utf8.crlf +2 -0
  63. data/sample/humpty_dumpty01.ascii.lf +4 -0
  64. data/sample/humpty_dumpty02.ascii.lf +4 -0
  65. data/test/charstring_test.rb +1008 -0
  66. data/test/diff_test.rb +36 -0
  67. data/test/difference_test.rb +64 -0
  68. data/test/docdiff_test.rb +193 -0
  69. data/test/document_test.rb +626 -0
  70. data/test/test_helper.rb +7 -0
  71. data/test/view_test.rb +570 -0
  72. data/test/viewdiff_test.rb +908 -0
  73. metadata +129 -0
@@ -0,0 +1,7 @@
1
+ # -*- coding: utf-8 -*-
2
+ begin
3
+ # FIXME: "invalid byte sequence in UTF-8 (ArgumentError)" will be raised.
4
+ require 'simplecov'
5
+ SimpleCov.start
6
+ rescue LoadError
7
+ end
@@ -0,0 +1,570 @@
1
+ #!/usr/bin/ruby
2
+ # -*- coding: euc-jp; -*-
3
+ require 'test/unit'
4
+ require 'docdiff/view'
5
+ require 'docdiff/difference'
6
+ require 'nkf'
7
+
8
+ class TC_View < Test::Unit::TestCase
9
+
10
+ def setup()
11
+ #
12
+ end
13
+
14
+ def test_scan_lines_cr()
15
+ str = "A\r\rA\n\nA\r\n\r\nA\n\r\n\rA"
16
+ expected = ["A\r", "\r", "A\n\nA\r", "\n\r", "\nA\n\r", "\n\r", "A"]
17
+ actual = str.scan_lines("CR")
18
+ assert_equal(expected, actual)
19
+ end
20
+ def test_scan_lines_lf()
21
+ str = "A\r\rA\n\nA\r\n\r\nA\n\r\n\rA"
22
+ expected = ["A\r\rA\n", "\n", "A\r\n", "\r\n", "A\n", "\r\n", "\rA"]
23
+ actual = str.scan_lines("LF")
24
+ assert_equal(expected, actual)
25
+ end
26
+ def test_scan_lines_crlf()
27
+ str = "A\r\rA\n\nA\r\n\r\nA\n\r\n\rA"
28
+ expected = ["A\r\rA\n\nA\r\n", "\r\n", "A\n\r\n", "\rA"]
29
+ actual = str.scan_lines("CRLF")
30
+ assert_equal(expected, actual)
31
+ end
32
+
33
+ def test_source_lines_cr()
34
+ array1 = "A\r\rA\n\nA\r\n\r\nA\n\r\n\rA".split(//)
35
+ array2 = ["b", "c", "c"]
36
+ difference = Difference.new(array1, array2)
37
+ expected = ["A\r", "\r", "A\n\nA\r", "\n\r", "\nA\n\r", "\n\r", "A"]
38
+ actual = View.new(difference, "US-ASCII", "CR").source_lines
39
+ assert_equal(expected, actual)
40
+ end
41
+ def test_source_lines_cr2()
42
+ array1 = "A\r\rA\n\nA\r\n\r\nA\n\r\n\r".split(//)
43
+ array2 = ["b", "c", "c"]
44
+ difference = Difference.new(array1, array2)
45
+ expected = ["A\r", "\r", "A\n\nA\r", "\n\r", "\nA\n\r", "\n\r"]
46
+ actual = View.new(difference, "US-ASCII", "CR").source_lines
47
+ assert_equal(expected, actual)
48
+ end
49
+ def test_source_lines_lf()
50
+ array1 = "A\r\rA\n\nA\r\n\r\nA\n\r\n\rA".split(//)
51
+ array2 = ["b", "c", "c"]
52
+ difference = Difference.new(array1, array2)
53
+ expected = ["A\r\rA\n", "\n", "A\r\n", "\r\n", "A\n", "\r\n", "\rA"]
54
+ actual = View.new(difference, "US-ASCII", "LF").source_lines
55
+ assert_equal(expected, actual)
56
+ end
57
+ def test_source_lines_lf2()
58
+ array1 = "A\r\rA\n\nA\r\n\r\nA\n\r\n\r".split(//)
59
+ array2 = ["b", "c", "c"]
60
+ difference = Difference.new(array1, array2)
61
+ expected = ["A\r\rA\n", "\n", "A\r\n", "\r\n", "A\n", "\r\n", "\r"]
62
+ actual = View.new(difference, "US-ASCII", "LF").source_lines
63
+ assert_equal(expected, actual)
64
+ end
65
+ def test_source_lines_crlf()
66
+ array1 = "A\r\rA\n\nA\r\n\r\nA\n\r\n\rA".split(//)
67
+ array2 = ["b", "c", "c"]
68
+ difference = Difference.new(array1, array2)
69
+ expected = ["A\r\rA\n\nA\r\n", "\r\n", "A\n\r\n", "\rA"]
70
+ actual = View.new(difference, "US-ASCII", "CRLF").source_lines
71
+ assert_equal(expected, actual)
72
+ end
73
+ def test_source_lines_crlf2()
74
+ array1 = "A\r\rA\n\nA\r\n\r\nA\n\r\n\r".split(//)
75
+ array2 = ["b", "c", "c"]
76
+ difference = Difference.new(array1, array2)
77
+ expected = ["A\r\rA\n\nA\r\n", "\r\n", "A\n\r\n", "\r"]
78
+ actual = View.new(difference, "US-ASCII", "CRLF").source_lines
79
+ assert_equal(expected, actual)
80
+ end
81
+ def test_source_lines_noeol()
82
+ array1 = ["a", "b", "c"]
83
+ array2 = ["b", "c", "c"]
84
+ difference = Difference.new(array1, array2)
85
+ expected = ["abc"]
86
+ actual = View.new(difference, "US-ASCII", nil).source_lines
87
+ assert_equal(expected, actual)
88
+ end
89
+ def test_target_lines_cr()
90
+ array1 = ["a", "b", "\n", "c"]
91
+ array2 = "A\r\rA\n\nA\r\n\r\nA\n\r\n\rA".split(//)
92
+ difference = Difference.new(array1, array2)
93
+ expected = ["A\r", "\r", "A\n\nA\r", "\n\r", "\nA\n\r", "\n\r", "A"]
94
+ actual = View.new(difference, "US-ASCII", "CR").target_lines
95
+ assert_equal(expected, actual)
96
+ end
97
+ def test_target_lines_cr2()
98
+ array1 = ["a", "b", "\n", "c"]
99
+ array2 = "A\r\rA\n\nA\r\n\r\nA\n\r\n\r".split(//)
100
+ difference = Difference.new(array1, array2)
101
+ expected = ["A\r", "\r", "A\n\nA\r", "\n\r", "\nA\n\r", "\n\r"]
102
+ actual = View.new(difference, "US-ASCII", "CR").target_lines
103
+ assert_equal(expected, actual)
104
+ end
105
+ def test_target_lines_lf()
106
+ array1 = ["a", "b", "\n", "c"]
107
+ array2 = "A\r\rA\n\nA\r\n\r\nA\n\r\n\rA".split(//)
108
+ difference = Difference.new(array1, array2)
109
+ expected = ["A\r\rA\n", "\n", "A\r\n", "\r\n", "A\n", "\r\n", "\rA"]
110
+ actual = View.new(difference, "US-ASCII", "LF").target_lines
111
+ assert_equal(expected, actual)
112
+ end
113
+ def test_target_lines_lf2()
114
+ array1 = ["a", "b", "\n", "c"]
115
+ array2 = "A\r\rA\n\nA\r\n\r\nA\n\r\n\r".split(//)
116
+ difference = Difference.new(array1, array2)
117
+ expected = ["A\r\rA\n", "\n", "A\r\n", "\r\n", "A\n", "\r\n", "\r"]
118
+ actual = View.new(difference, "US-ASCII", "LF").target_lines
119
+ assert_equal(expected, actual)
120
+ end
121
+ def test_target_lines_crlf()
122
+ array1 = ["a", "b", "\n", "c"]
123
+ array2 = "A\r\rA\n\nA\r\n\r\nA\n\r\n\rA".split(//)
124
+ difference = Difference.new(array1, array2)
125
+ expected = ["A\r\rA\n\nA\r\n", "\r\n", "A\n\r\n", "\rA"]
126
+ actual = View.new(difference, "US-ASCII", "CRLF").target_lines
127
+ assert_equal(expected, actual)
128
+ end
129
+ def test_target_lines_crlf2()
130
+ array1 = ["a", "b", "\n", "c"]
131
+ array2 = "A\r\rA\n\nA\r\n\r\nA\n\r\n\r".split(//)
132
+ difference = Difference.new(array1, array2)
133
+ expected = ["A\r\rA\n\nA\r\n", "\r\n", "A\n\r\n", "\r"]
134
+ actual = View.new(difference, "US-ASCII", "CRLF").target_lines
135
+ assert_equal(expected, actual)
136
+ end
137
+ def test_target_lines_noeol()
138
+ array1 = ["a", "b", "c"]
139
+ array2 = ["b", "c", "c"]
140
+ difference = Difference.new(array1, array2)
141
+ expected = ["bcc"]
142
+ actual = View.new(difference, "US-ASCII", nil).target_lines
143
+ assert_equal(expected, actual)
144
+ end
145
+
146
+ def test_to_tty_del_add_ascii()
147
+ array1 = ['a', 'b', 'c']
148
+ array2 = ['b', 'c', 'c']
149
+ difference = Difference.new(array1, array2)
150
+ expected = ["\033[7;4;31ma\033[0m",
151
+ "b",
152
+ "\033[7;1;34mc\033[0m",
153
+ "c"]
154
+ assert_equal(expected, View.new(difference, "US-ASCII", nil).to_tty(nil, false))
155
+ end
156
+ def test_to_tty_change_ascii()
157
+ array1 = ['a', 'b', 'c']
158
+ array2 = ['a', 'x', 'c']
159
+ difference = Difference.new(array1, array2)
160
+ expected = ["a",
161
+ "\033[7;4;33mb\033[0m\033[7;1;32mx\033[0m",
162
+ "c"]
163
+ assert_equal(expected, View.new(difference, "US-ASCII", nil).to_tty(nil, false))
164
+ end
165
+ def test_to_tty_del_add_ja()
166
+ array1 = ['��', '��', '��']
167
+ array2 = ['��', '��', '��']
168
+ expected = ["\033[7;4;31m��\033[0m",
169
+ "��",
170
+ "\033[7;1;34m��\033[0m",
171
+ "��"]
172
+ assert_equal(expected, View.new(Difference.new(array1, array2), "EUC-JP", nil).to_tty(nil, false))
173
+ assert_equal(expected.collect{|i|NKF.nkf("-s",i)},
174
+ View.new(Difference.new(array1.collect{|i|NKF.nkf("-s",i)},
175
+ array2.collect{|i|NKF.nkf("-s",i)}),
176
+ "Shift_JIS", nil).to_tty(nil, false))
177
+ assert_equal(expected.collect{|i|NKF.nkf("-E -w", i)},
178
+ View.new(Difference.new(array1.collect{|i|NKF.nkf("-E -w", i)},
179
+ array2.collect{|i|NKF.nkf("-E -w", i)}),
180
+ "UTF-8", nil).to_tty(nil, false))
181
+ end
182
+ def test_to_tty_change_ja()
183
+ array1 = ['��', '��', '��']
184
+ array2 = ['��', '��', '��']
185
+ expected = ["��",
186
+ "\033[7;4;33m��\033[0m\033[7;1;32m��\033[0m",
187
+ "��"]
188
+ assert_equal(expected, View.new(Difference.new(array1, array2), "EUC-JP", nil).to_tty(nil, false))
189
+ assert_equal(expected.collect{|i|NKF.nkf("-s",i)},
190
+ View.new(Difference.new(array1.collect{|i|NKF.nkf("-s",i)},
191
+ array2.collect{|i|NKF.nkf("-s",i)}),
192
+ "Shift_JIS", nil).to_tty(nil, false))
193
+ assert_equal(expected.collect{|i|NKF.nkf("-E -w", i)},
194
+ View.new(Difference.new(array1.collect{|i|NKF.nkf("-E -w", i)},
195
+ array2.collect{|i|NKF.nkf("-E -w", i)}),
196
+ "UTF-8", nil).to_tty(nil, false))
197
+ end
198
+ def test_to_tty_digest()
199
+ array1 = ["a", "\n", "b", "c", "d", "e", "\n", "f", "\n"]
200
+ array2 = ["c", "d", "X", "\n", "Y", "e", "\n", "F", "\n"]
201
+ expected = ["----\n",
202
+ "1-2,(1)\n\033[7;4;31ma\nb\033[0mcd\n----\n",
203
+ "(2),1-2\ncd\033[7;1;34mX\nY\033[0me\n\n----\n",
204
+ "3,3\ne\n\033[7;4;33mf\033[0m\033[7;1;32mF\033[0m\n\n----\n"]
205
+ assert_equal(expected, View.new(Difference.new(array1, array2), "US-ASCII", "LF").to_tty_digest(nil, false))
206
+ end
207
+ def test_to_tty_digest_multi()
208
+ array1 = ["a", "\n", "b", "c", "d", "e", "\n", "f", "\n"]
209
+ array2 = ["c", "d", "X", "\n", "Y", "e", "\n", "F", "\n"]
210
+ expected = ["----\n",
211
+ "1-2,(1)\na\nbcd\n\033[7;4;31ma\nb\033[0mcd\n----\n",
212
+ "(2),1-2\ncde\n\ncd\033[7;1;34mX\nY\033[0me\n\n----\n",
213
+ "3,3\ne\n\033[7;4;33mf\033[0m\n\ne\n\033[7;1;32mF\033[0m\n\n----\n"]
214
+ assert_equal(expected, View.new(Difference.new(array1, array2), "US-ASCII", "LF").to_tty_digest({:display=>'multi'}, false))
215
+ end
216
+
217
+ def test_to_html_cr_ascii()
218
+ array1 = ['a', "\r"]
219
+ array2 = ['a', "\r"]
220
+ difference = Difference.new(array1, array2)
221
+ expected = ["<span class=\"common\">a<br />\r</span>"]
222
+ assert_equal(expected, View.new(difference, "US-ASCII", "CR").to_html(nil, false))
223
+ end
224
+ def test_to_html_lf_ascii()
225
+ array1 = ['a', "\n"]
226
+ array2 = ['a', "\n"]
227
+ difference = Difference.new(array1, array2)
228
+ expected = ["<span class=\"common\">a<br />\n</span>"]
229
+ assert_equal(expected, View.new(difference, "US-ASCII", "LF").to_html(nil, false))
230
+ end
231
+ def test_to_html_crlf_ascii()
232
+ array1 = ['a', "\r\n"]
233
+ array2 = ['a', "\r\n"]
234
+ difference = Difference.new(array1, array2)
235
+ expected = ["<span class=\"common\">a<br />\r\n</span>"]
236
+ assert_equal(expected, View.new(difference, "US-ASCII", "CRLF").to_html(nil, false))
237
+ end
238
+ def test_to_html_escaping_ascii()
239
+ array1 = ['<>& ']
240
+ array2 = ['<>& ']
241
+ difference = Difference.new(array1, array2)
242
+ expected = ["<span class=\"common\">&lt;&gt;&amp;&nbsp;&nbsp; </span>"]
243
+ assert_equal(expected, View.new(difference, "US-ASCII", nil).to_html(nil, false))
244
+ end
245
+ def test_to_html_digest()
246
+ array1 = ["a", "\n", "b", "c", "d", "e", "\n", "f", "\n"]
247
+ array2 = ["c", "d", "X", "\n", "Y", "e", "\n", "F", "\n"]
248
+ expected = ["<ul>",
249
+ "<li class=\"entry\"><p class=\"position\">1-2,(1)</p><blockquote class=\"body\"><p class=\"body\"><span class=\"del\"><del>a<br />\nb</del></span>cd</p></blockquote></li>\n",
250
+ "<li class=\"entry\"><p class=\"position\">(2),1-2</p><blockquote class=\"body\"><p class=\"body\">cd<span class=\"add\"><ins>X<br />\nY</ins></span>e<br />\n</p></blockquote></li>\n",
251
+ "<li class=\"entry\"><p class=\"position\">3,3</p><blockquote class=\"body\"><p class=\"body\">e<br />\n<span class=\"before-change\"><del>f</del></span><span class=\"after-change\"><ins>F</ins></span><br />\n</p></blockquote></li>\n",
252
+ "</ul>"]
253
+ assert_equal(expected, View.new(Difference.new(array1, array2), "US-ASCII", "LF").to_html_digest(nil,false))
254
+ end
255
+ def test_to_html_digest_multi()
256
+ array1 = ["a", "\n", "b", "c", "d", "e", "\n", "f", "\n"]
257
+ array2 = ["c", "d", "X", "\n", "Y", "e", "\n", "F", "\n"]
258
+ expected = ["<ul>",
259
+ "<li class=\"entry\"><p class=\"position\">1-2,(1)</p><blockquote class=\"body\"><p class=\"body\">a<br />\nbcd</p><p class=\"body\"><span class=\"del\"><del>a<br />\nb</del></span>cd</p></blockquote></li>\n",
260
+ "<li class=\"entry\"><p class=\"position\">(2),1-2</p><blockquote class=\"body\"><p class=\"body\">cde<br />\n</p><p class=\"body\">cd<span class=\"add\"><ins>X<br />\nY</ins></span>e<br />\n</p></blockquote></li>\n",
261
+ "<li class=\"entry\"><p class=\"position\">3,3</p><blockquote class=\"body\"><p class=\"body\">e<br />\n<span class=\"before-change\"><del>f</del></span><br />\n</p><p class=\"body\">e<br />\n<span class=\"after-change\"><ins>F</ins></span><br />\n</p></blockquote></li>\n",
262
+ "</ul>"]
263
+ assert_equal(expected, View.new(Difference.new(array1, array2), "US-ASCII", "LF").to_html_digest({:display=>'multi'},false))
264
+ end
265
+
266
+ def test_to_html_del_add_ascii()
267
+ array1 = ['a', 'b', 'c']
268
+ array2 = ['b', 'c', 'c']
269
+ difference = Difference.new(array1, array2)
270
+ expected = ['<span class="del"><del>a</del></span>',
271
+ '<span class="common">b</span>',
272
+ '<span class="add"><ins>c</ins></span>',
273
+ '<span class="common">c</span>']
274
+ assert_equal(expected, View.new(difference, "US-ASCII", nil).to_html(nil, false))
275
+ end
276
+ def test_to_html_change_ascii()
277
+ array1 = ['a', 'b', 'c']
278
+ array2 = ['a', 'x', 'c']
279
+ difference = Difference.new(array1, array2)
280
+ expected = ['<span class="common">a</span>',
281
+ '<span class="before-change"><del>b</del></span><span class="after-change"><ins>x</ins></span>',
282
+ '<span class="common">c</span>']
283
+ assert_equal(expected, View.new(difference, "US-ASCII", nil).to_html(nil, false))
284
+ end
285
+ def test_to_html_del_add_ja()
286
+ array1 = ['��', '��', '��']
287
+ array2 = ['��', '��', '��']
288
+ expected = ['<span class="del"><del>��</del></span>',
289
+ '<span class="common">��</span>',
290
+ '<span class="add"><ins>��</ins></span>',
291
+ '<span class="common">��</span>']
292
+ assert_equal(expected, View.new(Difference.new(array1, array2), "EUC-JP", nil).to_html(nil, false))
293
+ assert_equal(expected.collect{|i|NKF.nkf("-s",i)},
294
+ View.new(Difference.new(array1.collect{|i|NKF.nkf("-s",i)},
295
+ array2.collect{|i|NKF.nkf("-s",i)}),
296
+ "Shift_JIS", nil).to_html(nil, false))
297
+ assert_equal(expected.collect{|i|NKF.nkf("-E -w", i)},
298
+ View.new(Difference.new(array1.collect{|i|NKF.nkf("-E -w", i)},
299
+ array2.collect{|i|NKF.nkf("-E -w", i)}),
300
+ "UTF-8", nil).to_html(nil, false))
301
+ end
302
+ def test_to_html_change_ja()
303
+ array1 = ['��', '��', '��']
304
+ array2 = ['��', '��', '��']
305
+ expected = ['<span class="common">��</span>',
306
+ '<span class="before-change"><del>��</del></span><span class="after-change"><ins>��</ins></span>',
307
+ '<span class="common">��</span>']
308
+ assert_equal(expected, View.new(Difference.new(array1, array2), "EUC-JP", nil).to_html(nil, false))
309
+ assert_equal(expected.collect{|i|NKF.nkf("-s",i)},
310
+ View.new(Difference.new(array1.collect{|i|NKF.nkf("-s",i)},
311
+ array2.collect{|i|NKF.nkf("-s",i)}),
312
+ "Shift_JIS", nil).to_html(nil, false))
313
+ assert_equal(expected.collect{|i|NKF.nkf("-E -w", i)},
314
+ View.new(Difference.new(array1.collect{|i|NKF.nkf("-E -w", i)},
315
+ array2.collect{|i|NKF.nkf("-E -w", i)}),
316
+ "UTF-8", nil).to_html(nil, false))
317
+ end
318
+
319
+ def test_to_manued_del_add_ascii()
320
+ array1 = ['a', 'b', 'c']
321
+ array2 = ['b', 'c', 'c']
322
+ difference = Difference.new(array1, array2)
323
+ expected = ['[a/]',
324
+ 'b',
325
+ '[/c]',
326
+ 'c']
327
+ assert_equal(expected, View.new(difference, "US-ASCII", nil).to_manued(nil, false))
328
+ end
329
+ def test_to_manued_change_ascii()
330
+ array1 = ['a', 'b', 'c']
331
+ array2 = ['a', 'x', 'c']
332
+ difference = Difference.new(array1, array2)
333
+ expected = ['a',
334
+ '[b/x]',
335
+ 'c']
336
+ assert_equal(expected, View.new(difference, "US-ASCII", nil).to_manued(nil, false))
337
+ end
338
+ def test_to_manued_del_add_ja()
339
+ array1 = ['��', '��', '��']
340
+ array2 = ['��', '��', '��']
341
+ expected = ['[��/]',
342
+ '��',
343
+ '[/��]',
344
+ '��']
345
+ assert_equal(expected, View.new(Difference.new(array1, array2), "EUC-JP", nil).to_manued(nil, false))
346
+ assert_equal(expected.collect{|i|NKF.nkf("-s",i)},
347
+ View.new(Difference.new(array1.collect{|i|NKF.nkf("-s",i)},
348
+ array2.collect{|i|NKF.nkf("-s",i)}),
349
+ "Shift_JIS", nil).to_manued(nil, false))
350
+ assert_equal(expected.collect{|i|NKF.nkf("-E -w", i)},
351
+ View.new(Difference.new(array1.collect{|i|NKF.nkf("-E -w", i)},
352
+ array2.collect{|i|NKF.nkf("-E -w", i)}),
353
+ "UTF-8", nil).to_manued(nil, false))
354
+ end
355
+ def test_to_manued_change_ja()
356
+ array1 = ['��', '��', '��']
357
+ array2 = ['��', '��', '��']
358
+ expected = ['��',
359
+ '[��/��]',
360
+ '��']
361
+ assert_equal(expected, View.new(Difference.new(array1, array2), "EUC-JP", nil).to_manued(nil, false))
362
+ assert_equal(expected.collect{|i|NKF.nkf("-s",i)},
363
+ View.new(Difference.new(array1.collect{|i|NKF.nkf("-s",i)},
364
+ array2.collect{|i|NKF.nkf("-s",i)}),
365
+ "Shift_JIS", nil).to_manued(nil, false))
366
+ assert_equal(expected.collect{|i|NKF.nkf("-E -w", i)},
367
+ View.new(Difference.new(array1.collect{|i|NKF.nkf("-E -w", i)},
368
+ array2.collect{|i|NKF.nkf("-E -w", i)}),
369
+ "UTF-8", nil).to_manued(nil, false))
370
+ end
371
+ def test_to_manued_escaping_ascii()
372
+ array1 = ['a', '[/;]~', 'b', '[/;]~']
373
+ array2 = ['a', '[/;]~', 'b']
374
+ difference = Difference.new(array1, array2)
375
+ expected = ["a~[/;]~~b", "[~[~/~;~]~~/]"]
376
+ assert_equal(expected, View.new(difference, "US-ASCII", nil).to_manued(nil, false))
377
+ end
378
+ def test_to_manued_digest()
379
+ array1 = ["a", "\n", "b", "c", "d", "e", "\n", "f", "\n"]
380
+ array2 = ["c", "d", "X", "\n", "Y", "e", "\n", "F", "\n"]
381
+ expected = ["----\n",
382
+ "1-2,(1)\n[a\nb/]cd\n----\n",
383
+ "(2),1-2\ncd[/X\nY]e\n\n----\n",
384
+ "3,3\ne\n[f/F]\n\n----\n"]
385
+ assert_equal(expected, View.new(Difference.new(array1, array2), "US-ASCII", "LF").to_manued_digest(nil,false))
386
+ end
387
+ def test_to_manued_digest_multi()
388
+ array1 = ["a", "\n", "b", "c", "d", "e", "\n", "f", "\n"]
389
+ array2 = ["c", "d", "X", "\n", "Y", "e", "\n", "F", "\n"]
390
+ expected = ["----\n",
391
+ "1-2,(1)\na\nbcd\n[a\nb/]cd\n----\n",
392
+ "(2),1-2\ncde\n\ncd[/X\nY]e\n\n----\n",
393
+ "3,3\ne\n[f/]\n\ne\n[/F]\n\n----\n"]
394
+ assert_equal(expected, View.new(Difference.new(array1, array2), "US-ASCII", "LF").to_manued_digest({:display=>'multi'},false))
395
+ end
396
+
397
+ def test_to_wdiff_del_add_ascii()
398
+ array1 = ['a', 'b', 'c']
399
+ array2 = ['b', 'c', 'c']
400
+ difference = Difference.new(array1, array2)
401
+ expected = ['[-a-]',
402
+ 'b',
403
+ '{+c+}',
404
+ 'c']
405
+ assert_equal(expected, View.new(difference, "US-ASCII", nil).to_wdiff(nil, false))
406
+ end
407
+ def test_to_wdiff_change_ascii()
408
+ array1 = ['a', 'b', 'c']
409
+ array2 = ['a', 'x', 'c']
410
+ difference = Difference.new(array1, array2)
411
+ expected = ['a',
412
+ '[-b-]{+x+}',
413
+ 'c']
414
+ assert_equal(expected, View.new(difference, "US-ASCII", nil).to_wdiff(nil, false))
415
+ end
416
+ def test_to_wdiff_del_add_ja()
417
+ array1 = ['��', '��', '��']
418
+ array2 = ['��', '��', '��']
419
+ expected = ['[-��-]',
420
+ '��',
421
+ '{+��+}',
422
+ '��']
423
+ assert_equal(expected, View.new(Difference.new(array1, array2), "EUC-JP", nil).to_wdiff(nil, false))
424
+ assert_equal(expected.collect{|i|NKF.nkf("-s",i)},
425
+ View.new(Difference.new(array1.collect{|i|NKF.nkf("-s",i)},
426
+ array2.collect{|i|NKF.nkf("-s",i)}),
427
+ "Shift_JIS", nil).to_wdiff(nil, false))
428
+ assert_equal(expected.collect{|i|NKF.nkf("-E -w", i)},
429
+ View.new(Difference.new(array1.collect{|i|NKF.nkf("-E -w", i)},
430
+ array2.collect{|i|NKF.nkf("-E -w", i)}),
431
+ "UTF-8", nil).to_wdiff(nil, false))
432
+ end
433
+ def test_to_wdiff_change_ja()
434
+ array1 = ['��', '��', '��']
435
+ array2 = ['��', '��', '��']
436
+ expected = ['��',
437
+ '[-��-]{+��+}',
438
+ '��']
439
+ assert_equal(expected, View.new(Difference.new(array1, array2), "EUC-JP", nil).to_wdiff(nil, false))
440
+ assert_equal(expected.collect{|i|NKF.nkf("-s",i)},
441
+ View.new(Difference.new(array1.collect{|i|NKF.nkf("-s",i)},
442
+ array2.collect{|i|NKF.nkf("-s",i)}),
443
+ "Shift_JIS", nil).to_wdiff(nil, false))
444
+ assert_equal(expected.collect{|i|NKF.nkf("-E -w", i)},
445
+ View.new(Difference.new(array1.collect{|i|NKF.nkf("-E -w", i)},
446
+ array2.collect{|i|NKF.nkf("-E -w", i)}),
447
+ "UTF-8", nil).to_wdiff(nil, false))
448
+ end
449
+ def test_to_wdiff_digest()
450
+ array1 = ["a", "\n", "b", "c", "d", "e", "\n", "f", "\n"]
451
+ array2 = ["c", "d", "X", "\n", "Y", "e", "\n", "F", "\n"]
452
+ expected = ["----\n",
453
+ "1-2,(1)\n[-a\nb-]cd\n----\n",
454
+ "(2),1-2\ncd{+X\nY+}e\n\n----\n",
455
+ "3,3\ne\n[-f-]{+F+}\n\n----\n"]
456
+ assert_equal(expected, View.new(Difference.new(array1, array2), "US-ASCII", "LF").to_wdiff_digest(nil,false))
457
+ end
458
+ def test_to_wdiff_digest_multi()
459
+ array1 = ["a", "\n", "b", "c", "d", "e", "\n", "f", "\n"]
460
+ array2 = ["c", "d", "X", "\n", "Y", "e", "\n", "F", "\n"]
461
+ expected = ["----\n",
462
+ "1-2,(1)\na\nbcd\n[-a\nb-]cd\n----\n",
463
+ "(2),1-2\ncde\n\ncd{+X\nY+}e\n\n----\n",
464
+ "3,3\ne\n[-f-]\n\ne\n{+F+}\n\n----\n"]
465
+ assert_equal(expected, View.new(Difference.new(array1, array2), "US-ASCII", "LF").to_wdiff_digest({:display => 'multi'}, false))
466
+ end
467
+
468
+ def test_to_user_del_add_en()
469
+ array1 = ['a', 'b', 'c']
470
+ array2 = ['b', 'c', 'c']
471
+ difference = Difference.new(array1, array2)
472
+ user_tags = {:start_common => '<=>',
473
+ :end_common => '</=>',
474
+ :start_del => '<->',
475
+ :end_del => '</->',
476
+ :start_add => '<+>',
477
+ :end_add => '</+>',
478
+ :start_before_change => '<!->',
479
+ :end_before_change => '</!->',
480
+ :start_after_change => '<!+>',
481
+ :end_after_change => '</!+>'}
482
+ expected = ['<->a</->',
483
+ '<=>b</=>',
484
+ '<+>c</+>',
485
+ '<=>c</=>']
486
+ assert_equal(expected, View.new(difference, "US-ASCII", nil).to_user(user_tags, false))
487
+ end
488
+ def test_to_user_change_en()
489
+ array1 = ['a', 'b', 'c']
490
+ array2 = ['a', 'x', 'c']
491
+ difference = Difference.new(array1, array2)
492
+ user_tags = {:start_common => '<=>',
493
+ :end_common => '</=>',
494
+ :start_del => '<->',
495
+ :end_del => '</->',
496
+ :start_add => '<+>',
497
+ :end_add => '</+>',
498
+ :start_before_change => '<!->',
499
+ :end_before_change => '</!->',
500
+ :start_after_change => '<!+>',
501
+ :end_after_change => '</!+>'}
502
+ expected = ['<=>a</=>',
503
+ '<!->b</!-><!+>x</!+>',
504
+ '<=>c</=>']
505
+ assert_equal(expected, View.new(difference, "US-ASCII", nil).to_user(user_tags, false))
506
+ end
507
+ def test_to_user_digest()
508
+ array1 = ["a", "\n", "b", "c", "d", "e", "\n", "f", "\n"]
509
+ array2 = ["c", "d", "X", "\n", "Y", "e", "\n", "F", "\n"]
510
+ user_tags = {:start_common => '<=>',
511
+ :end_common => '</=>',
512
+ :start_del => '<->',
513
+ :end_del => '</->',
514
+ :start_add => '<+>',
515
+ :end_add => '</+>',
516
+ :start_before_change => '<!->',
517
+ :end_before_change => '</!->',
518
+ :start_after_change => '<!+>',
519
+ :end_after_change => '</!+>'}
520
+ expected = ["1-2,(1) <->a\nb</->cd\n",
521
+ "(2),1-2 cd<+>X\nY</+>e\n\n",
522
+ "3,3 e\n<!->f</!-><!+>F</!+>\n\n"]
523
+ assert_equal(expected, View.new(Difference.new(array1, array2), "US-ASCII", "LF").to_user_digest(user_tags, false))
524
+ end
525
+ def test_to_user_digest_multi()
526
+ array1 = ["a", "\n", "b", "c", "d", "e", "\n", "f", "\n"]
527
+ array2 = ["c", "d", "X", "\n", "Y", "e", "\n", "F", "\n"]
528
+ user_tags = {:start_common => '<=>',
529
+ :end_common => '</=>',
530
+ :start_del => '<->',
531
+ :end_del => '</->',
532
+ :start_add => '<+>',
533
+ :end_add => '</+>',
534
+ :start_before_change => '<!->',
535
+ :end_before_change => '</!->',
536
+ :start_after_change => '<!+>',
537
+ :end_after_change => '</!+>',
538
+ :display => 'multi'}
539
+ expected = ["1-2,(1) a\nbcd<->a\nb</->cd\n",
540
+ "(2),1-2 cde\ncd<+>X\nY</+>e\n\n",
541
+ "3,3 e\n<!->f</!->\ne\n<!+>F</!+>\n\n"]
542
+ assert_equal(expected, View.new(Difference.new(array1, array2), "US-ASCII", "LF").to_user_digest(user_tags, false))
543
+ end
544
+
545
+ def test_difference_whole()
546
+ array1 = ["a", "\n", "b", "c", "d", "e", "\n", "f", "\n"] # a \n b c d e \n f \n
547
+ array2 = ["c", "d", "X", "\n", "Y", "e", "\n", "F", "\n"] # c d X \n Y e \n F \n
548
+ expected = [[:del_elt, ["a", "\n", "b"], nil],
549
+ [:common_elt_elt, ["c", "d"], ["c", "d"]],
550
+ [:add_elt, nil, ["X", "\n", "Y"]],
551
+ [:common_elt_elt, ["e", "\n"], ["e", "\n"]],
552
+ [:change_elt, ["f"], ["F"]],
553
+ [:common_elt_elt, ["\n"], ["\n"]]]
554
+ assert_equal(expected, View.new(Difference.new(array1, array2), "US-ASCII", "LF").difference_whole)
555
+ end
556
+
557
+ # def test_difference_digest()
558
+ # array1 = ["a", "\n", "b", "c", "d", "e", "\n", "f", "\n"] # a \n b c d e \n f \n
559
+ # array2 = ["c", "d", "X", "\n", "Y", "e", "\n", "F", "\n"] # c d X \n Y e \n F \n
560
+ # expected = [
561
+ # # something
562
+ # ]
563
+ # assert_equal(expected, View.new(Difference.new(array1, array2), "US-ASCII", "LF").difference_digest)
564
+ # end
565
+
566
+ def teardown()
567
+ #
568
+ end
569
+
570
+ end